【问题标题】:Veins error using mt19937使用 mt19937 的静脉错误
【发布时间】:2018-07-17 13:23:53
【问题描述】:

我正在尝试使用 mt19937 在Veins 上为我的节点/车辆类生成(良好的)随机数。当我为每辆车使用一个 mt19937 时,他可以工作,但是当我设置为静态(所有车使用一个 mt19937)时,他不工作

static mt19937 mt;

使用mt时出现一个错误:

uniform_int_distribution <int> unif_dist(1, 100);
...
return unif_dist(mt);

错误:

网络期间模块 (cModule) vehDist_rsu (id=48) 出错 设置:找不到类“Veins::ObstacleControl”——可能是它的代码 未链接,或课程未注册 Register_Class(),或者在模块和通道的情况下,使用 Define_Module()/Define_Channel()。

网络清理期间的错误:模型错误:ASSERT:条件 vect[i]==NULL false in function deleteNetwork, csimulation.cc line 437.

我尝试使用12 解决,但没有成功。

【问题讨论】:

  • 这不能回答您的问题,但您可能希望使用由 OMNeT++ 管理的 PRNG,而不是您自己的。当您开始多次重复实验时,这将变得特别有用
  • 您好 Christoph,感谢您的评论。我正在使用 OMNeT++ PRNG(seed-set = ${repetition}),但我需要更多随机数(另一个来源),所以我创建了一个 mt19937 用于第一辆车(car[0])和一个 srand 用于所有的汽车。这不是最好的选择,但它可以。我使用 mt19937 来选择哪辆车将生成消息(数据)和 srand 来选择哪辆车(基于一些变量)将发送每条消息。
  • OMNeT++ 可以设置和管理多个独立播种的RNG(各种类型,mersenne twister 就是其中之一)。用户手册记录了如何很好地设置和管理它们的复杂性:omnetpp.org/doc/omnetpp/manual/…
  • 你好克里斯托夫,再次感谢。有一种方法可以获取/使用,例如,来自 OMNet 4.6 中 RNG 索引 1 的随机数?我正在使用这个版本,并没有本手册中引用的很多功能。我想将 RNG 索引 0 用于一个部分,将 RNG 索引 1 用于另一部分。还是最好升级到 OMNeT 5? omnetpp.org/doc/omnetpp/api/APIChanges.html
  • 是的,这是完全可能的。奇怪的是,您缺少手册中记录的内容。您的安装可能有问题

标签: omnet++ veins


【解决方案1】:

我将我的 Veins 更新为 Veins 4.4,在 BaseWaveApplLayer.h 中将 mt19937 设置为静态:

static mt19937 mt;

在我的车辆类中定义他:

mt19937 BaseWaveApplLayer::mt_veh;

并在 BaseWaveApplLayer 类中使用他:

uniform_int_distribution <int> dist(0, 100);
int valueSelected = dist(mt_veh);

感谢所有帮助:)!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    相关资源
    最近更新 更多