platoon-delay-noise-20-certified
Vehicle platoon · solved 4 of 6 agent attempts pass
more
Fable's 2026-10-21 controller passes both (36/40 seeds, max ratio 0.95); the June oracle passes the sweep (0.97) but lets the first follower fall 17 m back and fails the bound; textbook CACC under delay fails the sweep (6.9). The check is empirical on sampled frequencies in the linear regime, not a symbolic proof.
Gate. no collision; spacing-error RMS <= 3.0 m; per-vehicle peak spacing error <= 5.0 m; string peak gain <= 1.35 on >= 0.9 of 40 verifier-only seeds; AND string-frequency certificate max amplitude ratio <= 1.0
Axes: gate:peak_5m, n_vehicles:20, observation:local-delayed-noisy, leader:hard_brake_train, spacing:constant-time-headway, certificate:string-frequency
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:default | 1.000 | ≥ 0.900 |
| certificate | 1.000 | ≥ 1.000 |
The agent's final message
The controller is done and passes everything I could check locally. On the 5 visible seeds the evaluator reports `solved=True` and 6/6 ladder rungs. The frequency certificate passes with a max amplitude ratio of **0.346** (limit 1.0): 0.26 / 0.32 / 0.35 / 0.33 / 0.26 at periods 3 / 5 / 8 / 12 / 20 s. On 120 extra seeds (100–219) it succeeded 120/120 with no collisions, a mean string gain of 0.77 and a worst of 1.29 (limit 1.35), and a worst spacing error of 1.5 m (limit 5 m). The grader's held-out seeds are untested, so the real score could still differ. **How it works** (`/app/work/controller.py`, using the per-vehicle `memory` form): 1. **Own state without delay.** The own speed and acceleration readings are delayed but noise-free. Each vehicle stores the commands it sent and replays the actuator model up to the current step. That gives its exact current speed, acceleration and position, so the delay never enters its own feedback loop. 2. **Predecessor estimate.** Each delayed reading is treated as a timestamped measurement of the predecessor. A small Kalman filter tracks the predecessor's position, speed, acceleration and command, plus the fixed relative-velocity bias, using the same actuator model. A dropout is recognised because the reading is exactly 0.0. The filter waits 6 steps so every reading for a timestamp has arrived. It then re-runs over the newer readings and projects to the current step. 3. **Spacing law.** With `eps` = predicted gap − d0 − h·v and `eps_dot`…
Each follower replays its own past commands to get current own state, estimates the predecessor's current position, speed and acceleration with a delay-aware Kalman filter, then applies a headway-based CACC law with predecessor acceleration feedforward and actuator inversion to compute acceleration command.
Shown: public seed 0 (hard_delay_noise_v1); this episode passes the default rung. This episode: collision no, min_gap 16.2, spacing_error_rms 0.225, spacing_error_abs_max 0.767, string_peak_gain 0.767, episode_steps 600, total_reward -67.4.
controller.py · agent transcript · trial platoon-delay-noise-20-certified__FTdtar5
hard_delay_noise_v1| criterion | graded | needed |
|---|---|---|
| base:default | 0.850 | ≥ 0.900 |
| certificate | 1.000 | ≥ 1.000 |
The agent's final message
The session budget is essentially spent, so the controller at `/app/work/controller.py` is final in its current state. Here is where things stand. **Result** | Check | Visible seeds 0–4 | Seeds 0–19 | |---|---|---| | Frequency certificate | PASS, max ratio 0.987 | same (deterministic) | | Per-seed success rate | 0.80 (4/5) | 0.90 (18/20) | | Collisions / peak error > 5 m | none, worst peak 2.7 m | none, worst peak 2.9 m | | Spacing-error RMS | ≤ 0.40 m | ≤ 0.41 m | The certificate passes with a small margin, mostly set by the 20 s period, where any headway-based design sits near 0.95. The only failing rung is the string peak gain at 1.35 on seeds 0 and 9. Both fail the same way: a mid-platoon vehicle's 1.0 m peak is followed by a neighbour's 1.5 m peak from an unlucky jitter-dropout coincidence at the leader's brake switch, so the ratio lands around 1.5. Against the grader's 0.9 gate this submission is marginal, not comfortably inside. **What the controller does** - Reconstructs the follower's own current velocity and acceleration exactly from its command history and the known actuator lag, removing the observation delay from the own-state path. - Dead-reckons the predecessor across the reported information age, extrapolating its acceleration with a jerk estimate from time-stamped valid samples, clamped at 1.0 m/s³. A reading of exactly zero is treated as a dropout. Out-of-order samples are ignored. - Passes the extrapolated acceleration and relative velocity through fir…
A constant-headway CACC law (spacing error, relative velocity, predecessor acceleration feed-forward, own-acceleration damping) is evaluated on states predicted forward over the sensor delay using the known actuator model and a jerk-extrapolated predecessor, with filtering, bias correction and a hard-brake safety override.
Shown: public seed 0 (hard_delay_noise_v1); this episode fails the default rung. This episode: collision no, min_gap 15.5, spacing_error_rms 0.372, spacing_error_abs_max 2.2, string_peak_gain 1.54, episode_steps 600, total_reward -93.4. It was the first failing one of 1 public seeds tried.
controller.py · agent transcript · trial platoon-delay-noise-20-certified__bbNePPe