qrunch.quantum.algorithms.pauli.vqes.adaptive_vqe
Implements the adaptive VQE framework.
Module Attributes
Default options for the Adaptive VQE. |
Classes
Class for running adaptive VQE. |
|
Builder for the adaptive VQE algorithm. |
- class AdaptiveVqe
Bases:
PauliAdaptiveVqeAlgorithmClass for running adaptive VQE.
The adaptive VQE algorithm finds the optimal parameters that minimizes the expectation value of the observable.
In comparison to VQE, which has a frozen parametrized circuit, the adaptive VQE appends parametrized gates to the circuit in each iteration, until no improvement is found.
- __init__(vqe: PauliBasicVqeAlgorithm, reminimizer_vqe: BasicVqe | None, gate_selector: GateSelector, options: IterativeVqeOptions = IterativeVqeOptions(max_iterations=5, gates_per_iteration=1, new_parameter_guess=0.0, force_all_iterations=False), data_persister_manager: DataPersisterManager | None = None, stopping_criterion: StoppingCriterion | None = None) None
Initialize the adaptive VQE.
- Parameters:
vqe (PauliBasicVqeAlgorithm) – The VQE object running the parameter optimization for each added gate.
reminimizer_vqe (BasicVqe | None) – The VQE object running the parameter re-optimization at the end of an adaptive run. If None, no reminimization step is performed.
gate_selector (GateSelector) – The GateSelector in charge of choosing the next gate from the gate pool.
options (IterativeVqeOptions) – Options for adaptive VQE
data_persister_manager (DataPersisterManager | None) – Manager to handle saving and loading heavy vqe optimizations.
stopping_criterion (StoppingCriterion | None) – The stopping criterion to use when performing early stopping.
- Return type:
None
- static build_circuit_to_optimize(iteration_data: AdaptiveIterationDataHandler, new_gates: list[GatePoolOperator], iteration_count: int) Circuit
Build circuit to optimize.
The full unoptimized circuit with the new gates are provided.
- Parameters:
iteration_data (AdaptiveIterationDataHandler) – The iteration data handler.
new_gates (list[GatePoolOperator]) – The new_gates to optimize.
iteration_count (int) – The iteration count.
- Return type:
- static build_metadata(observable: HermitianPauliSum, initial_ansatz: Circuit) Mapping[str, str | Mapping[str, str | NestedStrDict]]
Create meta-data that represent the input.
- Parameters:
observable (HermitianPauliSum) – The observable whose expectation value should be minimized.
initial_ansatz (Circuit) – The starting ansatz circuit. Gates from the gate_pool is appended to this.
- Return type:
Mapping[str, str | Mapping[str, str | NestedStrDict]]
- clear_cache() None
Clear the cache of the VQE.
- Return type:
None
- classmethod persistence_checkpoints() list[str]
Define the persistence checkpoints used during the adaptive vqe.
These checkpoints specify computational stages where intermediate results can be saved and loaded to optimize computations and ensure reproducibility.
- Return type:
list[str]
- run(observable: int | float | complex | Expression[PauliOperators], gate_pool: GatePool, initial_ansatz: Circuit, callback: AdaptiveIterationCallback | None = None, input_result: PauliAdaptiveVqeResult | None = None) PauliAdaptiveVqeResult
- run(observable: HermitianPauliSum, gate_pool: GatePool, initial_ansatz: Circuit, callback: AdaptiveIterationCallback | None = None, input_result: PauliAdaptiveVqeResult | None = None) PauliAdaptiveVqeResult
Run the adaptive VQE algorithm.
- Parameters:
observable (int | float | complex | Expression[PauliOperators] | HermitianPauliSum) – The observable whose expectation value should be minimized.
gate_pool (GatePool) – The set of gates to choose from when building the ansatz.
initial_ansatz (Circuit) – The starting ansatz circuit. Gates from the gate_pool is appended to this.
callback (AdaptiveIterationCallback | None) – An optional callback function that is called at each minimizer iteration.
input_result (PauliAdaptiveVqeResult | None) – A prior results that should be refined.
- Returns:
PauliAdaptiveVQEResultcontaining the optimal circuit that minimizes the expectation value.- Return type:
- class AdaptiveVqeCreator
Bases:
objectBuilder for the adaptive VQE algorithm.
- __init__(checkpoints: list[str] | None = None) None
Initialize builder for the adaptive VQE.
- Parameters:
checkpoints (list[str] | None)
- Return type:
None
- choose_data_persister_manager() DataPersisterManagerSubCreator[Self]
Choose the data persister manager to use and whether to save and/or load the data.
- Return type:
- choose_minimizer() MinimizerSubCreator[Self]
Chose minimizer to use for the adaptive VQE.
- Return type:
MinimizerSubCreator[Self]
- choose_reminimizer() ReMinimizerSubCreator[Self]
Chose reminimizer to use for the adaptive VQE.
- Return type:
ReMinimizerSubCreator[Self]
- choose_stopping_criterion() StoppingCriterionSubCreator[Self]
Choose the stopping criterion.
- Return type:
- create() AdaptiveVqe
Create an instance of
AdaptiveVqean iterative VQE.- Return type:
- with_analytical_beast_basic_vqe(*, active: bool = True) Self
Choose to use the analytical basic vqe inside each adaptive iteration, which only works for BEAST.
Instead of having the minimizer call the estimator directly, the estimator is first called to make an analytical expression for the energy as a function of the gate parameter. This expression is then passed to the minimizer, requiring no more measurements.
Note: This feature only works with BEAST with last parameter optimization.
If a reminimizer is chosen, it will be paired with the normal Basic vqe since, only it, supports multiple parameters at once.
- Parameters:
active (bool) – Whether to use the analytical beast basic vqe or not.
- Return type:
Self
- with_estimator(estimator: Estimator) Self
Choose estimator to use for the adaptive VQE.
- Parameters:
estimator (Estimator)
- Return type:
Self
- with_estimator_shots(shots: int | None) Self
Choose the number of shots to use in the estimator.
- Parameters:
shots (int | None)
- Return type:
Self
- with_gate_selector(gate_selector: GateSelector) Self
Choose the gate selector to use for the adaptive VQE.
- Parameters:
gate_selector (GateSelector)
- Return type:
Self
- with_options(options: IterativeVqeOptions) Self
Choose the options to use for the adaptive VQE.
- Parameters:
options (IterativeVqeOptions) – Options to use. Any dataclass with the attributes specified in the
IterativeVqeOptionssettings (protocol can be used. To use defaults for some of the)
class. (use the DefaultIterativeVqeOptions)
- Return type:
Self
- DEFAULT_OPTIONS = IterativeVqeOptions(max_iterations=5, gates_per_iteration=1, new_parameter_guess=0.0, force_all_iterations=False)
Default options for the Adaptive VQE.