Every bus (sphere) circles the same loop, calling at eight stops. Riders (the growing pillars) arrive at each stop at a steady rate; boarding takes longer the deeper the queue, so a bus that falls even slightly behind picks up more passengers, falls further behind, and starts catching up to the bus ahead of it — the well-documented "bus bunching" feedback loop transit agencies fight every day. A red arc marks a congested road segment that slows any bus crossing it, accelerating the drift toward clumping.
Advanced Intelligent Public Transportation Systems close that loop automatically: onboard sensors report each vehicle's position in real time to a central controller, which compares the gap to the bus ahead against a target headway and, if a bus is running early relative to the one behind it, holds it a little longer at its next stop. Toggle "AI Control" to see this holding strategy — the same one real fleets use — pull a bunching cluster back into an evenly spaced, higher-throughput line.
queue(stop) += demand·dt
dwell = base + queue(stop)·boardTime
if AI on and gap_ahead(bus) < target − tolerance: dwell += hold
bunching = stddev(gaps) / mean(gap)
- Fleet size — more buses on the same loop shrink the ideal gap between them, making bunching easier to trigger and easier to see recover.
- Passenger demand — higher arrival rates lengthen queues and dwell times, the main driver of bunching in the real world (a full bus takes longer to load).
- Traffic congestion — widens and darkens the red arc; any bus inside it moves at a fraction of normal speed, exactly like a signal delay or lane closure.
- Target headway gap — the spacing (in degrees around the loop) the AI controller tries to maintain between consecutive buses.
Real-world relevance: this closed-loop sense → analyze → act → monitor cycle — the one described for AIPTSS — is exactly what turns a congestion-prone, bunching-prone bus loop into a reliably spaced, higher-capacity service without adding a single extra vehicle.