-
-
Same vehicles, same minute: fixed-time plan (left) vs ChowkPilot (right) at Hitech City, Hyderabad
-
The live control room: recorded SUMO replays, queue chart and an explanation of every phase decision
-
How it works: camera counts, a shared phase scorer built on max-pressure, and a fixed safety layer
-
Benchmark on 3 unseen Hyderabad junctions: 10 paired seeds, 95% confidence intervals, 5 stress tests
-
The control room also works on a phone
-
GIF
Replay of a recorded peak-hour run: stopped vehicles turn red
Inspiration
Hyderabad drivers lose 123 hours a year to rush-hour congestion (TomTom Traffic Index 2026). Most signals still run fixed-time plans that cannot react to the traffic in front of them. The traffic itself is mixed and lane-less: 73% of Telangana's vehicles are two-wheelers. Controllers built for lane-disciplined car traffic and loop detectors fit it badly, and ambulances lose minutes at red lights.
What it does
- Every few seconds, ChowkPilot decides which approach of a junction gets green.
- It uses only what a roadside camera can measure in the last 150 m of each lane.
- One small learned policy runs any junction: 3-arm, 4-arm, 5-arm, or a joined cluster of signals.
- A fixed safety layer enforces minimum and maximum green, a 120 s max-red guarantee and yellow plus all-red clearance, whatever the policy outputs. An approaching ambulance gets a green corridor.
- The live control room replays real SUMO runs side by side (same vehicles, baseline vs ChowkPilot). It explains every phase decision with street names, and shows the full benchmark and stress tests.
How we built it
- Digital twins: real Hyderabad areas from OpenStreetMap, converted with SUMO for left-hand traffic. SUMO's sublane model lets two-wheelers and autos filter between cars. Indian vehicle mix and assertive merging.
- The policy: a learned version of max-pressure control. A shared network embeds each movement and sums the embeddings over the movements each phase releases. It receives the max-pressure score as a prior.
- Training: Double DQN with semi-Markov rewards on true vehicle delay, using 10 SUMO workers and a GPU learner, with randomised layouts, demand, time-of-day profiles, ambulances and camera noise.
- Selection, on validation only: dense early checkpoints, re-validation on extra seeds, and an ensemble of the 3 best (91,011 parameters in total). A final check against our previous model ran on fresh seeds.
- Evaluation: 3 unseen real Hyderabad areas, 10 paired seeds (every controller sees the same vehicles), 95% CIs, paired t-tests and 5 stress conditions.
- Product: the control room is a static site on GitHub Pages; an optional FastAPI backend runs new simulations. CI runs 14 unit tests and a browser test of the site (Playwright) on every push.
Results (unseen junctions, averaged over the 3 areas)
- 59% less delay than the standard fixed-time plan, significant at all 3 junctions, winning 29 of 30 seeds. That is 555 vehicle-hours and 1.4 t of CO₂ saved per simulated peak across the three areas.
- 21% less delay than max-pressure control.
- Level with vehicle-actuated control: 2% lower on average, not significant at any junction. That baseline gets ideal loop detectors; ChowkPilot sees camera counts.
- A Webster plan re-timed with each run's exact demand, which no city has in advance, has the lowest mean delay at 2 of the 3 areas; ChowkPilot's gap to it there is not statistically significant (p = 0.43 and 0.67).
- 24% less CO₂ and 67% less ambulance delay than fixed-time.
- Best in 4 of 5 stress tests (off-peak, peak, sudden surge, 20% camera noise) and level with actuated in heavy demand.
Challenges we ran into
- Our first network averaged over the movements a phase releases. It learned to favour 2-lane turn bays and gridlocked an arterial. Summing, as max-pressure does, fixed it.
- A policy could starve a third phase, so we added a max-red guarantee for every controller.
- Every training run peaked early and then drifted, so we keep dense early checkpoints and choose on validation.
- Isolated junctions remain the weak spot. Vehicle-actuated control still wins there, which the README states.
Accomplishments that we're proud of
- Zero-shot results on real junctions it never saw, with Indian mixed traffic.
- An honest benchmark: paired seeds, significance tests, and the model chosen before any test run.
- Explanations a traffic engineer can read.
- A fully reproducible pipeline from OpenStreetMap to the website.
What we learned
Sharing weights across movements and phases makes one policy portable across junction layouts. Most of the gain over fixed plans comes from reacting to live queues. Beating well-tuned actuated control needs more than that.
What's next
- Shadow-mode trials on real camera counts at a few Hyderabad junctions.
- Pedestrian phases.
- Better isolated-junction control.
- Coordination along corridors.
Links
- Live control room: https://abderrahmanetb.github.io/chowkpilot/
- Narrated walkthrough video (2 min 37 s): https://www.youtube.com/watch?v=ymLgzVjIqkI
- Code, benchmark and model: https://github.com/AbderrahmaneTB/chowkpilot
Built With
- eclipse-sumo
- fastapi
- github
- github-actions
- html5
- javascript
- numpy
- openstreetmap
- playwright
- python
- pytorch
- scipy
Log in or sign up for Devpost to join the conversation.