Skip to content

Commit aa1d713

Browse files
YasharzfAboudyKreidieh
authored andcommitted
get not departed vehicles (#922)
* added function to kernel/vehicle to get number of not departed vehiles * fixed over indentation of the docstring * indentation edit * pep8 Co-authored-by: AboudyKreidieh <akreidieh@gmail.com>
1 parent bb3c14c commit aa1d713

File tree

3 files changed

+43
-11
lines changed

3 files changed

+43
-11
lines changed

flow/core/kernel/simulation/traci.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,13 @@ def pass_api(self, kernel_api):
4646
# subscribe some simulation parameters needed to check for entering,
4747
# exiting, and colliding vehicles
4848
self.kernel_api.simulation.subscribe([
49-
tc.VAR_DEPARTED_VEHICLES_IDS, tc.VAR_ARRIVED_VEHICLES_IDS,
50-
tc.VAR_TELEPORT_STARTING_VEHICLES_IDS, tc.VAR_TIME_STEP,
51-
tc.VAR_DELTA_T
49+
tc.VAR_DEPARTED_VEHICLES_IDS,
50+
tc.VAR_ARRIVED_VEHICLES_IDS,
51+
tc.VAR_TELEPORT_STARTING_VEHICLES_IDS,
52+
tc.VAR_TIME_STEP,
53+
tc.VAR_DELTA_T,
54+
tc.VAR_LOADED_VEHICLES_NUMBER,
55+
tc.VAR_DEPARTED_VEHICLES_NUMBER
5256
])
5357

5458
def simulation_step(self):

flow/core/kernel/vehicle/base.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,13 @@ def get_departed_ids(self):
290290
"""Return the ids of vehicles that departed in the last time step."""
291291
raise NotImplementedError
292292

293+
def get_num_not_departed(self):
294+
"""Return the number of vehicles not departed in the last time step.
295+
296+
This includes vehicles that were loaded but not departed.
297+
"""
298+
raise NotImplementedError
299+
293300
def get_speed(self, veh_id, error=-1001):
294301
"""Return the speed of the specified vehicle.
295302

flow/core/kernel/vehicle/traci.py

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
STEPS = 10
2323
rdelta = 255 / STEPS
2424
# smoothly go from red to green as the speed increases
25-
color_bins = [[int(255 - rdelta * i), int(rdelta * i), 0] for i in range(STEPS + 1)]
25+
color_bins = [[int(255 - rdelta * i), int(rdelta * i), 0] for i in
26+
range(STEPS + 1)]
2627

2728

2829
class TraCIVehicle(KernelVehicle):
@@ -56,6 +57,8 @@ def __init__(self,
5657
self.num_vehicles = 0
5758
# number of rl vehicles in the network
5859
self.num_rl_vehicles = 0
60+
# number of vehicles loaded but not departed vehicles
61+
self.num_not_departed = 0
5962

6063
# contains the parameters associated with each type of vehicle
6164
self.type_parameters = {}
@@ -101,6 +104,7 @@ def initialize(self, vehicles):
101104
self.minGap = vehicles.minGap
102105
self.num_vehicles = 0
103106
self.num_rl_vehicles = 0
107+
self.num_not_departed = 0
104108

105109
self.__vehicles.clear()
106110
for typ in vehicles.initial:
@@ -183,11 +187,12 @@ def update(self, reset):
183187
self._departed_ids.clear()
184188
self._arrived_ids.clear()
185189
self._arrived_rl_ids.clear()
190+
self.num_not_departed = 0
186191

187192
# add vehicles from a network template, if applicable
188193
if hasattr(self.master_kernel.network.network,
189194
"template_vehicles"):
190-
for veh_id in self.master_kernel.network.network.\
195+
for veh_id in self.master_kernel.network.network. \
191196
template_vehicles:
192197
vals = deepcopy(self.master_kernel.network.network.
193198
template_vehicles[veh_id])
@@ -212,6 +217,10 @@ def update(self, reset):
212217
self._departed_ids.append(sim_obs[tc.VAR_DEPARTED_VEHICLES_IDS])
213218
self._arrived_ids.append(sim_obs[tc.VAR_ARRIVED_VEHICLES_IDS])
214219

220+
# update the number of not departed vehicles
221+
self.num_not_departed += sim_obs[tc.VAR_LOADED_VEHICLES_NUMBER] - \
222+
sim_obs[tc.VAR_DEPARTED_VEHICLES_NUMBER]
223+
215224
# update the "headway", "leader", and "follower" variables
216225
for veh_id in self.__ids:
217226
try:
@@ -321,8 +330,12 @@ def _add_departed(self, veh_id, veh_type):
321330

322331
# subscribe the new vehicle
323332
self.kernel_api.vehicle.subscribe(veh_id, [
324-
tc.VAR_LANE_INDEX, tc.VAR_LANEPOSITION, tc.VAR_ROAD_ID,
325-
tc.VAR_SPEED, tc.VAR_EDGES, tc.VAR_POSITION, tc.VAR_ANGLE,
333+
tc.VAR_LANE_INDEX, tc.VAR_LANEPOSITION,
334+
tc.VAR_ROAD_ID,
335+
tc.VAR_SPEED,
336+
tc.VAR_EDGES,
337+
tc.VAR_POSITION,
338+
tc.VAR_ANGLE,
326339
tc.VAR_SPEED_WITHOUT_TRACI
327340
])
328341
self.kernel_api.vehicle.subscribeLeader(veh_id, 2000)
@@ -523,6 +536,10 @@ def get_departed_ids(self):
523536
else:
524537
return 0
525538

539+
def get_num_not_departed(self):
540+
"""See parent class."""
541+
return self.num_not_departed
542+
526543
def get_previous_speed(self, veh_id, error=-1001):
527544
"""See parent class."""
528545
if isinstance(veh_id, (list, np.ndarray)):
@@ -1009,7 +1026,8 @@ def update_vehicle_colors(self):
10091026
for veh_id in self.get_rl_ids():
10101027
try:
10111028
# If vehicle is already being colored via argument to vehicles.add(), don't re-color it.
1012-
if self._force_color_update or 'color' not in self.type_parameters[self.get_type(veh_id)]:
1029+
if self._force_color_update or 'color' not in \
1030+
self.type_parameters[self.get_type(veh_id)]:
10131031
# color rl vehicles red
10141032
self.set_color(veh_id=veh_id, color=RED)
10151033
except (FatalTraCIError, TraCIException) as e:
@@ -1020,7 +1038,8 @@ def update_vehicle_colors(self):
10201038
try:
10211039
color = CYAN if veh_id in self.get_observed_ids() else WHITE
10221040
# If vehicle is already being colored via argument to vehicles.add(), don't re-color it.
1023-
if self._force_color_update or 'color' not in self.type_parameters[self.get_type(veh_id)]:
1041+
if self._force_color_update or 'color' not in \
1042+
self.type_parameters[self.get_type(veh_id)]:
10241043
self.set_color(veh_id=veh_id, color=color)
10251044
except (FatalTraCIError, TraCIException) as e:
10261045
print('Error when updating human vehicle colors:', e)
@@ -1030,7 +1049,8 @@ def update_vehicle_colors(self):
10301049
if 'av' in veh_id:
10311050
color = RED
10321051
# If vehicle is already being colored via argument to vehicles.add(), don't re-color it.
1033-
if self._force_color_update or 'color' not in self.type_parameters[self.get_type(veh_id)]:
1052+
if self._force_color_update or 'color' not in \
1053+
self.type_parameters[self.get_type(veh_id)]:
10341054
self.set_color(veh_id=veh_id, color=color)
10351055
except (FatalTraCIError, TraCIException) as e:
10361056
print('Error when updating human vehicle colors:', e)
@@ -1043,7 +1063,8 @@ def update_vehicle_colors(self):
10431063
veh_speed = self.get_speed(veh_id)
10441064
bin_index = np.digitize(veh_speed, speed_ranges)
10451065
# If vehicle is already being colored via argument to vehicles.add(), don't re-color it.
1046-
if self._force_color_update or 'color' not in self.type_parameters[self.get_type(veh_id)]:
1066+
if self._force_color_update or 'color' not in \
1067+
self.type_parameters[self.get_type(veh_id)]:
10471068
self.set_color(veh_id=veh_id, color=color_bins[bin_index])
10481069

10491070
# clear the list of observed vehicles

0 commit comments

Comments
 (0)