Competition standings
ferroplan measures itself against three International Planning
Competitions — IPC-5 (2006), IPC-6 (2008), and IPC-7
(2011) — every deterministic satisficing track, swept at standard
budgets (60 s classical / 30 s temporal, three concurrent jobs) with
every reported plan externally validated by
VAL. The tables below are
GENERATED (python3 benchmarks/standings.py) from the raw
per-instance sweep logs and are refreshed against the final binary at
every release cut — scoreboards defend themselves.
Two kinds of honesty markers appear throughout:
- Reference-scored means scored against the official competition
field. The IPC-5 preference boards are scored from the vendored
official results archive (
benchmarks/IPC5-results.tgz— seebenchmarks/ATTRIBUTION.mdfor provenance): per-instanceMetricValues of SGPlan5, HPlan-P, MIPS-XXL, MIPS-BDD and the rest of the 2006 field. The headline there: ferroplan beats SGPlan5 — the track winner — 24W/4T/10L on the qualitative suite, winning rovers, storage, and tpp outright and splitting openstacks (the graft's first pass, scored against a stale 0.8-era ledger, read 12/3/23 — the correction narrative is on the board). The IPC-5 propositional track is quality-scored by plan length against the archive field. - Coverage-only means no aligned reference exists yet: either no official per-instance archive is vendored (IPC-6/7), or the runner does not record the track's quality currency (makespan for the 2006 time tracks — a named runner debt).
Failure classes are counted per unsolved instance: timeout (budget
exhausted), mem-cap (address-space cap hit — environmental, tracked
separately from engine verdicts), engine-reject/error (instant
rejection — feature gaps such as the four timed modal operators land
here, by name), and search (died mid-flight before budget).
Optimal tracks are out of scope by design — ferroplan is a satisficing planner — and the tables say so explicitly rather than by omission. The IPC-7 sequential multi-core track is entered under its competition rule (wall-clock with all cores; per-thread-count determinism still holds) on the sweep box's 4 cores, with the t8 row marked as oversubscribed.
IPC standings — the one honest table per competition
Generated by python3 benchmarks/standings.py (do not hand-edit;
regenerate after any sweep). Raw inputs are the per-instance JSONLs
and the vendored official IPC-5 archive — see the module docstring
for scoring semantics and the failure-class definitions.
IPC-5 (2006)
| track | entered | coverage | quality | failure classes |
|---|---|---|---|---|
| propositional | yes | 369/450 | len vs best-of-field: 49W/42T/180L, mean quality 0.90 (271 scored) | 81 timeout |
| time | yes | 77/130 | makespan vs best-of-field: 27W/3T/47L, mean quality 0.80 (77 scored) | 53 timeout |
| metric-time | yes | 54/200 | makespan vs best-of-field: 43W/1T/10L, mean quality 0.94 (54 scored) | 17 early-exit, 129 timeout |
| constraints | yes | 28/120 | coverage-only (timed modal ops rejected by name) | 18 early-exit, 74 timeout, 10 solved VAL-unavailable (engine-oracle only; see benchmarks/val-availability.py) |
| simple-preferences (full corpus) | sweep in flight / not yet run | — | — | — |
| qualitative-preferences (full corpus) | sweep in flight / not yet run | — | — | — |
| complex-preferences (full corpus) | sweep in flight / not yet run | — | — | — |
| simple-preferences | yes | see board | reference-scored — ipc5-scoreboard.md | — |
| qualitative-preferences | yes | see board | reference-scored — ipc5-qualitative-scoreboard.md (24W/4T/10L vs SGPlan5 — ahead of the winner; rovers/storage/tpp won outright) | — |
| complex-preferences | no (modal operators rejected by name) | — | — | feature gap, on the deferred list |
IPC-6 (2008)
| track | entered | coverage | quality | failure classes |
|---|---|---|---|---|
| seq-sat | yes | 286/300 | coverage + VAL (no official per-instance archive vendored) | 14 timeout |
| tempo-sat | yes | 305/390 | coverage + VAL (no official per-instance archive vendored) | 6 mem-cap, 79 timeout |
| net-benefit | yes | 248/270 | coverage + VAL (no official per-instance archive vendored) | 1 mem-cap, 21 timeout |
| seq-opt | yes (first entry, 0.19 — Mode::Optimal) | 153/270 | coverage = PROOF RATE (A* + admissible LM-cut, h^max sprint first; every plan certified + VAL) | 117 timeout |
| tempo-opt | out of scope by design (satisficing temporal path) | — | — | — |
IPC-7 (2011)
| track | entered | coverage | quality | failure classes |
|---|---|---|---|---|
| seq-sat | yes | 218/280 | coverage + VAL | 62 timeout |
| tempo-sat | yes | 132/240 | coverage + VAL | 7 mem-cap, 101 timeout |
| seq-mco t2 | yes (first entry, 0.16) | 230/280 | wall-clock per competition rule (--threads N, one instance at a time; 4P+6E box — t8 oversubscribed by construction) | 50 timeout |
| seq-mco t4 | yes (first entry, 0.16) | 237/280 | wall-clock per competition rule (--threads N, one instance at a time; 4P+6E box — t8 oversubscribed by construction) | 43 timeout |
| seq-mco t8 | yes (first entry, 0.16) | 240/280 | wall-clock per competition rule (--threads N, one instance at a time; 4P+6E box — t8 oversubscribed by construction) | 1 mem-cap, 39 timeout |
| seq-opt | yes (first entry, 0.19 — Mode::Optimal) | 134/280 | coverage = PROOF RATE (A* + admissible LM-cut, h^max sprint first; every plan certified + VAL) | 146 timeout |
The modern corpora (IPC 2014 / 2018 / 2023 — first entered 0.17)
| track | entered | coverage | quality | failure classes |
|---|---|---|---|---|
| 2014 seq-sat | yes (first entry, 0.17) | 149/280 | coverage + VAL | 2 mem-cap, 129 timeout |
| 2014 seq-agile | yes (first entry, 0.17) | 146/280 | coverage + VAL | 1 mem-cap, 133 timeout |
| 2014 tempo-sat | yes (first entry, 0.17) | 74/200 | coverage + VAL | 1 mem-cap, 125 timeout |
| 2014 seq-mco t2 | sweep in flight / not yet run | — | — | — |
| 2014 seq-mco t4 | yes (first entry, 0.17) | 163/280 | wall-clock per competition rule (--threads 4, one instance at a time; 4P+6E box) | 2 early-exit, 1 mem-cap, 114 timeout |
| 2014 seq-mco t8 | sweep in flight / not yet run | — | — | — |
| 2014 seq-opt | yes (first entry, 0.19) | 77/256 | coverage = PROOF RATE (Mode::Optimal, A* + admissible LM-cut, h^max sprint first; every plan certified + VAL) | 179 timeout |
| 2018 seq-sat | yes (first entry, 0.17) | 82/240 | vs best-known bounds: 0W/1T/28L, mean quality 0.77 (29 scored) | 6 mem-cap, 152 timeout, 9 solved VAL-unavailable (engine-oracle only; see benchmarks/val-availability.py) |
| 2018 seq-opt | sweep in flight / not yet run | — | — | — |
| 2023 classical | yes (first entry, 0.17) | 37/140 | vs best-known bounds: 0W/12T/25L, mean quality 0.79 (37 scored) | 1 mem-cap, 102 timeout |
| 2023 seq-sat | sweep in flight / not yet run | — | — | — |
| 2023 seq-opt | sweep in flight / not yet run | — | — | — |
| 2023 agile ENTRY (300s) | yes (OFFICIAL-BUDGET entry, 0.19) | 52/140 | OFFICIAL 300 s budget — a competition-methodology ENTRY, not a baseline | 2 engine-reject/error, 13 mem-cap, 73 timeout |
| 2023 numeric | yes (first entry, 0.17) | 251/400 | field CSVs vendored (ipc-2023n/results) — per-domain comparison in the audit record | 6 early-exit, 1 engine-reject/error, 1 mem-cap, 141 timeout, 37 solved VAL-unavailable (engine-oracle only; see benchmarks/val-availability.py) |
| 2023 numeric-opt | sweep in flight / not yet run | — | — | — |
| 2026 numeric (first board) | yes (FIRST ENTRY, 0.20 — new corpus) | 217/320 | coverage + VAL; the corpus ships -sat/-opt domain PAIRS, all swept satisficing-style on this first board | 103 timeout, 10 solved VAL-unavailable (engine-oracle only; see benchmarks/val-availability.py) |
| 2026 numeric-opt | yes (FIRST ENTRY, 0.21 — the -opt pairs, ⚖️) | 22/60 | coverage = PROOF RATE (Mode::Optimal over the three -opt pairs; LENGTH optima — the vendored corpus carries no active :metric; every certificate VAL-checked) | 11 early-exit, 27 timeout |
| 2026 numeric-opt FULL | sweep in flight / not yet run | — | — | — |
The 2023 classical corpus is swept on its agile instances at the standard 60 s satisficing budget (the competition's agile budget is 300 s — these rows are BASELINES, marked as such, not competition entries).
Reading the boards
benchmarks/ipc5-scoreboard.md— IPC-5 simple preferences, ferroplan vs the official field.benchmarks/ipc5-qualitative-scoreboard.md— IPC-5 qualitative preferences, reference-grafted with the full W/T/L accounting.benchmarks/ipc67-results.md/benchmarks/ipc67-temporal.md/benchmarks/ipc67-netben.md— the standing IPC-6/7 scoreboards (seq-sat, tempo-sat, net-benefit), per-variant.benchmarks/ipc5-prop.mdand siblings (ipc5-time,ipc5-metric-time,ipc5-constraints) — the 2006 deterministic-track sweeps, first entered in 0.16.benchmarks/ipc7-mco-t{2,4,8}.md— the multi-core rows.
Per-cycle history (what moved and why, cut by cut) lives in the
docs/roadmap-0.*.md records; this chapter is always the CURRENT
standing.