platoon-delay-noise-20-strict
Vehicle platoon · solved 6 of 6 agent attempts pass
more
Of the 2026-10-21 passing controllers, only Fable's clears it (0.925, every vehicle within 1.6 m); Opus 0.80 and Gemini 0.75 at the gain rung, Sol and Sonnet 0.00. Two of three 2026-10-22 pilot solutions without the bound were shock-absorber designs (first follower 7-9 m back) and fail it.
Gate. no collision; spacing-error RMS <= 3.0 m; per-vehicle peak spacing error <= 5.0 m; string peak gain <= 1.0; success rate >= 0.9 on 40 verifier-only seeds
Axes: gate:peak_5m, n_vehicles:20, observation:local-delayed-noisy, leader:hard_brake_train, spacing:constant-time-headway, gate:string_1_0
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.
hard_delay_noise_v1| criterion | graded | needed |
|---|---|---|
| base:string_1_0 | 1.000 | ≥ 0.900 |
The agent's final message
The controller in `/app/work/controller.py` passes the strict string-stability gate. The official evaluator solves 5/5 visible seeds, with a worst string gain of 0.70 and worst spacing error of 1.77 m. On seeds outside the visible block it passed 143 of 144 (seeds 0–83 and 200–259). The 60 seeds in 200–259 were never used for tuning and all passed. There were no collisions; the smallest gap on the visible seeds averaged about 16 m. **How it works** 1. **Own state is known exactly.** Each reading of my own speed and acceleration is exact, just late. The file stores the commands it has sent since, and replays them through the actuator model to get the current own state. 2. **Predecessor estimate.** A Kalman filter tracks gap, the predecessor's speed, acceleration and command, and the bias in the relative-speed sensor. It knows the timestamp of every delayed, out-of-order reading. Each step it restarts from the last point where all readings are certain to have arrived (6 steps back), re-runs the open window and predicts forward to now. An acceleration reading of exactly 0.0 is treated as a dropout. 3. **Two filter modes.** One assumes the predecessor's command changes slowly; the other lets it jump. The filter weights them by how well each explains the readings. This was the key fix: the worst failures came from bursts of long delays and dropouts just as the leader flipped from −4 to +1.6 m/s². A filter that only allows slow changes falls ~3 m/s behind, while a single filter t…
Each vehicle reconstructs its present own state by replaying issued commands through the actuator model, estimates the predecessor's gap, velocity, acceleration and command with an IMM Kalman filter re-run over the delay window, then applies a constant-time-headway law with actuator-lag inversion so the spacing error decays at rate LAMBDA and accelerations attenuate down the string.
Shown: public seed 0 (hard_delay_noise_v1); this episode passes the string_1_0 rung. This episode: collision no, min_gap 15.8, spacing_error_rms 0.247, spacing_error_abs_max 1.48, string_peak_gain 0.58, episode_steps 600, total_reward -113.
controller.py · agent transcript · trial platoon-delay-noise-20-strict__VHN8LNb