walker2d-forward
Walker2d (MuJoCo Walker2d-v5) · solved 19 of 20 agent attempts pass
more
Solved by stock agents in one session (2026-10-23 sweep: 6/8 clear forward); the oracle is Opus 5.5's SIMBICON-style walker (fixed cadence, virtual torso actuator, world-frame swing-hip placement with speed feedback, tuner-fitted gains): 12.5 m, return 2558, brisk 40/40, and alive on 40/40 seeds under torso +20 %, friction -30 %, motors -20 % and gravity +10 %, where SB3-zoo TD3 (4701, 29.6 m) falls on every seed with weak motors.
Gate. per-seed success is the `forward` rung of this benchmark's ladder ['alive', 'forward', 'brisk', 'fast'] (`--success-mode forward`), not the evaluator's default flag; the task is solved when the success rate over the grader's held-out seeds is `>= 0.9`
Axes: plant:walker2d, scenario:standard_v0, gate:forward_3m, rl-reference:td3-4701
Each video re-runs the attempt's final controller through the task's own evaluator on a public seed (never the grader's held-out ones). The table under each video is the official grade on the held-out seeds.
standard_v0| criterion | graded | needed |
|---|---|---|
| base:forward | 1.000 | ≥ 0.900 |
The agent's final message
The controller passes the task: it walks forward without falling on every seed I tried, covering about 12.4 m in 8 s. The gate needs 3 m on 90% of seeds. | Check | Result | |---|---| | Official evaluator, seeds 0–4, forward mode | `solved=True`, 5/5 succeed, mean 12.5 m, return about 2556 | | My own harness, 500 other seeds | 500/500 succeed, shortest walk 12.27 m | All seeds clear the alive, forward and brisk (10 m) levels; none reaches fast (20 m). The largest torso tilt is 0.74 rad, against the 1 rad fall limit. **How it walks.** `/app/work/controller.py` uses a simple state machine where one leg supports the body while the other swings: - **Leg switching:** the two legs swap roles every 0.3 s on a fixed timer. - **Torso:** the supporting hip holds the torso leaned back about 0.37 rad. The lean is needed because the hips can only swing the legs backward relative to the torso, so the torso has to tilt back for a foot to land ahead. - **Foot placement:** the swinging hip aims the thigh at an angle in world terms that grows with forward speed. Moving faster puts the next foot further ahead, which is what keeps it balanced. - **Knees and ankles:** the swinging knee bends for ground clearance and then straightens before landing. The supporting ankle adds a constant toe push-off, which drives the forward speed, and the swinging ankle keeps that foot level. The docstring explains each gain. I found the gains with a short random search over simulated runs on seeds 0–2, with no…
A two-state SIMBICON-style walker swaps stance and swing legs on a fixed timer, using a stance-hip PD to hold torso pitch, a world-frame swing-thigh PD whose target angle grows with forward speed, scheduled swing-knee flexion, and ankle PD with constant push-off torque, with gains found by random search.
Shown: public seed 0 (standard_v0); this episode passes the forward rung. This episode: episode_steps 1000, x_final 12.5, min_height 0.984, max_abs_pitch 0.73, n_steps 57, total_reward 2562.
controller.py · trial walker2d-forward__7iuFc3i
standard_v0| criterion | graded | needed |
|---|---|---|
| base:forward | 0.000 | ≥ 0.900 |
Pre-clock session: the agent had no clock and may have stopped early believing its hour was over; treat a failure here as a lower bound.
The agent's final message
Done — final controller is at `/app/work/controller.py`. Honest outcome: **it does not pass the gate.** It reaches the `alive` rung on every seed tested (13/13, full 1000 steps, return ≈ 1025) but tops out at x ≈ +0.2 m, far short of the 3 m `forward` rung, so the expected grader score is 0. **What the final controller is:** an in-phase knee/ankle bounce around a statically stable crouch, with a torso-pitch PD shared by both hips and a knee height-feedback term. Parameters were found by the `hl_control.harbor.tune` TPE search (7 runs total) and revalidated alive on fresh seeds 5–20. A backup copy is at `controller_alive_backup.py`. **Why walking didn't close, after ~15 design iterations:** this plant has two cruel properties I verified empirically: 1. The hips can only extend backward (range [−150°, 0°]) and the ankle joint sits at the heel, so the swing foot can never be placed ahead of the center of mass, and a nose-up (backward) fall is uncorrectable — every early gait died that way at pitch = −1. 2. Once standing was stabilized (crouch: hip −0.05, knee −0.3, ankle dorsiflexed +0.15) and forward drive was found (ankle push-off plus synchronized hip pump — up to 2.3 m at 0.9 m/s with real flight phases), every forward gait hit the same wall: the feet fail to relocate forward fast enough, the legs do "the splits," and the torso sinks below the 0.8 m height limit after ~0.8–2.3 m of travel, around t ≈ 2–3 s. Things tried and rejected: position-PD clock gaits, a SIMBICON-s…
An open-loop sinusoidal clock drives both legs in phase to bounce around a crouch, with joint PD servos, a torso-pitch PD on the hips and knee extension when the torso height drops, so the walker stays upright with slight forward drift.
Shown: public seed 0 (standard_v0); this episode fails the forward rung. This episode: episode_steps 1000, x_final 0.22, min_height 1.16, max_abs_pitch 0.213, n_steps 2, total_reward 1026. It was the first failing one of 1 public seeds tried.
controller.py · trial walker2d-forward__aijgHDF