On 12/19/15 1:47 AM, Hayder M Amer wrote: > Hi, > > I am trying to do dynamic re-routing in sumo simulator and I wrote the code > in python with Traci tool and when I run the code in command and run the > simulation in sumo GUI and enter the vehicle name I got the error below. getLength() returns a float, not a list or array. Use "L" rather than "L[i]" in the print statement and try again.
You might find the online docs useful: http://sumo.dlr.de/daily/pydoc/traci.lane.html I would also recommend that you send your questions only to the mailing list, not the principal developers. hth - Tom > > C:\Users\Hayder\src\sumo-0.22.0\dijkstra_hayder\test>dynamic_routing.py > Loading configuration... done. > Enter sample vehicle Name: 10 > NA iss 51 > N is 17 > Lane name is 10_0 > is equal > Traceback (most recent call last): > File > "C:\Users\Hayder\src\sumo-0.22.0\dijkstra_hayder\test\dynamic_routing.py" > , line 80, in <module> > print " is equal", L[i],"\n" > TypeError: 'float' object is not subscriptable > > Please, any help and cooperation would be very appreciated. > > Please find below python code. > > import os, subprocess, sys, random > > SUMO_HOME = "C:\Users\Hayder\src\sumo-0.22.0" > try: > sys.path.append(os.path.join(SUMO_HOME, "tools")) > # import the library > import sumolib > from sumolib import checkBinary > from sumolib.net import Net > from sumolib.net import NetReader > from sumolib.net import Lane > from sumolib.net import Edge > from sumolib.net import Node > from sumolib.net import Connection > from sumolib.net import Roundabout > > except ImportError: > sys.exit("please declare environment variable 'SUMO_HOME' as the root > directory of your sumo installation (it should contain folders 'bin', > 'tools' and 'docs')") > > import traci > PORT = 8873 > NSGREEN = "GrGr" > NSYELLOW = "yryr" > WEGREEN = "rGrG" > WEYELLOW = "ryry" > PROGRAM = > [WEYELLOW,WEYELLOW,WEYELLOW,NSGREEN,NSGREEN,NSGREEN,NSGREEN,NSGREEN,NSGREEN,NSGREEN,NSGREEN,NSYELLOW,NSYELLOW,WEGREEN] > sumoBinary = checkBinary('sumo-gui') > sumoConfig = "dijkstra.sumo.cfg" > if len(sys.argv) > 1: > retCode = subprocess.call("%s -c %s --python-script %s" %(sumoBinary, > sumoConfig, __file__), shell=True, stdout=sys.stdout) > sys.exit(retCode) > else: > sumoProcess = subprocess.Popen("%s -c %s" % (sumoBinary, sumoConfig), > shell=True, stdout=sys.stdout) > traci.init(PORT) > traci.simulationStep() > programPointer = len(PROGRAM)-1 > i=0 > s=0 > t=0 > k=0 > CTT5cars=[0,0,0,0,0] > step = 0 > VEH=[] > EDG=[] > TIM=[] > VehCTT=[] > ED=[] > ITT=[] > V=[] > CTT=[] > Jun=[] > L_Veh=[] > Trav_tim=[] > traci.edge.setEffort=[] > VehiD=["0","1"] > Curr_Trav=[] > Trav_tim_sys=[] > A=[] > sample_vehicle = raw_input("Enter sample vehicle Name: ") > #print "sample vehicle Name is :", sample_vehicle > # Get the all Lane in Network > All = traci.lane.getIDList() > #print A > NA=len(All) > print "NA iss", NA > for s in range(0,NA): > LA=traci.lane.getLength(All[s]) > if LA>100: > A.append(All[s]) > N=len(A) > print "N is", N > output = open ("output.txt", "w") > output.write ("\n\n\n") > output.write > ("----------------------------------------------------------------------------------------\n") > output.write ("Simulation Time\t\t| Fuel Consumption\t\t | CO2 emissions > \t\t | CO emssions\t\t | Noise emission \t\t | Current Speed \t\t | Current > Lane\n") > # Calculate ITT for all Lanes > for i in range(0,N): > L=traci.lane.getLength(A[i]) # Get the Length of all Lane > print " Lane name is", A[i],"\t" > print " is equal", L[i],"\n" > V=traci.lane.getMaxSpeed(A[i]) # Get Maximum Allowed speed > print "Maximum Allowed Speed for Lane", A[i],"\t" > print " is", V[i],"\n" > ITT= L/V > print "ITT for Lane", A[i],"\t" > print " is equal to", ITT[i],"\n" > # Set ITT for Lanes > ED= traci.lane.getEdgeID(A[i]) > traci.edge.setEffort = [A,ITT] > CTT5cars=[ITT,ITT,ITT,ITT,ITT] > CTTcheck=0 > # Simulation starts here: > while step == 0 or traci.simulation.getMinExpectedNumber() > 0: > print "Simulation Time is", (traci.simulation.getCurrentTime()) > traci.simulationStep() > programPointer = min(programPointer+1, len(PROGRAM)-1) > # Calculate CTT for all Lanes > for j in range(0,N): > VEH=traci.lane.getLastStepVehicleIDs(A[j]) > EDG= traci.lane.getEdgeID(A[j]) > TIM= traci.simulation.getCurrentTime() > VehiD[0]=VEH > if VehiD[0]== '[0]': > VehCTT=traci.vehicle.getAdaptedTraveltime(VehiD[0], > TIM[j], EDG[j]) > VehCTT=traci.lane.getTraveltime(A[j]) > if CTTcheck == 0: > CTT5cars[0]=VehCTT > CTTcheck=1 > elif CTTcheck == 1: > CTT5cars[1]=VehCTT > CTTcheck=2 > elif CTTcheck == 2: > CTT5cars[2]=VehCTT > CTTcheck=3 > elif CTTcheck == 3: > CTT5cars[3]=VehCTT > CTTcheck=4 > else: > CTT5cars[4]=VehCTT > CTTcheck=0 > CTT = sum(CTT5cars)/5 > print "Current Traveling Time (CTT) for Lane", A[j], "is equal > to", CTT > traci.edge.setEffort=[A[i],CTT] > CO=str(traci.vehicle.getCOEmission(sample_vehicle)) > Fue=str(traci.vehicle.getFuelConsumption(sample_vehicle)) > LAV=str(traci.vehicle.getLaneID(sample_vehicle)) > Noise=str(traci.vehicle.getNoiseEmission(sample_vehicle)) > curr_spe=str(traci.vehicle.getSpeed(sample_vehicle)) > > speed_noTra=str(traci.vehicle.getSpeedWithoutTraCI(sample_vehicle)) > CO2=str(traci.vehicle.getCO2Emission(sample_vehicle)) > current_time = str(traci.simulation.getCurrentTime()) > output.write (current_time), output.write ("\t\t\t") > output.write (Fue), output.write ("\t\t\t") > output.write (CO2), output.write ("\t\t\t") > output.write (CO), output.write ("\t\t\t") > output.write (Noise), output.write ("\t\t\t") > output.write (curr_spe), output.write ("\t\t\t") > output.write (LAV), output.write ("\t\t\t") > output.write (speed_noTra), output.write ("\t\t\t\n") > # for Re-routing > route = traci.vehicle.getRouteID(sample_vehicle) > print "current route of sample vehicle is", route > RoutEDG = traci.route.getEdges(route) > print "RoutEDG", RoutEDG > EDGN= len(RoutEDG) > print EDGN > veh_x,veh_y=traci.vehicle.getPosition(sample_vehicle) > print "Vehicle position is", veh_x, veh_y > Jun=traci.junction.getIDList() > JunS= len(Jun) > VEH_on_Inter = 0 > PN=0 > # check if Vehicle near the Intersection (less than 1 meter) for Re-routing > if JunS <1: > for k in range(0,JunS): > jun_x,jun_y=traci.junction.getPosition(Jun[k]) > Distance_Veh_Edg = traci.simulation.getDistance2D( jun_x, > jun_y, veh_x, veh_y, isGeo=False, isDriving=False) > if Distance_Veh_Edg < 1: > VEH_on_Inter = 1 > if VEH_on_Inter == 1: > P_routes=traci.route.getSubscriptionResults() > PN= len(P_routes) > TIME= traci.simulation.getCurrentTime() > VEH_on_Inter = 0 > for d in range(0,PN): > P_routes_EDG=traci.lane.lanegetEdgeID(P_routes[d]) > Trav_tim = traci.vehicle.getEffort(sample_vehicle, TIME, > P_routes_EDG[d]) > Curr_Trav = traci.vehicle.getAdaptedTraveltime(sample_vehicle, > TIME, P_routes_EDG[d]) > Trav_tim_sys = traci.vehicle.rerouteTraveltime(sample_vehicle, > TIME, P_routes_EDG[d]) > if Trav_tim < Curr_Trav: > traci.vehicle.rerouteEffort(sample_vehicle) > elif Trav_tim_sys < Curr_Trav: > traci.vehicle.rerouteTraveltime(sample_vehicle) > traci.vehicle.rerouteTraveltime(sample_vehicle) > no = traci.inductionloop.getLastStepVehicleNumber("0") > output.close() > if no > 0: > programPointer = (0 if programPointer == len(PROGRAM)-1 else 3) > step += 1 > traci.close() > sys.stdout.flush() > > Best regards, > Hayder > ------------------------------------------------------------------------------ > _______________________________________________ > sumo-user mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/sumo-user ------------------------------------------------------------------------------ _______________________________________________ sumo-user mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/sumo-user
