qc2.algorithms.pennylane.oo_vqe

Module defining oo-VQE algorithm for PennyLane.

Classes

oo_VQE

Main class for orbital-optimized VQE with PennyLane.

Module Contents

class qc2.algorithms.pennylane.oo_vqe.oo_VQE(qc2data=None, ansatz=None, active_space=None, mapper=None, device=None, optimizer=None, reference_state=None, init_circuit_params=None, init_orbital_params=None, freeze_active=False, max_iterations=50, conv_tol=1e-07, verbose=0)[source]

Bases: qc2.algorithms.pennylane.vqe.VQE

Main class for orbital-optimized VQE with PennyLane.

This class is responsible for optimizing both circuit and orbital parameters of simple molecules. Analytic first and second derivatives are considered in the orbital optimization part.

freeze_active[source]

If True, freezes the active space during optimization.

Type:

bool

orbital_params[source]

List of orbital optimization parameters. Defaults to a list with entries of zero.

Type:

List

circuit_params[source]

List of VQE circuit parameters. Defaults to a list with entries of zero.

Type:

List

oo_problem[source]

An instance of OrbitalOptimization problem class. Defaults to None.

Type:

OrbitalOptimization

max_iterations[source]

Maximum number of iterations for the combined circuit-orbitals parameters optimization. Defaults to 50.

Type:

int

conv_tol[source]

Convergence tolerance for the optimization. Defaults to 1e-7.

Type:

float

verbose[source]

Verbosity level. Defaults to 0.

Type:

int

freeze_active = False[source]
orbital_params = None[source]
circuit_params[source]
oo_problem = None[source]
static _get_default_init_orbital_params(n_kappa: List) List[source]

Set up the init orbital rotation parameters.

Parameters:

n_kappa (List) – number of orbital rotation parameters.

Returns:

List of params values

Return type:

List

run(*args, **kwargs) qc2.algorithms.algorithms_results.OOVQEResults[source]

Optimizes both the circuit and orbital parameters.

Parameters:
  • *args

    • device_args (optional): qml.device arguments.

    • qnode_args (optional): qml.qnode arguments.

  • **kwargs

    • device_kwargs (optional): qml.device keyword arguments.

    • qnode_kwargs (optional): qml.qnode keyword arguments.

Returns:

An instance of qc2.algorithms.pennylane.vqe.OOVQEResults class with all oo-VQE info.

Return type:

OOVQEResults

Example

>>> from ase.build import molecule
>>> from qc2.ase import PySCF
>>> from qc2.data import qc2Data
>>> from qc2.algorithms.pennylane import oo_VQE
>>> from qc2.algorithms.utils import ActiveSpace
>>>
>>> mol = molecule('H2O')
>>>
>>> hdf5_file = 'h2o.hdf5'
>>> qc2data = qc2Data(hdf5_file, mol, schema='qcschema')
>>> qc2data.molecule.calc = PySCF()
>>> qc2data.run()
>>> qc2data.algorithm = oo_VQE(
...     active_space=ActiveSpace(
...         num_active_electrons=(2, 2),
...         num_active_spatial_orbitals=4
...     ),
...     optimizer=qml.GradientDescentOptimizer(stepsize=0.5),
...     device="default.qubit"
... )
>>> results = qc2data.algorithm.run()
_circuit_optimization(theta: List, kappa: List, *args, **kwargs) Tuple[List, float][source]

Get total energy and best circuit parameters for a given kappa.

Parameters:
  • theta (List) – List with circuit variational parameters.

  • kappa (List) – List with orbital rotation parameters.

  • *args

    • device_args (optional): qml.device arguments.

    • qnode_args (optional): qml.qnode arguments.

  • **kwargs

    • device_kwargs (optional): qml.device keyword arguments.

    • qnode_kwargs (optional): qml.qnode keyword arguments.

Returns:

Optimized circuit parameters and associated energy.

Return type:

Tuple[List, float]

_get_energy_from_parameters(theta: List, kappa: List, *args, **kwargs) float[source]

Calculates total energy given circuit and orbital parameters.

Parameters:
  • theta (List) – List with circuit variational parameters.

  • kappa (List) – List with orbital rotation parameters.

  • *args

    • device_args (optional): qml.device arguments.

    • qnode_args (optional): qml.qnode arguments.

  • **kwargs

    • device_kwargs (optional): qml.device keyword arguments.

    • qnode_kwargs (optional): qml.qnode keyword arguments.

Returns:

Total ground-state energy for a given circuit and orbital parameters.

Return type:

float

_get_rdms(theta: List, sum_spin=True, *args, **kwargs) Tuple[pennylane.numpy.ndarray, pennylane.numpy.ndarray][source]

Calculates 1- and 2-electron reduced density matrices (RDMs).

Parameters:
  • theta (List) – circuit parameters at which RDMs are calculated.

  • sum_spin (bool) – If True, the spin-summed 1-RDM and 2-RDM will be returned. If False, the full 1-RDM and 2-RDM will be returned. Defaults to True.

  • *args

    • device_args (optional): qml.device arguments.

    • qnode_args (optional): qml.qnode arguments.

  • **kwargs

    • device_kwargs (optional): qml.device keyword arguments.

    • qnode_kwargs (optional): qml.qnode keyword arguments.

Returns:

1- and 2-RDMs.

Return type:

Tuple[np.ndarray, np.ndarray]