Skip to content

Commit

Permalink
Fix bug with VQE method 2, using code from PR #575 (closed)
Browse files Browse the repository at this point in the history
  • Loading branch information
rtvuser1 committed Jul 17, 2024
1 parent 4fd6946 commit 30d0fcb
Showing 1 changed file with 57 additions and 7 deletions.
64 changes: 57 additions & 7 deletions vqe/qiskit/vqe_benchmark.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ def VQEEnergy(n_spin_orbs, na, nb, circuit_id=0, method=1):
off_diag.append(p)

# modify the name of diagonal circuit
qc_list[0].name = qubit_op[1].primitive.to_list()[0][0] + " " + str(np.real(diag_coeff))
qc_list[0].name = qubit_op[1].to_list()[0][0] + " " + str(np.real(diag_coeff))
normalization /= len(qc_list)
return qc_list

Expand Down Expand Up @@ -293,11 +293,22 @@ def analyze_and_print_result(qc, result, num_qubits, references, num_shots):

# compute fidelity
fidelity = metrics.polarization_fidelity(counts, correct_dist)

if verbose:
print(f"... fidelity = {fidelity}")

# modify fidelity based on the coefficient
# modify fidelity based on the coefficient (only for method 2)
# Note: method 1 total name has 3 components, method 2 has only 2;
if (len(total_name.split()) == 2):
fidelity *= ( abs(float(total_name.split()[1])) / normalization )


coefficient = abs(float(total_name.split()[1])) / normalization
fidelity = {f : v * coefficient for f, v in fidelity.items()}
if verbose:
print(f"... total_name={total_name}, coefficient={coefficient}, product_fidelity={fidelity}")

if verbose:
print(f"... total fidelity = {fidelity}")

return fidelity

################ Benchmark Loop
Expand All @@ -308,7 +319,7 @@ def analyze_and_print_result(qc, result, num_qubits, references, num_shots):
# Execute program with default parameters
def run(min_qubits=4, max_qubits=8, skip_qubits=1,
max_circuits=3, num_shots=4092, method=1,
backend_id="qasm_simulator", provider_backend=None,
backend_id=None, provider_backend=None,
hub="ibm-q", group="open", project="main", exec_options=None,
context=None):

Expand Down Expand Up @@ -443,5 +454,44 @@ def execution_handler(qc, result, num_qubits, type, num_shots):
# Plot metrics for all circuit sizes
metrics.plot_metrics(f"Benchmark Results - {benchmark_name} ({method}) - Qiskit")

# if main, execute methods
if __name__ == "__main__": run()
#######################
# MAIN

import argparse
def get_args():
parser = argparse.ArgumentParser(description="Variational Quantum Eigensolver Benchmark")
#parser.add_argument("--api", "-a", default=None, help="Programming API", type=str)
#parser.add_argument("--target", "-t", default=None, help="Target Backend", type=str)
parser.add_argument("--backend_id", "-b", default=None, help="Backend Identifier", type=str)
parser.add_argument("--num_qubits", "-n", default=0, help="Number of qubits (min = max = N)", type=int)
parser.add_argument("--min_qubits", "-min", default=4, help="Minimum number of qubits", type=int)
parser.add_argument("--max_qubits", "-max", default=8, help="Maximum number of qubits", type=int)
parser.add_argument("--skip_qubits", "-k", default=1, help="Number of qubits to skip", type=int)
parser.add_argument("--max_circuits", "-c", default=3, help="Maximum circuit repetitions", type=int)
parser.add_argument("--num_shots", "-s", default=4092, help="Number of shots", type=int)
parser.add_argument("--method", "-m", default=1, help="Algorithm Method", type=int)
parser.add_argument("--nonoise", "-non", action="store_true", help="Use Noiseless Simulator")
parser.add_argument("--verbose", "-v", action="store_true", help="Verbose")

return parser.parse_args()

if __name__ == "__main__":
import argparse
args = get_args()

# special argument handling
ex.verbose = args.verbose
verbose = args.verbose

if args.num_qubits > 0: args.min_qubits = args.max_qubits = args.num_qubits

# execute benchmark program
run(min_qubits=args.min_qubits, max_qubits=args.max_qubits,
skip_qubits=args.skip_qubits, max_circuits=args.max_circuits,
num_shots=args.num_shots,
method=args.method,
backend_id=args.backend_id,
exec_options = {"noise_model" : None} if args.nonoise else {},
#api=args.api
)

0 comments on commit 30d0fcb

Please sign in to comment.