使用SUMO场景的子集进行OMNeT ++网络模拟(使用VEINS)

时间:2016-02-11 08:27:20

标签: simulation omnet++ veins

我正在尝试使用OMNeT ++,Veins和SUMO评估在车载网络上运行的应用程序。由于应用程序依赖于实际的流量行为,因此我决定使用LuST Scenario,这似乎是此类数据的最新技术。但是,我想使用此场景的特定部分而不是整个场景(例如,高流量负载片段和低流量负载片段,可能是其他部分)。保持VEINS提供的双向功能会很好,尽管我最感兴趣的是从SUMO获取流量数据到我的模拟中。

实现这一目标的一个明显方法是使用预热期。但是,我想知道是否有一种更有效的方法 - 模拟8小时的流量只是为了得到一个几分钟的片段感觉效率低下,并且对于有足够重复的模拟可能会有问题。

VEINS是否有内置的预热机制,主要是避免发送消息(这是模拟中最耗时的部分),或者是否有办法等待SUMO前进例如,到一个特定的时间戳(这也避免了在OMNeT ++中创建车辆对象,从而避免了所有的启动代码)?

如果它是相关的 - 我使用最新稳定版本的OMNeT ++和SUMO(OMNeT ++ 4.6和SUMO 0.25.0),我的代码库基于VEINS 4a2(有一些更改,特别是接受TraCI API版本10)。

1 个答案:

答案 0 :(得分:5)

您可以在这里做两件事来减少静脉中已发送信息的数量:

  1. 使用手册中here所述的OMNeT ++预热期。基本上,这意味着在warmup-period文件中设置.ini,并确保您的代码使用if (simTime() >= simulation.getWarmupPeriod())进行检查。用于结果收集的OMNeT ++信号已经意识到这一点。

  2. TraCIScenarioManager提供了一个变量double firstStepAt @unit("s"),您可以用它来延迟它的开始。同样,这可以在.ini文件中设置。

  3. 正如VEINS FAQ所述,TraCIScenarioManagerLaunchd提供了两个变量来配置感兴趣的区域,基于矩形或道路(string roiRoadsstring roiRects)。要减少模拟区域,可以将模拟限制为特定矩形;例如,*.manager.rioRects="1000,1000-3000,3000"模拟两个提供坐标之间的2x2km区域。

  4. 使用这两种解决方案(最好结合使用)你仍然需要运行SUMO - 但Veins几乎不会消耗任何时间。