game-sprinter-remix3

A new checkpoint of Muhammadsafi/microduck-sprint-cpu-remix (0.860 s on the board) for the 2 m Sprint of the Microduck Arena: the same network and the same step counter, with that entry's joint-target table re-timed from race step 20 on. 0.856 s on the Arena's five official seeds, in-sample. Simulation only — see below.

What it is

Muhammadsafi/microduck-sprint-cpu-remix (commit 5caf04da, policy.onnx sha256 a08400cd3d3b…, run 01M54JC6NCY4PY9Y2RGHWH) is Muhammadsafi's CPU remix of jrubiosainz/microduck-game-sprinter-remix2 (a 30-minute CPU search: CMA-ES on joint and command offsets, PGPE/ClipUp, and sparse hill climbing on the network's final layer, which moved 46 of that layer's 1,806 weights and biases by at most 1.3e-5): a network (suraj-phanindra/microduck-sprint-hc5-aifund's, but for those 46 values) inside a graph that counts control steps in the low bits of its head_roll action and, at counter step k, adds row k of a 128 × 14 table (OFF) to the network's joint targets and row k of another table (C) to what the network reads. Race step 0 is counter step 25.

This checkpoint changes only OFF, rows 45 to 67 (race steps 20 to 42). Every other initializer (205,683 values: the network's weights and biases, C, the counter's constants) and every operator is the base's, byte for byte, and the file rebuilt from the base's policy.onnx and the new table is identical to this one.

  • Rows 25 to 44 (race steps 0 to 19) are the base's, bit for bit.
  • Rows 45 to 67 (race steps 20 to 42, from 0.40 s to the finish) carry the new targets: the first probe's sequence, written in by the first conversion, then the repair's correction on rows 45 to 67, then the second probe's sequence from race step 32 on, written in by the second conversion. Each entry is a target minus what the network outputs at that step, so these also absorb how differently the network answers along the new race: on the 13 other joints they differ from the base's by up to 3.60 rad (right_hip_pitch).
  • None of the searches offsets head_roll, which carries the counter. Each conversion re-set its column, on the rows it converted, so that along the seed-1 race it converted that joint's target as the graph rounds it to 1/256 rad is the one the table it started from gave on its own seed-1 race: 23 rows changed, all in the window, by up to 2.61 rad, where the network's head_roll output strays furthest from the race it was matched to. The counter bits, which the graph adds after that rounding with its own unchanged operators, keep counting: along each of the five official races the counter read back from the head_roll feedback advanced by exactly one per control step, from 0 at the start of the settle to 25 at race step 0.

How it was searched

  1. Open-loop probe (ol_probe.py, run lw_sp_20): on official seed 1 only, the base's own joint targets from race step 20 on were offset by a piecewise-linear correction (knots every 2 steps, the 13 joints other than head_roll) and played open loop, the observation ignored; CMA-ES (population 48, initial step 0.1) took that seed from 0.8488 s to 0.8400 s (interpolated race times).
  2. Into the table (ol_hybrid.py --conv seq, run cvi_sp_20): seed 1 was raced again through the base graph from race step 20 on while each row k was filled so that network output + OFF[k] gives that sequence's target, keeping the network's feedback, so every other seed gets the network's own correction around the new targets. Of 300 fills (the first exact, each other with Gaussian jitter of 0.0001 rad standard deviation on every converted race step's 13 non-head_roll targets), the one with the lowest five-seed cost (the repair's, below) was kept: 0.8401, 0.8690, 0.8627, 0.8677, 0.8806 s on seeds 1 to 5.
  3. Five-seed repair (ol_hybrid.py, run rs_20b): CMA-ES (population 32, initial step 0.02) on a further piecewise-linear correction to rows 45 to 67 (knots every 2 steps, the same 13 joints, 156 values), on the five official seeds at 1.15 m/s. The cost summed, over seeds, max(0, t − T + 0.0003) + 0.05 · (t − T), with T = 0.84, 0.86, 0.86, 0.86, 0.86 s for seeds 1 to 5 (a run that did not finish counted as 2.3 s plus the metres it still had to cover, plus 1 s if it fell). The best table it had found by generation 533 (0.8405, 0.8571, 0.8551, 0.8524, 0.8585 s on seeds 1 to 5) is the one steps 4 and 5 started from.
  4. Second open-loop probe (ol_probe.py, run lw2_sp_32): on official seed 1 only, the joint targets that the graph with step 3's table gave on it, from race step 32 on, were offset by a piecewise-linear correction (knots every 2 steps, the 13 joints other than head_roll) and played open loop, the observation ignored; CMA-ES (population 48, initial step 0.1) took that seed from 0.8405 s to 0.8394 s (interpolated race times).
  5. Into the table again (ol_hybrid.py --conv seq, run cv2_sp_32b): seed 1 was raced again through the graph with step 3's table from race step 32 on while each row k was filled so that network output + OFF[k] gives that sequence's target, keeping the network's feedback, so every other seed gets the network's own correction around the new targets. Of 300 fills (the first exact, each other with Gaussian jitter of 0.001 rad standard deviation on every converted race step's 13 non-head_roll targets), the one with the lowest five-seed cost (the repair's, above) was kept: 0.8398, 0.8563, 0.8545, 0.8535, 0.8588 s on seeds 1 to 5. That fill is this checkpoint's table.

Everything ran on an Azure D32as_v4 x86-64 CPU VM in the Arena's own runner (microduck-arena runner v4, MuJoCo 3.10.0, event sprint-2m); the same evaluate() on an Apple-silicon Mac gave the same per-seed times and seed-1 scan, and the file rebuilt there from the base and the fetched table has the same sha256.

Results

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

seed microduck-sprint-cpu-remix this checkpoint
1 0.86 0.84
2 0.86 0.86
3 0.86 0.86
4 0.86 0.86
5 0.86 0.86
board (mean) 0.860 0.856

The runner counts whole control steps (0.02 s). Interpolated within the step in which they cross the line, this checkpoint finishes at 0.8398, 0.8563, 0.8545, 0.8535, 0.8588 s and its base at 0.8488, 0.8592, 0.8538, 0.8564, 0.8598 s.

The Arena's full evaluate() (every swept speed on seed 1, then the three best over all seeds) keeps 1.15 m/s and scores 0.856 s. Its seed-1 scan: 0.20: fall, 0.25: fall, 0.30: fall, 0.35: 1.00, 0.40: fall, 0.45: fall, 0.50: fall, 0.55: fall, 0.60: fall, 0.65: 0.94, 0.70: 0.96, 0.75: 0.96, 0.80: fall, 0.85: fall, 0.90: fall, 0.95: 0.88, 1.00: 0.88, 1.05: 0.90, 1.10: 0.88, 1.15: 0.84, 1.20: 0.88.

These are in-sample numbers: the probes used seed 1, and the conversions' picks and the repair the five official seeds, as the searches behind the base did with the same seeds. Like its base, this is tuned to those races, not a better walker: on seeds 6 to 60 at 1.15 m/s, none of which any step optimized on, it finishes 17 of 55 and the base 19 of 55.

Not for a real robot

Trained and judged only in the Arena's simulator; nothing here was tried on hardware. The step counter rides on the head_roll target, which a real robot would not feed back bit for bit, and the table is timed to the race, not to the robot's state. Do not load it on a physical MicroDuck.

Files

  • policy.onnx: sha256 4745e0e2041f0ffd4616198d788f6c8dd9718de60ce5bf55ad961b15e5a465f2, 831,318 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 Muhammadsafi/microduck-sprint-cpu-remix para el sprint de 2 m de la Microduck Arena, solo para simulación: la misma red y el mismo contador de pasos, con la tabla de objetivos articulares re-temporizada desde el paso 20 de carrera (sonda en lazo abierto sobre la semilla 1, volcada a la tabla y reparada con CMA-ES sobre las cinco semillas oficiales; después, una segunda sonda desde el paso 32, volcada también a la tabla). 0.856 s en las cinco semillas oficiales (dentro de muestra), frente a 0.860 s de la base. Créditos: Muhammadsafi, suraj-phanindra, juicenv, namenu, Pollen Robotics.

Downloads last month
53
Video Preview
loading

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