22
22
STEPS = 10
23
23
rdelta = 255 / STEPS
24
24
# 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 )]
26
27
27
28
28
29
class TraCIVehicle (KernelVehicle ):
@@ -56,6 +57,8 @@ def __init__(self,
56
57
self .num_vehicles = 0
57
58
# number of rl vehicles in the network
58
59
self .num_rl_vehicles = 0
60
+ # number of vehicles loaded but not departed vehicles
61
+ self .num_not_departed = 0
59
62
60
63
# contains the parameters associated with each type of vehicle
61
64
self .type_parameters = {}
@@ -101,6 +104,7 @@ def initialize(self, vehicles):
101
104
self .minGap = vehicles .minGap
102
105
self .num_vehicles = 0
103
106
self .num_rl_vehicles = 0
107
+ self .num_not_departed = 0
104
108
105
109
self .__vehicles .clear ()
106
110
for typ in vehicles .initial :
@@ -183,11 +187,12 @@ def update(self, reset):
183
187
self ._departed_ids .clear ()
184
188
self ._arrived_ids .clear ()
185
189
self ._arrived_rl_ids .clear ()
190
+ self .num_not_departed = 0
186
191
187
192
# add vehicles from a network template, if applicable
188
193
if hasattr (self .master_kernel .network .network ,
189
194
"template_vehicles" ):
190
- for veh_id in self .master_kernel .network .network .\
195
+ for veh_id in self .master_kernel .network .network . \
191
196
template_vehicles :
192
197
vals = deepcopy (self .master_kernel .network .network .
193
198
template_vehicles [veh_id ])
@@ -212,6 +217,10 @@ def update(self, reset):
212
217
self ._departed_ids .append (sim_obs [tc .VAR_DEPARTED_VEHICLES_IDS ])
213
218
self ._arrived_ids .append (sim_obs [tc .VAR_ARRIVED_VEHICLES_IDS ])
214
219
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
+
215
224
# update the "headway", "leader", and "follower" variables
216
225
for veh_id in self .__ids :
217
226
try :
@@ -321,8 +330,12 @@ def _add_departed(self, veh_id, veh_type):
321
330
322
331
# subscribe the new vehicle
323
332
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 ,
326
339
tc .VAR_SPEED_WITHOUT_TRACI
327
340
])
328
341
self .kernel_api .vehicle .subscribeLeader (veh_id , 2000 )
@@ -523,6 +536,10 @@ def get_departed_ids(self):
523
536
else :
524
537
return 0
525
538
539
+ def get_num_not_departed (self ):
540
+ """See parent class."""
541
+ return self .num_not_departed
542
+
526
543
def get_previous_speed (self , veh_id , error = - 1001 ):
527
544
"""See parent class."""
528
545
if isinstance (veh_id , (list , np .ndarray )):
@@ -1009,7 +1026,8 @@ def update_vehicle_colors(self):
1009
1026
for veh_id in self .get_rl_ids ():
1010
1027
try :
1011
1028
# 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 )]:
1013
1031
# color rl vehicles red
1014
1032
self .set_color (veh_id = veh_id , color = RED )
1015
1033
except (FatalTraCIError , TraCIException ) as e :
@@ -1020,7 +1038,8 @@ def update_vehicle_colors(self):
1020
1038
try :
1021
1039
color = CYAN if veh_id in self .get_observed_ids () else WHITE
1022
1040
# 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 )]:
1024
1043
self .set_color (veh_id = veh_id , color = color )
1025
1044
except (FatalTraCIError , TraCIException ) as e :
1026
1045
print ('Error when updating human vehicle colors:' , e )
@@ -1030,7 +1049,8 @@ def update_vehicle_colors(self):
1030
1049
if 'av' in veh_id :
1031
1050
color = RED
1032
1051
# 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 )]:
1034
1054
self .set_color (veh_id = veh_id , color = color )
1035
1055
except (FatalTraCIError , TraCIException ) as e :
1036
1056
print ('Error when updating human vehicle colors:' , e )
@@ -1043,7 +1063,8 @@ def update_vehicle_colors(self):
1043
1063
veh_speed = self .get_speed (veh_id )
1044
1064
bin_index = np .digitize (veh_speed , speed_ranges )
1045
1065
# 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 )]:
1047
1068
self .set_color (veh_id = veh_id , color = color_bins [bin_index ])
1048
1069
1049
1070
# clear the list of observed vehicles
0 commit comments