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.
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:
Copy 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.
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 MILP qubo.py Copy 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 Copy from ortools.math_opt.python import mathopt from quicopt import Client # A tiny mixed-integer model: one continuous and one integer variable. model = mathopt.Model( name = "milp" ) x = model.add_variable( lb = 0.0 , name = "x" ) y = model.add_integer_variable( lb = 0.0 , ub = 10.0 , name = "y" ) model.add_linear_constraint(x + 2 * y <= 14 ) model.add_linear_constraint( 3 * x - y >= 0 ) model.maximize( 3 * x + 4 * y) client = Client( "https://try.quicoptapi.pgi.fz-juelich.de" ) result = client.solve(model) print (result.display) $ python milp.py ├── status: optimal ├── feasible: true ├── objective: 42.0 ├── x: x=14, y=0 (2 variables) └── solve_time: 0.0041 s
The example did three things:
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. 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 . Printed and returned the result — result.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.
... continue reading