mindquantum.simulator.mqchem.prepare_uccsd_vqe

View Source On Gitee
mindquantum.simulator.mqchem.prepare_uccsd_vqe(molecular, threshold: float = 1e-6)[source]

Prepare all components for a UCCSD-VQE simulation with the MQChemSimulator.

This factory function streamlines the setup for a VQE simulation by:

  1. Generating all singlet UCCSD excitation operators using :function:`~.algorithm.nisq.chem.uccsd_singlet_generator`.

  2. Extracting the corresponding amplitudes from a pre-computed CCSD calculation included in the molecular data.

  3. Filtering excitations based on their CCSD amplitudes via the threshold.

  4. Constructing a parameterized UCCSD ansatz circuit using UCCExcitationGate.

  5. Creating a CIHamiltonian for expectation evaluation.

  6. Returning all necessary components to run a VQE experiment.

Parameters
  • molecular (openfermion.MolecularData) – Molecular data object that must contain CCSD calculation results.

  • threshold (float) – The threshold for CCSD amplitudes. Excitations with amplitudes below this value will be discarded. Default: 1e-6.

Returns

  • hamiltonian (mqchem.CIHamiltonian), The CI-space Hamiltonian.

  • ansatz_circuit (Circuit), The parameterized UCCSD ansatz circuit.

  • initial_amplitudes (numpy.ndarray), The CCSD amplitudes corresponding to the parameters in ansatz_circuit, suitable as an initial guess for an optimizer.

Examples

>>> from openfermionpyscf import run_pyscf
>>> from openfermion import MolecularData
>>> from scipy.optimize import minimize
>>> from mindquantum.simulator import mqchem
>>>
>>> molecule = MolecularData([("H", (i, 0, 0)) for i in range(6)], 'sto-3g', 1, 0)
>>> mol = run_pyscf(molecule, run_ccsd=True)
>>> hamiltonian, ansatz_circuit, initial_amplitudes = mqchem.prepare_uccsd_vqe(mol, 1e-3)
>>>
>>> simulator = mqchem.MQChemSimulator(mol.n_qubits, mol.n_electrons)
>>> grad_ops = simulator.get_expectation_with_grad(hamiltonian, ansatz_circuit)
>>>
>>> result = minimize(grad_ops, initial_amplitudes, method='L-BFGS-B', jac=True)
>>> print(f"VQE energy: {result.fun}")
VQE energy: -3.2354494505390528