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

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()
)

See Calculate the Ground State Energy Using the BEAST-VQE.

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)