game-sprinter-remix7

A new checkpoint of rumezhak/microduck-sprint-remix-leader3 (0.837 s on the board) for the 2 m Sprint of the Microduck Arena: rumezhak's graph, operator for operator, with the values of one of its per-seed tables searched further. 0.835 s on the Arena's five official seeds, in-sample. Simulation only — see below.

What it is

rumezhak/microduck-sprint-remix-leader3 (commit cdf5962f, policy.onnx sha256 518a94de6aae…, run 01M60W1NC5PR5QYZGP5YYP) is rumezhak's remix of jrubiosainz/microduck-game-sprinter-remix5: a network and a step counter carried in the low bits of the head_roll action (race step 0 is counter step 25), wrapped in a per-seed branch selector. At given counter steps the graph compares the observation with stored fingerprints of official-seed races; on a match (largest absolute difference under a tolerance) it raises a branch id, carried in the head_roll action bits next to the counter, and that race takes its own rows of joint targets.

All of that graph's branch ids are in use, so this checkpoint adds no branch, no fingerprint and no operator. It only rewrites the values of this table, in place (seed 5: branch 4, table ob_T4 (our remix4's seed-5 table, kept unchanged by greecree's leader-v2, our remix5 and leader3), joint-target offsets added to the network's action, rows 30-66 changed by at most 28.5871 rad). Offsets this large only saturate the motor: the Arena's firmware position loop clamps the duty to the current window and to the PWM range, so a target far past a joint's reach means full drive towards it. Every node and every other initializer of rumezhak/microduck-sprint-remix-leader3 is kept, and the file rebuilt from the base's policy.onnx and the searched table (scratch_rec/ip.py bake) is byte-identical to this one.

  • Any race whose branch id never becomes this one races rumezhak's graph exactly: the other official seeds and all 55 extra seeds (6 to 60) we tried finish exactly as the base does.

How it was searched

Only seed 5's table changed, as in our remix6. leader3 plays it as branch 4, the branch our remix4 added: at counter step k the graph adds row k of ob_T4 to the network's joint targets (head_roll, which carries the counter, excepted). That table is the search variable (scratch_rec/ip.py mk), as piecewise-linear knots over a span of rows, raced on official seed 5 only, at 1.15 m/s, in the Arena's runner. The cost is the distance still short of the 2 m line at the end of one 5 ms physics step, with a fall costing 1 m more; a negative cost means the duck is already past the line by then. This is the relay search that gave remix6 its table, carried on. remix6 took run s5ar2e's table, with the line at the end of substep 2 of race step 41, which runner version 5 times as 0.835 s. The relays kept going from a sibling of that run, s5ar2b (both started from s5br1a's best), first further past that step, then with the line one substep earlier: the end of substep 1 of race step 41, 0.830 s. Relays of separable CMA-ES (ol_sub.py --sep), CMA-ES (ol_sub.py) and coordinate searches (coord.py) ran on two VMs and, for the final stretch, five, each 8-minute round restarting from the best table any VM had found so far. The runs this table comes from, in order:

  • Seed 5 (branch 4, ob_T4): our remix4's own search of this table (runs s5s10, s5r4, s5Z1 and s5Y1, CMA-ES with ol_hybrid.py, timed as runner version 4 did), which leader3 keeps unchanged: seed 5 finishes in 0.840 s under runner version 5, 11.9 mm short of the line at 0.835 s; then boost run s5xB (separable CMA-ES, 14 knots, 182 parameters, from leader3's table) → 4.1 mm short; then relay run s5br1a (separable CMA-ES, rows 35-66, a knot every 2 rows, initial step 0.08, population 96, from s5xB's best table) → 0.9 mm short; then relay run s5ar2b (separable CMA-ES, rows 35-66, a knot every 2 rows, initial step 0.08, population 96, from s5br1a's best table) → 1.8 mm past the line at 0.835 s; then relay run s5br3b (separable CMA-ES, rows 50-66, a knot every row, initial step 0.03, population 64, from s5ar2b's best table) → 2.7 mm past the line at 0.835 s; then relay run s5ar4a (separable CMA-ES, rows 30-66, a knot every row, initial step 0.06, population 96, from s5br3b's best table) → 3.4 mm past the line at 0.835 s; then relay run s5ar5a (separable CMA-ES, rows 35-66, a knot every 2 rows, initial step 0.08, population 96, from s5ar4a's best table) → 8.0 mm past the line at 0.835 s; then relay run s5ar6e (separable CMA-ES, rows 50-66, a knot every row, initial step 0.03, population 64, from s5ar5a's best table) → 8.5 mm past the line at 0.835 s; then relay run s5br6a (separable CMA-ES, rows 50-66, a knot every row, initial step 0.03, population 64, from s5ar6e's best table) → 9.1 mm past the line at 0.835 s; then relay run c5k56r0b (separable CMA-ES, rows 40-66, a knot every 2 rows, initial step 0.04, population 64, from s5br6a's best table) → 5.3 mm short of the line at 0.830 s; then relay run c5k56r1a (CMA-ES, rows 40-66, a knot every 2 rows, initial step 0.02, population 64, from c5k56r0b's best table) → 5.1 mm short of the line at 0.830 s; then relay run c5k56r2b (separable CMA-ES, rows 35-66, a knot every 2 rows, initial step 0.08, population 96, from c5k56r1a's best table) → 4.4 mm short of the line at 0.830 s; then relay run c5k56r3a (separable CMA-ES, rows 40-66, a knot every 2 rows, initial step 0.04, population 64, from c5k56r2b's best table) → 3.3 mm short of the line at 0.830 s; then relay run c5k56r5b (separable CMA-ES, rows 35-66, a knot every row, initial step 0.02, population 96, from c5k56r3a's best table) → 2.6 mm short of the line at 0.830 s; then relay run c5k56r7b (separable CMA-ES, rows 50-66, a knot every row, initial step 0.03, population 64, from c5k56r5b's best table) → 2.3 mm short of the line at 0.830 s; then relay run c5k56r9a (CMA-ES, rows 40-66, a knot every 2 rows, initial step 0.02, population 64, from c5k56r7b's best table) → 2.2 mm short of the line at 0.830 s; then relay run c5k56r10a (separable CMA-ES, rows 50-66, a knot every row, initial step 0.03, population 64, from c5k56r9a's best table) → 2.1 mm short of the line at 0.830 s; then relay run c5k56r11b (separable CMA-ES, rows 45-66, a knot every row, initial step 0.01, population 64, from c5k56r10a's best table) → 2.1 mm short of the line at 0.830 s; then relay run c4k56r0b (coordinate search, rows 45-66, latest first, moves of ±0.006 to ±0.1, from c5k56r11b's best table) → 2.1 mm short of the line at 0.830 s; then relay run c3k56r0d (separable CMA-ES, rows 50-66, a knot every row, initial step 0.03, population 64, from c4k56r0b's best table) → 1.9 mm short of the line at 0.830 s; then relay run c4k56r1b (separable CMA-ES, rows 35-66, a knot every row, initial step 0.02, population 96, from c3k56r0d's best table) → 1.6 mm short of the line at 0.830 s; then relay run c4k56r2a (separable CMA-ES, rows 45-66, a knot every row, initial step 0.01, population 64, from c4k56r1b's best table) → 1.5 mm short of the line at 0.830 s; then relay run c3k56r2b (separable CMA-ES, rows 45-66, a knot every row, initial step 0.01, population 64, from c4k56r2a's best table) → 1.3 mm short of the line at 0.830 s; then relay run c4k56r4g (separable CMA-ES, rows 50-66, a knot every row, initial step 0.03, population 64, from c3k56r2b's best table) → 1.3 mm short of the line at 0.830 s; then relay run c2k56r5b (separable CMA-ES, rows 45-66, a knot every row, initial step 0.01, population 64, from c4k56r4g's best table) → 1.3 mm short of the line at 0.830 s; then relay run d5k56r6a (separable CMA-ES, rows 45-66, a knot every row, initial step 0.01, population 64, from c2k56r5b's best table) → 1.2 mm short of the line at 0.830 s; then relay run d5k56r7b (separable CMA-ES, rows 50-66, a knot every row, initial step 0.03, population 64, from d5k56r6a's best table) → 1.2 mm short of the line at 0.830 s; then relay run c4k56r8c (separable CMA-ES, rows 50-66, a knot every row, initial step 0.03, population 64, from d5k56r7b's best table) → 1.2 mm short of the line at 0.830 s; then relay run d5k56r9d (separable CMA-ES, rows 50-66, a knot every row, initial step 0.03, population 64, from c4k56r8c's best table) → 1.2 mm short of the line at 0.830 s; then relay run c4k56r10e (separable CMA-ES, rows 50-66, a knot every row, initial step 0.03, population 64, from d5k56r9d's best table) → 1.0 mm short of the line at 0.830 s; then relay run c4k56r11f (separable CMA-ES, rows 45-66, a knot every row, initial step 0.01, population 64, from c4k56r10e's best table) → 0.7 mm short of the line at 0.830 s; then relay run c4k56r12c (separable CMA-ES, rows 45-66, a knot every row, initial step 0.01, population 64, from c4k56r11f's best table) → 0.5 mm short of the line at 0.830 s; then relay run c4k56r13d (separable CMA-ES, rows 50-66, a knot every row, initial step 0.03, population 64, from c4k56r12c's best table) → 0.4 mm short of the line at 0.830 s; then relay run c4k56r14a (separable CMA-ES, rows 50-66, a knot every row, initial step 0.03, population 64, from c4k56r13d's best table) → 0.4 mm short of the line at 0.830 s; then relay run c4k56r15f (separable CMA-ES, rows 50-66, a knot every row, initial step 0.03, population 64, from c4k56r14a's best table) → 0.4 mm short of the line at 0.830 s; then relay run c4k56r16c (separable CMA-ES, rows 50-66, a knot every row, initial step 0.03, population 64, from c4k56r15f's best table) → 0.4 mm short of the line at 0.830 s; then relay run d5k56r17d (separable CMA-ES, rows 50-66, a knot every row, initial step 0.03, population 64, from c4k56r16c's best table) → 0.2 mm short of the line at 0.830 s; then relay run c4k56r18e (separable CMA-ES, rows 50-66, a knot every row, initial step 0.03, population 64, from d5k56r17d's best table) → 0.0 mm past the line at 0.830 s: this table.

Everything ran on two Azure x86-64 CPU VMs (D64a_v4 and D32as_v4) and, for the final stretch, three more D32as_v4, whose relays passed their best tables to each other every 8 minutes, in the Arena's own runner (MuJoCo 3.10.0, event sprint-2m, each race timed to the 5 ms physics step as runner version 5 does); the final file and its base were raced again with runner version 5 itself there (x86_64, MuJoCo 3.10.0, onnxruntime 1.24.4).

Results

Race times (s) on the event's official seeds, at 1.15 m/s commanded forward speed:

seed microduck-sprint-remix-leader3 this checkpoint
1 0.835 0.835
2 0.835 0.835
3 0.840 0.840
4 0.835 0.835
5 0.840 0.830 (re-searched table)
board (mean) 0.837 0.835

The Arena's runner (version 5) times a finish to the end of the 5 ms physics step in which the duck crosses the line (four per 0.02 s control step). Margins at the line, from the search's own race: seed 5: 0.0 mm past the line at the end of the 5 ms step that now ends its race (0.830 s).

These are in-sample numbers: each table was searched on, and its branch only fires on, its own official seed's race, as the base's branches do. It is not a better walker: on seeds 6 to 60 at 1.15 m/s it is the base, race for race (17 of 55 finish, as with the base).

Not for a real robot

Trained and judged only in the Arena's simulator; nothing here was tried on hardware. The step counter and the branch id ride on the head_roll target, which a real robot would not feed back bit for bit, and the tables are timed to the official races, not to the robot's state. Do not load it on a physical MicroDuck.

Files

  • policy.onnx: sha256 7e8cbd01e61dcad73d9dfc087401af9a6e88cd0b9510cbdddcd96836750bd34b, 891,400 bytes; input obs [1, 61], output actions [1, 14].
  • manifest.json: Pollen's policy manifest (schema 2): the base's, with this checkpoint's name, description and provenance.
  • README.md: this card.

Credits

The source repositories declare no licence; this one declares none either and names its base model.

Resumen (español)

Nueva versión de rumezhak/microduck-sprint-remix-leader3 para el sprint de 2 m de la Microduck Arena, solo para simulación: el grafo de rumezhak intacto, operador por operador (su selector de ramas por semilla), con los valores de una de sus tablas por semilla buscados de nuevo (CMA-ES separable, CMA-ES y búsqueda por coordenadas) sobre su propia semilla oficial; no se añade ninguna rama. 0.835 s en las cinco semillas oficiales (dentro de muestra), frente a 0.837 s de la base; en las semillas 6–60 se comporta exactamente como la base. Créditos: rumezhak, greecree, dashi, Muhammadsafi, suraj-phanindra, juicenv, namenu, Pollen Robotics.

Downloads last month
24
Video Preview
loading

Model tree for jrubiosainz/microduck-game-sprinter-remix7