Build a VQE Calculator with calculator_creator
Goal
Use the fluent qc.calculator_creator() API to select and create a VQE calculator:
Fixed-ansatz VQE (static circuit)
Iterative VQE (adaptive circuit), e.g. FAST-VQE, ADAPT-VQE or BEAST-VQE
Iterative + Orbital Optimization (OO-FAST-VQE, OO-ADAPT-VQE, OO-BEAST-VQE)
Hybrid method that accelerates a standard (fermionic encoding) run with a BEAST (bosonic encoding of electron pairs) run
Prerequisites
Familiarity with the fluent builder pattern (Understanding and Using Kvantify Qrunch’s Fluent Builder Pattern)
Overview: Narrowing by Intent
Start from the calculator creator:
import qrunch as qc
calc = qc.calculator_creator()
Then narrow down:
Choose VQE family:
.vqe().fixed_ansatz()→ Fixed circuit.vqe().iterative()→ Iterative circuit (grows by adding gates at each iteration).vqe().iterative_with_orbital_optimization()→ Iterative + OO (orbital optimization each iteration)
Within an iterative family, pick standard (fermionic encoding) or beast (bosonic encoding of electron pairs)
.standard()→ FAST-VQE / ADAPT-VQE (fermionic encoding).beast()→ BEAST-VQE (paired-electron, bosonic encoding of electron pairs)
Finally, build with .create(). For details on how to pass more detailed components (gate selectors, minimizers, options, etc.)
please check their respective guides; here we focus on the high-level flow.
Quick Starts
import qrunch as qc
calculator = (
qc.calculator_creator()
.vqe()
.fixed_ansatz()
.create()
)
Use when: you have a predefined circuit/ansatz and only want to optimize parameters.
import qrunch as qc
fast_calculator = (
qc.calculator_creator()
.vqe()
.iterative()
.standard()
.create()
)
See Calculate the Ground State Energy Using the FAST-VQE for more detail.
import qrunch as qc
beast_calculator = (
qc.calculator_creator()
.vqe()
.iterative()
.beast()
.create()
)
Run BEAST to get a good starting point and then continue with standard (fermionic) iterative VQE.
import qrunch as qc
fast_calculator = (
qc.calculator_creator().vqe().iterative().standard().create()
)
beast_calculator = (
qc.calculator_creator().vqe().iterative().beast().create()
)
hybrid_calculator = (
qc.calculator_creator()
.vqe()
.iterative()
.beast_accelerated_standard()
.with_beast_calculator(beast_calculator)
.with_standard_calculator(fast_calculator)
.create()
)
import qrunch as qc
oo_fast_calculator = (
qc.calculator_creator()
.vqe()
.iterative_with_orbital_optimization()
.standard()
.create()
)
import qrunch as qc
oo_beast_calculator = (
qc.calculator_creator()
.vqe()
.iterative_with_orbital_optimization()
.beast()
.create()
)
Note
Creating a ADAPT-VQE calculator instead of the default FAST-VQE calculator is a matter of selecting the right gate selector. See Create a ADAPT Gate Selector and Create a FAST Gate Selector.
Calling the Calculator
All calculators expose a common interface:
result = calculator.calculate(ground_state_problem)
For single-geometry problems, you get a
AdaptiveVqeGroundStateProblemCalculatorResult.For reaction paths, you receive a
ReactionPathProblemCalculatorResult.