Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
eaaa005
Getting started
lancekrogers Jun 12, 2015
5730422
Figured out how to track location
lancekrogers Jun 12, 2015
78cc5bc
slowly coming along
lancekrogers Jun 12, 2015
5ccccf0
slowly coming along
lancekrogers Jun 13, 2015
9c4eb49
slowly coming along
lancekrogers Jun 13, 2015
efebb2b
slowly coming along
lancekrogers Jun 13, 2015
f8097d2
slowly coming along
lancekrogers Jun 13, 2015
c7c664a
done until the morning
lancekrogers Jun 13, 2015
640a7e0
almost finished with simulation file
lancekrogers Jun 13, 2015
b059be2
commiting to have cars file with min_distance_function in it
lancekrogers Jun 13, 2015
3d53b58
cars now has a move function
lancekrogers Jun 13, 2015
f6cd30d
almost have the simulation done
lancekrogers Jun 14, 2015
9e651f7
almost have the simulation done, still debugging.....
lancekrogers Jun 14, 2015
f26fc9b
almost have the simulation done, still debugging.....
lancekrogers Jun 14, 2015
a183860
almost have the simulation done, still debugging.....
lancekrogers Jun 14, 2015
f2e9000
the dubgging method may come in hand
lancekrogers Jun 14, 2015
735df97
all files now work, now to figure out what data i need to keep track …
lancekrogers Jun 14, 2015
62d5293
all files now work, now to figure out what data i need to keep track …
lancekrogers Jun 14, 2015
bd86d22
so i have a working simulation and it generates a list of data points…
lancekrogers Jun 14, 2015
1a0e908
now have the (speed, postion) tuples stored in a seperate list for ea…
lancekrogers Jun 14, 2015
1d07c64
now have the (speed, postion) tuples stored in a seperate list for ea…
lancekrogers Jun 14, 2015
daa219a
added collisions function
lancekrogers Jun 14, 2015
5fbdafd
working on my graph
lancekrogers Jun 14, 2015
1c60337
.....eh
lancekrogers Jun 14, 2015
2313c89
I think I got something
lancekrogers Jun 15, 2015
f1bc2fb
I think this passes the requirments of normal
lancekrogers Jun 15, 2015
72ed5f2
I now have the simulation adjusting for speed of values in front, I …
lancekrogers Jun 15, 2015
d96cfd3
Car now matches car in fronts speed if min_distance isnt met
lancekrogers Jun 15, 2015
88e809a
finished..
lancekrogers Jun 16, 2015
6b34d75
fixed direnv
lancekrogers Jul 21, 2015
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .envrc

This file was deleted.

1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
.direnv/
__pycache__/
.envrc
1 change: 1 addition & 0 deletions .idea/.name

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 16 additions & 0 deletions .idea/traffic-simulation.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

759 changes: 759 additions & 0 deletions .idea/workspace.xml

Large diffs are not rendered by default.

137 changes: 137 additions & 0 deletions .ipynb_checkpoints/Traffic Simulation Plots-checkpoint.ipynb

Large diffs are not rendered by default.

137 changes: 137 additions & 0 deletions Traffic Simulation Plots.ipynb

Large diffs are not rendered by default.

35 changes: 35 additions & 0 deletions cars.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import random
from road import Road

class Car:

def __init__(self, start_position, length=5, max_speed=33, road=Road() ):
self.max_speed = max_speed # speed in m / s
self.speed = 0 # m / s
self.length = length # in meters
self.position = start_position
self.pre_pos = 0
self.road = road
self.index_position = 0

def accelerate(self):
# accelerate 2 m/s
if self.speed < self.max_speed - 1:
self.speed += 2

def decelerate(self):
if self.speed > 2:
self.speed -= 2

def rand_slow(self):
# cars have a 10% chance of randomly slowing down by 2 m/s
if random.random() <= .1 and self.speed > 2:
self.decelerate()

def move(self):
new_point = self.position + self.speed
self.pre_pos = self.position
if new_point <= self.road.length:
self.position = new_point
elif new_point >= self.road.length:
self.position = new_point - self.road.length
21 changes: 19 additions & 2 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,19 @@
ipython[notebook]
matplotlib
gnureadline==6.3.3
ipython==3.2.1
Jinja2==2.7.3
jsonschema==2.5.1
MarkupSafe==0.23
matplotlib==1.4.3
mistune==0.7
nose==1.3.7
numpy==1.9.2
ptyprocess==0.5
Pygments==2.0.2
pyparsing==2.0.3
python-dateutil==2.4.2
pytz==2015.4
pyzmq==14.7.0
six==1.9.0
terminado==0.5
tornado==4.2.1
wheel==0.24.0
7 changes: 7 additions & 0 deletions road.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import numpy as np

class Road:
# road is only one lane so there only needs to be a one dimensional array
def __init__(self, length=1000):
self.length = length # length in meters
self.road_state = np.zeros(self.length, int)
73 changes: 73 additions & 0 deletions simulation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
from road import Road
from cars import Car

# cars take a position argument
# simulation takes a road argument

class Sim:

def __init__(self, road=Road(), cars_count=30):
self.cars_count = cars_count
self.road_state = road.road_state
self.cars_on_road = [] # contains all the cars on the road
self.time = 60 # time in seconds
self.tick = 1
self.vehicle_data = []
self.speed_data = []
self.collisions = 0

def car_factory(self):
# * after initial code is finished come back here and design the simulation to
# * account for car length
init_location = 0
my_location = 0
for num in range(self.cars_count):
init_location = init_location + 33
f_car = Car(init_location) # you need to pass in a position from road state
f_car.index_position = my_location
f_car.rand_slow()
self.cars_on_road.append(f_car)
my_location += 1

def update(self, vehicle):
# updates the current state of the road i.e.(changes the index position of cars from 0 to 1
self.road_state[vehicle.pre_pos:vehicle.pre_pos + vehicle.speed] = 0
self.road_state[vehicle.position:vehicle.position + vehicle.length] = 1
self.min_distance_between_car(vehicle)

def min_distance_between_car(self, object):
# location >= int(speed) in meters from car in front of it
# if another car is too close, car will match that cars speed
min_distance = object.speed + object.position
if not any(self.road_state[object.position:min_distance]) and object.speed < object.max_speed:
object.accelerate()
else:
if not any(self.road_state[object.position:min_distance]):
pass
elif object.index_position + 1 < self.cars_count:
new_speed = self.cars_on_road[object.index_position + 1].speed
object.speed = new_speed
elif object.index_position + 1 > self.cars_count:
new_speed = self.cars_on_road[1].speed
object.speed = new_speed


def traffic(self):
while self.time > 0:
#temp_data = []
for vehicle in self.cars_on_road:
self.vehicle_data.append((self.tick, vehicle.position, vehicle.speed))
self.min_distance_between_car(vehicle)
vehicle.rand_slow()
vehicle.move()
self.update(vehicle)
#self.vehicle_data.append(temp_data)
self.tick += 1
self.time -= 1

def main(self):
self.car_factory()
self.traffic()
return self.vehicle_data