Sumo,TraCI:在不调用 simulationStep() 的情况下删除车辆后无法添加车辆

Sumo, TraCI: Cannot add a vehicle after removing it without calling simulationStep()

我想编写一种通过 TraCI 重新初始化我的相扑模拟的方法。为此,我需要从模拟中移除所有车辆,然后再次添加其中一些。

I do this by calling 
import traci

conn = traci.connect(port)
conn.vehicle.remove("55")
conn.vehicle.add("55", route_id)

# This throws an exception

引发的异常是:

traci.exceptions.TraCIException: The vehicle '55' to add already exists.

如果我在删除和添加方法之间调用 conn.simulationStep(),则不会引发此异常。这在技术上可行,但我宁愿不增加移除和添加车辆之间的模拟。

当我删除车辆55后输出traci.vehicles.getIDList()时,我可以看到它已成功删除。那么,为什么add方法会失败并告诉我这辆车确实存在?

在当前模拟步骤中离开模拟的车辆仅在步骤结束时被移除,而 traci 命令在开始时处理。这就是为什么目前不可能在同一步骤中进行删除和添加(即使没有 traci 也是如此)。一般来说,重用 id 不被认为是好的风格。 “getIDList”的输出在这里不可靠,因为它只列出了可见的车辆(例如,它也排除了停放的车辆)。

毕竟你最好尝试保存模拟状态并使用 simulation.saveStatesimulation.loadState 重新加载它。