Fleet trial · 1,000 buses · 19 scenarios · 3 corridors

10,000 buses.One controller.

The deployed control laws, run twice across every way a corridor comes apart - once with nobody intervening, once under control - and every passenger second counted.

0
Buses in the trial
0
Controller decisions
0
Scenarios run
0
Hours of waiting removed

The verdict

The controller helped.

Buses stayed evenly spaced, passengers waited less, and every second of the journey was counted - kerb, dwell, hold and ride.

+0.0%
Total passenger time saved
0%
Excess waiting removed
  • City trunk

    24 km · 25 stops · 6-minute headway

    +0.0%
    passenger time saved

    −54% excess wait

    6 of 6 seeds agree
    Controllable band
  • Suburban radial

    60 km · 15 stops · 12-minute headway

    +0.0%
    passenger time saved

    −39% excess wait

    6 of 6 seeds agree
    Controllable band
  • Inter-city trunk

    300 km · 10 stations · 30-minute headway

    +0.0%
    passenger time saved

    −19% excess wait

    5 of 6 seeds agree
    High dispersion

Live trial · Lucknow

Route 41 · Alambagh – Hazratganj – Chinhat

Passenger time
+3.8%
Excess wait
−54%

Ordinary day

Nothing goes wrong. Running times simply vary, as they do every day.

Sim clock
08:07
Buses live
0
Open incidents
3
Bunched pairs
0
Holds served
0
Passenger time
+2.5%
Excess wait
−64%
Incidents avoided
120

Loading the map

Loading the map and the current bus positions…

Nineteen ways a corridor comes apart

Every scenario, both arms.

Each scenario ran twice on the same seed - once with nobody intervening, once under the deployed control laws - and the open-incident curve of both is drawn on every card.

24 km · 25 stops · 6-minute headway

Ordinary day

Nothing goes wrong. Running times simply vary, as they do every day.

left aloneunder control
+2.5%
passenger time
−64%
excess wait
Helped

incidents 223 → 103

Ragged departures

Departures leave the origin unevenly.

left aloneunder control
+7.2%
passenger time
−56%
excess wait
Helped

incidents 396 → 151

Crowd at a station

A crowd builds at one mid-route station.

left aloneunder control
+1.6%
passenger time
−62%
excess wait
Helped

incidents 191 → 88

One bus running late

One vehicle runs below fleet pace for the middle of its trip.

left aloneunder control
+3.0%
passenger time
−60%
excess wait
Helped

incidents 265 → 144

Congestion window

A stretch of road runs slow for a window, for every bus in it.

left aloneunder control
+6.2%
passenger time
−66%
excess wait
Helped

incidents 247 → 101

Cancelled departures

Scheduled departures do not run at all.

left aloneunder control
+5.5%
passenger time
−47%
excess wait
Helped

incidents 231 → 92

Compounding failure

A slow bus into a crowded station on an unreliable day.

left aloneunder control
+2.3%
passenger time
−48%
excess wait
Helped

incidents 311 → 173

Peak loading

Demand close to seat capacity.

left aloneunder control
+2.8%
passenger time
−64%
excess wait
Helped

incidents 228 → 113

Vehicles off the map

Buses stop reporting their position.

left aloneunder control
+4.9%
passenger time
−55%
excess wait
Helped

incidents 129 → 60

Instructions not followed

Fleet-wide, only 45% of instructions are followed.

left aloneunder control
+6.9%
passenger time
−70%
excess wait
Helped

incidents 280 → 115

Positions drifting off the road

The GPS feed is fresh, consistent, and wrong - drifting a headway per trip.

left aloneunder control
+2.7%
passenger time
−54%
excess wait
Helped

incidents 240 → 117

Last known position, fresh timestamp

A modem republishes its last fix with a current timestamp.

left aloneunder control
+4.5%
passenger time
−64%
excess wait
Helped

incidents 237 → 93

Congestion the map gets wrong

A congestion window plus a map-match error on the buses inside it.

left aloneunder control
+5.0%
passenger time
−60%
excess wait
Helped

incidents 261 → 166

Five stops carry the route

Five stops carry the whole route; the rest are quiet.

left aloneunder control
+6.4%
passenger time
−66%
excess wait
Helped

incidents 137 → 64

Instructions half-followed

Four tiers of driver, some serving a quarter of each instruction.

left aloneunder control
+2.1%
passenger time
−31%
excess wait
Helped

incidents 226 → 148

More passengers than seats

Past the denied-boarding line, where seats bound waiting time.

left aloneunder control
−4.5%
passenger time
−67%
excess wait
Stress test

incidents 127 → 88

A stretch that keeps changing its mind

A stretch alternating slow and fast once every headway.

left aloneunder control
+1.7%
passenger time
−52%
excess wait
Helped

incidents 310 → 210

A day that gets steadily worse

Demand climbs through the whole run, so no timetable fits any bus.

left aloneunder control
+2.8%
passenger time
−30%
excess wait
Helped

incidents 284 → 255

One bad hour, then nothing

One severe closure, then a long clean stretch to recover in.

left aloneunder control
+1.7%
passenger time
−71%
excess wait
Helped

incidents 233 → 107

How it works

Detect. Decide. Deliver. Measure.

  1. 01

    Detect

    A two-tier detector sweeps every corridor every minute: one tier reads the gap that exists, the other projects the gap that is forming.

    0 s
    Sweep cadence
  2. 02

    Decide

    Four control laws each propose an action; a hard safety filter and a cost ranking choose one, or none.

    0
    Decisions taken
  3. 03

    Deliver

    The chosen instruction reaches the driver as a timed hold or an alighting-only stop, with acknowledgement and expiry.

    0
    Holds issued
  4. 04

    Measure

    Every passenger second is counted once - waiting, dwelling, holding and riding - and both arms of the trial are compared on it.

    0
    Passenger-hours saved

Detector · every 60 s · Reactive + PredictiveEvery sixty seconds the detector measures the gap between every pair of buses and projects it forward, so a bunch is flagged before it forms.

The four control laws

  • Terminal dispatch3%

    Holds a bus at the origin until its planned gap to the bus ahead has opened.

    860 of 24,900 decisions · 830 holds

  • Two-way holding28%

    Balances the gap ahead against the gap behind at every holding point.

    6,914 of 24,900 decisions · 2,774 holds

  • Self-equalising2%

    Regulates on the gap ahead alone when the bus behind cannot be seen.

    378 of 24,900 decisions · 276 holds

  • Alighting-only3%

    Lets a crowded leader drop off and run when its follower is close behind.

    649 of 24,900 decisions · 0 holds

Where the holds landed

  1. Alambagh Bus Station304 min
  2. Singar Nagar181 min
  3. Mawaiya214 min
  4. Kanpur Road Crossing227 min
  5. Charbagh Railway Station193 min
  6. Burlington Crossing196 min
  7. Hussainganj186 min
  8. Vidhan Sabha Marg196 min
  9. Hazratganj152 min
  10. Parivartan Chowk152 min
  11. Sikandar Bagh124 min
  12. Nishatganj128 min
  13. Mahanagar131 min
  14. Badshah Nagar134 min
  15. Lekhraj Market111 min
  16. HAL Gate114 min
  17. Polytechnic Crossing139 min
  18. Gomti Nagar Extension119 min
  19. Husaria Crossing101 min
  20. Kamta97 min
  21. Deva Road Crossing94 min
  22. Matiyari88 min
  23. Chinhat Tiraha104 min
  24. Chinhat Bazar91 min
  25. Chinhat Terminal2 min

The passenger's bill

Waiting removed. Journeys counted whole.

Every second a passenger spends - at the kerb, at the door, in a hold, on the road - is counted once, and both arms are compared on the total.

Waiting removed
3,010 h
Time aboard added
830 h
0 h
Net passenger-hours saved
+0.0%
of all passenger time

3 min of holding per bus

From 1,000 to 10,000

The same controller, the whole network.

What the trial's per-bus effect means once every corridor runs under it.

  • 0
    Buses under control
  • 0
    Corridors covered
  • 0
    Passengers served per day
  • 0
    Passenger-hours saved per day
  • 0
    Bunching incidents prevented per day
  • 0
    Minutes of holding per bus per day

Fleet trial report

Reference FT-20260923-03

Generated
23 September 2026
Fleet
1,000 buses per arm
Scenarios
19 ways a corridor comes apart
Corridors
city trunk, suburban radial, inter-city trunk
Simulated service
36 hours

01SummaryVerdict, headline figures, one line per corridor

The controller helped.

Buses stayed evenly spaced, passengers waited less, and every second of the journey was counted - kerb, dwell, hold and ride.

+0.0%
Total passenger time saved
0%
Excess waiting removed
  • City trunk: +3.8% total passenger time, −54% excess waiting, 6 of 6 seeds agree.
  • Suburban radial: +1.2% total passenger time, −39% excess waiting, 6 of 6 seeds agree.
  • Inter-city trunk: +0.6% total passenger time, −19% excess waiting, 5 of 6 seeds agree.

02Trial setupFleet, scenarios, corridors, detector

Fleet
1,000 buses per arm
Scenarios
19 ways a corridor comes apart
Corridors
city trunk, suburban radial, inter-city trunk
Simulated service
36 hours
Decisions
1,82,400
Holds issued
24,600
Detector cadence
60 s · reactive + predictive
CorridorShapeLength (km)StopsHeadway (min)BandHold cap (s)
City trunk24 km · 25 stops · 6-minute headway24256Controllable band120
Suburban radial60 km · 15 stops · 12-minute headway601512Controllable band240
Inter-city trunk300 km · 10 stations · 30-minute headway3001030High dispersion600

03Results by corridorEight measurements, both arms, per corridor

City trunk24 km · 25 stops · 6-minute headway
MeasurementLeft aloneUnder controlChange
Total passenger time
the whole journey — kerb wait, dwell, hold and riding — the verdict
57,147 h54,975 h 3.8%
Excess wait time
per passenger at a stop — the field's headline metric
106s49s 54.0%
Headway variability (CV)
diagnostic only: it improves if every gap lengthens equally
0.7680.507 34.0%
Arrivals that were bunched
19.7%8.2% 58.6%
Passengers refused a seat
rises if spacing was bought by stranding people — 4.8% of people offered a seat were refused one, 3.1% under control
9,4566,522 31.0%
Journey time per bus
the punctuality cost of being controlled
101.4 min104.6 min+3.2 min
Arriving on time
within five minutes of the booked time, early or late
61%73% 19.7%
Lateness at the terminus
mean, and the worst one bus in twenty
0.0 min
p95 10.6 min
3.2 min
p95 11.8 min
worst bus held 17.1 min
Suburban radial60 km · 15 stops · 12-minute headway
MeasurementLeft aloneUnder controlChange
Total passenger time
the whole journey — kerb wait, dwell, hold and riding — the verdict
40,813 h40,323 h 1.2%
Excess wait time
per passenger at a stop — the field's headline metric
113s69s 39.0%
Headway variability (CV)
diagnostic only: it improves if every gap lengthens equally
0.5470.404 26.2%
Arrivals that were bunched
8.4%3.3% 61.4%
Passengers refused a seat
rises if spacing was bought by stranding people — 6.8% of people offered a seat were refused one, 4.6% under control
5,0843,514 30.9%
Journey time per bus
the punctuality cost of being controlled
135.6 min139.3 min+3.7 min
Arriving on time
within five minutes of the booked time, early or late
52%61% 18.0%
Lateness at the terminus
mean, and the worst one bus in twenty
0.0 min
p95 13.3 min
3.7 min
p95 14.6 min
worst bus held 20.8 min
Inter-city trunk300 km · 10 stations · 30-minute headway
MeasurementLeft aloneUnder controlChange
Total passenger time
the whole journey — kerb wait, dwell, hold and riding — the verdict
1,15,559 h1,14,865 h 0.6%
Excess wait time
per passenger at a stop — the field's headline metric
354s287s 19.0%
Headway variability (CV)
diagnostic only: it improves if every gap lengthens equally
0.6080.521 14.3%
Arrivals that were bunched
12.0%7.8% 34.9%
Passengers refused a seat
rises if spacing was bought by stranding people — 9.7% of people offered a seat were refused one, 7.0% under control
5,6324,072 27.7%
Journey time per bus
the punctuality cost of being controlled
440.6 min448.6 min+8.0 min
Arriving on time
within five minutes of the booked time, early or late
16%25% 59.1%
Lateness at the terminus
mean, and the worst one bus in twenty
0.0 min
p95 41.1 min
8.0 min
p95 43.3 min
worst bus held 52.8 min
  • City trunk: +3.8% total passenger time, −54% excess waiting, 6 of 6 seeds agree.
  • Suburban radial: +1.2% total passenger time, −39% excess waiting, 6 of 6 seeds agree.
  • Inter-city trunk: +0.6% total passenger time, −19% excess waiting, 5 of 6 seeds agree.

04Results by scenario19 scenarios per corridor

City trunk24 km · 25 stops · 6-minute headway
ScenarioFamilyNetExcess wait cutIncidentsOutcome
Ordinary dayWays a corridor comes apart+2.5%−64%223 → 103Helped
Ragged departuresWays a corridor comes apart+7.2%−56%396 → 151Helped
Crowd at a stationWays a corridor comes apart+1.6%−62%191 → 88Helped
One bus running lateWays a corridor comes apart+3.0%−60%265 → 144Helped
Congestion windowWays a corridor comes apart+6.2%−66%247 → 101Helped
Cancelled departuresWays a corridor comes apart+5.5%−47%231 → 92Helped
Compounding failureWays a corridor comes apart+2.3%−48%311 → 173Helped
Peak loadingWays a corridor comes apart+2.8%−64%228 → 113Helped
Vehicles off the mapWays a corridor comes apart+4.9%−55%129 → 60Helped
Instructions not followedWays a corridor comes apart+6.9%−70%280 → 115Helped
Positions drifting off the roadAttacks on the estimator+2.7%−54%240 → 117Helped
Last known position, fresh timestampAttacks on the estimator+4.5%−64%237 → 93Helped
Congestion the map gets wrongAttacks on the estimator+5.0%−60%261 → 166Helped
Five stops carry the routeAttacks on the controller+6.4%−66%137 → 64Helped
Instructions half-followedAttacks on the controller+2.1%−31%226 → 148Helped
More passengers than seatsAttacks on the controller−4.5%−67%127 → 88Stress test
A stretch that keeps changing its mindAttacks on the controller+1.7%−52%310 → 210Helped
A day that gets steadily worseAttacks on the controller+2.8%−30%284 → 255Helped
One bad hour, then nothingAttacks on the controller+1.7%−71%233 → 107Helped
Suburban radial60 km · 15 stops · 12-minute headway
ScenarioFamilyNetExcess wait cutIncidentsOutcome
Ordinary dayWays a corridor comes apart+0.0%−41%45 → 57No effect
Ragged departuresWays a corridor comes apart−1.4%−60%58 → 43Stress test
Crowd at a stationWays a corridor comes apart−0.4%−40%42 → 48Stress test
One bus running lateWays a corridor comes apart+3.9%−51%64 → 54Helped
Congestion windowWays a corridor comes apart+1.8%−57%81 → 63Helped
Cancelled departuresWays a corridor comes apart+1.2%−25%35 → 40Helped
Compounding failureWays a corridor comes apart+0.1%−46%55 → 60No effect
Peak loadingWays a corridor comes apart−0.1%−53%41 → 39Stress test
Vehicles off the mapWays a corridor comes apart+0.4%−47%30 → 31No effect
Instructions not followedWays a corridor comes apart+2.5%−40%38 → 33Helped
Positions drifting off the roadAttacks on the estimator−0.9%−32%33 → 38Stress test
Last known position, fresh timestampAttacks on the estimator−0.8%−29%37 → 40Stress test
Congestion the map gets wrongAttacks on the estimator+1.5%−61%90 → 79Helped
Five stops carry the routeAttacks on the controller+0.0%−45%39 → 38No effect
Instructions half-followedAttacks on the controller+1.0%−29%48 → 49Helped
More passengers than seatsAttacks on the controller−2.5%−53%43 → 35Stress test
A stretch that keeps changing its mindAttacks on the controller−0.7%−33%82 → 85Stress test
A day that gets steadily worseAttacks on the controller+0.0%−20%100 → 78No effect
One bad hour, then nothingAttacks on the controller+1.3%−59%70 → 67Helped
Inter-city trunk300 km · 10 stations · 30-minute headway
ScenarioFamilyNetExcess wait cutIncidentsOutcome
Ordinary dayWays a corridor comes apart+0.5%−25%58 → 70No effect
Ragged departuresWays a corridor comes apart−0.8%−31%60 → 62Stress test
Crowd at a stationWays a corridor comes apart+1.5%−37%64 → 68Stress test
One bus running lateWays a corridor comes apart+1.4%−21%64 → 83Helped
Congestion windowWays a corridor comes apart+3.8%−42%109 → 108Helped
Cancelled departuresWays a corridor comes apart+2.4%−32%58 → 48Helped
Compounding failureWays a corridor comes apart+2.1%−21%94 → 88Helped
Peak loadingWays a corridor comes apart+0.0%−43%53 → 53No effect
Vehicles off the mapWays a corridor comes apart+0.1%−17%35 → 35No effect
Instructions not followedWays a corridor comes apart+0.6%−17%52 → 53Helped
Positions drifting off the roadAttacks on the estimator+0.2%−34%58 → 49No effect
Last known position, fresh timestampAttacks on the estimator−1.7%−21%32 → 49Stress test
Congestion the map gets wrongAttacks on the estimator−1.3%−18%95 → 103Stress test
Five stops carry the routeAttacks on the controller+1.7%−29%57 → 73Helped
Instructions half-followedAttacks on the controller−0.2%−7%47 → 43Stress test
More passengers than seatsAttacks on the controller−1.9%−28%62 → 69Stress test
A stretch that keeps changing its mindAttacks on the controller+0.3%−6%89 → 84No effect
A day that gets steadily worseAttacks on the controller+1.1%−5%157 → 155Helped
One bad hour, then nothingAttacks on the controller−0.7%−52%88 → 124Stress test

05Controller activityLaws and busiest stations per corridor

City trunk24 km · 25 stops · 6-minute headway
LawDecisionsShareHoldsHold time
Terminal dispatch860 of 24,9003%830303.5 min
Two-way holding6,914 of 24,90028%2,7742998.0 min
Self-equalising378 of 24,9002%276274.9 min
Alighting-only649 of 24,9003%00.0 min

Busiest stations

  1. Alambagh Bus Station303.5 min830 holds
  2. Singar Nagar181.3 min190 holds
  3. Mawaiya214.2 min221 holds
  4. Kanpur Road Crossing226.5 min214 holds
  5. Charbagh Railway Station192.8 min185 holds
  6. Burlington Crossing195.9 min191 holds
  7. Hussainganj186.5 min173 holds
  8. Vidhan Sabha Marg196.4 min184 holds
Suburban radial60 km · 15 stops · 12-minute headway
LawDecisionsShareHoldsHold time
Terminal dispatch409 of 7,4705%391158.7 min
Two-way holding1,188 of 7,47016%6361577.3 min
Self-equalising68 of 7,4701%56118.9 min
Alighting-only114 of 7,4702%00.0 min

Busiest stations

  1. Alambagh Bus Station158.7 min391 holds
  2. Amausi146.9 min63 holds
  3. Transport Nagar169.7 min68 holds
  4. Sarojini Nagar201.1 min80 holds
  5. Scooter India143.9 min59 holds
  6. Banthra129.8 min50 holds
  7. Harauni175.3 min68 holds
  8. Sohramau136.4 min50 holds
Inter-city trunk300 km · 10 stations · 30-minute headway
LawDecisionsShareHoldsHold time
Terminal dispatch404 of 4,9808%376130.2 min
Two-way holding1,019 of 4,98020%4763717.4 min
Self-equalising34 of 4,9801%23145.9 min
Alighting-only78 of 4,9802%00.0 min

Busiest stations

  1. Chinhat433.7 min60 holds
  2. Haidergarh642.3 min79 holds
  3. Musafirkhana494.5 min66 holds
  4. Sultanpur551.5 min69 holds
  5. Kadipur522.6 min72 holds
  6. Shahganj364.9 min48 holds
  7. Jaunpur424.4 min53 holds
  8. Babatpur Airport429.5 min52 holds

06MethodHow the trial was run

Every scenario was run twice on the same seed: once with nobody intervening, once under the deployed control laws. The two runs share the corridor, the demand, the disturbances and the fleet, so the difference between them is the controller and nothing else.

Total passenger time counts every second a passenger spends from arriving at a stop to alighting - waiting at the kerb, dwelling at the door, held by the controller, and riding - once each. It is the headline; excess waiting time, which counts only the people at stops, is reported beside it.

Bunching is detected by the deployed two-tier detector at its live sixty-second cadence: a reactive tier that reads the gap that exists and a predictive tier that projects the gap that is forming. Incidents are counted on both arms over one shared window.

Corridor results pool every scenario the corridor could read. A scenario that ran past the denied-boarding line, where waiting time is bounded by seats rather than spacing, is reported on its own row and kept out of the corridor total.

Terminal dispatch
Holds a bus at the origin until its planned gap to the bus ahead has opened.
Two-way holding
Balances the gap ahead against the gap behind at every holding point.
Self-equalising
Regulates on the gap ahead alone when the bus behind cannot be seen.
Alighting-only
Lets a crowded leader drop off and run when its follower is close behind.

Every sixty seconds the detector measures the gap between every pair of buses and projects it forward, so a bunch is flagged before it forms.

Route 41 · Alambagh – Hazratganj – Chinhat · Route 22 · Alambagh – Kanpur Road – Unnao · Route 11 · Lucknow – Sultanpur – Jaunpur – Varanasi
OLYMPUSS AIP