Skip to content

Active development environment: you may notice changes or incomplete features.

JAOT
Open source optimization platform

Routes, shifts and budgets,solved to the best possible plan,and proven optimal.

JAOT turns your problem into a mathematical model, solves it, and proves that no better answer exists. You can build the model with the AI assistant, start from a community template, or call JAOT from your own agent over MCP.

An optimization platform for people and for AI agents.

routing · 48 stops · SCIP
First solution 2092.6
Optimal 452.6−78.4%
Proven optimal
Route length452.6
Gap to optimal0.00%
Search nodes843
Variables2304
Open source solvers100+ templatesOptimization model marketplaceMCP-nativeView on GitHub
The platform

Three ways to optimize

Build a model with the AI assistant, start from a community model in the marketplace, or connect your AI agent over MCP.

AI assistant

Describe the problem in plain words. The assistant writes the mathematical model, and JAOT solves it.

“Plan next week's deliveries: 4 vans, 60 stops, every van back by 18:00.”

Model marketplace

Browse models that other people have published. Use one as it is, fork it, or publish your own.

Fertilizer Mix Optimizer — agriculture

MCP for AI agents

Connect Claude, GPT or any MCP client. An agent can solve problems, fork marketplace models and write versioned models on its own.

solve_with_template(template_id="fertilizer_mixing")

AI assistant
The JAOT assistant writing an optimization model from a problem described in plain words
Write the model once

Fourteen lines, whatever the size of the data

JModel describes the problem with sets and indexed families. JAOT renders the mathematics before any data is loaded. The same source below covers one plant for a quarter or four hundred products for a year, with no change to the model.

What you write

set PRODUCTS;set RESOURCES;set WEEKS; param margin{PRODUCTS};param usage{RESOURCES, PRODUCTS};param capacity{RESOURCES, WEEKS};param ceiling{PRODUCTS, WEEKS}; var build{PRODUCTS, WEEKS} integer >= 0; maximize contribution:  sum{p in PRODUCTS, w in WEEKS} margin[p] * build[p, w]; subject to plant{r in RESOURCES, w in WEEKS}:  sum{p in PRODUCTS} usage[r, p] * build[p, w] <= capacity[r, w]; subject to market{p in PRODUCTS, w in WEEKS}:  build[p, w] <= ceiling[p, w];

What it means

max⁡∑p∈PRODUCTS,  w∈WEEKSmarginp buildp,w\max \quad \sum_{p \in \mathrm{PRODUCTS},\; w \in \mathrm{WEEKS}} \mathrm{margin}_{p} \, \mathrm{build}_{p,w}
∑p∈PRODUCTSusager,p buildp,w≤capacityr,w∀ r∈RESOURCES,  w∈WEEKS\sum_{p \in \mathrm{PRODUCTS}} \mathrm{usage}_{r,p} \, \mathrm{build}_{p,w} \le \mathrm{capacity}_{r,w} \quad \forall\, r \in \mathrm{RESOURCES},\; w \in \mathrm{WEEKS}
buildp,w≤ceilingp,w∀ p∈PRODUCTS,  w∈WEEKS\mathrm{build}_{p,w} \le \mathrm{ceiling}_{p,w} \quad \forall\, p \in \mathrm{PRODUCTS},\; w \in \mathrm{WEEKS}
buildp,w∈Z,  buildp,w≥0∀ p∈PRODUCTS,  w∈WEEKS\mathrm{build}_{p,w} \in \mathbb{Z},\; \mathrm{build}_{p,w} \ge 0 \quad \forall\, p \in \mathrm{PRODUCTS},\; w \in \mathrm{WEEKS}
7 products × 6 resources × 13 weeks91 variables · 169 constraints
400 products × 40 resources × 52 weeks20800 variables · 22880 constraints

The same 14 lines both times. The data sets the number of variables and constraints. The model stays the same.

After the solve

The three products with the highest margin are left out of the plan

One quarter of a power-electronics plant, solved and proven optimal. The plan builds none of the three product families with the highest margin per unit. The component everyone blames for the bottleneck ends the quarter with almost half of its stock unused. The exact analysis shows why.

Quarterly build plan

22,410 units · SCIP, proven optimal
  • 800 V traction inverter€2,450 / unit
    0 units
  • Battery management unit€1,780 / unit
    0 units
  • DC fast-charge module€1,320 / unit
    0 units
  • Grid-tie solar inverter€960 / unit
    7,460 units
  • Industrial motor drive€740 / unit
    6,290 units
  • Fleet telemetry unit€410 / unit
    8,660 units
  • Machine sensor hub€260 / unit
    0 units
Contribution margin€15,366,800

What runs out

  • SMT line hoursat capacity
  • Burn-in chamber hoursat capacity
  • Automotive-grade MCUs112,570 spare
  • SiC power modulesat capacity
  • Final-test hours7,930 spare
  • Conformal-coating hours3,290 spare
  • Fleet telemetry contract8,660 shipped, 3,500 required

800 V traction inverter: €2,450 a unit, and the plan builds none. It uses more of each of the 3 limits that ran out than any other product, while 112,570 automotive-grade microcontrollers stay unused, so buying more of those would change nothing. JAOT reads both facts from the integer solution itself, so they hold for the plan you will run.

What-if, measured by solving again

Ask what one more unit of a limit is worth. JAOT changes that limit, solves the model again and reports the real difference. Because it solves the integer model itself, the number is exact. A shadow price read from the linear relaxation can be wrong for an integer model.

Decisions grouped the way you wrote them

The solution comes back grouped by the sets and indices of your model. Each solve also states how it ended: at the root node, after branching, or at the time limit.

One-click explanation

The assistant turns the analysis into plain words. It only uses the numbers from your solve.

When there is no answer

It names the two rules that clash and clears the other five

A customer orders a quarter's worth of traction inverters that the line cannot build. A solver answers "infeasible" and leaves you to check the whole model. JAOT removes each rule in turn and solves again until only the contradiction is left, so you know where to look.

How far each limit reaches

7 rules · 2 in the conflict
  • SMT line hours 7,700 invertersnot the problem
  • Burn-in chamber hours 5,240 invertersin conflict
  • Automotive-grade MCUs 7,900 invertersnot the problem
  • SiC power modules 6,600 invertersnot the problem
  • Final-test hours 6,900 invertersnot the problem
  • Conformal-coating hours 6,600 invertersnot the problem
contract needs 6,000

There are only enough burn-in chamber hours for 5,240 inverters, and the contract asks for 6,000. The other 5 limits are cleared by name. With 7,600 more, the model solves. That is the number to take to the customer.

The exact conflict set

JAOT isolates the smallest set of constraints and bounds that cannot all hold at once, and highlights them on the result page.

How to fix it, in plain words

One click asks the assistant to name the constraints in conflict and to suggest a fix: which bound to widen, or which limit to relax.

It says when it is estimating

When a model is too large for an exact conflict set, JAOT says so and marks the explanation as heuristic.

Choosing a solver

The fastest solver depends on the model

JAOT ships SCIP, HiGHS, CBC, GLPK and JAOS. The ranking changes from one model to the next, so JAOT runs your problem on all of them under the same terms and shows what each one did. Below, one quarter of burn-in chamber loading at the same plant.

Total time, logarithmic scale

1,342 variables, 3,558 constraints
  • SCIPProved 17 chambers
    10.86 s

    201 nodes, 73,617 simplex iterations

  • HiGHSProved 17 chambers
    1.44 s

    1 node, 4,214 simplex iterations

  • CBCProved 17 chambers
    1.70 s

    776 nodes, 16,402 simplex iterations

  • GLPKOut of time
    59.92 s

    Proved that no plan needs fewer than 17 chambers, after 44,838 nodes, and never found a plan

  • JAOSOut of time
    60.05 s

    Proved that no plan needs fewer than 16.47 chambers, after 1,332 nodes, and never found a plan

The scale is logarithmic: each step is ten times the one before, so bar length is not proportional to the number beside it.

HiGHS finished first. SCIP reached the same answer 7.5 times slower. On another model the order changes, so the only way to choose is to measure.

GLPK and JAOS used the full 60 seconds and never found a plan. Each one still proved a bound, shown on its row: no plan needs fewer chambers than that. A bound is still useful: it tells you how far any plan can be from the best one.

Every solver got the same 60-second limit and the same 4 threads, one run after another on one 12-core server. The seconds are comparable within this run only.

The same terms

The same time limit, gap tolerance and thread count, on one machine, one run at a time. Two solvers running at once would compete for cores, and their times would no longer be comparable.

A whole matrix

Cross your model's datasets with the solvers: datasets down the side, solvers across the top. If your data changes every month, the fastest solver can change too, and the matrix shows that in one table.

The bound next to the answer

Each row shows the best bound the solver proved next to the answer it found. For a run stopped by the time limit, the gap between the two tells you how far the answer can be from the optimum.

Built for AI agents too

Any MCP client can use JAOT: Claude, GPT, or your own agent. It can build a model, solve it, read the analysis and publish the result, with the same tools a person uses.

1

Discover

The agent finds JAOT through MCP or /.well-known/llms.txt

2

Authenticate

The agent sends an API key

3

Solve

It creates the model, sets the parameters and runs the solver

4

Results

It reads the solution and the analysis as JSON

MCP tools

Problem solving

  • solve_problem
  • validate_problem
  • solve_multi_objective
  • list_available_solvers

Templates

  • list_templates
  • get_template
  • solve_with_template

File I/O

  • import_preview
  • import_and_solve
  • export_model
  • export_execution

Marketplace

  • list_catalog_models
  • get_catalog_model
  • get_catalog_model_schema

Model projects

  • create_model_project
  • create_model_project_from_marketplace
  • update_model_project_draft
  • commit_model_version
  • list_project_versions
  • get_model_stats
  • solve_model_project
  • get_model_project
  • list_model_projects

Execution

  • execute_model
  • get_execution
  • get_execution_insights

Analysis

  • get_execution_exact_analysis
  • analyze_infeasibility
  • start_execution_scenario_analysis
  • get_execution_scenario_analysis

Solver comparison

  • compare_solvers
  • get_solver_comparison
  • compare_solvers_on_datasets
  • get_solver_comparison_matrix

34 tools, all callable by an agent

Works with Claude, GPT and any MCP client

Who uses JAOT

Teams and companies

  • Plan routes, shifts, production or budgets with an exact solver
  • REST API and MCP, so it fits the systems you already run
  • Shared workspaces with roles and a common model library
  • API keys, per-workspace permissions and rate limits

Contributors and consultants

  • Publish your models in the marketplace
  • Other people can fork them and build on your work
  • Models are versioned, so a fork points at a known release
  • See how many times each model was adopted and run

Students and researchers

  • Build a model with the assistant and read the mathematics it produces
  • Templates from a first LP to a full MIP, with worked examples
  • Five open source solvers you can run side by side on the same model
  • Free and open source, and you can install it on your own machine

What people model with it

Six common problems. Each one has a template in the marketplace, or the assistant can build it from your description.

102 templates across 34 sectors

Browse the marketplace
  • Finance & Investment5
  • Logistics & Distribution5
  • Human Resources & Workforce4
  • Manufacturing & Production4
  • Aerospace3
  • Agriculture & Farming3
  • Chemical Engineering3
  • Construction3
  • Cutting & Packing3
  • Energy & Utilities3
  • Facility Location3
  • Food & Beverage3
  • Forestry3
  • General Purpose3
  • Government3
  • Healthcare & Nutrition3
  • Maritime3
  • Mining3
  • Network & Graph Optimization3
  • Pharmaceutical3
  • Railway3
  • Real Estate3
  • Retail & Commerce3
  • Supply Chain Management3
  • Telecommunications3
  • Transportation & Logistics3
  • Warehouse3
  • Water Management3
  • Advertising & Media2
  • Education & Academic2
  • Environmental & Sustainability2
  • Insurance2
  • Sports & Recreation2
  • Textile2

Vehicle routing

A carrier delivers to 50 addresses with 8 trucks. The model picks the order of stops for each truck so the total distance is as short as possible, within each truck's capacity and the delivery windows.

From the marketplace

Employee scheduling

A hospital assigns 120 nurses to three shifts. The model respects each nurse's availability, the rest rules between shifts and the minimum staff per shift.

Built with AI

Budget allocation

A marketing team splits €2M across 12 channels. The model puts the money where the expected return per euro is highest, with a minimum and a maximum per channel.

Built with AI

Production planning

A factory plans a week of production on 5 lines. The model decides what each line builds and when, within the material, labour and machine hours available.

From the marketplace

Supply chain network

A retailer chooses where to open warehouses to serve 200 shops. The model weighs the fixed cost of each site against the transport cost to every shop.

From the marketplace

Resource assignment

A consultancy assigns 80 consultants to 25 projects. The model matches skills to what each project needs and keeps every consultant within their available hours.

Built with AI

How it works

Pick a starting point

Choose one of 100+ templates, fork a marketplace model, import an MPS, LP or JSON file, or describe the problem to the assistant.

Build the model in the studio

Write it in JModel, or place variables and constraints on the visual canvas. Load your data in the Data tab. JAOT shows the resulting mathematics as you go.

Solve and read the analysis

Run one solver, or compare all five on the same model. Then read which constraints bind, what one more unit is worth, and export the solution.

Start optimizing

Free and open source. Create an account and solve a first model today, or install the whole platform on your own server.