This repository contains the manuscript and the reproducible simulation suite for
Smooth-Safe: A Communication-Free Single-Vehicle Controller for Phantom Traffic-Jam Suppression (Krishna Harish).
We compare two communication-free single-lane AV controllers on a 22-vehicle periodic ring under the Intelligent Driver Model (IDM, physical testbed) and the delayed Optimal Velocity Model (OVM, analytically tractable toy):
- an instantaneous-feedback controller: time-to-collision braking plus headway-rate damping (equivalent to the FVDM correction of Jiang et al.);
- a history-dependent velocity filter: a five-second sliding window low-pass on the AV's own speed (stylised after Stern et al.).
Across penetration sweeps in both models the velocity filter suppresses the wave at lower penetration than the instantaneous controller. Under the IDM, a single filtered AV (~5% penetration) suppresses the wave below the iid 0.01 m/s initial-perturbation floor (32-seed Monte Carlo, mean 0.001 m/s); the reactive overlay requires between 36% and 50% penetration. Augmenting the reactive controller with an integral of headway error does not close the gap. A controlled ablation attributes a cycle-averaged forcing magnitude ratio of 0.044 to the TTC term; headway-rate damping does the rest.
Two controlled experiments tighten the interpretation. First, an action-space confound control with matched [-8, 4] m/s^2 acceleration clips on every controller: a free-set "leader-low-pass" controller that tracks a five-second first-order low-pass of the leader's velocity (a slow, non-self reference) suppresses the wave to the 0.001 m/s floor at every penetration (5-100%), matching the filter at 5% and beating it at 23-100%. Because the leader-low-pass and the filter differ only in which slow signal they track (the leader's speed versus the AV's own), the operative variable is the temporal smoothing / slowness of the reference, not self-reference and not raw action-space freedom. Second, sweeping the filter window T_w at 100% penetration shows amplitude decreases monotonically with T_w (7.07 m/s at 0.5 s to 0.019 m/s at 20 s), falsifying the compounded-delay hypothesis for the high-penetration residual.
The growth-decay envelope model's boundary ratio reduces to ρ = σ/Γ by an algebraic cancellation of the residence-time factor h*/|c_g| (a bookkeeping identity, not physical |c_g|-independence). Using Γ measured directly from pure-β-damping decay—not the β/2 high-frequency approximation, which is off by a factor of ~8.5 in this regime—the operating point β = 1.0 gives OVM ρ = 9.5 (95% CI [6.5, 14.8], P(ρ>1) = 1.00, clustering) and IDM ρ = 0.23 (95% CI [0.04, 0.42], P(ρ>1) = 0.00, even spacing).
Two additions made in the latest revision, in response to peer review, strengthen the genericity of these claims and are backed by new simulation blocks:
- Genericity sweep (Block 9). The architecture ranking (filter beats the reactive overlay) and the ρ-classification (OVM clusters, IDM spaces evenly) are re-measured at four extra operating points reached by retuning the matched calibration (varying the free-flow speed v0 and the ring density L; the reaction delay τ is held at 0.5 s, see the manuscript). Across every operating point the OVM stays ρ > 1 and the IDM stays ρ < 1, and the filter amplitude stays at or below the reactive overlay — only the absolute penetration thresholds move.
- Non-degenerate OVM calibration (Block 10). The baseline OVM leans on a repulsive collision patch that fires ~10^5 times over 300 s. Widening the optimal-velocity slope (δ = 5 → 8 → 10 m, geometry and a = 1.3 fixed) moves the equilibrium off the steep arm of V(h); at δ = 10 m the patch never fires, yet the flow stays string-unstable and the clustering classification ρ > 1 survives. The ρ > 1 result is therefore not an artefact of the saturated baseline OVM.
Three further results turn the study from an attribution into a design:
- Smooth-Safe controller (Block 11). The attribution above prescribes a controller: leader-referenced smoothing (Tw-robust) plus a collision-aware brake (safety). Smooth-Safe matches the filter at 5% penetration, is flat in the filter window Tw at full penetration (the filter's amplitude rises from 0.14 to 7.1 m/s as Tw shrinks from 5 to 0.5 s; Smooth-Safe stays < 0.005), and holds ~2x the worst-case headway under a remote emergency brake. This resolves the prior study's open question.
- Computer-assisted stability theorem (
src/stability.py). An argument-principle (Nyquist winding) count of the right-half-plane roots of the delayed-OVM characteristic quasipolynomial shows mode j=1 has >= 1 unstable root for every sensitivity a in [0.05, 50] and every delay tau in [0, 1] — so no open-loop gain stabilises the ring (an active smoothing controller is necessary). The count is exact (integer-valued, R-independent) and matches the dominant-eigenvalue sign. - Multi-lane validation (
src/multilane.py). A two-lane, heterogeneous, MOBIL lane-changing ring (with reaction delay retained) shows the ranking survives: at 50% penetration the reactive overlay removes 6% of the wave, the self-filter 31%, and Smooth-Safe 99.7%. - SUMO validation (
src/sumo_validation.py). An independent run in Eclipse SUMO (circular network, built-in IDM, AVs controlled via TraCI) reproduces and sharpens the picture: Smooth-Safe suppresses 88-96% at every penetration from 5% to 50%, and is the only controller to do so (the self-filter works only at 5%, the reactive overlay only near 50%). - Gain sensitivity (
traffic_sim.pyBlock 12). Sweeping the smoothing blend and the safety gains (k, T_safe) shows the suppression is gain-robust (it holds across alpha in [0.1,0.7] and all gains) and the safety margin is a decoupled, tunable dial — the results are not gain-tuned.
The manuscript uses the IEEEtran class (suitable for IEEE control/ITS
venues). A cover letter is in paper/cover_letter.md.
phantom_traffic_revision/
+-- README.md (this file)
+-- requirements.txt (Python dependency pins)
+-- src/
| +-- traffic_sim.py (simulation suite; Params dataclass + Blocks 1-11)
| +-- stability.py (argument-principle RHP-root count + Walton-Marshall)
| +-- multilane.py (two-lane heterogeneous lane-changing microsim)
| +-- sumo_validation.py (Eclipse SUMO + TraCI validation)
| +-- make_figures.py (figure-generation script)
+-- paper/
| +-- manuscript_revised.tex (compilable IEEEtran manuscript)
| +-- manuscript_revised.pdf (compiled PDF)
| +-- cover_letter.md (cover letter)
+-- data/
| +-- simulation_results.txt (numerical output from traffic_sim.py)
| +-- stability_results.txt (output from stability.py)
| +-- multilane_results.txt (output from multilane.py)
| +-- sumo_results.txt (output from sumo_validation.py)
+-- figs/
+-- fig1_sigma_growth.png (early-time variance growth fit, OVM + IDM)
+-- fig2_amp_vs_penetration.png (32-seed filter vs reactive sweep with CIs)
+-- fig3_fft_spectra.png (32-seed ensemble RMS FFT at 5/50/100%)
+-- fig4_baseline_wave.png (IDM baseline velocity trajectories)
+-- fig5_tw_sweep_full.png (T_w sweep at 100% penetration)
+-- fig6_actionspace.png (action-space control: 3 matched-clip controllers)
+-- fig7_rho_uncertainty.png (rho = sigma/Gamma_emp histograms)
+-- fig8_genericity_sweep.png (Block 9: rho-classification + ranking across operating points)
+-- fig9_nondegenerate_ovm.png (Block 10: patch firing vs rho as the OVM is de-saturated)
+-- fig10_stability.png (argument-principle RHP-root count over a and (a,tau))
+-- fig11_smoothsafe.png (Block 11: Smooth-Safe penetration / Tw-robustness / safety)
+-- fig12_multilane.png (two-lane heterogeneous lane-changing amplitude)
+-- fig13_sensitivity.png (Block 12: Smooth-Safe gain sensitivity)
+-- fig14_sumo.png (SUMO validation: amplitude vs penetration)
- Python >= 3.10
- See
requirements.txt(numpy, scipy, matplotlib)
pip install -r requirements.txtThe script was developed and tested with numpy 2.3.3, scipy 1.17.1, and matplotlib 3.10.
For compiling the manuscript:
- pdflatex (TeX Live 2022 or later) with the standard packages
amsmath,amssymb,amsthm,booktabs,graphicx,caption,enumitem,hyperref,geometry.
From the repository root:
cd src
python3 traffic_sim.py ../data/simulation_results.txtThis regenerates data/simulation_results.txt end to end. Wall time
is approximately 20-25 minutes (32-seed Monte Carlo at 8 penetrations
for both filter and reactive overlay, 4-controller action-space
study, T_w sweep, c_g measurement, rho uncertainty propagation, the
genericity sweep, and the non-degenerate OVM calibration). The script
is deterministic: each Monte Carlo seed is fixed, so repeated runs
reproduce the table values to machine precision.
The script has eight computational blocks:
-
Unified sigma extraction (32 seeds): simulate the uncontrolled N=22 ring for 30 s with iid initial-velocity perturbations of std 0.01 m/s, fit the slope of
log Var_n[v_n(t)]against time in the early-growth window. Reports mean and std for both OVM and IDM. -
32-seed Monte Carlo of the IDM filter and reactive overlay at 8 penetrations (5, 14, 23, 36, 50, 64, 82, 100%), 300 s each. Reports bootstrap 95% CIs for the steady-state amplitude.
-
FFT diagnostic at 5, 50, 100% filter penetration: linearly detrend the steady-state velocity, compute ensemble RMS spectra over 32 seeds and all 22 vehicles, report band-integrated energy.
-
T_w sweep at 100% IDM filter penetration: amplitude versus filter window length, used to falsify the compounded-delay hypothesis.
-
Action-space confound control (matched [-8, 4] clips): three controllers (additive reactive overlay, free-set leader-low-pass, filter), all sharing the same acceleration clip, compared at four penetrations with 32 seeds each.
-
|c_g| measurement and OVM patch sensitivity: measure the saturated wave's group velocity from inter-vehicle phase delays at the dominant frequency; test OVM c_g at four collision-patch coefficients.
-
Empirical Gamma extraction: measure the decay rate Gamma directly by applying pure beta-damping to all 22 vehicles and fitting the perturbation-variance decay log Var_n[v_n(t)], swept over beta. Block 7b forms the growth-decay arithmetic rho = sigma/Gamma_emp.
-
Uncertainty propagation into rho via Monte Carlo over (sigma, Gamma_emp) using the measured means and standard deviations; no prior on a Gamma/beta constant is needed because Gamma is measured directly.
-
Genericity sweep over operating points (Block 9): re-measures sigma, Gamma, rho and the IDM filter/reactive amplitudes at four extra operating points reached by retuning the matched calibration (varying v0 and L), checking that the OVM stays rho>1, the IDM stays rho<1, and the filter stays at or below the reactive overlay.
-
Non-degenerate OVM calibration (Block 10): widens the optimal-velocity slope (delta = 5, 8, 10 m) so the equilibrium leaves the collision-prone region, reports the patch-activation count, string-stability margin, sigma, Gamma, and rho for each, and shows the clustering classification rho>1 survives even when the patch never fires.
-
Smooth-Safe controller (Block 11): the synthesised controller (leader-referenced smoothing + collision-aware brake). Reports the penetration sweep vs the filter, the Tw-robustness comparison at 100%, and the safety margins (min headway / min TTC) under a remote emergency brake.
A sanity check at the end computes the undelayed OVM critical
sensitivity a_crit^(1) = 2 alpha cos^2(pi/N) via the analytic
expression for comparison with Section 4 of the manuscript.
All physical parameters live in an immutable Params dataclass; Blocks
1-8 default to the baseline calibration and reproduce the previously
reported figures to machine precision, while Blocks 9-11 pass perturbed
Params objects or new controllers.
cd src
python3 stability.py ../data/stability_results.txtComputer-assisted argument-principle count of right-half-plane roots of
the delayed-OVM characteristic quasipolynomial (~15 s). Verifies that no
sensitivity a and no delay tau stabilise the ring, reports the exact
per-mode unstable-root count, and the Walton-Marshall crossing frequencies.
cd src
python3 multilane.py ../data/multilane_results.txtTwo-lane heterogeneous lane-changing microsimulation (~45 s). Reports the steady-state amplitude for the baseline and the three controllers at 50% penetration, with heterogeneity on and off.
Requires Eclipse SUMO (pip install eclipse-sumo traci sumolib).
cd src
python3 sumo_validation.py ../data/sumo_results.txtBuilds a circular SUMO network with built-in IDM car-following, controls the AVs via TraCI, and reports the steady-state amplitude vs penetration for the baseline and the three controllers (~8 min). Deterministic at this calibration.
cd src
python3 make_figures.pyThis writes nine PNGs into ../figs/. Wall time is approximately
20 minutes because figures 2, 3, 6, 7, 8, and 9 each invoke the
Monte Carlo blocks (figs 8 and 9 add the genericity sweep and the
non-degenerate OVM calibration).
The manuscript uses the IEEEtran (IEEE Access) document class.
cd paper
tectonic -X compile manuscript_revised.textectonic fetches IEEEtran.cls automatically. With a traditional
TeX Live install instead,
pdflatex manuscript_revised.tex
pdflatex manuscript_revised.texTwo passes are needed to resolve cross-references.
If you use this code or data, please cite the manuscript (see
paper/manuscript_revised.tex for full details).