Skip to content

Second Quantized Hamiltonian

You can define a chemical problem using the second quantized (fermionic) Hamiltonian instead of defining the geometry of the molecule. This approach utilizes the power of quantum chemistry software packages such as PYSCF and PSI4 to derive the most suitable Hamiltonian for the model.

You can choose from a vast collection of basis sets, apply complicated symmetries, or benefit from existing classical chemical solvers.

Here is a short example of this method using PYSCF, which converts a molecule to a fermionic operator. The solving process continues in the standard pipeline.

from classiq.applications.chemistry import (
    FermionicOperator,
    HamiltonianProblem,
    SummedFermionicOperator,
)

hamiltonian = SummedFermionicOperator(
    op_list=[
        (FermionicOperator(op_list=[("+", 0), ("-", 0)]), 0.2),
        (FermionicOperator(op_list=[("-", 1), ("-", 1)]), 0.3),
        (FermionicOperator(op_list=[("-", 2), ("-", 2)]), 0.4),
        (FermionicOperator(op_list=[("-", 3), ("-", 3)]), 0.5),
        (FermionicOperator(op_list=[("+", 0), ("+", 1), ("-", 1), ("-", 0)]), -0.1),
        (FermionicOperator(op_list=[("+", 2), ("+", 3), ("-", 2), ("-", 3)]), -0.3),
    ]
)
hamiltonian_problem = HamiltonianProblem(hamiltonian=hamiltonian, num_particles=[1, 1])

from classiq import Model
from classiq.builtin_functions import HardwareEfficientAnsatz
from classiq.applications.chemistry import GroundStateSolver, GroundStateOptimizer

model = Model()

NUM_QUBITS = 4
hwea_params = HardwareEfficientAnsatz(
    num_qubits=NUM_QUBITS, connectivity_map=[(0, 1), (1, 2), (2, 3)], reps=3
)

model.HardwareEfficientAnsatz(params=hwea_params)
circuit = model.synthesize()

gs_solver = GroundStateSolver(
    ground_state_problem=hamiltonian_problem,
    ansatz=circuit,
    optimizer_preferences=GroundStateOptimizer(),
)

result = gs_solver.solve()

A basic script to convert MoleculeProblem to HamiltonianProblem using PYSCF is given in classiq.applications.chemistry.pyscf_hamiltonian. You can extend it to use more features from PYSCF.

The rest of the solving process is regular.