OMNeT ++批处理会弄乱结果

问题描述

我正在使用omnetpp 5.6.2和inet 4.2.0以及一些自行编写的代码来模拟泛洪算法,并将其与简单泛洪进行比较。为此,我使用范围从3x3到9x9的主机网格设置了参数研究。但是,当我设置一个通过所有三种算法,所有网格和不同数量的相邻节点以及五个不同的随机生成器种子运行的批处理执行时,结果文件开始变得混乱。

我使用以下参数自行运行仿真: 路由:多点中继 节点间距:700m 网格尺寸:8x8 种子集:0

我正在测量发送的帧与接收该帧的最后一个节点之间的最大延迟,考虑到每个节点以0到15ms之间的随机延迟重新发送,因此该延迟应该在200ms左右。

我在.sca文件中得到以下输出


    attr seedset 0
    param **.IIntelliFloodModule.typename "\"MultipointInria\""
    param **.separationX 700m
    param **.separationY 700m
    ...
    scalar EightByEight.globalSeqNumListener #maxDelayMs 208.496

但是,如果我在一批仿真中运行相同的仿真,则会得到以下数字:

    attr seedset 0
    itervar Routing "\"MultipointInria\""
    itervar netw EightByEight
    itervar sepX 700m
    itervar sepY 700m
    param **.IIntelliFloodModule.typename "\"MultipointInria\""
    param **.separationX 700m
    param **.separationY 700m
    ...
    scalar EightByEight.globalSeqNumListener #maxDelayMs 285916.716

这根本没有意义,因为在8x8网格中,一帧必须在最后15个节点上最多移动15个节点,即使每个节点在15ms的最大保持时间之后传输,该帧也将是15x15ms = 225ms 。 该文件中的所有其他统计信息都被完全弄乱了,没有任何意义。每一批不同的运行都是这样弄乱的,并且总是至少有二十次左右的运行完全没有意义。但是,如果我单独运行它们,数字又会有意义。

TL; DR 批量运行仿真会使输出混乱。

我在互联网上什么也没找到,我已经上下阅读了手册和用户指南,我真的很希望在这里找到答案,因为我的学士论文需要这种模拟并四处奔波210单独运行不是可行的任务。也不可能将结果分成多个小段,因为我打算评估数据的方式将花费更长的时间。

解决方法

批处理仿真仅是一次执行一个单独的仿真,因此从理论上讲,批处理中的一个步骤应产生与单独运行该模拟方案完全相同的输出。

现在我在理论中说过。出于优化目的,可以在SAME流程中依次执行几个步骤(以避免启动流程的开销。当您运行许多简短的仿真时,这很有用),但是这假定仿真模型没有错误。没有泄漏,没有未初始化的内存等。

如果您有未初始化的变量,则可能会导致崩溃或完全垃圾输出。

如果您使用opp_runall运行,请尝试在命令行上指定-b 1,以强制每次运行进入一个单独的进程。