Python 如何解决使用changeTarget命令时的路由替换错误?
我试图让所有的车辆都停留在我的模拟上,模拟试图创建一个污染程序,在这个程序中,红色的车污染绿色的车,直到每辆车都被污染 现在,我想要的是,当汽车在其路线末端时,将其重定向到新的末端,以实现我正在使用Python 如何解决使用changeTarget命令时的路由替换错误?,python,sumo,Python,Sumo,我试图让所有的车辆都停留在我的模拟上,模拟试图创建一个污染程序,在这个程序中,红色的车污染绿色的车,直到每辆车都被污染 现在,我想要的是,当汽车在其路线末端时,将其重定向到新的末端,以实现我正在使用getRoute和getRouteIndex功能来了解车辆是否在路线末端,并使用changeTarget来设置新路线,理论上应该由命令创建。但是,错误代码不断出现:traci.exceptions.tracieexception:13的路由替换失败 车辆“13”是第一个离开模拟的车辆。 我使用的是Ub
getRoute
和getRouteIndex
功能来了解车辆是否在路线末端,并使用changeTarget
来设置新路线,理论上应该由命令创建。但是,错误代码不断出现:traci.exceptions.tracieexception:13的路由替换失败
车辆“13”是第一个离开模拟的车辆。
我使用的是Ubuntu18.04.3,Sumo0.32.0,使用的是os,sys,optpasse,subprocess,random,math库
以下是代码的其余部分(如果有帮助):
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)
def pitagoras(x,y):#计算简单
pitagoras=math.sqrt(x*x+y*y)
返回皮塔戈拉
定义距离(veh1,veh2):#计算简化了2个静脉的距离
距离=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])
返回距离
def get_选项():
opt_parser=optparse.OptionParser()
opt_解析器。添加_选项(“--nogui”,action=“store_true”,
default=False,help=“运行sumo的命令行版本”)
选项,args=opt_parser.parse_args()
返回选项
def separacao(审查员):
i=0
j=0
vetor_puro=[]
vetor_-do=[]
对于traci.vehicle.getIDList()中的i:#您可以选择使用相同的颜色,而不必检查是否存在污染,以及是否存在公司内部的污染
如果我不在vetor:
附加审查员(一)
跟踪车辆设置颜色(i,(0255,0255))
对于我在vetor:
如果traci.vehicle.getColor(i)=(255,0,0255):#carro和vermelho和nao ja没有检查或污染,请检查是否存在污染
如果我不在vetor_,我会:
附件(一)
否则:#您可以选择carro nao eh vermelho e ja nao,您不可以选择puros adiciona se ele ao vetor dos puros
如果我不在vetor_puro:
附加审查员(一)
matriz_carros=0
matriz_carros=[兽医,兽医]
返回矩阵
定义污染物(veh1、veh2、matriz_carros):#通过污染物控制系统对污染物进行控制
如果距离(str(veh1),str(veh2))<30:
跟踪车辆设置颜色(str(veh2),(255,0,0255))
#包含TraCI控制循环
def run():
步长=0
vetor_puro=[]
vetor_-do=[]
matriz_=dos[]
matriz__2=[]
当traci.simulation.getMinExpectedNumber()大于0时:
traci.simulationStep()
步骤+=1
如果步骤>6且步骤<12:#以相同的速度前进
j=0
i=0
k=0
carros_totais=[]
carros_totais=(traci.vehicle.getIDList())
对于我在卡洛斯·托泰斯:
跟踪车辆设置颜色(i,(0255,0255))
印刷品(carros_totais)
traci.vehicle.setColor(carros_totais[1],(255,0,0255))
matriz_carros=separacao(carros_totais)
印刷品(matriz_carros)
如果步骤>=12:#comeca a
atualizada=traci.vehicle.getIDList()
对于我在阿图利萨达:
印刷品(“卡罗”)
印刷品(一)
打印(“索引表”)
打印(traci.vehicle.getRouteIndex(str(i)))
打印(len(traci.vehicle.getRoute(str(i)))
如果traci.vehicle.getRouteIndex(str(i))=(len(traci.vehicle.getRoute(str(i)))-2:
novo_destino=random.choice(traci.edge.getIDList())
跟踪车辆变更目标(str(i),str(novo_destino))
对于matriz_carros[1]中的i:
对于matriz_carros[0]中的j:
如果j不在matriz_carros[1]中:
污染(str(i)、str(j)、matriz_carros)
印刷品(carros_totais)
matriz_carros=separacao(carros_totais)
提前非常感谢 是否保证可以从旧路线的最后边缘到达新目的地?从我在netedit工具上看到的情况来看,它保证可以从最后边缘到达任何其他车道。你能分享你的场景吗?当然,我怎么做?对我来说,最简单的方法是在这里打开车票并将其作为拉链连接。