qrunch.quantum.algorithms.second_quantization.vqes.adaptive_orbital_optimization_vqe
Module containing adaptive orbital optimization VQE.
Module Attributes
Default options for when to apply the Intermittent Orbital Optimization. |
Classes
VQE that combines adaptive and orbital optimization VQE as the underlying algorithm. |
- DEFAULT_OO_OPTIONS = IntermittentOrbitalOptimizerAlgorithmOptions(every_nth_iteration=1, gradient_threshold=inf, skip_gradient_threshold=1e-16, orbital_change_threshold=inf, force_full_after_n_non_full_steps=10, gate_addition_threshold=0.001)
Default options for when to apply the Intermittent Orbital Optimization.
- class SecondQuantizationAdaptiveOrbitalOptimizationVqe
Bases:
SecondQuantizationAdaptiveVqeAlgorithmVQE that combines adaptive and orbital optimization VQE as the underlying algorithm.
- __init__(vqe: PauliBasicVqeAlgorithm, intermittent_orbital_optimizer: OrbitalOptimizerAlgorithm, gate_selector: GateSelector, intermittent_oo_options: IntermittentOrbitalOptimizerAlgorithmOptions = IntermittentOrbitalOptimizerAlgorithmOptions(every_nth_iteration=1, gradient_threshold=inf, skip_gradient_threshold=1e-16, orbital_change_threshold=inf, force_full_after_n_non_full_steps=10, gate_addition_threshold=0.001), options: IterativeVqeOptions | None = None, reminimizer_vqe: PauliBasicVqeAlgorithm | None = None, final_orbital_optimizer: OrbitalOptimizerAlgorithm | None = None, mapper: Mapper | None = None, data_persister_manager: DataPersisterManager | None = None, stopping_criterion: StoppingCriterion | None = None) None
Initialize adaptive orbital optimization VQE.
- Parameters:
vqe (PauliBasicVqeAlgorithm) – The VQE object that can optimize the gate parameters.
intermittent_orbital_optimizer (OrbitalOptimizerAlgorithm) – The orbital optimizer that intermittently optimize rotation parameters. It is recommended to use a fast orbital optimizer here, with loose convergence criteria as it is run multiple times during the adaptive VQE.
reminimizer_vqe (PauliBasicVqeAlgorithm | None) – The VQE object that re-optimize the gate parameters at the end.
final_orbital_optimizer (OrbitalOptimizerAlgorithm | None) – The orbital optimizer that re-optimize rotation parameters at the end. Here it is recommended to use a more accurate orbital optimizer, with stricter convergence criteria, as it is only run once at the end of the adaptive VQE.
mapper (Mapper | None) – The mapper to use for mapping the second quantized operator to a qubit operator.
gate_selector (GateSelector) – The gate selector to use.
options (IterativeVqeOptions | None) – Options for the adaptive VQE.
intermittent_oo_options (IntermittentOrbitalOptimizerAlgorithmOptions) – Options for when to apply the intermittent orbital optimization.
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: AdaptiveOrbitalOrbitalOptimizedIterationDataHandler[T], 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 (AdaptiveOrbitalOrbitalOptimizedIterationDataHandler[T]) – The iteration data handler.
new_gates (list[GatePoolOperator]) – The new_gates to optimize.
iteration_count (int) – The iteration count.
- Return type:
- build_metadata(second_quantized_operator: FermionHermitianSum | PairedHardcoreBosonHermitianSum, initial_ansatz: Circuit) Mapping[str, HasMetadataHashMethod | int | float | str | Mapping[str, HasMetadataHashMethod | int | float | str | HashableStrDict | None] | None]
Create meta-data that represent the input.
- Parameters:
second_quantized_operator (FermionHermitianSum | PairedHardcoreBosonHermitianSum) – The operator 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, HasMetadataHashMethod | int | float | str | Mapping[str, HasMetadataHashMethod | int | float | str | HashableStrDict | None] | None]
- clear_cache() None
Clear the cache of the underlying VQE and gate selector.
- Return type:
None
- decide_orbital_optimization_action(*, force_oo: bool, iteration_data: AdaptiveOrbitalOrbitalOptimizedIterationDataHandler[T], optimal_circuit: Circuit, iteration_count: int, last_orbital_change: float, last_gate_change: float) OrbitalOptimizationAction
Decide between a full orbital optimization, a single Newton step, or skipping entirely.
The decision is based on a three-tier system:
If force_oo is
True(too many consecutive non-full steps) the full optimizer is always used.If the absolute orbital change of the previous OO step exceeds
IntermittentOrbitalOptimizerAlgorithmOptions.orbital_change_threshold, a full optimization is performed.If the absolute change due to the previous gate addition exceeds
IntermittentOrbitalOptimizerAlgorithmOptions.gate_addition_threshold, a full optimization is performed.Otherwise, the orbital gradient norm is compared against two thresholds:
Above
gradient_threshold→ full optimization.Between the skip and full thresholds → single Newton step.
Below
skip_gradient_threshold→ skip entirely.
- Parameters:
force_oo (bool) – Whether to force a full orbital optimization, bypassing all checks.
iteration_data (AdaptiveOrbitalOrbitalOptimizedIterationDataHandler[T]) – The data handler for the current iteration.
optimal_circuit (Circuit) – The circuit with the newly optimized gate parameters.
iteration_count (int) – The current iteration count, used for logging purposes.
last_orbital_change (float) – The absolute orbital energy change from the previous OO step (
0.0if no OO step was performed or the step was skipped).last_gate_change (float) – The absolute change in expectation value from the previous gate addition step.
- Return type:
- classmethod persistence_checkpoints() list[str]
Define the persistence checkpoints used during the orbital optimization 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(second_quantized_operator: T, gate_pool: GatePool, initial_ansatz: Circuit, callback: AdaptiveIterationCallback | None = None, input_result: SecondQuantizationAdaptiveVqeResult[T] | None = None) SecondQuantizationAdaptiveVqeResult[T]
Run the VQE and find the eigenvalue.
- Parameters:
second_quantized_operator (T) – The operator 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 (SecondQuantizationAdaptiveVqeResult[T] | None) – A prior results that should be refined.
- Return type: