crowd-random-exit-32
Crowd evacuation · solved 10 of 10 agent attempts pass
Gate. >= 95 % evacuated and zero collision/wall/obstacle violations in >= 90 % of 40 verifier-only seeds
Axes: n_agents:32, observation:local, exit:random-position-and-width, safety:zero-collision
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.
random_exit_v1| criterion | graded | needed |
|---|---|---|
| base:default | 1.000 | ≥ 0.900 |
The agent's final message
The controller at `/app/work/controller.py` passes the gate. The official verifier reports solved with a 100% success rate on seeds 0-39, and my own sweeps passed every seed in 40-219 as well, so the controller has cleared 220 seeds with zero collisions and zero wall violations. All 32 agents leave in about 11 s of the 40 s horizon, and the closest any two agents ever came was 0.29 m against a 0.24 m collision threshold. **Control law.** Each agent runs a small sampling MPC every step: - **Funnelled preferred velocity.** The agent aims at the nearest lane of the exit opening. Agents with a large lateral offset aim at a standoff point in front of the exit, so the crowd arrives in a cone instead of sliding along the right wall. - **Act-then-brake candidates.** A fan of 49 constant accelerations plus a tracking candidate is simulated with the plant's own dynamics: apply the acceleration for 0.3 s, then brake to a stop. Whatever is chosen can therefore always be stopped safely. - **Reciprocal neighbour prediction.** Neighbours are predicted with the same act-then-brake model. This was the decisive fix: with constant-velocity prediction, agents fled from neighbours who would in fact have braked, straight into agents behind them, and the success rate swung between 40% and 90% with tuning. - **Costs summed over the horizon.** Hard penetration below 0.34 m, a comfort term below 0.5 m, wall contact including the right wall outside the opening, and a goal term on the velocity error. …
Each agent samples 49 constant accelerations plus a velocity-tracking candidate, rolls each out with the plant dynamics for 0.3 s and then braking, scores them on separation from braking-predicted neighbours, wall contact and preferred-velocity error, and returns the lowest-cost acceleration.
Shown: public seed 0 (random_exit_v1); this episode passes the default rung. This episode: evacuation_fraction 1, collision_count 0, wall_violation_count 0, obstacle_violation_count 0, total_reward 856.
controller.py · agent transcript · trial crowd-random-exit-32__8TrNXr6