Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[sumo-user] How to resolve the error

please find attached screen shot source code written in python what the wrong in code not getting please help some one..

--
Thanks & Regards
Pallavi Mandhare Burande
#!/usr/bin/env python3
import os, sys
if 'SUMO_HOME' in os.environ:
    tools = os.path.join(os.environ['SUMO_HOME'], 'tools')
    sys.path.append(tools)
    print(sys.path)
else:
    sys.exit("Please declare environment variable 'SUMO_HOME'")
from sumolib import checkBinary
import traci
import traffic_analyzer

YELLOW_TIME = 3
GREEN_TIME = 60
NS_GREEN_STATE = "GGgrrrGGgrrr"
NS_YELLOW_STATE = "YYyrrrYYyrrr"
WE_GREEN_STATE = "rrrGGgrrrGGg"
WE_YELLOW_STATE = "rrrYYyrrrYYy"

def run_algorithm():
    listener = traffic_analyzer.WaitingTimeListener()
    traci.addStepListener(listener)

    #Density for all incoming roads
    density = {}
    density["west"] = 0
    density["north"] = 0
    density["east"] = 0
    density["south"] = 0

    #Time needed for cars on incoming roads to pass through
    time = {}
    time["west"] = 0
    time["north"] = 0
    time["east"] = 0
    time["south"] = 0

    yellow = False
    yellow_timer = 0

    green_timer = GREEN_TIME
    green_time = GREEN_TIME

    max_density = 0
    max_density_edge = "west"

    step = 0

    waiting_time = 0
    waiting_time2 = 0
    vehicle_amount = 0
    while traci.simulation.getMinExpectedNumber() > 0:
        traci.simulationStep()
        step += 1

        if step == 600:
            waiting_time = traffic_analyzer.getWaitingTimes()
            waiting_time2 = traffic_analyzer.getSquaredWaitingTimes()
            vehicle_amount = traffic_analyzer.getVehicleAmount()

        #Switching between roads
        if yellow:
            if yellow_timer < YELLOW_TIME:
                yellow_timer += 1
            else:
                yellow_timer = 0
                yellow = False
                if max_density_edge == "west" or max_density_edge == "east":
                    traci.trafficlight.setRedYellowGreenState("intersection", WE_GREEN_STATE)
                else:
                    traci.trafficlight.setRedYellowGreenState("intersection", NS_GREEN_STATE)
        #Light is green
        elif green_timer < green_time:
            green_timer += 1
        #Determine which road that should get green light
        else:
            green_timer = 0

            #Set current green road's values to 0
            if max_density_edge == "west" or max_density_edge == "east":
                density["west"] = 0
                density["east"] = 0
                time["west"] = 0
                time["east"] = 0
            else:
                density["north"] = 0
                density["south"] = 0
                time["north"] = 0
                time["south"] = 0

            previous_edge = max_density_edge
            max_density = 0

            #Get highest density
            for edge in density:
                if density[edge] > max_density:
                    max_density = density[edge]
                    max_density_edge = edge

            #All roads have been taken, recalculate values
            if max_density == 0:
                density["west"], time["west"] = traffic_analyzer.getDensityAndTimeOnEdge("west_right")
                density["north"], time["north"] = traffic_analyzer.getDensityAndTimeOnEdge("north_down")
                density["east"], time["east"] = traffic_analyzer.getDensityAndTimeOnEdge("east_left")
                density["south"], time["south"] = traffic_analyzer.getDensityAndTimeOnEdge("south_up")

                #Get highest density, again
                for edge in density:
                    if density[edge] > max_density:
                        max_density = density[edge]
                        max_density_edge = edge

            if max_density_edge == "west" or max_density_edge == "east":
                green_time = min(max(time["west"], time["east"]), GREEN_TIME)
                if previous_edge != "west" and previous_edge != "east":
                    yellow = True
                    traci.trafficlight.setRedYellowGreenState("intersection", NS_YELLOW_STATE)
            else:
                green_time = min(max(time["north"], time["south"]), GREEN_TIME)
                if previous_edge != "north" and previous_edge != "south":
                    yellow = True
                    traci.trafficlight.setRedYellowGreenState("intersection", WE_YELLOW_STATE)


    waiting_time = traffic_analyzer.getWaitingTimes() - waiting_time
    waiting_time2 = traffic_analyzer.getSquaredWaitingTimes() - waiting_time2
    vehicle_amount = traffic_analyzer.getVehicleAmount() - vehicle_amount
    print("Average waiting time: " + str(float(waiting_time) / vehicle_amount))
    print("Average squared waiting time: " + str(float(waiting_time2) / vehicle_amount))
    traci.close()
    sys.stdout.flush()
    traffic_analyzer.reset()
    return float(waiting_time) / vehicle_amount, float(waiting_time2) / vehicle_amount

def run():
    #Get the binary for SUMO
    sumoBinary = checkBinary('sumo')

    #Connect to SUMO via TraCI
    traci.start([sumoBinary, "-c", "intersection.sumocfg", "--waiting-time-memory", "1000"])

    return run_algorithm()

if __name__ == '__main__':
    run()

Attachment: Screenshot from 2020-05-02 11-55-54.png
Description: PNG image


Back to the top