quantum / utils /adapt-aqc /examples /advanced_sv_example.py
harishaseebat92
Fix: Add adapt-aqc as regular files, not submodule
6d8ed8c
"""
Example script for running ADAPT-AQC recompilation using more advanced options
"""
import logging
from qiskit import QuantumCircuit, transpile
from qiskit.circuit.random import random_circuit
from adaptaqc.compilers import AdaptCompiler, AdaptConfig
logging.basicConfig()
logger = logging.getLogger("adaptaqc")
logger.setLevel(logging.INFO)
n = 4
state_prep_circuit = QuantumCircuit(n)
state_prep_circuit.h(range(n))
# Create a random circuit starting with a layer of hadamard gates
qc = state_prep_circuit.compose(random_circuit(n, 16, 2, seed=0))
config = AdaptConfig(
# We expect the solution to take longer to converge, so decrease the threshold for exiting
# early.
cost_improvement_tol=1e-5,
# Run Rotosolve only every 10th layer to reduce computational cost.
rotosolve_frequency=10,
# Choose Rotosolve to modify only the last 10 layers.
max_layers_to_modify=10,
# Setting this value > 0 prioritises not using the same qubit pairs too often.
reuse_exponent=1,
# Increase the amount the cost needs to decrease by to terminate Rotosolve. This stops spending
# too much time fine-tuning the angles.
rotosolve_tol=1e-2,
)
# Since we know the solution starts with Hadamards, we can pass this information into ADAPT-AQC
starting_circuit = state_prep_circuit
adapt_compiler = AdaptCompiler(
target=qc,
adapt_config=config,
starting_circuit=starting_circuit,
initial_single_qubit_layer=True,
)
result = adapt_compiler.compile()
approx_circuit = result.circuit
print(f"Overlap between circuits is {result.overlap}")
# Transpile the original circuits to the common basis set with maximum Qiskit optimization
qc_in_basis_gates = transpile(
qc, basis_gates=["ry", "rz", "rx", "u3", "cx"], optimization_level=3
)
print("Original circuit gates:", qc_in_basis_gates.count_ops())
print("Original circuit depth:", qc_in_basis_gates.depth())
# Compare with compiled circuit
print("Compiled circuit gates:", approx_circuit.count_ops())
print("Compiled circuit depth:", approx_circuit.depth())