Inspiration
The Sugiyama 2008 ring-road experiment is one of the quietly unsettling results in traffic science. Put enough human drivers on a circle with no lights, no merges and no obstacles, and jams appear anyway, purely out of reaction delay. Nothing causes them. They are a property of the crowd.
Later work showed that a single autonomous vehicle running a smoothing controller can dissolve those waves for everyone behind it. That is usually presented as a happy ending, and it bothered me, because of how the smoother does it. It hangs back. It accepts a slower, gappier trip so that thirty cars behind it never have to brake.
That is a public good: a private cost paid to produce a shared benefit. And it is exactly the structure natural selection is famously bad at maintaining. Every published demonstration I could find commanded the AV to cooperate. Nobody asked the follow-up question: if smoothing firmware and aggressive firmware compete in a market, and drivers keep whichever gets them home faster, does the cooperative one survive?
What it does
EVOLVE-Ring runs that competition. Cooperators ($C$) run FollowerStopper and absorb waves. Defectors ($D$) run a tight-headway model with zero reaction delay. Both share a 500 m ring with human drivers, who are treated as environment. Each generation is scored on simulated physics, then selection lets the better-performing firmware spread.
The answer is that there is no single answer. Traffic density decides which game you are playing. Where no waves form, cooperation wins from anywhere. Where waves form and can still be cleared, the game is bistable and cooperation survives only above a critical mass. Where waves can never be cleared, defectors persist forever as a stable minority.
And one mechanism organises the whole map: the defector is a jam predator. Its advantage comes from cutting into the gaps cooperators open, so aggression only pays where waves exist to exploit. Across 15 measured points, the selection gain for cooperation correlates with stopped traffic at $r = -0.95$.
How I built it
The physics is not mine. It is the validated Phantom engine, vendored verbatim and never edited. Humans follow the Intelligent Driver Model,
$$a_i \;=\; a^{\max}\left[\,1 - \left(\frac{v_i}{v_i^{0}}\right)^{\delta} - \left(\frac{s^{*}(v_i, \Delta v_i)}{s_i}\right)^{2}\right]$$
with desired gap
$$s^{*}(v, \Delta v) \;=\; s_0 + \max!\left(0,\; vT + \frac{v\,\Delta v}{2\sqrt{a^{\max} b}}\right)$$
where $s_i$ is the bumper gap, $\Delta v_i = v_i - v_{i-1}$ is the approach rate, $\delta = 4$, $s_0 = 2\,\mathrm{m}$ and $b = 2\,\mathrm{m/s^2}$. Humans use $T = 1.1\,\mathrm{s}$ and $a^{\max} = 1.2\,\mathrm{m/s^2}$, and crucially they act on delayed state $(x(t - \tau), v(t - \tau))$ with $\tau = 0.8\,\mathrm{s}$. That delay alone is what makes the jams.
Cooperators run FollowerStopper, which picks a command speed from three moving thresholds,
$$\Delta x_k \;=\; \Delta x_k^{0} + \frac{\left[\min(\Delta v, 0)\right]^{2}}{2 d_k}, \qquad k = 1,2,3$$
$$v_{\mathrm{cmd}} \;=\; \begin{cases} 0 & s \le \Delta x_1 \[4pt] \bar{v}\,\dfrac{s - \Delta x_1}{\Delta x_2 - \Delta x_1} & \Delta x_1 < s \le \Delta x_2 \[4pt] \bar{v} + (U - \bar{v})\,\dfrac{s - \Delta x_2}{\Delta x_3 - \Delta x_2} & \Delta x_2 < s \le \Delta x_3 \[4pt] U & s > \Delta x_3 \end{cases}$$
with $\bar{v} = \min(\max(v_{\mathrm{lead}}, 0), U)$, then relaxes toward it as $a = (v_{\mathrm{cmd}} - v)/0.5$. Defectors are the same IDM as humans but with $T = 0.7\,\mathrm{s}$, $a^{\max} = 1.8\,\mathrm{m/s^2}$ and no reaction delay at all.
On top of that sits the layer I wrote. Each vehicle earns a payoff over a 60 s scored window after a 60 s warmup:
$$\pi_i \;=\; w_1 \overline{\left(\frac{v_i}{v_i^{0}}\right)} \;-\; w_2 \sqrt{\overline{a_i^{2}}} \;-\; w_3 \overline{f_i} \;-\; \lambda \phi_i \;+\; \sigma\,\mathbb{1}[\,s_i = C\,]$$
The first term is normalised speed, the second is ride comfort as acceleration RMS, the third is a fuel surrogate $f(v,a) = 0.10 + 0.03v + 0.60\,v\max(0,a)$. The last two are the policy levers: $\lambda$ taxes the tailgate time fraction $\phi_i$, and $\sigma$ is a subsidy paid only to certified cooperative firmware. Default weights are $w = (1.0,\, 0.15,\, 0.10)$; the speed-only regime sets $w_2 = w_3 = 0$, and that is where the dilemma lives.
Selection is a discrete logit replicator over the AV subpopulation:
$$p^{(g+1)} \;=\; \frac{p^{(g)} e^{\beta \pi_C}}{p^{(g)} e^{\beta \pi_C} + \left(1 - p^{(g)}\right) e^{\beta \pi_D}} \;=\; \frac{p^{(g)}}{p^{(g)} + \left(1 - p^{(g)}\right) e^{-\beta \Delta\pi}}$$
where $\Delta\pi = \pi_C - \pi_D$. Written the second way it is obvious that cooperation grows exactly when $\Delta\pi > 0$, so the entire project reduces to mapping the sign of one scalar. The critical mass $p^{*}$ is the unstable interior root,
$$\Delta\pi(p^{}) = 0, \qquad \left.\frac{d\,\Delta\pi}{dp}\right|_{p^{}} > 0$$
At the flagship cell, 60 veh/km with a 20 percent AV fleet, seed-resampled bootstrap over 2000 resamples puts $p^{*} = 0.37$ with a 95 percent interval of $[0.28,\, 0.47]$.
Two rules I set early and held to. The engine stays frozen, and a regression harness re-asserts the physics targets before I trust any result. The demo is a second implementation, so it gets tested like one: the interactive page carries its own copy of the simulation core so it runs with no build and no server, and a consistency check drives both it and the research code from the same seed and asserts the trajectories agree to $10^{-12}$. They currently agree bit for bit. Both gates run in CI on every push.
Challenges I ran into
The first phase map was false precision. I had a clean-looking number in all 42 cells and I believed it. Then I bootstrapped over seeds and found that only 14 of the 42 survive at 95 percent confidence. These are stochastic thresholds with real seed-to-seed spread. I could have shipped a pretty heatmap I no longer believed in. Instead I hatched every unresolved cell and left it blank, in the figure and in the live demo. The map got uglier and much more honest.
The obvious policy was the wrong policy. I expected a tailgating tax to work, and built it first. It made things slightly worse. The reason turned out to be the best thing in the project, and I nearly missed it by assuming my own intervention would succeed.
Losing work. An accuracy pass and the whole of one finding were written and then never preserved. I rebuilt the finding from scratch, including the injection hook its causal test needs, and the rebuild moved two secondary numbers. The repo records exactly which numbers changed, and which four claims remain reported and un-runnable, instead of quietly restating the old values.
My own headline was overstated, and I caught it late. Writing this description, I went to check the tailgating numbers and found they had no script behind them. Reconstructing the measurement reproduced the reported values exactly, but the sweep around them showed the inversion reverses when cooperators are rare, and is not statistically separated at the single share I had been quoting. I had written that the ordering was robust to fleet mix. It is not. The corrected version below is narrower, conditional, and considerably more interesting than what I had claimed.
What I learned
The headline lesson is a result I did not go looking for, and it got sharper the harder I pushed on it.
A tailgating tax misfires, and it misfires precisely when the technology starts working.
Time headway is gap divided by speed. So when cooperative AVs clear the waves and traffic speeds up, headways compress across the whole ring, and a gap-over-speed metric turns on the cars that cleared the road. Measured at the flagship cell over 24 seeds:
| cooperator share of AV fleet | mean speed | stopped | cooperator $\phi$ | defector $\phi$ |
|---|---|---|---|---|
| $1/6$ | 0.37 | 21% | $0.015$ | $0.037$ |
| $1/2$ | 0.38 | 9% | $0.025$ | $0.008$ |
| $2/3$ | 0.50 | 2% | $0.304$ | $0.003$ |
| $1$ | 0.53 | 2% | $0.628$ | none left |
While cooperators are rare the metric behaves exactly as a regulator would hope, flagging defectors more than twice as often. Then the fleet crosses the point where the waves actually clear, mean speed jumps from $0.38$ to $0.50$ of free flow, and the cooperators' tailgate fraction rises twelvefold to swamp everything else. Gap-telemetry enforcement would pass its pilot and then invert at scale, penalising the smoothing firmware exactly once enough of it exists to fix the road.
The payoff weights never enter this, since $\phi_i$ is a property of the trajectory alone, so the effect is invariant to how I score the game. It is not invariant to fleet composition, and I only found that out by measuring it.
What does work is a transfer. A verified-firmware subsidy worth roughly 3 percent of trip utility eliminates the dilemma everywhere I tested it: starting below the basin boundary, cooperation wins 0 of 12 seeds unaided and 11 of 12 with the subsidy. I hold that number much more loosely than the trap, because 3 percent comes from an uncalibrated payoff function on a one-dimensional ring. It argues that a small transfer is enough and far cheaper than the enforcement people reach for first. Nobody should legislate the figure itself.
More generally, I learned that a public-good framing changes what "solved" means. The smoothing literature had already solved the physics. What it had never asked was whether the solution is stable once the agents get to choose. And I learned that the honest version of a result, carrying its intervals and its 28 blank cells and its one known divergence, persuades better than the clean version, because a reader can tell the difference.
What's next
Multi-lane, since a 1D ring cannot represent lane changes. Calibrating the payoff weights against real driver preference data instead of choosing them. Evasion strategies, meaning a defector that games the tailgate metric deliberately. And restoring the two checks that are currently reported but impossible to re-run.
Log in or sign up for Devpost to join the conversation.