Commit 84c66d16 authored by Nguyen, Thien Minh's avatar Nguyen, Thien Minh
Browse files

Added Qiskit Trotter circuit gen benchmark



Signed-off-by: default avatarThien Nguyen <nguyentm@ornl.gov>
parent b4eb991d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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:
+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]")