|
|
About ::
TODO ::
Blog ::
RSS ::
Old blog ::
Projects ::
GIT ::
Gallery ::
Notes
Tue, 26 Feb 2008
Traffic jam simulator and some math analysis.
Trying to make at least something during fscking sick.
I've create a simple traffic simulator, which contains variable number
of cars and lights, each of which can be programmed to different acceleration,
maximum allowed speed, stop and deceleration distances. Each light can be
programmed to switch lights after different interval, there are only two lights
in real life: red and green, at least in Moscow very unfortunately) no one
ever cares about yellow, lots of drivers specially accelerate when see yellow...
So, only two colors.
Since I did not bother to implement a nice config for each car and light,
there is only signle set of parameters, but command line parameters allow
to vary initial number of cars and distance between them, number of time frames before
lights change the state or new car enters the road, number of lights
and distance between them.

There are two known problems with the lights on the road: first, bad drivers,
who do not maintain a huge enough buffer, so they have to wait until car
in from of them moves far enough so they can start, this takes some time
from limited timeframe of the green light. If buffer is large enough, drivers
can start simultaneously and thus move much faster.
One can simulate
this behaviour with variable initial number of cars and with different distances between
them, if distance is less than stop distance (i.e. distance where driver has to
stop its car, it is 4 in the current setup), then driver will have to wait,
until distance becomes more or equal to stop distance, if driver stopped far than
stop distance (let say 5 'meters'), then car can start simultaneously with the head. The latter
approach allows to move more cars through the light during fixed time frame,
but psychologically it looks better to stay as closer as possible to the head
car, which introduces a latency, since we have to wait until head car moves far enough,
so we could start. This leads to negative exponential speed increase for each car
behind instead of linear speed if drivers would maintain the buffer. Appropriate
equations are quite simple: difference of the distance moved by the single
time frame is proportional to the acceleration of the head car, which in turn
is proportional to its coordinate, so we have a simple differential equation,
which solution results in a negative exponential. One can read a bit more
here.

Second problem is light interval. If interval is too short, then cars can not start,
only couple of them moves forward, and if it is big enough, then during red light
a large backlog of cars can be accumulated, and it will not be removed during green light
because of the above problem: each car has to wait until head one moves to some distance.
The latter is actually worse, since backlog can become so huge, that it will not be removed
at all, which will lead to complete stall of the traffic flow (at the back side, front one will
move, but number of cars at the tail will be bigger than number of cars which leave the
traffic jam).

One can play with the programm, called
traffic.
It requires gtk2 devel package installed. Homepage contains essentially the same text
and link to the source code.
It also shows usage example.
Enjoy!
/devel/other :: Link / Comments (7)
|