[
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()