我正在尝试使用 OMNeT++、Veins 和 SUMO 评估在车载网络上运行的应用程序。因为该应用程序依赖于现实的流量行为,所以我决定使用LuST场景 https://github.com/lcodeca/LuSTScenario,这似乎是此类数据的最新技术。但是,我想使用此场景的特定部分而不是整个场景(例如,高流量负载片段和低流量负载片段,也许还有其他片段)。尽管我最感兴趣的是从 SUMO 获取流量数据到我的模拟中,但保留 VEINS 提供的双向功能会很好。
实现这一点的一种明显方法是使用预热期。然而,我想知道是否有更有效的方法——模拟 8 小时的流量只是为了获得几分钟的片段,感觉效率低下,并且对于足够重复的模拟可能会出现问题。
VEINS 是否有一个内置的预热机制,主要是避免发送消息(这是迄今为止模拟中最耗时的部分),或者它是否有一种方法等待 SUMO 前进,例如,到特定的时间戳(这也避免了在 OMNeT++ 中创建车辆对象,从而避免创建所有启动代码)?
如果相关的话——我正在使用最新稳定版本的 OMNeT++ 和 SUMO(OMNeT++ 4.6 和 SUMO 0.25.0),我的代码库基于 VEINS 4a2(进行了一些更改,特别是接受 TraCI API 版本 10)。
您可以在此处执行以下两项操作来减少 Veins 中发送的消息数量:
按照所述使用 OMNeT++ 预热期here https://omnetpp.org/doc/omnetpp/manual/usman.html#sec407在手册中。基本上就是设置的意思warmup-period
在你的.ini
文件并确保您的代码使用以下命令检查此内容if (simTime() >= simulation.getWarmupPeriod())
。用于结果收集的 OMNeT++ 信号知道这一点。
The TraCIScenarioManager
提供一个变量double firstStepAt @unit("s")
您可以使用它来延迟它的开始。同样,这可以在.ini
file.
As the 静脉常见问题解答 http://veins.car2x.org/documentation/faq/各州TraCIScenarioManagerLaunchd
提供两个变量来配置基于矩形或道路的感兴趣区域(string roiRoads
and string roiRects
)。为了减少模拟区域,可以将模拟限制在特定的矩形内;例如,*.manager.rioRects="1000,1000-3000,3000"
模拟两个提供的坐标之间的 2x2km 区域。
使用这两种解决方案(最好结合使用),您仍然需要运行 SUMO - 但 Veins 几乎不消耗任何时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)