Loading benchmarks/vqe/qcor/qcor_trotter.py +1 −1 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ def heisenberg_ham(n_qubits): H = H - Jz * (Z(i) * Z(i + 1)) return H n_qubits = [10, 20, 50, 100] n_qubits = [5, 10, 20, 50, 100] nbSteps = 100 for nbQubits in n_qubits: Loading benchmarks/vqe/qiskit/qiskit_trotter.py 0 → 100644 +63 −0 Original line number Diff line number Diff line from qiskit.aqua.operators import (X, Y, Z, I, CX, H, ListOp, CircuitOp, Zero, EvolutionFactory, EvolvedOp, PauliTrotterEvolution, QDrift, Trotter, Suzuki) from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit import time def X_op(idxs, n_qubits): op = None if 0 in idxs: op = X else: op = I for i in range(1, n_qubits): if (i in idxs): op ^= X else: op ^= I return op def Z_op(idxs, n_qubits): op = None if 0 in idxs: op = Z else: op = I for i in range(1, n_qubits): if (i in idxs): op ^= Z else: op ^= I return op def heisenberg_ham(n_qubits): Jz = 1.0 h = 1.0 H = -h * X_op([0], n_qubits) for i in range(1, n_qubits): H = H - h * X_op([i], n_qubits) for i in range(n_qubits - 1): H = H - Jz * (Z_op([i, i + 1], n_qubits)) return H n_qubits = [10, 20, 50, 100] nbSteps = 100 def trotter_circ(q, exp_args, n_steps): qc = QuantumCircuit(q) for i in range(n_steps): for sub_op in exp_args: qc += PauliTrotterEvolution().convert(EvolvedOp(sub_op)).to_circuit() return qc n_qubits = [5, 10, 20, 50, 100] nbSteps = 100 for nbQubits in n_qubits: ham_op = heisenberg_ham(nbQubits) q = QuantumRegister(nbQubits, 'q') start = time.time() comp = trotter_circ(q, ham_op.oplist, nbSteps) end = time.time() print("n instructions =", comp.depth(), "; Kernel eval time:", end - start, " [secs]") Loading
benchmarks/vqe/qcor/qcor_trotter.py +1 −1 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ def heisenberg_ham(n_qubits): H = H - Jz * (Z(i) * Z(i + 1)) return H n_qubits = [10, 20, 50, 100] n_qubits = [5, 10, 20, 50, 100] nbSteps = 100 for nbQubits in n_qubits: Loading
benchmarks/vqe/qiskit/qiskit_trotter.py 0 → 100644 +63 −0 Original line number Diff line number Diff line from qiskit.aqua.operators import (X, Y, Z, I, CX, H, ListOp, CircuitOp, Zero, EvolutionFactory, EvolvedOp, PauliTrotterEvolution, QDrift, Trotter, Suzuki) from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit import time def X_op(idxs, n_qubits): op = None if 0 in idxs: op = X else: op = I for i in range(1, n_qubits): if (i in idxs): op ^= X else: op ^= I return op def Z_op(idxs, n_qubits): op = None if 0 in idxs: op = Z else: op = I for i in range(1, n_qubits): if (i in idxs): op ^= Z else: op ^= I return op def heisenberg_ham(n_qubits): Jz = 1.0 h = 1.0 H = -h * X_op([0], n_qubits) for i in range(1, n_qubits): H = H - h * X_op([i], n_qubits) for i in range(n_qubits - 1): H = H - Jz * (Z_op([i, i + 1], n_qubits)) return H n_qubits = [10, 20, 50, 100] nbSteps = 100 def trotter_circ(q, exp_args, n_steps): qc = QuantumCircuit(q) for i in range(n_steps): for sub_op in exp_args: qc += PauliTrotterEvolution().convert(EvolvedOp(sub_op)).to_circuit() return qc n_qubits = [5, 10, 20, 50, 100] nbSteps = 100 for nbQubits in n_qubits: ham_op = heisenberg_ham(nbQubits) q = QuantumRegister(nbQubits, 'q') start = time.time() comp = trotter_circ(q, ham_op.oplist, nbSteps) end = time.time() print("n instructions =", comp.depth(), "; Kernel eval time:", end - start, " [secs]")