【发布时间】: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.
【问题讨论】:
-
这不能回答您的问题,但您可能希望使用由 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
-
是的,这是完全可能的。奇怪的是,您缺少手册中记录的内容。您的安装可能有问题