Simple traffic simulator.
git clone git@github.com:mactat/MBSE-traffic-simulation.git
cd ./MBSE-traffic-simulation/
pip3 install -r requirements.txt
cd ./src
# For example with animation
python3 example.py
# For headless
cd ../tests
python3 ../src/headless.py < "input1.txt"
from sim import Scheduler
highway_length = 1 # in kilometers
num_of_lanes = 4 # number of lanes
average_drivers_mood = 0.85 # how propable it is that driver will not perform any action
sim_time = 20 # in minutes
inflow = 10 # cars per minute
speed_limit = 60 # in kilometers per hour
propotion_of_autonomous = 0.5 # propotion of autonomous cars
proportion_of_trucks = 0.1 # proportion of trucks
scheduler = Scheduler(
average_drivers_mood = average_drivers_mood ,
num_of_lanes = num_of_lanes,
highway_length = highway_length,
speed_limit = speed_limit,
propotion_of_trucks = propotion_of_trucks,
proportion of autonomous = propotion_of_trucks,
step_time = 1)
results, results_dict, average_speed = scheduler.simulate(time_of_sim = sim_time, inflow = inflow)
scheduler.num_of_lanes = 3
scheduler.average_drivers_mood = 0.97
scheduler.reset()
results, results_dict, average_speed = scheduler.simulate(time_of_sim = sim_time, inflow = inflow)
Exporting only data
After simulation data can be safed in form f a json file:
scheduler.safe_results_to_file("results")
Exporting whole scheduler
Scheduler can be aslo exported and imported(both data and parameters of an objects)
scheduler.safe_to_file("sheduler.pkl")
Importing scheduler
scheduler1 = Scheduler.load_from_file("test.pkl")
from animation import createAnimation
createAnimation(
results_list = [results_dict1], # results from simulation - multiple can provided for compering simulations
animation_speed= 20, # animation speed
reduce_data = 1, # how much reduce the data, usefull in large datasets
highway_length=highway_length, # length in kilometers
num_of_lanes=[num_of_lanes],
names = ["Simple test"] , # if not provided default
export_gif_path = "../static/testcase.gif" # if not provided, animation will be shown in the form of plot
)
Note: All parameters provided to animation are arrays, so it is possible to visualize multiple simulation in one animation.
As a results the simulator is evaluating number of cars which were able to pass the highway (flow) and the average speed of the cars compared to the speed limit:
Animation time: 23.90/24.0s Real time: 3.98/4.00min
Flow: 13/60
Average speed: 32.3/110 km/h.
Basecases(overtaking, changing lanes)
Basic simulation
Changing speed of simulation
Changing number of lanes
Comparing different simulations
Simulation with autonomous cars
Results without autonomous: 35/160
Results with only autonomous: 140/160
Results with 50/50: 74/160
Animation time: 179.00/180.0s Real time: 2.98/3.00min
Results without autonomous vehicles:
Flow: 38/120 vehicles passed the highway.
Average speed: 23.3/110 km/h.
Results with only autonomous vehicles:
Flow: 147/120 vehicles passed the highway.
Average speed: 109.5/110 km/h.
Results with 50/50 autonomous vehicles:
Flow: 120/120 vehicles passed the highway.
Average speed: 81.5/110 km/h.
Simulation with autonomous cars and plots
Experiments with autonomous cars and plots