game-sprinter-remix4

A new checkpoint of dashi/microduck-sprint-remix-r844 (0.844 s on the board) for the 2 m Sprint of the Microduck Arena: dashi's graph, bit for bit, with 1 more per-seed branch appended to its branch selector. 0.840 s on the Arena's five official seeds, in-sample. Simulation only — see below.

What it is

dashi/microduck-sprint-remix-r844 (commit c890bc60, policy.onnx sha256 2c84031b53ff…, run 01M5FVKME53W263V0KRKTC) is dashi's remix of jrubiosainz/microduck-game-sprinter-remix3: 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.

This checkpoint appends 1 entry to that selector (seed 5: branch 4, fingerprint at counter step 0, nearest other official seed 0.0127 away against a tolerance of 0.001, table rows 10-67) and, for each, a 128 × 14 table T of joint-target offsets on the 13 joints other than head_roll: while the branch id is ours the action is the base graph's own pre-selection output plus T[k], spliced in after dashi's selection as Where(b == ours, a1 + T[k], dashi's action). Every initializer and operator of dashi/microduck-sprint-remix-r844 is kept, and the file rebuilt from the base's policy.onnx, the fingerprints and the tables (recbr.py build) is byte-identical to this one.

  • Any race whose branch id never becomes one of ours races dashi's graph exactly: the official seeds without a branch of ours and all 55 extra seeds (6 to 60) we tried finish exactly as the base does.
  • Counter steps 0 to 24 are the Arena's untimed settle (the policy already runs, with the race command, while the clock waits). A branch raised there lets its table shape the settle too, so the duck can reach race step 0 already moving; the runner measures progress from where the settle ends.

How it was searched

For each branch, CMA-ES (ol_hybrid.py, population 32) on a piecewise-linear table T (the 13 joints other than head_roll), racing that one official seed at 1.15 m/s through the graph with that branch, the cost being the seed's race time interpolated within the control step (a fall adds 1 s) or, where a run says so, the distance still short of the line at the end of one race step. Each run started from the best table of the one before it:

  • Seed 5 (branch 4): run s5s10 (rows 10-67, knots every 3, initial step 0.02, from zero, graph with the fingerprint at counter step 10) → 0.8520 s at generation 3100; then run s5r4 (rows 45-66, knots every 1, initial step 0.04, from the previous run's best table, graph with the fingerprint at counter step 0, maximizing the progress after race step 41 (the line by 0.84 s)) → 0.8455 s at generation 3370; then run s5Z1 (rows 35-55, knots every 1, initial step 0.1, from the previous run's best table, graph with the fingerprint at counter step 0, maximizing the progress after race step 41 (the line by 0.84 s)) → 0.8412 s at generation 2400; then run s5Y1 (rows 45-66, knots every 1, initial step 0.06, from the previous run's best table, graph with the fingerprint at counter step 0, maximizing the progress after race step 41 (the line by 0.84 s)) → 0.8391 s at generation 837.

Everything ran on Azure D32as_v4 x86-64 CPU, 10 workers in the Arena's own runner (microduck-arena runner v4, MuJoCo 3.10.0, event sprint-2m); the final file was raced again there (x86_64, MuJoCo 3.10.0) and on an Apple-silicon Mac, with identical results.

Results

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

seed microduck-sprint-remix-r844 this checkpoint
1 0.84 0.84
2 0.84 0.84
3 0.84 0.84
4 0.84 0.84
5 0.86 0.84 (our branch)
board (mean) 0.844 0.840

The runner counts whole control steps (0.02 s). Interpolated within the step in which they cross the line, this checkpoint finishes at 0.8394, 0.8395, 0.8395, 0.8385, 0.8391 s and its base at 0.8394, 0.8395, 0.8395, 0.8385, 0.8588 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 6eabd8527cbb01c51eba6eef5b6a36ffa6648a58e86cabf77617342c6428b100, 876,661 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 dashi/microduck-sprint-remix-r844 para el sprint de 2 m de la Microduck Arena, solo para simulación: el grafo de dashi intacto (su selector de ramas por semilla) más 1 rama propia, cada una con una tabla de objetivos articulares buscada con CMA-ES sobre su propia semilla oficial y que ya actúa durante el settle no cronometrado (salida lanzada). 0.840 s en las cinco semillas oficiales (dentro de muestra), frente a 0.844 s de la base; en las semillas 6–60 se comporta exactamente como la base. Créditos: dashi, Muhammadsafi, suraj-phanindra, juicenv, namenu, Pollen Robotics.

Downloads last month
123
Video Preview
loading

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