First Algorithm¶
Algorithms consume problems through a uniform lifecycle:
validate(problem) -> [problems] then solve(problem, runtime=None).
Results are typed, JSON-safe containers.
VQE on a one-qubit Hamiltonian¶
from microquantum import EigenvalueProblem, Operator, Parameter, QuantumCircuit
from microquantum.algorithms import VQE
from microquantum.optimizers import GradientDescent
theta = Parameter("theta")
ansatz = QuantumCircuit(1).ry(theta, 0) # |0> -> RY(theta)|0>
vqe = VQE(
ansatz,
Operator.Z(),
GradientDescent(learning_rate=0.3, max_iter=60, tol=1e-8),
)
problem = EigenvalueProblem(Operator.Z(), k=1, name="z")
print(vqe.validate(problem)) # []
result = vqe.solve(problem, initial_params={theta: 0.5})
print(f"ground energy: {result.eigenvalue:.4f}") # ~ -1.0
Running through the execution runtime¶
Pass an ExecutionRuntime to route every circuit
evaluation (plan -> backend -> job -> result) through the MQ-04 pipeline:
from microquantum import ExecutionRuntime
vqe_runtime = VQE(
ansatz,
Operator.Z(),
GradientDescent(learning_rate=0.3, max_iter=60, tol=1e-8),
runtime=ExecutionRuntime(),
)
result = vqe_runtime.solve(problem, initial_params={theta: 0.5})
print(result.eigenvalue)
Every algorithm documents the problem type it accepts, its parameters, its backend/runtime requirements and its limitations — see the Algorithms.
Next: First Experiment.