【问题标题】:How to iteratively call duarouter algorithm in a traCI simulation?如何在 traCI 模拟中迭代调用双路由算法?
【发布时间】:2019-09-07 10:44:38
【问题描述】:

我通过给出 from 和 to 边来定义流程。在测试一些交通信号算法时,我发现网络很容易陷入僵局,部分原因是车辆找不到动态的用户平衡路线。因此,我的目标是让那些定义的流程(车辆)在每个模拟时间步中找到动态的用户平衡路线。我知道双路由器应该是解决方案。但是如何在每个仿真时间步调用duarouter,我应该如何在我的代码中加入duarouter?

我遵循了 SUMO 网站提供的示例代码。基本上我定义了一个 run() 函数,它定义了我的信号控制算法。然后我在主函数中调用 run() 。

我应该在哪里插入双路由?

我应该如何在我的模拟循环中调用它,以确保在每个时间步,网络中的车辆都能找到它的用户平衡路线。

dua-iterate.py -n <PATH_TO_SUMO_NET> -t <PATH_TO_TRIPS>


def run():
"""execute the TraCI control loop"""
step = 0
NSphase = 0
EWphase = 2
while traci.simulation.getMinExpectedNumber() > 0: 
    traci.simulationStep() # this means let the simulation go forward for one step 
    step += 1 
    {signal control algorithm}
traci.close()
sys.stdout.flush()

if __name__ == "__main__":
traci.start(["/home/hao/sumo_binaries/bin/sumo-gui", "-c", "/home/hao/Documents/traci_test/randomnet4/random.sumo.cfg",
                         "--tripinfo-output", "tripinfo.xml"])
run()

【问题讨论】:

  • 如果我理解正确的话,duarouter.py是否只在需求文件生成车辆时分配DUE路线?我的意思是,车辆已经加载到网络上,考虑到动态交通状况,它们还能更新路线吗?

标签: sumo


【解决方案1】:

Traci 是相扑的控制界面。所以基本的想法是你可以启动一个相扑服务器并将Traci连接到服务器。 Traci 将根据您的网络和行程文件静态或动态生成路线。

在 SUE 案例中,您的代码

traci.start(["/home/hao/sumo_binaries/bin/sumo-gui", "-c", "/home/hao/Documents/traci_test/randomnet4/random.sumo.cfg", "--tripinfo-output", "tripinfo.xml"])

其实

  • 启动 sumo-gui 服务器,
  • 并将 Traci (SUE) 连接到服务器。

要将 DUE 与 Traci 一起使用,您应该使用 tools/assign 文件夹中的 duaIterate.py。但是

traci.start(["python", <PATH TO duaIterate.py>, "-n", <NETWORK FILE>, "-t", <TRIPS FILE>])

仅尝试将 Traci (DUE) 连接到 sumo/sumo-gui 服务器。所以你应该先手动启动服务器:

sumo-gui -n suedstadt.net.xml --remote-port <PORT NUMBER>

这里的remote-port 选项在服务器模式下启动 sumo-gui。现在您可以使用 port 选项将 Traci 连接到服务器。

traci.start(["python", <PATH TO duaIterate.py>, "-n", <NETWORK FILE>, "-t", <TRIPS FILE>], port=<PORT NUMBER>)

【讨论】:

  • traci.start 将执行' sumoProcess = subprocess.Popen(cmd + ["--remote-port", str(sumoPort)]) ',这需要 '--remote- port' 是 cmd 的有效选项。但这对 duaIterate.py 有用吗?
  • 我测试了这个方法,不幸的是它给了我和以前一样的结果,这意味着它不是动态的用户平衡。对于已经加载到网络上的车辆,duaIterate 是否会再次重新路由它们?或者只是在插入车辆时找到一次性最短路径?
猜你喜欢
  • 2012-04-23
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-29
相关资源
最近更新 更多