OMNeT ++:使用相同种子

时间:2017-04-12 08:16:15

标签: omnet++ inet

使用的版本:带有iNET 3.4.0的OMNeT ++ 5.0

使用OMNeT ++我正在运行一些具有大量重复的模拟。 在某些情况下,我不了解系统的行为,所以我想使用Qt观察程序。因此,我需要重复先前模拟重复的一些特殊情况。

即使我使用完全相同的配置文件和相应的种子集,我也没有得到所需的重复,所以我得到完全不同的结果。可能是什么原因?

分析生成的日志文件的标题,以下几行只有差异:

run General-107342-20170331-15:42:22-5528
attr datetime 20170331-15:42:22
attr processid 5528

所有其他参数完全匹配。我不明白为什么结果会有所不同。 processid是否与此类行为相关?

1 个答案:

答案 0 :(得分:2)

解决问题的一些提示:

  • 检查差异是否确实是由图形/非图形差异引起的。使用以下两种方式运行模拟:
  

$ mysim -r 154 -u Cmdenv

     

$ mysim -r 154 -u Qtenv

     

$ mysim -r 154 -u Tkenv

检查结果。几个问题可能导致不同的结果:

  • 依赖于C ++中的未定义行为,就像你有一个(set)集合并迭代它一样。集合的顺序是未定义的,它可以将模拟推向不同的轨迹
  • 访问未初始化的内存
  • 使用仅在图形运行时中可用的数据,例如使用@displayString属性定义的节点的位置。节点位置可能会根据布局算法而改变,并且布局在Cmdenv中不可用
  • 在测试模型是否在图形runtine下运行时更改模型状态,即在if (isGUI()) {}块内部。

首先,我会尝试弄清楚这是与GUI与非GUI相关还是使用未定义的行为。如果Tkenv和Qtenv在Cmdenv不同的情况下给出相同的结果,则它是GUI-nonGUI问题。如果所有这些都不同,我会怀疑内存问题或未定义的行为。

如果其他一切都失败了,请在Cmdenv和Qtenv中运行模拟并打开事件记录。比较日志,看看两个trajctor开始发散和调试的位置,然后围绕这一点查看分歧的原因。