Welcome to the documentation of Quantagonia’s API client!

Quantagonia’s API allows you to solve optimization problems of type QUBO and MIP to optimality using the Quantagonia cloud.

QUBO

\[\begin{split}\text{min/max} \quad& x^{\top} Q x \\ \text{s.t.} \quad& x \in \{0,1\}^m \\ & Q \text{ symmetric}\end{split}\]

MIP

\[\begin{split}\text{min/max} \quad& c^{\top} x \\ \text{s.t.} \quad& A_{\text{le}} x \le b_{\text{le}}\\ &A_{\text{ge}} x \ge b_{\text{ge}}\\ &A_{\text{eq}} x = b_{\text{eq}}\\ &x_i \in \mathbb{Z}, \forall i \in I \subset \{1,\dots,n\}\\ &L \le x \le U\end{split}\]

Additionally it can

  • interactively model QUBOs,

  • import QUBOs created with D-Wave Ocean, PyQUBO and Qiskit,

  • convert PulP IP problems and solve as QUBO or simply solve as MIP.

Installation

The Quantagonia API client is available via PyPi (Python >= 3.8 required). Simply run the following to install the package:

pip install quantagonia-api-client

The solvers are available via the API. For your own API key please contact us at support@quantagonia.com.

Example

This is a simple example of modeling and submitting a QUBO:

from quantagonia.qubo import *
from quantagonia.cloud.cloud_runner import CloudRunner
from quantagonia.spec_builder import QUBOSpecBuilder
from quantagonia.enums import HybridSolverOptSenses

API_KEY = "Your Quantagonia API key"

# setup model
model = QuboModel()

# setup variables
x0 = model.addVariable("x_0", initial=1)
x1 = model.addVariable("x_1", initial=1)
x2 = model.addVariable("x_2", initial=1)
x3 = model.addVariable("x_3", initial=1)
x4 = model.addVariable("x_4", initial=1)

# build objective
model.objective += 2 * x0
model.objective += 2 * x2
model.objective += 2 * x4
model.objective -= x0 * x2
model.objective -= x2 * x0
model.objective -= x0 * x4
model.objective -= x4 * x0
model.objective -= x2 * x4
model.objective -= x4 * x2
model.objective += 3

# set the sense
model.sense = HybridSolverOptSenses.MINIMIZE

print("Problem: ", model)
print("Initial: ", model.eval())

runner = CloudRunner(api_key=API_KEY)

# load default specs
specs = QUBOSpecBuilder()
res = model.solve(specs.getd(), runner)

print("Runtime:", res["timing"])
print("Status:", res["sol_status"])
print("Objective:", model.eval())