TraCIScenarioManagerForker 与 veins-launchd
TraCIScenarioManagerForker vs veins-launchd
我目前使用 TraCIScenarioManagerForker
为每次模拟生成 SUMO,即“forker”方法。但是,官方 VEINS 文档建议使用 veins-launchd
脚本单独启动 SUMO 守护进程,然后 运行 模拟,即“launchd”方法。
使用 forker 方法使得 运行ning 模拟只是一个命令作业,因为 SUMO 在模拟结束时被杀死。但是,使用 launchd 方法,必须注意设置 SUMO 守护进程并在模拟结束时将其杀死。
每种方法的优缺点是什么?我正在尝试了解使用 VEINS 时推荐的最佳实践。
事实上,Veins 5.1 提供了三种(四种,如果算上实验性的话)将 运行 OMNeT++ 连接到 SUMO 的方法:
假设 SUMO 已经 运行 并直接连接到那里 (TraCIScenarioManager)
运行 SUMO 直接来自进程 - 在 Linux 上:作为一个分支,在 Windows 上:作为同一上下文中的进程(TraCIScenarioManagerForker)
正在连接到代理(veins_launchd) that launches an isolated instance of SUMO for every client that connects to it (TraCIScenarioManagerLaunchd)
如果您喜欢冒险,the veins_libsumo fork of Veins offers a fourth option: including the SUMO engine directly in your OMNeT++ simulation and using it via method calls (instead of remote procedure calls via a network socket). Contrast, for example, TraCI based code vs. libsumo based code。由于下面讨论的 none 缺点,这可以快几个数量级。不过,在撰写本文时(2021 年 3 月),这个分叉只是一个概念证明。
其中每一个都有独特的优点和缺点:
是最灵活的:你可以连接到一个长运行的SUMO实例,它只是通过使用快照及时滚动backwards/forwards,连接多个客户端到单个实例等但是
- 要求您在需要的时候手动处理 运行 数量的 SUMO 实例
很方便,但是
- 要求模拟(而不是人 运行 模拟)“知道”如何启动 SUMO - 因此在一台机器上运行的模拟将无法在另一台机器上运行,因为可能安装了 SUMO在不同的路径那里等等
- 在模拟目录中启动 SUMO,因此多个 SUMO 实例的文件输出相互覆盖,文件输出存储在存储模拟的目录中(可能是慢速或写保护磁盘等)
- 导致 SUMO 和 OMNeT++ 将控制台输出写入可能是同一个控制台的内容 window,需要在调试崩溃时区分彼此的经验(如果想要调试,事情会变得更加混乱相扑)
没有这些问题,但是
- 要求用户记住在开始模拟之前启动代理
我目前使用 TraCIScenarioManagerForker
为每次模拟生成 SUMO,即“forker”方法。但是,官方 VEINS 文档建议使用 veins-launchd
脚本单独启动 SUMO 守护进程,然后 运行 模拟,即“launchd”方法。
使用 forker 方法使得 运行ning 模拟只是一个命令作业,因为 SUMO 在模拟结束时被杀死。但是,使用 launchd 方法,必须注意设置 SUMO 守护进程并在模拟结束时将其杀死。
每种方法的优缺点是什么?我正在尝试了解使用 VEINS 时推荐的最佳实践。
事实上,Veins 5.1 提供了三种(四种,如果算上实验性的话)将 运行 OMNeT++ 连接到 SUMO 的方法:
假设 SUMO 已经 运行 并直接连接到那里 (TraCIScenarioManager)
运行 SUMO 直接来自进程 - 在 Linux 上:作为一个分支,在 Windows 上:作为同一上下文中的进程(TraCIScenarioManagerForker)
正在连接到代理(veins_launchd) that launches an isolated instance of SUMO for every client that connects to it (TraCIScenarioManagerLaunchd)
如果您喜欢冒险,the veins_libsumo fork of Veins offers a fourth option: including the SUMO engine directly in your OMNeT++ simulation and using it via method calls (instead of remote procedure calls via a network socket). Contrast, for example, TraCI based code vs. libsumo based code。由于下面讨论的 none 缺点,这可以快几个数量级。不过,在撰写本文时(2021 年 3 月),这个分叉只是一个概念证明。
其中每一个都有独特的优点和缺点:
是最灵活的:你可以连接到一个长运行的SUMO实例,它只是通过使用快照及时滚动backwards/forwards,连接多个客户端到单个实例等但是
- 要求您在需要的时候手动处理 运行 数量的 SUMO 实例
很方便,但是
- 要求模拟(而不是人 运行 模拟)“知道”如何启动 SUMO - 因此在一台机器上运行的模拟将无法在另一台机器上运行,因为可能安装了 SUMO在不同的路径那里等等
- 在模拟目录中启动 SUMO,因此多个 SUMO 实例的文件输出相互覆盖,文件输出存储在存储模拟的目录中(可能是慢速或写保护磁盘等)
- 导致 SUMO 和 OMNeT++ 将控制台输出写入可能是同一个控制台的内容 window,需要在调试崩溃时区分彼此的经验(如果想要调试,事情会变得更加混乱相扑)
没有这些问题,但是
- 要求用户记住在开始模拟之前启动代理