Ошибка вен при использовании mt19937

Я пытаюсь использовать 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 в функции deleteNetwork, строка 437 csimulation.cc.

Я пробовал решить проблему с помощью ​​1 и 2, но не сработало.


person João Batista    schedule 28.04.2016    source источник
comment
Это не отвечает на ваш вопрос, но вы, вероятно, захотите использовать PRNG, управляемые OMNeT ++, вместо ваших собственных. Это становится особенно полезным, когда вы запускаете более одной репликации эксперимента.   -  person Christoph Sommer    schedule 29.04.2016
comment
Привет, Кристоф, спасибо за ваш комментарий. Я использую PRNG OMNeT ++ (seed-set = ${repetition}), но мне нужно больше случайных чисел (другие источники), поэтому я создаю один mt19937 для использования на первом автомобиле (car [0]) и один srand для всех автомобилей. . Не лучший вариант, но работает. Я использую mt19937, чтобы выбрать, какая машина будет генерировать сообщение (я) (данные), и srand, чтобы выбрать, какая машина (на основе некоторых переменных) будет отправлять каждое сообщение.   -  person João Batista    schedule 30.04.2016
comment
OMNeT ++ может настраивать и управлять несколькими независимо отобранными ГСЧ (различных типов, в том числе мерсенн-твистер). В руководстве пользователя описаны тонкости их настройки и управления: omnetpp.org/doc/omnetpp/manual/   -  person Christoph Sommer    schedule 02.05.2016
comment
Привет, Кристоф, еще раз спасибо. Есть ли способ получить / использовать, например, случайное число из индекса 1 ГСЧ в OMNet 4.6? Я использую эту версию, и в этом руководстве у меня мало функций. Я хочу использовать индекс ГСЧ 0 для одной части и индекс 1 ГСЧ для другой. Или лучше перейти на OMNeT 5? omnetpp.org/doc/omnetpp/api/APIChanges.html   -  person João Batista    schedule 07.05.2016
comment
Да, это вполне возможно. Странно, что вам не хватает вещей, описанных в руководстве. Возможно, с вашей установкой что-то не так   -  person Christoph Sommer    schedule 09.05.2016


Ответы (1)


Я обновил свои Veins до Veins 4.4, установил mt19937 как статический в BaseWaveApplLayer. час:

static mt19937 mt;

Определите его в моем классе автомобилей:

mt19937 BaseWaveApplLayer::mt_veh;

И используйте его в классе BaseWaveApplLayer:

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

Спасибо всем за помощь :)!

person João Batista    schedule 12.10.2016