Solve your first model

Quicopt is a solver for hard optimization problems. The point of this page is to get you from an empty directory to a solved model in three steps: install, run an example, understand what happened. You build the model in a standard Python modeling front-end — OR-Tools MathOpt or Pyomo, nothing Quicopt-specific to learn — and hand it to a single client.solve() call.

Everything here runs on the free tier: no account, no API key to manage — your first call sets one up automatically. It is a small entry point to try the API; if you have questions or want to go further, talk to us.

Step 1 — Install

The client is one package on PyPI. Install it with the front-end you model in — the examples on this page use OR-Tools MathOpt:

pip install "quicopt[mathopt]"

If you prefer Pyomo, install quicopt[pyomo] instead — solve() accepts both kinds of model directly. That's the whole setup: no license file, no signup, no key to copy anywhere.

Step 2 — Run an example

Two ready-to-run scripts — a QUBO and a small MILP. Save either one and run it. Switch tabs to compare — each slide shows the model and exactly what prints:

qubo.py
from ortools.math_opt.python import mathopt
from quicopt import Client

# A QUBO: 4 binary variables, a quadratic objective, no constraints.
model = mathopt.Model(name="qubo")
x = [model.add_binary_variable(name=f"x{i}") for i in range(4)]

# Reward each variable; penalise adjacent pairs on the 4-cycle 0-1-2-3-0.
# Distinct linear weights break the symmetry, so the optimum is unique.
model.minimize(
    -(1.0 * x[0] + 0.7 * x[1] + 1.3 * x[2] + 0.5 * x[3])
    + 2.0 * (x[0] * x[1] + x[1] * x[2] + x[2] * x[3] + x[0] * x[3])
)

client = Client("https://try.quicoptapi.pgi.fz-juelich.de")
result = client.solve(model)
print(result.display)
$ python qubo.py
├── shots
│   ├── 1 · Heuristic 1   -2.3   0.0s  ◀ best
│   ├── 2 · Heuristic 2   -2.3   0.0s
│   └── 3 · Heuristic 2   -2.3   0.0s
├── status:     heuristic
├── feasible:   n/a
├── objective:  -2.3
├── x:          x0=1, x1=0, x2=1, x3=0  (4 variables)
└── solve_time: 0.0017 s

Step 3 — Understand what happened

The example did three things:

  1. Built a model — a standard MathOpt Model with variables, an objective, and (in the MILP) constraints. Nothing in it is Quicopt-specific; the same code runs against any MathOpt-compatible solver, and a Pyomo model works the same way.
  2. Called client.solve(model) — the client converted the model, sent it to the Quicopt API, and took care of the API key: your very first call needs no key, one is set up automatically and reused for every later call on the same Client.
  3. Printed and returned the resultresult.display is the framed view the server renders; the Result object also carries status, objective, and the solution keyed by your variable names. Every field is described in the API reference.

What you can solve today

The API currently solves LP, QP, MILP, MINLP, QUBO, PUBO/HUBO, and NLP models — there is a runnable example for each. One free-tier edge to know: in a non-linear model, integer variables beyond binary on/off decisions aren't accepted yet. Black-box objectives are coming soon; a model outside today's classes is declined with a readable message, never a half-solved result.

Beyond the free tier

The free tier is a small, one-time entry point to try the API. Questions, something unclear, or real models you want to try Quicopt on? Just ask:

Questions? Talk to us.

Whether something's unclear or you want to try Quicopt on your real models — tell us what you're optimizing.

Talk to us →

Where next

  • Examples — a runnable model for every supported problem class, including how an infeasible model comes back.
  • API reference — the quicopt Python client in full: Client, solve(), the Result fields, and the async job API.
  • Modeling front-ends — what you can express in Pyomo and OR-Tools MathOpt.

About this service

The free evaluation API is provided as-is, for evaluation and research only — without availability, functionality or result guarantees, and without any service level. Liability is limited, to the extent permitted by law, to intent and gross negligence.

We keep the data you send over the API to improve future versions of our solvers. Please don't submit personal, confidential or otherwise sensitive data inside an optimization model — the service isn't designed for that. Full details: Privacy Policy · Legal notice.