First Problem

A problem is a plain, JSON-safe description of a computational task. It never executes anything — an algorithm consumes it later.

The five built-in problem types in Problem family:

  • SamplingProblem — sample |bitstring> -> probability from a circuit’s output distribution.

  • OptimizationProblem — minimize a binary-objective function (created via OptimizationProblem.from_qubo or OptimizationProblem.from_ising()).

  • HamiltonianProblem — the spectrum of a Hermitian operator.

  • EigenvalueProblem — the lowest k eigenvalues.

  • SearchProblem — find marked items in a 2**n database.

Optimization problem from a QUBO

from microquantum import OptimizationProblem
from microquantum.optimization.qubo import QUBOBuilder

builder = QUBOBuilder(num_variables=2)
builder.add_linear(0, -1.0)
builder.add_linear(1, -1.0)
builder.add_quadratic(0, 1, 2.0)        # cut-like objective
qubo = builder.build("simple")

problem = OptimizationProblem.from_qubo(qubo, name="simple-min")
print(problem.num_variables)
print(problem.energy([0, 1]))           # objective at bitstring '01'
print(problem.cost_hamiltonian())       # spin-Ising Pauli view

Eigenvalue problem

from microquantum import EigenvalueProblem, Operator

problem = EigenvalueProblem(Operator.Z(), k=2, name="z-spectrum")
print(problem.validate())               # []  (valid)

Validation and serialization

Every problem validates (returning a list of problems, empty = valid) and serializes JSON-safely:

data = problem.to_dict()
print(data["type"])                     # "eigenvalue"
restored = problem.__class__.from_dict(data)

Next: First Algorithm.