Spaces:
Paused
Paused
| """ | |
| Example script for running ADAPT-AQC recompilation using more advanced options | |
| """ | |
| import logging | |
| import matplotlib.pyplot as plt | |
| from tenpy import SpinChain, MPS | |
| from tenpy.algorithms import dmrg | |
| from adaptaqc.backends.aer_mps_backend import AerMPSBackend, mps_sim_with_args | |
| from adaptaqc.compilers import AdaptCompiler, AdaptConfig | |
| from adaptaqc.utils.ansatzes import identity_resolvable | |
| from adaptaqc.utils.utilityfunctions import tenpy_to_qiskit_mps | |
| logging.basicConfig() | |
| logger = logging.getLogger("adaptaqc") | |
| logger.setLevel(logging.INFO) | |
| # Generate a ground state of the XXZ model using TenPy | |
| l = 20 | |
| model_params = dict( | |
| S=0.5, L=l, Jx=1.0, Jy=1.0, Jz=5.0, hz=1.0, bc_MPS="finite", conserve="None" | |
| ) | |
| model = SpinChain(model_params) | |
| psi = MPS.from_product_state( | |
| model.lat.mps_sites(), ["up", "down"] * (l // 2), bc=model_params["bc_MPS"] | |
| ) | |
| # Run the DMRG algorithm to obtain the ground state | |
| dmrg_params = {"trunc_params": {"trunc_cut": 1e-4}} | |
| dmrg_engine = dmrg.TwoSiteDMRGEngine(psi, model, dmrg_params) | |
| E, psi = dmrg_engine.run() | |
| logger.info(f"Ground state created with maximum bond dimension {max(psi.chi)}") | |
| # Convert it to a format compatible with the Qiskit Aer MPS simulator | |
| qiskit_mps = tenpy_to_qiskit_mps(psi) | |
| # Set compiler to use the general gradient method as laid out in https://arxiv.org/abs/2503.09683 | |
| config = AdaptConfig( | |
| method="general_gradient", cost_improvement_num_layers=1e3, rotosolve_frequency=10 | |
| ) | |
| # Create an instance of Qiskit's MPS simulator with a specified truncation threshold | |
| qiskit_mps_sim = mps_sim_with_args(mps_truncation_threshold=1e-8) | |
| # Create an AQCBackend object | |
| backend = AerMPSBackend(simulator=qiskit_mps_sim) | |
| # Create a compiler with the target to be an MPS rather than a circuit | |
| adapt_compiler = AdaptCompiler( | |
| target=qiskit_mps, | |
| backend=backend, | |
| adapt_config=config, | |
| starting_circuit="tenpy_product_state", # Start compiling from best χ=1 compression of target | |
| custom_layer_2q_gate=identity_resolvable(), # Use ansatz from https://arxiv.org/abs/2503.09683 | |
| ) | |
| result = adapt_compiler.compile() | |
| approx_circuit = result.circuit | |
| print(f"Overlap between circuits is {result.overlap}") | |
| # Draw the circuit that prepares the target random MPS | |
| approx_circuit.draw(output="mpl", fold=-1) | |
| plt.show() | |