Using AI-driven automated algorithm design, we solve the combinatorial optimization challenges that stump commercial solvers — across energy dispatch, production scheduling, fleet routing, network planning, revenue management, portfolio optimization, and beyond — without months of manual algorithm engineering.
Commercial solvers and textbook algorithms were not designed for the messy, large-scale realities of industrial operations. Three fundamental barriers stand in the way.
Tools like Gurobi and CPLEX work well on textbook instances. But real industrial problems — involving thousands of jobs, vehicles, or assets with complex constraints — exceed what any off-the-shelf solver can handle within practical time limits.
When solvers fall short, the only option is a hand-crafted heuristic. Designing one demands deep OR expertise, careful problem analysis, and months of iterative engineering — a process most organizations simply cannot afford to repeat for every new challenge.
A metaheuristic tuned for one scheduling problem rarely generalizes to another — even structurally similar ones. Every new problem variant restarts the design process from scratch, with no reuse of prior investment in algorithm development.
Most AI methods try to solve optimization problems directly — and fail on anything novel or large-scale. ORaI takes a different path: we use large language models to design the algorithms themselves, producing a portfolio of complementary heuristics that collectively cover your problem's full landscape of instances and runtime requirements.
We encode your problem as modular components — state representation, action space, and a domain tool library. This separation means our LLM focuses purely on decision logic, not on re-learning your domain from scratch. It also enables generalization: the same structure works across radically different problem types.
An LLM-driven evolutionary process iteratively generates, evaluates, and selects heuristics under explicit runtime budgets. Rather than producing a single algorithm, it constructs a complementary portfolio — heuristics that collectively dominate across instance types, from fast emergency decisions to deep overnight optimization.
You receive clean, executable Python code — a set of algorithms that outperform both human-designed heuristics and existing LLM-based methods, and that generalize zero-shot even to problems no prior method has encountered. No problem-specific pretraining required.
You don't need to know operations research. Just describe your problem as you would to a colleague — we handle all the modelling, solving, and delivery.
“We operate 150 delivery vehicles across Southeast Asia, serving 600–800 drop points daily. Our routing software takes 2 hours to compute and still needs heavy manual adjustment — during peak season we can't even finish before drivers need to depart.”
From energy grids to e-commerce platforms, operations research drives decisions at every scale. ORaI's automated algorithm design works across all of them.
ORaI is evaluated on Job Shop Scheduling (JSSP), Traveling Salesman Problem (TSP), Capacitated Vehicle Routing (CVRP), and a novel Port Scheduling Problem (PSP) — benchmarked against classical solvers, learning-based methods, and existing LLM-based frameworks.
Average quality gap (%) vs. average runtime across all four benchmark problems. Lower-left is best. ORaI (★) consistently achieves the best quality–time trade-off across all domains.
15 standard benchmark instances: small (la10–la14, 10 jobs × 5 machines), medium (swv18–ta69, 20 jobs × 10–15 machines), large (ta73–ta77, 20 jobs × 15–20 machines). Gap = (Solution − Optimal) / Optimal × 100%. Time in seconds. Lower gap is better.
| Scale | Instance | OR-Tools | Iterated Greedy | FunSearch | EoH | EoH-S | HeurAgenix | ORaI | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Gap | Time | Gap | Time | Gap | Time | Gap | Time | Gap | Time | Gap | Time | Gap | Time | ||
| Small | la10 | 0.00 | 0.48 | 0.00 | 60.02 | 12.65 | 0.34 | 6.75 | 0.12 | 0.00 | 0.07 | 5.64 | 0.05 | 0.00 | 0.08 |
| la11 | 0.00 | 0.87 | 0.00 | 60.07 | 12.05 | 0.54 | 6.35 | 0.18 | 6.14 | 0.13 | 29.05 | 0.08 | 0.99 | 0.11 | |
| la12 | 0.00 | 0.68 | 0.00 | 60.05 | 11.25 | 0.54 | 5.60 | 0.18 | 15.98 | 0.13 | 23.77 | 0.09 | 0.07 | 0.11 | |
| la13 | 0.00 | 3.16 | 0.00 | 60.05 | 16.40 | 0.96 | 10.06 | 0.14 | 0.35 | 0.12 | 16.26 | 0.08 | 0.35 | 0.11 | |
| la14 | 0.00 | 0.31 | 0.00 | 60.07 | 15.60 | 2.75 | 9.45 | 0.85 | 0.00 | 0.13 | 15.87 | 0.08 | 0.00 | 0.11 | |
| Medium | swv18 | 1.40 | 60.02 | 15.64 | 60.07 | 18.25 | 5.26 | 11.39 | 3.40 | 2.35 | 3.22 | 1.12 | 1.61 | 2.35 | 2.18 |
| swv20 | 4.68 | 60.02 | 16.12 | 60.07 | 17.60 | 5.34 | 10.75 | 3.40 | 5.65 | 3.12 | 6.80 | 1.51 | 2.54 | 2.17 | |
| ta53 | 18.18 | 60.01 | 32.14 | 60.05 | 16.90 | 7.00 | 10.10 | 8.40 | 4.48 | 7.56 | 5.74 | 4.09 | 0.93 | 5.45 | |
| ta60 | 18.07 | 60.01 | 44.47 | 60.07 | 19.45 | 10.50 | 12.25 | 9.45 | 5.03 | 8.21 | 11.51 | 4.11 | 2.03 | 5.43 | |
| ta69 | 25.17 | 60.01 | 43.24 | 60.05 | 22.80 | 31.25 | 14.25 | 28.70 | 9.34 | 16.64 | 8.90 | 8.51 | 1.97 | 10.91 | |
| Large | ta73 | 16.41 | 60.03 | 35.25 | 60.07 | 22.10 | 31.25 | 13.60 | 28.70 | 7.22 | 80.30 | 3.90 | 31.22 | 4.68 | 38.84 |
| ta74 | 13.54 | 60.02 | 34.14 | 60.05 | 26.40 | 62.00 | 17.95 | 57.75 | 2.64 | 90.74 | 13.59 | 32.13 | 0.79 | 40.61 | |
| ta75 | 15.30 | 60.03 | 25.58 | 60.07 | 25.60 | 62.00 | 17.25 | 57.75 | 12.63 | 82.76 | 12.56 | 32.19 | 3.20 | 41.05 | |
| ta76 | 18.42 | 60.03 | 28.13 | 60.07 | 29.30 | 93.00 | 20.60 | 86.80 | 6.92 | 85.82 | 6.19 | 32.39 | 5.55 | 38.40 | |
| ta77 | 11.20 | 60.03 | 30.12 | 60.05 | 28.60 | 93.00 | 19.90 | 86.80 | 9.55 | 80.18 | 8.64 | 32.21 | 3.78 | 42.58 | |
| Average | 9.49 | 40s | 20.32 | 60s | 19.66 | 27s | 12.42 | 25s | 5.88 | 31s | 11.30 | 12s | 1.95 | 15s | |
15 TSPLIB benchmark instances: small (29–152 cities), medium (417–666 cities), large (1000–1889 cities). Gap = (Solution − Optimal) / Optimal × 100%. Time in seconds. Lower gap is better. † Results from cited papers.
| Scale | Instance | OR-Tools | POMO† | LEHD† | FunSearch | EoH | EoH-S | HeurAgenix† | ORaI | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Gap | Time | Gap | Time | Gap | Time | Gap | Time | Gap | Time | Gap | Time | Gap | Time | Gap | Time | ||
| Small | kroD100 | 0.00 | 300.16 | 4.52 | 0.10 | 2.47 | 0.12 | 4.91 | 0.50 | 4.20 | 0.80 | 3.94 | 0.27 | 6.19 | 0.28 | 0.05 | 0.34 |
| kroE100 | 0.29 | 300.18 | 4.35 | 0.10 | 2.53 | 0.12 | 14.70 | 0.50 | 6.80 | 0.80 | 4.56 | 0.27 | 6.46 | 0.28 | 0.06 | 0.34 | |
| pr107 | 0.00 | 300.17 | 4.87 | 0.10 | 2.68 | 0.13 | 15.50 | 1.50 | 3.68 | 0.80 | 2.62 | 0.34 | 3.65 | 0.36 | 0.88 | 0.45 | |
| bayg29 | 0.00 | 300.04 | 3.14 | 0.10 | 1.95 | 0.08 | 12.80 | 0.40 | 3.20 | 0.02 | 2.24 | 0.01 | 1.37 | 0.01 | 0.93 | 0.01 | |
| pr152 | 0.85 | 300.36 | 5.27 | 0.20 | 2.81 | 0.18 | 23.21 | 3.20 | 7.49 | 1.10 | 2.05 | 0.88 | 2.41 | 1.07 | 0.93 | 0.33 | |
| Medium | d657 | 4.82 | 306.22 | 25.14 | 19.22 | 5.63 | 26.85 | 25.40 | 180.50 | 19.50 | 85.00 | 7.41 | 68.29 | 9.30 | 85.83 | 1.37 | 97.50 |
| ali535 | 6.18 | 305.27 | 22.52 | 11.45 | 4.89 | 24.92 | 28.60 | 95.80 | 22.30 | 42.00 | 11.72 | 36.92 | 11.25 | 53.93 | 1.24 | 48.87 | |
| fl417 | 2.01 | 302.59 | 17.58 | 15.45 | 4.42 | 23.28 | 21.50 | 48.20 | 15.80 | 22.50 | 3.67 | 16.76 | 3.07 | 20.31 | 1.29 | 24.89 | |
| gr666 | 3.82 | 308.17 | 26.14 | 14.25 | 5.87 | 27.41 | 24.10 | 185.60 | 18.90 | 90.00 | 7.74 | 69.97 | 14.98 | 87.26 | 0.01 | 91.67 | |
| u574 | 4.76 | 305.45 | 23.84 | 13.52 | 5.14 | 25.36 | 13.23 | 118.40 | 17.40 | 62.80 | 9.65 | 44.96 | 10.46 | 55.75 | 1.51 | 64.89 | |
| Large | fl1400 | 5.61 | 333.18 | 45.47 | 34.44 | 13.76 | 38.76 | 25.20 | 1850.20 | 18.50 | 820.50 | 2.67 | 668.68 | 7.48 | 766.62 | 0.88 | 188.00 |
| rl1889 | 9.17 | 356.91 | 75.14 | 64.53 | 16.48 | 72.18 | 22.50 | 2680.80 | 25.80 | 2100.00 | 12.33 | 1702.32 | 12.12 | 1926.51 | 2.80 | 248.93 | |
| vm1748 | 9.37 | 354.16 | 95.85 | 59.52 | 15.92 | 65.43 | 28.90 | 1720.45 | 21.20 | 1680.30 | 7.26 | 1339.19 | 12.27 | 1556.55 | 1.58 | 212.26 | |
| u1432 | 5.54 | 332.78 | 98.71 | 46.95 | 15.83 | 52.37 | 23.70 | 1015.80 | 17.60 | 950.60 | 9.47 | 727.12 | 11.63 | 831.10 | 1.83 | 205.46 | |
| dsj1000 | 7.85 | 317.28 | 40.46 | 39.53 | 12.91 | 48.94 | 19.80 | 480.25 | 13.40 | 380.70 | 8.18 | 240.09 | 11.69 | 319.75 | 1.26 | 169.32 | |
| Average | 4.02 | 315s | 32.87 | 21s | 7.55 | 27s | 20.27 | 559s | 14.38 | 416s | 6.37 | 328s | 8.29 | 380s | 1.11 | 90s | |
15 X-series benchmark instances: small (X-n106–X-n251), medium (X-n317–X-n439), large (X-n641–X-n957). Gap = (Solution − Optimal) / Optimal × 100%. Time in seconds. Lower gap is better. † Results from cited papers.
| Scale | Instance | PyVRP | POMO† | LEHD† | FunSearch | EoH | EoH-S | HeurAgenix† | ORaI | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Gap | Time | Gap | Time | Gap | Time | Gap | Time | Gap | Time | Gap | Time | Gap | Time | Gap | Time | ||
| Small | X-n106 | 1.60 | 300.01 | 7.23 | 0.13 | 5.82 | 0.18 | 30.50 | 3.85 | 25.20 | 3.15 | 8.80 | 2.50 | 21.91 | 2.84 | 7.96 | 0.46 |
| X-n157 | 2.32 | 300.05 | 7.89 | 0.21 | 5.47 | 0.29 | 12.50 | 8.10 | 10.80 | 6.65 | 8.68 | 5.25 | 8.87 | 5.97 | 8.47 | 0.97 | |
| X-n181 | 2.17 | 300.06 | 8.34 | 0.26 | 6.15 | 0.36 | 25.80 | 10.80 | 21.50 | 8.85 | 10.20 | 7.00 | 18.03 | 7.95 | 7.68 | 1.89 | |
| X-n219 | 0.69 | 300.07 | 16.47 | 2.85 | 6.28 | 3.92 | 22.40 | 26.60 | 18.90 | 21.85 | 4.50 | 17.25 | 15.42 | 19.61 | 1.97 | 6.83 | |
| X-n251 | 4.27 | 300.08 | 17.82 | 4.17 | 11.63 | 5.74 | 32.50 | 34.30 | 27.80 | 28.15 | 14.50 | 22.20 | 22.14 | 25.26 | 9.29 | 4.24 | |
| Medium | X-n317 | 1.11 | 300.13 | 19.56 | 7.38 | 12.71 | 10.15 | 14.80 | 79.55 | 12.50 | 65.25 | 6.20 | 51.50 | 9.56 | 58.59 | 2.49 | 11.04 |
| X-n359 | 6.15 | 300.19 | 20.73 | 9.64 | 13.38 | 13.27 | 24.60 | 91.35 | 20.80 | 74.90 | 11.50 | 59.20 | 16.84 | 67.25 | 8.26 | 9.47 | |
| X-n376 | 0.73 | 300.18 | 21.18 | 15.83 | 13.19 | 14.91 | 16.50 | 130.50 | 13.80 | 107.05 | 4.80 | 84.60 | 11.24 | 96.10 | 1.91 | 25.55 | |
| X-n401 | 5.42 | 300.16 | 22.41 | 18.76 | 15.94 | 17.57 | 22.60 | 117.35 | 19.20 | 96.25 | 9.50 | 76.00 | 15.42 | 86.41 | 7.94 | 12.81 | |
| X-n439 | 5.31 | 300.24 | 24.35 | 26.52 | 14.67 | 22.76 | 16.80 | 113.75 | 14.20 | 93.30 | 9.50 | 73.70 | 11.24 | 83.84 | 7.38 | 17.41 | |
| Large | X-n641 | 6.09 | 300.44 | 38.67 | 48.47 | 16.83 | 52.93 | 34.20 | 830.10 | 29.50 | 680.60 | 11.50 | 537.50 | 23.20 | 611.26 | 8.19 | 39.89 |
| X-n655 | 1.16 | 300.54 | 39.84 | 50.25 | 17.29 | 55.43 | 29.50 | 343.20 | 25.20 | 281.40 | 6.80 | 222.40 | 20.12 | 252.81 | 2.51 | 108.14 | |
| X-n701 | 8.68 | 300.98 | 42.19 | 67.83 | 18.46 | 65.87 | 23.40 | 380.75 | 19.80 | 312.25 | 7.20 | 246.70 | 15.75 | 280.45 | 6.75 | 56.37 | |
| X-n801 | 4.02 | 300.79 | 45.73 | 72.71 | 19.75 | 86.33 | 35.80 | 1700.55 | 30.60 | 1394.70 | 8.90 | 1101.80 | 24.22 | 1252.16 | 7.35 | 73.86 | |
| X-n957 | 4.06 | 300.93 | 52.38 | 95.38 | 22.91 | 131.24 | 38.50 | 2205.75 | 32.80 | 1809.15 | 10.50 | 1429.10 | 26.02 | 1624.12 | 7.09 | 183.92 | |
| Average | 3.59 | 300s | 25.65 | 28s | 13.37 | 32s | 25.36 | 405s | 21.51 | 332s | 8.87 | 262s | 17.33 | 298s | 6.35 | 37s | |
18 benchmark instances: small (20–100 vessels), medium (150–250 vessels), large (300–500 vessels). Gap measured vs. best solution found across all methods. FunSearch, EoH, and EoH-S all failed to produce feasible algorithms for this novel problem.
| Scale | Instance | Gurobi | GPIH | HeurAgenix | ORaI | |||||
|---|---|---|---|---|---|---|---|---|---|---|
| 10 min | 20 min | 30 min | Gap | Time | Gap | Time | Gap | Time | ||
| Small | 20_2_3_T12 | 0 | 0 | 0 | 21.19 | 1s | 8.54 | 1s | 3.41 | 1s |
| 40_3_4_T12 | 0 | 0 | 0 | 13.83 | 1s | 8.97 | 1s | 3.15 | 1s | |
| 60_5_8_T12 | 0 | 0 | 0 | 10.09 | 1s | 7.57 | 1s | 3.01 | 1s | |
| 80_10_15_T48 | 5.45 | 3.41 | 0 | 20.95 | 1s | 14.56 | 1s | 2.51 | 1s | |
| 100_15_30_T24 | 10.64 | 6.59 | 0 | 21.41 | 1s | 9.51 | 3s | 2.84 | 6s | |
| 100_15_30_T48 | 19.04 | 19.04 | 2.80 | 19.45 | 1s | 11.25 | 5s | 0 | 7s | |
| Medium | 150_20_40_T24 | 6.04 | 1.36 | 2.22 | 19.53 | 2s | 5.64 | 11s | 0 | 18s |
| 150_20_40_T48 | 51.21 | 10.61 | 10.61 | 18.54 | 3s | 6.31 | 25s | 0 | 53s | |
| 200_20_40_T24 | 25.53 | 6.53 | 6.53 | 23.54 | 4s | 8.64 | 24s | 0 | 78s | |
| 200_20_40_T48 | 43.98 | 43.98 | 8.94 | 25.14 | 5s | 9.69 | 48s | 0 | 118s | |
| 250_20_50_T24 | 28.26 | 8.59 | 8.59 | 24.53 | 4s | 11.35 | 52s | 0 | 202s | |
| 250_20_50_T48 | 70.07 | 70.07 | 34.64 | 18.25 | 5s | 15.64 | 61s | 0 | 310s | |
| Large | 300_25_60_T24 | 63.41 | 34.67 | 22.08 | 17.55 | 4s | 21.25 | 58s | 0 | 402s |
| 300_25_60_T48 | 66.93 | 66.93 | 66.93 | 35.51 | 6s | 23.14 | 69s | 0 | 502s | |
| 400_30_80_T24 | 76.20 | 76.20 | 29.12 | 39.15 | 7s | 20.12 | 68s | 0 | 690s | |
| 400_30_80_T48 | 70.99 | 70.99 | 70.99 | 45.54 | 8s | 19.34 | 80s | 0 | 884s | |
| 500_40_100_T24 | 82.65 | 82.65 | 82.65 | 38.51 | 7s | 31.52 | 81s | 0 | 870s | |
| 500_40_100_T48 | 60.87 | 60.87 | 60.87 | 35.64 | 9s | 28.59 | 93s | 0 | 987s | |
| Average | 37.85 | 31.25 | 22.61 | 27.31 | 4s | 14.54 | 38s | 0.83 | 285s | |
† Results taken from original papers (HeurAgenix, POMO, LEHD)
Every client challenge is different. We offer three engagement models designed to match where you are — whether you are exploring feasibility, deploying at scale, or building a long-term optimization capability.
Email us with a description of your operational context and optimization objectives — we typically respond within 1–2 business days.
In your email, briefly describe your operational scenario, objectives, and constraints — we will arrange an introductory call as soon as possible.
Send an Email →