Source code for qarp.algorithms._composite.vqe
from typing import Optional, Union
import numpy as np
from qarp.operators import QubitOperator
from ...blocks import AnyBlock
from ...engines import Engine
from ...optimizers import Optimizer, ScipyOptimizer
from .._primitives import PrimitiveAlgorithm, StateVector
from .vqa import VQA
[docs]
class VQE(VQA):
def __init__(
self,
operator: Union[QubitOperator, AnyBlock],
ket: AnyBlock,
initial_parameters: Optional[np.typing.NDArray[np.float64]] = None,
gradient: Union[bool, str] = False,
optimizer: Optional[Optimizer] = None,
verbose: bool = False,
primitive: Optional[PrimitiveAlgorithm] = None,
engine: Optional[Engine] = None,
save_energy_history: bool = False,
):
"""Variational Quantum Eigensolver (VQE) for finding ground state energies.
VQE is a hybrid quantum-classical algorithm that finds the ground state energy of a Hamiltonian
by optimizing a parameterized quantum circuit (ansatz). The algorithm prepares trial states on
quantum hardware, measures the energy expectation value, and uses classical optimization to update
circuit parameters iteratively until convergence. VQE is particularly suited for near-term quantum
devices and serves as a foundational technique for quantum chemistry and materials science applications.
Args:
operator: The Hamiltonian operator or Block whose ground state energy is minimized.
ket: Parameterized quantum state block (ansatz).
initial_parameters: Starting parameters for optimization. If None, initialized randomly.
gradient: ``True`` for the engine's default analytic gradient, ``False``
for none, or a method name accepted by ``Engine.run_gradient``.
optimizer: Classical optimizer for parameter updates (defaults to Scipy's conjugate gradient).
verbose: Whether to print progress information during optimization.
primitive: Algorithm for computing expectation values.
engine: Execution engine for running quantum circuits.
save_energy_history: Whether to record the per-iteration energy in
``energy_history`` during ``run()``. Independent of ``verbose``.
"""
if optimizer is None:
optimizer = ScipyOptimizer("CG")
if primitive is None:
primitive = StateVector()
super().__init__(
operator=operator,
ket=ket,
name="VQE",
initial_parameters=initial_parameters,
gradient=gradient,
optimizer=optimizer,
verbose=verbose,
primitive=primitive,
engine=engine,
save_energy_history=save_energy_history,
)