game-roller-remix9

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

What it is

rumezhak/microduck-roller-remix-leader (commit a9a3edee, policy.onnx sha256 574ef08f6ceb…, run 01M5ZKAWQD5707F9FYG87Y) is rumezhak's remix of jrubiosainz/microduck-game-roller-remix8: 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 these tables, in place (seed 5: branch 6, table OURS_T, joint-target offsets added to the network's action, rows 30-69 changed by at most 17.5245 rad; seed 3: branch 3, table ob_T3, joint-target offsets added to the network's action, rows 30-69 changed by at most 73.9368 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-roller-remix-leader is kept, and the file rebuilt from the base's policy.onnx and the searched tables (scratch_rec/ip.py bake) is byte-identical to this one.

  • Any race whose branch id never becomes one of these 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

Each table was turned into the search variable (scratch_rec/ip.py mk) and raced on its own official seed only, at 0.7 m/s, through the full graph. The cost is how far the duck still is from the 2 m line at the end of the 5 ms physics step that would give the next lower time (substep 2 of race step 44: the line by 0.895 s instead of 0.900 s; once past that, substep 1 of race step 44: the line by 0.890 s), negative once past it; a fall costs 1 m more. Three kinds of search change the table (the joint-target offsets of the 13 joints other than head_roll, on a window of counter steps): CMA-ES on a piecewise-linear change with knots every 1 to 3 rows (ol_sub.py), a greedy coordinate search moving one entry at a time (coord.py), and finite-difference descent (fdsub.py, step 0.003). They ran as relays: every 6 minutes a relay kept its leading run, stopped the others and started new ones of other kinds, from the best table found so far on any VM. The chain of hand-offs that led to each table:

  • Seed 5 (branch 6, OURS_T): from the base's own table, 13.0 mm short of the line at the end of that step: CMA-ES run r9s5br0a (rows 55-69, knots every row, initial step 0.02, population 64) → 4.2 mm short; then CMA-ES r9s5br1b (rows 40-69, knots every 2 rows, step 0.02, population 64) → 1.0 mm past the line; then coordinate search r9s5cr0b (rows 50-69, latest first, moves of ±0.006 to ±0.1) → 2.3 mm past; then coordinate search r9s5br3a (rows 35-69, random order, moves of ±0.02 to ±1.5) → 3.2 mm past; then CMA-ES r9s5cr1b (rows 55-69, knots every row, step 0.02, population 64) → 4.0 mm past; then coordinate search r9s5br4b (rows 50-69, latest first, moves of ±0.006 to ±0.1) → 4.3 mm past; then CMA-ES r9s5cr2a (rows 45-69, knots every 2 rows, step 0.04, population 96, 699 generations) → 6.4 mm past the line by 0.895 s; then that table aimed one 5 ms step earlier (the line by 0.890 s, which it missed by 8.0 mm): coordinate search r9s6er0b (rows 50-69, latest first, moves of ±0.006 to ±0.1) → 7.8 mm short; then CMA-ES r9s6gr0a (rows 55-69, knots every row, step 0.02, population 64) → 6.6 mm short; then coordinate search r9s6gr1a (rows 55-69, latest first, moves of ±0.25 to ±3) → 6.4 mm short; then CMA-ES r9s6gr2c (rows 55-69, knots every row, step 0.02, population 64) → 5.8 mm short; then coordinate search r9s6gr4b (rows 50-69, latest first, moves of ±0.006 to ±0.1) → 5.8 mm short; then CMA-ES r9s6hr4a (rows 45-69, knots every 2 rows, step 0.04, population 96) → 4.4 mm short; then CMA-ES r9s6hr6a (rows 55-69, knots every row, step 0.02, population 64) → 3.7 mm short; then coordinate search r9s6hr7a (rows 55-69, latest first, moves of ±0.25 to ±3) → 3.4 mm short; then finite differences r9s6hr8b (rows 50-69, knots every row) → 3.4 mm short; then CMA-ES r9s6mr0b (rows 45-69, knots every 2 rows, step 0.04, population 96) → 2.2 mm short; then finite differences r9s6mr2a (rows 50-69, knots every row) → 2.2 mm short; then CMA-ES r9s6nr2b (rows 30-69, knots every 3 rows, step 0.03, population 64) → 1.0 mm short; then coordinate search r9s6gr11a (rows 35-69, random order, moves of ±0.02 to ±1.5) → 3.3 mm past the line; then coordinate search r9s6mr3b (rows 55-69, latest first, moves of ±0.25 to ±3) → 3.4 mm past; then CMA-ES r9s6nr3a (rows 55-69, knots every row, step 0.02, population 64) → 4.8 mm past; then CMA-ES r9s6gr12a (rows 40-69, knots every 2 rows, step 0.02, population 64) → 8.0 mm past; then CMA-ES r9s6gr13b (rows 55-69, knots every row, step 0.02, population 64, 366 generations) → 8.4 mm past the line by 0.890 s, this table.
  • Seed 3 (branch 3, ob_T3): from the base's own table, 12.5 mm short of the line at the end of that step: CMA-ES run r9s3ar0a (rows 40-69, knots every 2 rows, initial step 0.02, population 64) → 7.7 mm short; then finite differences r9s3ar1a (rows 50-69, knots every row) → 4.2 mm short; then CMA-ES r9s3dr0c (rows 45-69, knots every 2 rows, step 0.04, population 96) → 1.7 mm short; then coordinate search r9s3dr1a (rows 55-69, latest first, moves of ±0.25 to ±3) → 0.5 mm short; then CMA-ES r9s3ar4a (rows 55-69, knots every row, step 0.02, population 64) → 1.9 mm past the line; then coordinate search r9s3dr3a (rows 35-69, random order, moves of ±0.02 to ±1.5) → 2.1 mm past; then CMA-ES r9s3fr0a (rows 40-69, knots every 2 rows, step 0.02, population 64) → 2.9 mm past; then CMA-ES r9s3fr1b (rows 55-69, knots every row, step 0.02, population 64) → 4.0 mm past; then CMA-ES r9s3gr2c (rows 55-69, knots every row, step 0.02, population 64, 1512 generations) → 4.3 mm past the line by 0.895 s; then that table aimed one 5 ms step earlier (the line by 0.890 s, which it missed by 10.1 mm): CMA-ES r9s7kr0c (rows 45-69, knots every 2 rows, step 0.04, population 96) → 9.9 mm short; then CMA-ES r9s7jr1b (rows 55-69, knots every row, step 0.02, population 64) → 9.0 mm short; then CMA-ES r9s7kr2a (rows 30-69, knots every 3 rows, step 0.03, population 64) → 7.3 mm short; then CMA-ES r9s7kr3b (rows 45-69, knots every 2 rows, step 0.04, population 96) → 0.9 mm past the line; then CMA-ES r9s7kr5b (rows 55-69, knots every row, step 0.02, population 64) → 1.9 mm past; then coordinate search r9s7kr6b (rows 55-69, latest first, moves of ±0.25 to ±3) → 2.6 mm past; then CMA-ES r9s7mr2b (rows 55-69, knots every row, step 0.02, population 64) → 3.0 mm past; then CMA-ES r9s7mr3a (rows 45-69, knots every 2 rows, step 0.04, population 96) → 3.4 mm past; then CMA-ES r9s7jr9b (rows 55-69, knots every row, step 0.02, population 64, 1540 generations) → 4.4 mm past the line by 0.890 s, this table.

Everything ran on four Azure x86-64 CPU VMs (D32as_v4) whose relays passed their best tables to each other every 6 minutes, in the Arena's own runner (MuJoCo 3.10.0, event roller-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 0.7 m/s commanded forward speed:

seed microduck-roller-remix-leader this checkpoint
1 0.895 0.895
2 0.880 0.880
3 0.900 0.890 (re-searched table)
4 0.900 0.900
5 0.900 0.890 (re-searched table)
board (mean) 0.895 0.891

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 3: 4.4 mm past the line at the end of the 5 ms step that now ends its race (0.890 s); seed 5: 8.4 mm past the line at the end of the 5 ms step that now ends its race (0.890 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 0.7 m/s it is the base, race for race (28 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 bc8643b56871c03d7f9c659112ad36212bb0cee8e9758f2efbd164863a4e06d2, 925,260 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-roller-remix-leader para el sprint de 2 m sobre patines 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 dos de sus tablas por semilla buscados de nuevo (CMA-ES, búsqueda por coordenadas y diferencias finitas) sobre su propia semilla oficial; no se añade ninguna rama. 0.891 s en las cinco semillas oficiales (dentro de muestra), frente a 0.895 s de la base; en las semillas 6–60 se comporta exactamente como la base. Créditos: rumezhak, dashi, DenRakEiw, austindixson, Muhammadsafi, suraj-phanindra, juicenv, namenu, Pollen Robotics.

Downloads last month
30
Video Preview
loading

Model tree for jrubiosainz/microduck-game-roller-remix9