@@ -89,7 +89,7 @@ def control_vehicle(vehID, net):
8989}
9090
9191
92- def simulation (num_of_vehicles ):
92+ def simulation (num_of_vehicles , with_program ):
9393 init (True )
9494 for i in range (1 , num_of_vehicles ):
9595 traci .route .add (
@@ -109,38 +109,53 @@ def simulation(num_of_vehicles):
109109 traci .vehicle .setMaxSpeed (f"{ k } _{ i } " , SPEED )
110110 traci .vehicle .setColor (f"{ k } _{ i } " , color_dic [k ])
111111 while traci .simulation .getMinExpectedNumber () > 0 :
112- locked_vehicles = {}
113- leaders = []
114- gridlock = []
115- control_arr = []
116- current_time = traci .simulation .getTime ()
117- all_vehicles = traci .vehicle .getIDList ()
118-
119- for vehicle in all_vehicles :
120- leader = (traci .vehicle .getLeader (vehicle ))
121- vehicle_lane = traci .vehicle .getLaneID (vehicle )
122- try :
123- if vehicle_lane [0 ] != ":" :
124- if leader == None :
125- leaders .append (vehicle )
126- else :
127- leader_lane = traci .vehicle .getLaneID (leader [0 ])
128- if vehicle_lane != leader_lane :
112+ if with_program :
113+ locked_vehicles = {}
114+ leaders = []
115+ gridlock = []
116+ control_arr = []
117+ current_time = traci .simulation .getTime ()
118+ all_vehicles = traci .vehicle .getIDList ()
119+
120+ for vehicle in all_vehicles :
121+ leader = (traci .vehicle .getLeader (vehicle ))
122+ vehicle_lane = traci .vehicle .getLaneID (vehicle )
123+ try :
124+ if vehicle_lane [0 ] != ":" :
125+ if leader == None :
129126 leaders .append (vehicle )
130- except :
131- pass
132- for leader in leaders :
133- leader_lanes = traci .vehicle .getBestLanes (leader )[0 ][5 ]
134- control_arr .append (leader )
135-
136- if len (leader_lanes ) > 1 :
137- locked_veh = detect_gridlock (leader , leader_lanes [1 ])
138- if locked_veh :
139- locked_vehicles [locked_veh [0 ]] = locked_veh [1 ]
140-
141- for init_veh in (locked_vehicles ):
142- if len (gridlock ) > 0 :
143- if init_veh not in gridlock [0 ]:
127+ else :
128+ leader_lane = traci .vehicle .getLaneID (leader [0 ])
129+ if vehicle_lane != leader_lane :
130+ leaders .append (vehicle )
131+ except :
132+ pass
133+ for leader in leaders :
134+ leader_lanes = traci .vehicle .getBestLanes (leader )[0 ][5 ]
135+ control_arr .append (leader )
136+
137+ if len (leader_lanes ) > 1 :
138+ locked_veh = detect_gridlock (leader , leader_lanes [1 ])
139+ if locked_veh :
140+ locked_vehicles [locked_veh [0 ]] = locked_veh [1 ]
141+
142+ for init_veh in (locked_vehicles ):
143+ if len (gridlock ) > 0 :
144+ if init_veh not in gridlock [0 ]:
145+ temp = []
146+ index = init_veh
147+ for k in range (15 ):
148+ try :
149+ next_vehicle = locked_vehicles [index ]
150+ temp .append (next_vehicle )
151+ index = next_vehicle
152+ if next_vehicle == init_veh :
153+ gridlock .append (temp )
154+ break
155+
156+ except :
157+ break
158+ elif len (gridlock ) == 0 :
144159 temp = []
145160 index = init_veh
146161 for k in range (15 ):
@@ -154,31 +169,18 @@ def simulation(num_of_vehicles):
154169
155170 except :
156171 break
157- elif len (gridlock ) == 0 :
158- temp = []
159- index = init_veh
160- for k in range (15 ):
161- try :
162- next_vehicle = locked_vehicles [index ]
163- temp .append (next_vehicle )
164- index = next_vehicle
165- if next_vehicle == init_veh :
166- gridlock .append (temp )
167- break
168-
169- except :
170- break
171172
172- for v in control_arr :
173- control_vehicle (v , net )
174- for vehicles in gridlock :
175- for v in vehicles :
176- traci .vehicle .setSpeed (v , SPEED )
173+ for v in control_arr :
174+ control_vehicle (v , net )
175+ for vehicles in gridlock :
176+ for v in vehicles :
177+ traci .vehicle .setSpeed (v , SPEED )
177178 traci .simulationStep ()
178179 if traci .simulation .getTime () == 5000 :
179180 traci .close ()
180181 traci .close ()
181182
182183
183184num_of_vehicles = int (input ("Num of vehicles :" ))
184- simulation (num_of_vehicles )
185+ with_program = int (input ("With control program (0=false, 1=true):" ))
186+ simulation (num_of_vehicles , bool (with_program ))
0 commit comments