<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://optalcp.com/blog</id>
    <title>OptalCP Blog</title>
    <updated>2026-07-09T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://optalcp.com/blog"/>
    <subtitle>OptalCP Blog</subtitle>
    <icon>https://optalcp.com/img/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[OptalCP on the largest job shop benchmarks]]></title>
        <id>https://optalcp.com/blog/large-jobshop-instances</id>
        <link href="https://optalcp.com/blog/large-jobshop-instances"/>
        <updated>2026-07-09T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[People regularly ask how OptalCP does on the big benchmarks. The largest job]]></summary>
        <content type="html"><![CDATA[<p>People regularly ask how OptalCP does on the big benchmarks. The largest job
shop instances around are the ones published by <a href="https://arxiv.org/abs/2102.08778" target="_blank" rel="noopener noreferrer" class="">Giacomo Da Col and Erich
Teppan</a>: randomly generated by the same
generator as the classic Taillard set, in sizes from 100 jobs on 100 machines
up to 1,000 jobs on 1,000 machines — <strong>one million operations</strong> in a single
scheduling problem. We recently ran OptalCP on them: all ten 1000×100
instances (100,000 operations each) are now solved to proven optimality, and
on the 1000×1000 instances we obtained the best known results.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="real-problems-look-different">Real problems look different<a href="https://optalcp.com/blog/large-jobshop-instances#real-problems-look-different" class="hash-link" aria-label="Direct link to Real problems look different" title="Direct link to Real problems look different" translate="no">​</a></h2>
<p>Before the numbers, a caveat. Real scheduling problems do not look like these
instances: in a real factory the same products are made again and again, there
are usually far more jobs than machines, and the difficulty hides in the messy
side constraints — setup times, calendars, batching, operators. Problems of
that kind are what drives the development of OptalCP. The academic benchmarks
are still a useful stress test of scale, and we run them because people are
curious — honestly, so were we.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-big-is-a-million-operations">How big is a million operations?<a href="https://optalcp.com/blog/large-jobshop-instances#how-big-is-a-million-operations" class="hash-link" aria-label="Direct link to How big is a million operations?" title="Direct link to How big is a million operations?" translate="no">​</a></h2>
<p>For scale: <code>ft10</code>, the most famous job shop instance of all — the one that
resisted every solution attempt for 26 years after its publication in 1963 —
has 10 jobs on 10 machines, that is 100 operations. The instances in this post
are a thousand to ten thousand times bigger. A schedule for the largest of
them assigns start times to a million operations; printed one operation per
line, it would fill about 20,000 pages.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1000-jobs--100-machines">1,000 jobs × 100 machines<a href="https://optalcp.com/blog/large-jobshop-instances#1000-jobs--100-machines" class="hash-link" aria-label="Direct link to 1,000 jobs × 100 machines" title="Direct link to 1,000 jobs × 100 machines" translate="no">​</a></h2>
<p>Proving optimality means more than finding a good schedule: it is a
certificate that no better schedule exists — and as far as I know, nobody had
one for these instances until now. Here are the optimal solutions found by
OptalCP 2026.4.0:</p>
<table><thead><tr><th style="text-align:center">Instance</th><th style="text-align:right">Optimum</th></tr></thead><tbody><tr><td style="text-align:center">1</td><td style="text-align:right">525,343</td></tr><tr><td style="text-align:center">2</td><td style="text-align:right">528,088</td></tr><tr><td style="text-align:center">3</td><td style="text-align:right">522,793</td></tr><tr><td style="text-align:center">4</td><td style="text-align:right">524,271</td></tr><tr><td style="text-align:center">5</td><td style="text-align:right">531,216</td></tr><tr><td style="text-align:center">6</td><td style="text-align:right">518,763</td></tr><tr><td style="text-align:center">7</td><td style="text-align:right">527,093</td></tr><tr><td style="text-align:center">8</td><td style="text-align:right">519,524</td></tr><tr><td style="text-align:center">9</td><td style="text-align:right">520,889</td></tr><tr><td style="text-align:center">10</td><td style="text-align:right">529,112</td></tr></tbody></table>
<p>And this is what one of these optimal schedules looks like — instance 5, all
100,000 operations in a single picture. Each row is one of the 100 machines,
time runs from left to right, and every colored speck is one operation,
colored by the job it belongs to:</p>
<p><img decoding="async" loading="lazy" alt="The optimal schedule of instance 5: 100 machine rows packed with 100,000 colored operations" src="https://optalcp.com/assets/images/optimal-schedule-1000x100-10d89633f9915d18e7db8805248edbb7.png" width="2400" height="800" class="img_ev3q"></p>
<p>The empty gaps are the rare moments a machine sits idle. It is guaranteed that
no schedule of these 100,000 operations finishes sooner.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="100-jobs--1000-machines">100 jobs × 1,000 machines<a href="https://optalcp.com/blog/large-jobshop-instances#100-jobs--1000-machines" class="hash-link" aria-label="Direct link to 100 jobs × 1,000 machines" title="Direct link to 100 jobs × 1,000 machines" translate="no">​</a></h2>
<p>Flip the shape — 100 jobs on 1,000 machines, still 100,000 operations each —
and the game changes: OptalCP finds good schedules, but no optimality proofs.
These instances remain open. The best makespans we found:</p>
<table><thead><tr><th style="text-align:center">Instance</th><th style="text-align:right">Best makespan</th></tr></thead><tbody><tr><td style="text-align:center">1</td><td style="text-align:right">533,080</td></tr><tr><td style="text-align:center">2</td><td style="text-align:right">538,067</td></tr><tr><td style="text-align:center">3</td><td style="text-align:right">538,757</td></tr><tr><td style="text-align:center">4</td><td style="text-align:right">534,746</td></tr><tr><td style="text-align:center">5</td><td style="text-align:right">529,580</td></tr><tr><td style="text-align:center">6</td><td style="text-align:right">534,969</td></tr><tr><td style="text-align:center">7</td><td style="text-align:right">534,974</td></tr><tr><td style="text-align:center">8</td><td style="text-align:right">535,757</td></tr><tr><td style="text-align:center">9</td><td style="text-align:right">536,993</td></tr><tr><td style="text-align:center">10</td><td style="text-align:right">529,918</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1000-jobs--1000-machines">1,000 jobs × 1,000 machines<a href="https://optalcp.com/blog/large-jobshop-instances#1000-jobs--1000-machines" class="hash-link" aria-label="Direct link to 1,000 jobs × 1,000 machines" title="Direct link to 1,000 jobs × 1,000 machines" translate="no">​</a></h2>
<p>And then the million-operation ones. For these we used a prototype setup. The
makespans we reached:</p>
<table><thead><tr><th style="text-align:center">Instance</th><th style="text-align:right">Best makespan</th></tr></thead><tbody><tr><td style="text-align:center">1</td><td style="text-align:right">811,195</td></tr><tr><td style="text-align:center">2</td><td style="text-align:right">813,044</td></tr><tr><td style="text-align:center">3</td><td style="text-align:right">811,269</td></tr><tr><td style="text-align:center">4</td><td style="text-align:right">809,549</td></tr><tr><td style="text-align:center">5</td><td style="text-align:right">811,467</td></tr><tr><td style="text-align:center">6</td><td style="text-align:right">813,117</td></tr><tr><td style="text-align:center">7</td><td style="text-align:right">809,043</td></tr><tr><td style="text-align:center">8</td><td style="text-align:right">812,442</td></tr><tr><td style="text-align:center">9</td><td style="text-align:right">810,111</td></tr><tr><td style="text-align:center">10</td><td style="text-align:right">809,421</td></tr></tbody></table>
<p>To the best of my knowledge, these are the best makespans obtained for these
instances to date. Making OptalCP solve instances of this size out of the box
is work in progress.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="thats-it">That's it<a href="https://optalcp.com/blog/large-jobshop-instances#thats-it" class="hash-link" aria-label="Direct link to That's it" title="Direct link to That's it" translate="no">​</a></h2>
<p>Just the numbers this time. But if your scheduling problem looks less like a
random matrix and more like a real factory — the same products week after
week, far more jobs than machines, constraints everywhere — that is exactly
what OptalCP is built for:
<a href="mailto:petr.vilim@optalcp.com" target="_blank" rel="noopener noreferrer" class="">get in touch</a> or head to the
<a class="" href="https://optalcp.com/docs/Quick%20Start">Quick Start</a>.</p>]]></content>
        <author>
            <name>Petr Vilím</name>
            <email>petr.vilim@optalcp.com</email>
            <uri>https://www.linkedin.com/in/petr-vil%C3%ADm-01b23252/</uri>
        </author>
    </entry>
</feed>