
Why do buses bunch? - lewis500
http://setosa.io/bus/
======
AceyMan
I commute in LA and observe (and am impacted) by this regularly; so much so,
that I've been meaning to write the municipal operator about solving the
issue, or at least reduce the tendency (attractor?).

My mitigation idea: When the buses become bunched; the forward bus should
switch to 'Disembark Only' mode. (Most modern buses I've seen have a preset to
post this on the LED signage). This way it can pass all the stops with folks
waiting and (we hope) will make enough time up to get far enough down the line
to remain un-bunched.

Then, by some condition (e.g.,"back to within 5 minutes of posted schedule")
switch back to normal "pickup & drop-off" mode.

It's very cool to see someone else noticing and thinking about this phenomena.

To quote the great thinker Yogi Berra, "You can observe a lot just by
watching."

~~~
bluehawk
I think this would work well, but my gut reaction is that a passenger who is
already annoyed at a late bus watching that bus just go right on by would be
unappreciative.

~~~
charliepark
A couple of tweaks that might make it less problematic for you:

1\. Bus #1's signage updates so it doesn't show the bus route externally; it's
no longer "your" bus, so you aren't upset when it passes by

2\. Bus #2 (which is ostensibly no more than half a block away) has an N%
discount for passengers (where N increases according to demand).

3\. When Bus #1 gets "bumped" (metaphorically) by Bus #2, bus company
regulations have it pull over and let Bus #2 pass it; therefore, the less-
crowded Bus #2 can pick up more of the waiting passengers. [Edit: Oh; I see
this has been covered in some other comments already.]

~~~
baddox
> it's no longer "your" bus, so you aren't upset when it passes by

It's not always so easy to trick people. For me, in SF, there are often bus
stops with either only one bus line, or with multiple bus lines that will all
take me to my destination.

~~~
dredmorbius
"Out of Service" or "Charter".

~~~
Lawtonfogle
Getting caught lying will make it even worse.

~~~
dredmorbius
Technically, the signage is correct ;-)

------
derefr
Note how this would all go away if the empty buses could pass the full buses.
Which they usually can, since even on single-lane roads, the _bus stop_ is out
of the way of traffic.

But then there are _trolleybuses_. When the busses are all hooked to a single
overhead cable run, as is common in places like Vancouver, the driver of one
trolleybus would have to de-latch and then re-latch their "rabbit ears" (i.e.
get out of the bus twice) in order to pass another trolleybus. Needless to
say, this is uncommon. (Someone on HN: _please_ , come up with a trolley pole
design that can hot-pass another trolley pole pair while remaining on the
line, and sell it to cities.)

~~~
learnstats2
>Note how this would all go away if the empty buses could pass the full buses.

It's more complicated than that and has to be managed carefully.

Here's what happens in the unmanaged case:

\- The empty bus passes the full bus

\- There are passengers waiting at the next stop

\- The empty bus stops to pick them up

\- There are no passengers waiting

\- The full bus typically doesn't have to stop

\- The full bus passes the empty bus

Now these buses are irrevocably bunched.

P.S. This site doesn't work for me at all.

~~~
jules
Exactly. A method that _does_ work is to make the full bus exit-only: no new
passengers are allowed to enter the bus. You keep that bus exit-only until it
has caught up to its schedule. This also works fine with trolley buses.
Unfortunately this is hard to match with human psychology of the people trying
to enter a bus.

~~~
derefr
On routes that are heavily front-loaded (a connection from a metro line to a
neighbourhood the metro doesn't reach, for example), this can result in the
first five-to-ten stops on the route effectively being knocked out during rush
hour. Anybody who actually wants to catch the bus has to walk ten blocks over
to the first stop.

~~~
flinty
A display at the bus stop showing when the next 3-5 buses are going to stop
approximately solves the problem

~~~
juliangregorian
It really helps. In New York some subway lines have this and some do not. On
the lines that do not, you sometimes hear the conductor announce "there is a
train immediately behind this one" but it's not nearly as effective as when
everyone waiting on the platform has been able to see that.

------
nwp90
When I lived in London, and used buses fairly regularly, I started thinking
about ways to improve the service and stop bunching. I considered the reason
stated here, and some of the solutions, but later realised that the root cause
was that the drivers liked to stop and chat and perhaps play cards with each
other at the (presumably unsupervised) "bus station" at the far end of the
route. Once I'd observed 3 of them waiting for each other, chatting, and then
_all leaving at once on the same route_ , my interest in trying to think of
ways to fix the problem waned.

~~~
brc
I lived in London and used to ride the 9, which at the time was one of the
last routemaster buses.

I also learned that the drivers are comfortable in their chair, and they get
paid whether they are late or early, whether they take off smoothly or like a
jackrabbit, and whether people are crammed in or left waiting on here stop
because they weren't quick enough.

In other words, automation has to be a part of any solution, because the
drivers do not care.

~~~
nwp90
I'm sure there are several valuable lessons hidden away in there - concerning
assumptions, human factors, jumping to "obvious" solutions without having
verified the actual cause of a problem, unintended consequences etc. etc.

Would be interesting to look at a system where it does actually work well and
see what's different.

------
_delirium
Fwiw a relevant general concept is that of stable vs. unstable equilibria. In
a stable equilibrium, small deviations will tend to correct back to the
equilibrium, while in an unstable one, small deviations get magnified and the
system drifts away from it (absent active intervention). Given some
assumptions, such as those implemented by this simulation, evenly spaced buses
represent an unstable equilibrium, since a bus slightly early or late will
cause an asymmetry in passenger load that pushes things further in the "wrong"
direction.

------
hoverbear
It makes me sad that this doesn't seem to work in Firefox!

~~~
Sir_Cmpwn
Yet another example of a lazy Chrome dev. This is getting too prevalent.

~~~
judk
Google is turning into Microsoft 2000. It is the natural order of things.

------
itsybitsycoder
Where I live, if a bus gets late enough (or too full) and the driver knows
there's another bus right behind, they'll start skipping stops. I don't think
that would help in this simulation because people getting on seem to be
equally likely to want to get off on each stop, but IME that's not really
accurate for most bus routes. People want to get on the bus at all sorts of
random places, but 90% of people are getting off at the same two or three
stops (transfer point, city center, etc). It would be interesting to see these
things would affect the bunching, I think.

------
Animats
There's a bug in that simulator:

    
    
        00:12:07.824 "Error: Argument 1 of SVGPathElement.getPointAtLength is not a finite floating-point value.
        [6]</MapCtrl</MapCtrl.prototype.place_bus@http://setosa.io/bus/dist/bundle.js:380:10
        $parseFunctionCall@http://setosa.io/bus/dist/bundle.js:29490:15
        expressionInputWatch@http://setosa.io/bus/dist/bundle.js:29899:31
        $RootScopeProvider/this.$get</Scope.prototype.$digest@http://setosa.io/bus/dist/bundle.js:31386:34
        $RootScopeProvider/this.$get</Scope.prototype.$evalAsync/<@http://setosa.io/bus/dist/bundle.js:31591:15
        completeOutstandingRequest@http://setosa.io/bus/dist/bundle.js:22010:7
        Browser/self.defer/timeoutId<@http://setosa.io/bus/dist/bundle.js:22398:7
        "1 bundle.js:28741:17
        consoleLog/<() bundle.js:28741
        $ExceptionHandlerProvider/this.$get</<() bundle.js:25682
        $RootScopeProvider/this.$get</Scope.prototype.$digest() bundle.js:31412
        $RootScopeProvider/this.$get</Scope.prototype.$evalAsync/<() bundle.js:31591
        completeOutstandingRequest() bundle.js:22010
        Browser/self.defer/timeoutId<() bundle.js:22398
    

No buses are drawn.

------
mmanfrin
This site/group also did a fantastic visualization on gridlock vs.
bottlenecks:

[http://setosa.io/blog/2014/09/02/gridlock/](http://setosa.io/blog/2014/09/02/gridlock/)

~~~
FatalErrorr
I've never heard of them before, but they have some really amazing things! I
am thoroughly impressed.

------
Ellipsis753
This is interesting and I like the display.

However, in Firefox (Gentoo 35.0) the buses don't stick to the roads on the
turns and seem to go a little slower than intended.

This therefore means that the buses don't bunch at all.

This is an amusing bug as it's pretty much impossible to notice (everything
works) but ruins the effect on Firefox.

------
pkaye
Now how do we explain how buses seem to arrive and depart just before we
arrive to the stop?

------
dukerutledge
This kills the firefox.

~~~
stephengillie
Does anyone know _why_ this doesn't work in Firefox?

~~~
benihana
Based on the tone of some other responses, I'm guessing because the author of
this is literally hitler.

~~~
stephengillie
Does anyone have a technical means for Hitler to do this?

------
david_p
I believe that to solve this problem, metros in paris have two strategies:

-1 a train that has a train too close before it will idle between stations to restore a reasonable space between trains (problem: all trains go as slow as the "first" train)

-2 a train that has train too close after it will ask all travelers to step out at a station to wait for the next train, then skip a couple of stations to restore a good space between trains (problem: people in the "scarified" train get a big delay)

------
smegel
Is it just me, or did it not actually explain why:

> Bus bunching happens because, if a bus gets delayed, then there will be more
> people waiting at the next stop than anticipated. The extra passengers'
> boarding time makes the bus even later, and so on in a vicious cycle.

OK, so I get that buses get delayed. And even more delayed. But why buses
"bunch" up and arrive at the same time doesn't seem to be explained anywhere.

~~~
UberMouse
This doesn't even seem like an accurate simulation, if bus 1 is
unloading/loading at a bus stop and bus 2 catches it, bus 2 waits for bus 1.
This makes sense in the context of the website because buses always drop
off/pick up passengers when they get to a bus stop. But that isn't how it
works in real life, if bus 2 doesn't have to drop off someone while bus 1 is
at the stop it will just leapfrog past it.

The fact that busses don't overtake each other seems to be the reason the
bunching happens, as soon as the front bus starts slowing down a little it's
inevitable bus 2 will catch it and then the situation can't be fixed.

------
softgrow
Buses bunch as they move further along the route as a consequence of having a
dwell time (the time spent at the stop) that increases as a result of the
number of passengers boarding at each stop increases AND having passengers
arrive at each stop randomly. You can reduce bunching effects by:

* loading passengers who have already paid through multiple doors like Curitiba which every transport engineer includes on their honeymoon :)

* having passengers use smart cards rather than cash which is slower

* running infrequent services so passengers read the timetable and do not arrive at the bus stop randomly as their is an incentive to be their at the timetabled time.

The last method is obviously not acceptable in running a service but it
highlights the curse of running frequent services. As frequency increases,
people's behaviour moves to "turn up and go" rather than read a timetable and
the buses bunch. So you in effect trade waiting time, waiting for a timetabled
service for bunch delay time. Hence one good reason to go for smart cards or
bus platforms where you pay prior to boarding the platform like a train
station to speed up loading.

------
osi
In Chicago, the CTA is rolling out new 2-way communication into buses to allow
the dispatcher to try and help alleviate bunching

[http://chi.streetsblog.org/2015/05/14/heres-how-new-cta-
tech...](http://chi.streetsblog.org/2015/05/14/heres-how-new-cta-technology-
helps-reduce-bus-bunching/)

------
chaz
NYC Metropolitan Transportation Authority posted a cute 8-bit video about the
same problem, but for subways:
[https://www.youtube.com/watch?v=eShtZSx4kWc](https://www.youtube.com/watch?v=eShtZSx4kWc)

------
ChrisNorstrom
Nice explanation I just wish it went into more detail as to WHO causes the
time delay. No bus stop line has stops where the exact amount of people get on
every time. It's the fact that the first bus picks up more people (due to rush
hour) and those people take more time to get on, request more stops and delay
the bus. The time delay is caused by:

Asymmetrical passenger quantity. (usually rush hour)

Which the really nice demo doesn't show (because it wants to show the delay
with the passengers as a control). Both bustops have the same number of
passengers each in relation to each other. That's just not realistic. In the
real world, the asymmetrical passenger quantity causes the delays, not
traffic.

------
yason
But trains generally don't.

Trains are signalled so the waits and delays take place between stations and
not at the platform: it takes a while for the delayed train to reach the next
station so it won't just sit behind the first train and be of no use.

The stop times for commuter trains are quite consistent because there's no
onboard ticketing: people just hop out and then on, and that's it. Tickets are
prepurchased or sold by the conductor while the train is moving.

A good portion of the time spent at a stop is spent decelerating and
accelerating and not only loading/unloading passenger. Even if there were no
passengers, the stop time wouldn't necessarily be substantially shorter.

There's no other traffic which helps keep to the schedules: this cuts down the
sources of unexpected delays. Barring track and switch failures, the only
source of delay is a huge crowd of passengers leaving and boarding on a single
station. Even there, station platforms are quite long and even if some venue
were to ooze thousands of people out to the train station at the same time,
there's a limit of how many people can realistically populate the whole
platform in between trains. So there generally is always some space on the
platform to which the existing passengers can still exit, and people waiting
on the platform tend to saturate available free space instead of crowding into
an unpenetrable flock.

Now, buses could use "soft signalling" to even out the distance between
consecutive units. Using travel cards only (either with prepaid monthly
periods or by having single-fare smartcard readers onboard) and allowing
unloading/loading through all doors at the same time would help. Bus lanes and
unconditional traffic light prioritization (bus always gets green light) for
public transit are used in many countries. But there's very little to do about
the capacity of a bus and the short length of a bus stop.

Even trams are much better: they can take in 3x-5x as many passengers and tram
stops are generally much longer, allowing the tram to operate with 6-8 doors
instead of 2-3 like a bus. Tram routes are often heavily isolated as well, and
run with at least some basic level of traffic light priorities.

~~~
Animats
_" But trains generally don't._"

The London subway has real problems with this, because they have so much
rolling stock on some lines that any delay cascades back through the chain of
trains. On some lines, a 30 second delay will cause the train behind to stop
between stations, which means it has to accelerate again, putting it about a
minute behind. This can delay several following trains.

The Yamanote line in Tokyo, which is a big loop around the central city, has
trains about every 2 minutes. If any train is delayed by 5 seconds, the
schedule for all the trains in the loop is slipped back 5 seconds. This
maintains spacing.

------
stephengillie
(Not trying the article's domain against the corporate firewall, sorry)

Sometimes it's because there's traffic going the opposite way. Many buses
travel a circuit, so their route ends at its beginning. If your bus is late,
maybe it was stuck in traffic an hour ago, and was late to every stop since
that traffic.

Traffic itself becomes a travel-time multiplier - driving a car home from some
offices, leaving at 3pm would get me home at 3:30. But leaving at 3:15 gets me
home at 4. Leaving at 3:30 gets me home at 4:30. It seems to describe a bell
curve that maximizes about 5:30 or 6pm.

~~~
judk
Why are you afraid to _try_?

------
leni536
Even cars "bunch" (cause traffic jams) without any apparent reason. It's due
to instabilities in traffics caused by reaction times [1].

[1]
[http://www.sciencedirect.com/science/article/pii/S0167278905...](http://www.sciencedirect.com/science/article/pii/S0167278905003775)

Direct link: [http://www-
personal.umich.edu/~orosz/articles/PhysicaDpublis...](http://www-
personal.umich.edu/~orosz/articles/PhysicaDpublished.pdf)

------
cmdrfred
Over here in and around Philadelphia I think the main problem is the
stoplights. In my commute home I literally have to stop at each and every one
and they are sometimes no more than a few hundred feet apart. I always wonder
why they can't be synchronized in some way to allow for a more fluid traffic
flow, but never the less they seem to like stopping long lines of traffic to
allow a single car or two to get out of a shopping center with the priority it
seems being given to those in the shopping center.

------
gd2
In the simulation, the back of the bus slides out like a race car in the "S"
curve. Don't spill your coffee.

------
skatenerd
I actually made a small tool to track bus bunching in Chicago.

[https://github.com/skatenerd/buses/blob/master/artifacts/hea...](https://github.com/skatenerd/buses/blob/master/artifacts/healthy_buses_for_once.png)

The results were largely depressing, but unsurprising.

------
lewis500
hey yall maybe you will like this short paper on dynamic control for bus
bunching from my group
[http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.153...](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.153.1664&rep=rep1&type=pdf)

------
junto
I must be missing the complexity here. Surely this is.simple, since buses run
to a timetable. Hence they can only be on time or late, but never depart
earlier than advertised. Hence over time the chances that it will be delayed
increases the chances of bunching.

~~~
ido
Buses here (Berlin) often depart as soon as they reach the station, which can
be early (except on their very first station I guess).

You could argue that they shouldn't, though.

------
Grue3
If you ever played Minimetro, the trains always bunch when you put several of
them on one line.

------
duncancarroll
Anyone else learn this from scheduling trains / switches in A-Train? =)

------
guyzero
Two words Toronto streetcar riders dread: short turn.

------
pkulak
Here in Portland I've often seen pairs of bunched busses leapfrogging each
other at every stop so that at least they both move faster.

------
fexl
In Lima Peru the bus drivers pay spotters on the street who report flow
conditions by cell phone.

~~~
ivancamilov
They do this in my city too (Bogotá, Colombia). It's actually illegal here,
but they do it anyway.

~~~
fexl
It's bizarre that it would be illegal. For all I know, it might be illegal in
Peru too, but it happens, and it works pretty well.

In Lima, the spotters are known as "dateros" (loosely, "data wrangler"). The
bus drivers pay them roughly 20 centavos, I think per stop but I'm not
certain.

One case where it doesn't work is when certain bus drivers ignore the system
and aggressively jump ahead of other buses. Nevertheless, it's pretty smooth.

------
tempodox
Doesn't seem to work in my browser. Maybe my address bus bunches with the data
bus.

------
owenwil
Damn, this is a beautiful site.

------
falsedan
Wow, this was the CS101 4th week assignment I had to do (without the
graphics).

------
dovg
Hi Lewis.

I really liked this page, but it is consuming too memory and CPU power.

------
jezfromfuture
traffic lights...

------
thrownaway2424
Where's the button to make the goldbricking union bus driver stop and get out
for a smoke break in the middle of the run?

------
justincormack
Because bus drivers like to play poker together in the pus station.

------
samstave
I haven't read the article, but I ride the bus a lot. Here is my subjective
take: bus drivers get into a very distinct and slow pattern of their bus
driving behavior. Slow to do everything, never not taking their break, never
attempting to make up for lost time.

So in their daily routine, the traffic between stops is variable, but their
little rituals and apathy to the travel plight of passengers is not.

They also like to take up time socializing between driver swaps, which aren't
accounted for in bus schedules. Thus the largest factor is bus A may have no
traffic, and bus B had a lot, but their stops at each place take the same
amount of time, thus they end up clumping when traffic let's one drive between
stops faster than the other, who will still be on his break at the Bart
station.

~~~
URSpider94
The point of the article is that you can generate this behavior in an ideal
system without taking into account differences in drivers.

Put simply, small stochastic differences in arrival rates of passengers or
initial speed of buses will amplify themselves. If you take three buses and
shift the center one in time, you'll end up with one longer gap and one
shorter one. The bus with the longer gap will tend to find more people waiting
at each stop, while the bus with the shorter gap will find fewer people and
move faster. Ultimately, the faster bus will catch the one in front of it and
follow it, with zero people getting on at each stop. There will then be a
-huge- gap, followed by a very slow bus that has to pick up a ton of people at
each stop.

~~~
samstave
Which pretty much maps to my comment.

~~~
aczrWcJGuRhB

      I haven't read the article, but ...
    

it's an interactive and intuitive explanation of why this happens, and it has
nothing to do with anything you mentioned.

"my ignorance is just as good as your knowledge"

~~~
Karunamon
Did you really just create a throwaway account to slag on someone else's
comment? Please don't do that :/

