Как решить ошибку замены маршрута при использовании команды changeTarget? - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь заставить все машины оставаться на моем симуляторе, симуляция пытается создать программу заражения, в которой красные машины загрязняют зеленые, пока не загрязняются все машины.

Пока что яхочу перенаправить автомобиль, когда он в конце своего маршрута, на новый конец, чтобы добиться того, что я использую функции getRoute и getRouteIndex, чтобы узнать, находится ли транспортное средство в конце маршрута, и использую changeTarget для установки нового маршрута, который теоретически должен быть создан командой.Тем не менее, код ошибки продолжает появляться: traci.exceptions.TraCIException : Route replacement failed for 13

Автомобиль '13' первым покидает симуляцию.Я нахожусь на Ubuntu 18.04.3, SUMO 0.32.0 и использую библиотеки os, sys, optparse, subprocess, random, math.

Вот оставшаяся часть кода, если она поможет1011 *

def pitagoras(x,y):                     #calculo simples da hipotenusa
    pitagoras = math.sqrt(x*x + y*y)
    return pitagoras

def distancia(veh1,veh2):      #calculo simples da distancia de 2 veiculos
    distancia = pitagoras(traci.vehicle.getPosition(str(veh1))[0] - traci.vehicle.getPosition(str(veh2))[0],traci.vehicle.getPosition(str(veh1))[1] - traci.vehicle.getPosition(str(veh2))[1])
    return distancia

def get_options():
    opt_parser = optparse.OptionParser()
    opt_parser.add_option("--nogui", action="store_true",
                         default=False, help="run the commandline version of sumo")
    options, args = opt_parser.parse_args()
    return options


def separacao(vetor):
    i = 0
    j = 0
    vetor_puro=[]
    vetor_contaminado=[]
    for i in traci.vehicle.getIDList(): #se o carro nao estava na simulacao antes ele coloca ele no vetor dos nao contaminados e poe sua cor inicial como verde
        if i not in vetor:
            vetor.append(i)
            traci.vehicle.setColor(i,(0,255,0,255))
    for i in vetor:
        if traci.vehicle.getColor(i) == (255,0,0,255): #se o carro eh vermelho e nao ja esta no vetor contaminado adiciona-se ele ao vetor contamindo
            if i not in vetor_contaminado:
                    vetor_contaminado.append(i)
        else:                                           #se o carro nao eh vermelho e ja nao esta no vetor dos puros adiciona-se ele ao vetor dos puros
            if i not in vetor_puro:
                vetor_puro.append(i)
    matriz_carros = 0
    matriz_carros = [vetor_puro,vetor_contaminado]
    return matriz_carros



def contaminacao(veh1,veh2,matriz_carros): #passa a cor dos contaminados para os nao contaminados
    if distancia(str(veh1),str(veh2)) < 30:
        traci.vehicle.setColor(str(veh2),(255,0,0,255))



# contains TraCI control loop
def run():
    step = 0
    vetor_puro = []
    vetor_contaminado = []
    matriz_contaminados = []
    matriz_contaminados_2 = []
    while traci.simulation.getMinExpectedNumber() > 0:
        traci.simulationStep()
        step += 1  
        if step > 6 and step < 12:  #da tempo para entrarem carros na simulacao
            j = 0
            i = 0
            k = 0
            carros_totais = []
            carros_totais = (traci.vehicle.getIDList()) 
            for i in carros_totais:
                traci.vehicle.setColor(i,(0,255,0,255))
            print(carros_totais)
            traci.vehicle.setColor(carros_totais[1],(255,0,0,255))
            matriz_carros = separacao(carros_totais)
            print(matriz_carros)
        if step >= 12:      #comeca a contaminacao
            atualizada = traci.vehicle.getIDList()
            for i in atualizada:
                print("carro")
                print(i)
                print("index da rota")
                print(traci.vehicle.getRouteIndex(str(i)))
                print(len(traci.vehicle.getRoute(str(i))))
                if traci.vehicle.getRouteIndex(str(i)) == (len(traci.vehicle.getRoute(str(i))) - 2):
                    novo_destino = random.choice(traci.edge.getIDList())
                    traci.vehicle.changeTarget(str(i),str(novo_destino))
            for i in matriz_carros[1]:
                for j in matriz_carros[0]:
                    if j not in matriz_carros[1]:
                        contaminacao(str(i),str(j),matriz_carros)
            print(carros_totais)
            matriz_carros = separacao(carros_totais) 

Большое спасибо заранее!

...