Eigenvalue¶
An EigenvalueProblem is a
HamiltonianProblem that additionally requests the
lowest k eigenvalues.
Usage¶
from microquantum import EigenvalueProblem, Operator
problem = EigenvalueProblem(Operator.Z(), k=2, name="z-k2")
print(problem.validate()) # []
print(problem.hamiltonian) # Operator.Z()
data = problem.to_dict()
print(data["type"]) # "Eigenvalue"
print(data["k"]) # 2
restored = EigenvalueProblem(
hamiltonian=Operator.from_dict(data["hamiltonian"]),
k=data["k"],
name=data["name"],
)
Solving with VQE¶
VQE is the canonical solver: give it the ansatz, the Hamiltonian and a classical optimizer.
from microquantum import EigenvalueProblem, Operator, Parameter, QuantumCircuit
from microquantum.algorithms import VQE
from microquantum.optimizers import COBYLA
theta = Parameter("theta")
ansatz = QuantumCircuit(1).ry(theta, 0)
vqe = VQE(ansatz, Operator.Z(), COBYLA(max_iter=100))
result = vqe.solve(EigenvalueProblem(Operator.Z(), k=1), initial_params={theta: 0.5})
print(result.eigenvalue) # ~ -1.0
Alternative: phase estimation¶
Phase Estimation solves the eigenvalue problem when the
Hamiltonian is a unitary operator (its validate will reject
non-unitary Hamiltonians for that algorithm).