Beep Beep!

RoadRunner dense-S MTP β€” a negative result, published as one

12,986-parameter learned A* heuristic + multi-token (multi-hop) draft heads for Western Australia road routing β€” with the full measured frontier, including everything that didn't work. If you came for "NN beats A*": it doesn't, and this card shows exactly where and why.

Bottom line

setup gap mean/p90 exp vs vanilla end-to-end ms
vanilla euc A* 0 / 0 1.0Γ— ~21.5
dense-S fwd (crown) 1.5% / 4.5% 0.66Γ— ~19–25
dense-S guided-bidir 2.5% / 7.6% 0.31Γ— ~14.5 (best small-gap point)
regime-S fwd (accuracy crown) 0.78% / 1.8% 0.97Γ— ~25
greedy MTP rollout 10.4% / 25% β€” 22.4, 0/195 pure (parked)
XS 4k-param probe 4.2% / 11.9% 3.17Γ— 42 (rejected)
learned MoE routing 5.8% / 17% 1.06Γ— β€” (collapsed, parked)

Locked objective was path ≀ 1.01Γ— optimal and faster than vanilla single-query. That cell is still empty after dense/regime Γ— fwd/bidir Γ— w-sweep Γ— admissibility-tune. Banked wins: 1.5Γ— amortized throughput (many queries/target), 2.1Γ— fewer expansions via guided-bidir.

Files

  • roadrunner-dense-s-mtp.onnx (52KB, FP32, opset 18, dynamic batch) β€” inputs (xc[B,17] float32, cls[B] int64) β†’ (r[B], mtp[B,3,3], q[B,16]). h = euc + r*(euc+300), euc_s = hav_km/110*3600. FP32, not BF16: trained BF16-autocast, but ORT CPU BF16 is spotty and at 13KB precision is not the bottleneck. ORT↔torch parity ~5e-5.
  • samples.npz (256 val positions: feats, torch refs, truth next/hops, 1-hop + capped-8 2-hop neighbourhood, projection weights) + meta.json.
  • demo_mtp.py β€” numpy+ORT only. Replays pointer + MTP drafts on the bundle.

Quickstart

pip install onnxruntime numpy
python demo_mtp.py   # needs only the .onnx + samples.npz in this folder

How MTP works here (and its honest limits)

Heads k=2,3,4 predict polar (sin,cos,logdist) of nodes 2–4 ahead, trained discriminatively (CE over the base node's real neighbours by polar distance β€” not global regression). Measured on the bundle: pointer acc 0.80, k2 snap-accept 137/256 forced vs 114/206 chained, mean accept 1.44 teacher-forced (repo sim_mtp.py).

Two findings worth knowing before you build on this:

  1. The heads are distance-uncalibrated by design. CE only needs ranking, so logdist parks at ~11 (β‰ˆ90,000 km vs ~0.5 km truth). All signal is in the angle (30Β° mean err vs 90Β° chance); the snap decode ranks by angular alignment. Do not read the vectors as displacements.
  2. Teacher-forced accept β‰  rollout stability. 0.75 pointer acc compounds (0.75^174 β‰ˆ 0): greedy rollout reached the target on 0/195 val ODs (repo rollout.py). MTP's remaining form is subgoal jumps with exact fill, not free rollout.

Reproduce everything

Code + docs repo runs the full chain (parse β†’ simplify β†’ engine checks β†’ 100k-OD teacher β†’ train β†’ val): see ARCHITECTURE.md there. Key scripts: data/export_onnx.py (this bundle), data/rollout.py, data/bench_bidir.py, src/train.py --freeze-base (MTP-head-only training that kept the crown).

Provenance / license note

Weights + demo + card in this repo: MIT. Road topology: Geofabrik WA OSM extract (ODbL β€” attribution retained above; derived graph/teacher data inherits share-alike, see source repo). Attribute side-data: Main Roads WA (CC-BY-4.0). Model code: see repo license.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support