Introduction

QUBO

An optimization problem is in its QUBO form if it is written as

\[\begin{array}{rl} \min & \alpha \left[ \mathbf{x}'\mathbf{Q}\,\mathbf{x} + \mathbf{\ell}'\mathbf{x} + \beta \right] \\ \text{s.t.} & \mathbf{x} \in S \cong \mathbb{B}^{n} \end{array}\]

with linear terms $\mathbf{\ell} \in \mathbb{R}^{n}$ and quadratic $\mathbf{Q} \in \mathbb{R}^{n \times n}$. $\alpha, \beta \in \mathbb{R}$ are, respectively, the scaling and offset factors.

The MOI-JuMP optimizers defined using the QUBODrivers.AbstractSampler{T} <: MOI.AbstractOptimizer interface only support models given in the QUBO form. QUBODrivers.jl employs QUBOTools on many tasks involving data management and querying. It is worth taking a look at the QUBOTools docs.

Package Layout

The package has three main layers:

  • user-facing JuMP/MOI optimizers, including the built-in utility samplers;
  • sampler-author tools, centered on QUBODrivers.@setup and QUBODrivers.sample;
  • testing and benchmarking helpers that exercise the sampler interface.

All solver-specific wrappers should preserve the same public contract: accept a QUBO or Ising model through MOI, call their backend in QUBODrivers.sample, and return a QUBOTools sample set that JuMP users can query through standard result APIs.

Table of Contents