Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[sumo-user] How to not reopen Traci

Hi,
I use GA package to optimize traffiic signal.
Each simulation should be started from an identical start point(Time=0).
Is there a way to restart the simulation without closing and reopening Traci?

I attach my code file.
Thank in advance.
import os, sys
import traci
from pyevolve import G1DList
from pyevolve import GSimpleGA
from pyevolve import Mutators

if 'SUMO_HOME' in os.environ:
    tools = os.path.join(os.environ['SUMO_HOME'], 'tools')
    sys.path.append(tools)
else:   
    sys.exit("please declare environment variable 'SUMO_HOME'")

sumoBinary = "C:/SUMO/bin/sumo"
sumoCmd = [sumoBinary, "-c", "traffic_model.sumocfg"]

def set_sig(x):
    phases = []
    phases.append(traci.trafficlights.Phase(x[0], 0, 0, "GGrr"))
    phases.append(traci.trafficlights.Phase(3, 0, 0, "yyrr"))
    phases.append(traci.trafficlights.Phase(x[1], 0, 0, "rrGG"))
    phases.append(traci.trafficlights.Phase(3, 0, 0, "rryy"))
	
    logic = traci.trafficlights.Logic("new-program", 0, 0, 0, phases)	
    traci.trafficlights.setCompleteRedYellowGreenDefinition("gneJ1", logic)

def objective(chromosome):
    traci.start(sumoCmd)  ## How to rewrite?
    set_sig(chromosome)
    
    step = 0
    total_A=0
    total_B=0
    while step < 1000:
        traci.simulationStep()
        total_A+=traci.inductionloop.getLastStepVehicleNumber("e1Detector_gneE0_0_0")
        total_B+=traci.inductionloop.getLastStepVehicleNumber("e1Detector_gneE2_0_1")        
        step += 1
    traci.close()     ## How to rewrite?
    return (total_A+total_B)
    

def run_main():
    genome = G1DList.G1DList(2)
    genome.setParams(rangemin=10, rangemax=100, gauss_mu=80, gauss_sigma=150)
    genome.mutator.set(Mutators.G1DListMutatorIntegerGaussian)

    # The evaluator function (objective function)
    genome.evaluator.set(objective)

    # Genetic Algorithm Instance
    ga = GSimpleGA.GSimpleGA(genome,seed=123)
    ga.setGenerations(20)
    ga.setPopulationSize(10)
    ga.setCrossoverRate(0.8)
    ga.setMutationRate(0.05)
    ga.evolve(freq_stats=150)
    
    # Best individual
    print(ga.bestIndividual())

if __name__ == "__main__":
    run_main()


     

Back to the top