Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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 — see benchmarks/ATTRIBUTION.md for provenance): per-instance MetricValues 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)

trackenteredcoveragequalityfailure classes
propositionalyes369/450len vs best-of-field: 49W/42T/180L, mean quality 0.90 (271 scored)81 timeout
timeyes77/130makespan vs best-of-field: 27W/3T/47L, mean quality 0.80 (77 scored)53 timeout
metric-timeyes54/200makespan vs best-of-field: 43W/1T/10L, mean quality 0.94 (54 scored)17 early-exit, 129 timeout
constraintsyes28/120coverage-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-preferencesyessee boardreference-scored — ipc5-scoreboard.md
qualitative-preferencesyessee boardreference-scored — ipc5-qualitative-scoreboard.md (24W/4T/10L vs SGPlan5 — ahead of the winner; rovers/storage/tpp won outright)
complex-preferencesno (modal operators rejected by name)feature gap, on the deferred list

IPC-6 (2008)

trackenteredcoveragequalityfailure classes
seq-satyes286/300coverage + VAL (no official per-instance archive vendored)14 timeout
tempo-satyes305/390coverage + VAL (no official per-instance archive vendored)6 mem-cap, 79 timeout
net-benefityes248/270coverage + VAL (no official per-instance archive vendored)1 mem-cap, 21 timeout
seq-optyes (first entry, 0.19 — Mode::Optimal)153/270coverage = PROOF RATE (A* + admissible LM-cut, h^max sprint first; every plan certified + VAL)117 timeout
tempo-optout of scope by design (satisficing temporal path)

IPC-7 (2011)

trackenteredcoveragequalityfailure classes
seq-satyes218/280coverage + VAL62 timeout
tempo-satyes132/240coverage + VAL7 mem-cap, 101 timeout
seq-mco t2yes (first entry, 0.16)230/280wall-clock per competition rule (--threads N, one instance at a time; 4P+6E box — t8 oversubscribed by construction)50 timeout
seq-mco t4yes (first entry, 0.16)237/280wall-clock per competition rule (--threads N, one instance at a time; 4P+6E box — t8 oversubscribed by construction)43 timeout
seq-mco t8yes (first entry, 0.16)240/280wall-clock per competition rule (--threads N, one instance at a time; 4P+6E box — t8 oversubscribed by construction)1 mem-cap, 39 timeout
seq-optyes (first entry, 0.19 — Mode::Optimal)134/280coverage = 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)

trackenteredcoveragequalityfailure classes
2014 seq-satyes (first entry, 0.17)149/280coverage + VAL2 mem-cap, 129 timeout
2014 seq-agileyes (first entry, 0.17)146/280coverage + VAL1 mem-cap, 133 timeout
2014 tempo-satyes (first entry, 0.17)74/200coverage + VAL1 mem-cap, 125 timeout
2014 seq-mco t2sweep in flight / not yet run
2014 seq-mco t4yes (first entry, 0.17)163/280wall-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 t8sweep in flight / not yet run
2014 seq-optyes (first entry, 0.19)77/256coverage = PROOF RATE (Mode::Optimal, A* + admissible LM-cut, h^max sprint first; every plan certified + VAL)179 timeout
2018 seq-satyes (first entry, 0.17)82/240vs 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-optsweep in flight / not yet run
2023 classicalyes (first entry, 0.17)37/140vs best-known bounds: 0W/12T/25L, mean quality 0.79 (37 scored)1 mem-cap, 102 timeout
2023 seq-satsweep in flight / not yet run
2023 seq-optsweep in flight / not yet run
2023 agile ENTRY (300s)yes (OFFICIAL-BUDGET entry, 0.19)52/140OFFICIAL 300 s budget — a competition-methodology ENTRY, not a baseline2 engine-reject/error, 13 mem-cap, 73 timeout
2023 numericyes (first entry, 0.17)251/400field CSVs vendored (ipc-2023n/results) — per-domain comparison in the audit record6 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-optsweep in flight / not yet run
2026 numeric (first board)yes (FIRST ENTRY, 0.20 — new corpus)217/320coverage + VAL; the corpus ships -sat/-opt domain PAIRS, all swept satisficing-style on this first board103 timeout, 10 solved VAL-unavailable (engine-oracle only; see benchmarks/val-availability.py)
2026 numeric-optyes (FIRST ENTRY, 0.21 — the -opt pairs, ⚖️)22/60coverage = 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 FULLsweep 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

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.