Пакетное выполнение OMNeT ++ портит результат

Я использую omnetpp 5.6.2 и inet 4.2.0 и некоторый самописный код для имитации алгоритмов лавинной рассылки и сравнения их с простым лавинным потоком. Для этого я настроил исследование параметров с сетками хостов в диапазоне от 3x3 до 9x9. Однако, когда я настраиваю пакетное выполнение, которое проходит через все три алгоритма, все сетки и разное количество соседних узлов, а также пять разных начальных значений для генератора случайных чисел, файлы результатов начинают испортиться.

Я запускаю собственное моделирование со следующими параметрами: Маршрутизация: Многоточечная ретрансляция Разделение между узлами: 700 м Размер сетки: 8x8 Набор семян: 0

Я измеряю максимальную задержку между отправленным кадром и последним узлом, который его получит, который должен составлять около 200 мс, учитывая, что каждый узел повторно отправляет со случайной задержкой от 0 до 15 мс.

В файле .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 мс, будет 15x15 мс = 225 мс. Вся остальная статистика в этом файле полностью испорчена и не имеет смысла. В каждой партии разные прогоны путаются вот так, и всегда по крайней мере двадцать или около того прогонов вообще не имеют смысла. Однако, если я провожу их по отдельности, цифры снова обретут смысл.

TL; DR Запуск моделирования в пакетном режиме портит результат.

Я ничего не нашел об этом в Интернете, я прочитал руководство и руководство пользователя вдоль и поперек, и я действительно надеюсь найти здесь ответ, так как мне нужна эта симуляция для моей дипломной работы бакалавра, и я выполняю около 210 запусков индивидуально это не выполнимая задача. Разделение на более мелкие серии также невозможно, поскольку способ, которым я собираюсь оценивать данные, займет намного больше времени.


person Skulldozer    schedule 23.09.2020    source источник
comment
Обмен воспроизводимым примером может помочь сообществу помочь вам.   -  person Azim    schedule 24.09.2020
comment
Я ценю ответ, однако проект состоит из множества файлов, и я не знаю, в чем именно заключается проблема. Каждый файл зависит друг от друга и от инет-фреймворка. Помогло бы поделиться всем проектом или файлами .ini и .Ned, или чем я мог бы поделиться, чтобы помочь делу?   -  person Skulldozer    schedule 24.09.2020


Ответы (1)


Пакетное моделирование - это не что иное, как одиночное моделирование, выполняемое одно за другим, поэтому теоретически шаг в пакете должен генерировать точно такой же результат, как и запуск этого сценария моделирования.

Теперь я сказал в теории. В целях оптимизации несколько шагов могут выполняться последовательно, но в ОДНОМ процессе (чтобы избежать накладных расходов на запуск процесса. Это может быть полезно, когда вы запускаете много коротких симуляций), однако это предполагает, что имитационная модель не содержит ошибок. нет утечек, нет неинициализированной памяти и т. д.

Если у вас есть неинициализированная переменная, вы можете получить сбой или полный мусор.

Если вы работаете с opp_runall, попробуйте указать -b 1 в командной строке, чтобы каждый запуск выполнялся в отдельном процессе.

person Rudi    schedule 13.10.2020