### Traffic Flow Simulation Car-Following Model

```Traffic Flow Simulation
Car-Following Model
By: Ittinop(Pun) Dumnernchanvanit
Introduction:

What is done in this project?
◦ Simulate traffic following each individual car.
◦ Use AI to simulate driver’s behavior on road
◦ Observe and analyze traffic phenomena

Why car-following model?
◦ Traffic is extremely complex and most
phenomena are non-linear and cannot be solved
easily and accurately through equations.
Example uses for simulation:
◦ Can help maximize traffic flow. For instance,
determine the most efficient automated red
light, green light pattern.
◦ How far to put a warning sign for road block.
◦ Help in choosing between stop sign/red light
green light at specific intersection
Phenomena Simulated:
Shockwave
 Cutting in front
 Platoon
 System of four way and three way
intersections

Mechanisms behind the simulation

Speed
Density Approximation
Mechanisms behind the simulation

Acceleration:
Mechanisms behind the simulation

Angular movement calculated using turn
◦ This way we can turn without worrying about
speed
Mechanisms behind the simulation:
Angular movement
Mechanism behind the simulation:
Angular movement

Angular movement:
Mechanisms behind the simulation:

Turn radius calculation: (for future improvement)
◦ 1. Find intersection using y = mx+b etc.
◦ 2. Find distance from lane end to intersection
◦ 3. Find angle 3
Mechanisms behind the simulation
how to show vehicle with its direction
 take car to center, then use rotational
matrix, then take it back

Project code composition:
Car
 Lane
 Creator
 main

Car

Variables:
◦
◦
◦
◦
◦
◦
◦
(x,y)
Direction
Max speed
Max acceleration
Max brake
Lane
waypoints
Car

Methods:
◦ react() –determines acceleration and angular
movement. Basically that is how real world
driver control car, pedal/brake for
acceleration and wheel turning for angular
movement.
◦ move() – move the car according to
acceleration and angular movement.
◦ getFrontCar(), getBackCar(),
getBackMostCar()
Lane

Variables
◦
◦
◦
◦
◦

Position
Width
Direction
Leftlane, rightlane
Start, end
Methods
◦ getDirection()
rightlane_raw)
◦ isEqual(Lane* a)
Creator
Works like car factory that spit out car
on to lane from some specific point.
 Spit out if no car with in a specific
distance
 starting_speed:

◦ = max_speed*(1-min_d/d);
and will not over produce.
 Can adjust density using this.

Creator

Variables:
◦
◦
◦
◦

Waypoints, endland transitions
Distance between cars
Starting speed
Chance to produce etc.
Methods
◦ closeByCar() test if there is car near by the
creator object (Can adapt do different
density)
◦ createCar()
Main

Set-up the system
◦ Build lanes, and creators/or cars

loop through time steps
◦ Run the car
◦ Record the results
Assumptions
• All units in meters and seconds
• chose 0.1 sec for time step because human
reaction is 0.2 sec
Max speed: 65 kmph
 Max acceleration: 3.79 m/s

◦ (~7.1s 0-60mph)

Minimum distance between car:
◦ 7m from center to center, or around 2-3m
between car.
Max Flux Derivation

What should max flux be?
Max Flux Data
Distance between
cars (m)
24
19
14
9
4
flux (n/s)
1.06
1.18
1.27
(calc. = 1.285)
1
0.66
Shockwave
Traveling disturbance in distribution of
 Usually backward motion

Shockwave

Video:
Platoon

This is an idea to group vehicle in to
platoons to increase the capacity of road.
◦ This allow cars to be closer to each other.

This will need smart car that can be
driven by artificial intelligence
Platoon

Video:
Platoon

Data comparison: (Assume that on one of
the lane, there is 50%/50% chance that
creator will produce platoon or car.)
Platoon
No Platoon
average final
time (s)
24.1601
27.174
flux (n/s)
1.73
1.27

How it is done:
◦ Car object contain pointer to object
targetlane and lane
◦ Why targetlane?
 vehicles will also check other vehicle’s targetlane in
their loop so they can recognize incoming car from
another lane and yield for it.

Algorithm
◦ At road block, vehicle slow down and tries to
cut in front of another vehicle.
◦ distance to back car and to front car in target
lane vehicle need to cut is set
◦ when vehicle is set to change lane, it turn and
run toward the lane and then turn the wheel
back when it is in the middle and
Something to keep in mind when
looking at data
Time is counted from entering system to
exiting system.
 If flux is low, it might means traffic jam
might propagate much longer than system
which means the car would have waited
much longer outside the system than the
case with less flux


No sign, see block at around 100

Sign at 100, see actual block around 200
No Warning Sign
Production average
flux (n/s)
distance
final time
(s)
24
70.7099
0.37
34
41.8327
0.366667
44
36.5018
0.37
Warning Sign
average
flux (n/s)
final time
(s)
51.7759
0.36
28.6344
0.426667
23.2858
0.423333
Cut in Front: How it is done
Driver looks to another lane to decide
whether it is worth to cut in front.
 Then look to the back to determine if it is
possible to do so

Cut in Front: How it is done

Judgment criteria driver use for front car:
◦ coefficient*( (speed of front car in our lane)*time +distance to
front car in our lane ))
◦ (speed of front car target lane)*time +distance to front car in
target lane
◦ where time is any set time, depending on driver’s experience.
◦ coefficient allow us to set how much we want the driver to cut
Cut in Front: How it is done

Then look at back car
◦ driver look at speed of back car and distance
to back car.
◦ driver knows the amount of time he will use
to cut in front.
◦ simple algorithm used is just,
(coefficient*distance) >( (back car speed)*(cut
time))
Cut in Front: Movie

Show outside
Cut in Front:
Data (5 lanes), del_t = 1.0s
Distance = 14 m
Coefficient
Distance = 54 m
flux (n/s)
Number of
cuts per car
1.1
average
final time
(s)
48.9568
flux (n/s)
Number of
cuts per car
1.69195
average
final time
(s)
38.8109
1.45
0.95
0.22807
1.5
48.3438
1.49
1.05593
38.7677
0.95
0.157895
2.0
46.417
1.48667
0.44843
38.7014
0.95
0.101754
3.0
45.8578
1.49333
0.176339
38.7028
0.95
0.0982456
5.0
45.7897
1.49
0.152125
38.7021
0.95
0.0982456
Keep in mind:

Note that there are so much more
variables such as car density we can
manipulate and these behaviors might
change totally.
System of four lane with three lane
attached to it on the east
 Cases:

◦ Red/green light
◦ all-way stop sign
Complex Road System: How it is
done

Waypoints:
◦ the way point build and given to car creator
◦ makes sense because driver usually knows
where he is going to go from the start. (most
of the time)
◦ In this project, the waypoints are different
lanes the car will go through before exiting
Complex Road System: How it is
done

Red light/Green light set up
◦ Red light are built into lane class. Basically, car
on the lane check if it is turned on, if so stop
at the light if front car is farther than the lane
end.
◦ Set red light in main class. Set repeating
pattern using fmod()
◦ Assume no left turn
Red light/Green light Video

Show outside
Complex Road System: How it is
done
All way Stop signs in this project was
extended from red light code.
 Check area in the middle and open green
light to let some car in temporarily.

All-way Stop Signs Video
◦ Show outside
Red light/green light
Production average
flux (n/s)
Distance final time
(s)
7
102.126
1.87143
15
97.4733
1.87143
30
90.122
1.81429
50
83.9205
1.67143
Stop signs
average
final time
(s)
110.135
104.56
92.4511
74.2911
flux (n/s)
0.485714
0.614286
0.642857
0.642857