Как изменить конфигурацию сети при моделировании в OMNeT ++?

Я хочу изменить некоторые параметры элемента .ини файл в OMNeT ++, скажем, скорость передачи узла, во время прогона моделирования, например, когда узел получает какое-то управляющее сообщение.

Я нашел информацию о том, что можно как-то зациклить конфигурацию, указанную как: some_variable = $ {несколько значений}, но в .ини файлы и нет возможности передать в эти файлы какие-либо данные из функций C ++ (насколько мне известно).

Я использую INET, но, возможно, пользователи некоторых других моделей уже обеспокоены такой проблемой.

1

Решение

Хотя вы можете, конечно, вручную изменить изменчивые параметры, OMNeT ++ (насколько мне известно) не предлагает интегрированной поддержки автоматического изменения параметров во время выполнения.

Вы можете, однако, написать некоторый код модели, который изменяет изменчивые параметры программно.

0

Другие решения

Я нашел информацию о том, что можно как-то зациклить конфигурацию, указанную как: some_variable = $ {несколько значений}, но нет никаких условных оговорок в файлах .ini, и нет возможности передать в эти файлы какие-либо данные из функций C ++ (насколько мне известно).

На самом деле вы можете использовать встроенный ограничение Выражение в файле INI. Это позволит вам создавать прогоны для данной конфигурации, соблюдая при этом ограничение (состояние).

Однако это ограничение будет применяться только к параметрам, указанным в INI-файле, т. Е. Это не поможет вам, если переменная, которую вы пытаетесь изменить, динамически вычисляется как часть кода.

Ниже я приведу довольно сложный «фрагмент кода» из файла .ini, в котором используются многие из упомянутых вами встроенных функций (итерация переменных, условия и т. Д.).

                # Parameter assignment using iteration loops and constrains #
# first define the static values on which the others depend #
scenario.node[*].application.ADVlowerBound = ${t0= 0.1}s
scenario.node[*].application.aggToServerUpperBound = ${t3= 0.9}s
#
## assign values to "dependent" parameters using variable names and loop iterations #
scenario.node[*].application.ADVupperBound = ${t1= ${t0}..${t3} step 0.1}s        # ADVupperBound == t1; t1 will take values starting from t0 to t3 (0.1 - 0.9) iterating 0.1
scenario.node[*].application.CMtoCHupperBound = ${t2= ${t0}..${t3} step 0.1}s
#
## connect "dependent" parameters to their "copies" -- this part of the snippet is only variable assignment.
scenario.node[*].application.CMtoCHlowerBound = ${t11 = ${t1}}s
scenario.node[*].application.joinToServerLowerBound = ${t12 = ${t1}}s
#
scenario.node[*].application.aggToServerLowerBound = ${t21 = ${t2}}s
scenario.node[*].application.joinToServerUpperBound = ${t22 = ${t2}}s
#
constraint = ($t0) < ($t1) && ($t1) < ($t2) && ($t2) < ($t3)
# END END END #

Приведенный выше код создает все возможные комбинации значений времени для t0 в t3где они могут принимать значения между 0.1 а также 0.9,

t0 а также t3 являются начальной и конечной точками соответственно. t1 а также t2 принимать значения на их основе.

t1 будет принимать значения между t0 а также t3 каждый раз увеличивается на 0.1 (см. синтаксис выше). То же самое верно для t2 тоже.

Тем не менее, я хочу t0 всегда быть меньше чем t1, t1 меньше чем t2, а также t2 меньше чем t3, Я указываю эти условия в constraint раздел.

Я уверен, что внимательно прочитал этот раздел руководства, поможет вам найти решение.

3

Если вы хотите изменить какое-либо значение во время симуляции, вы можете просто сделать это в своем коде C ++. Что-то вроде:

handleMessage(cMessage *msg){
if(msg->getKind() == yourKind){  // replace yourKind with the one you are using for these messages
transmission_rate = new_value;
}

На что вы ссылаетесь как some_variable = $ {несколько значений} может использоваться для выполнения нескольких прогонов с различными параметрами. Например, один пробег со скоростью 1 с, один с 2 с и один с 10 с. Это было бы тогда:

transsmission_rate = ${1, 2, 10}s

Для получения более подробной информации о том, как использовать такие значения (например, делать циклы), смотрите соответствующий раздел в OMNeT ++ Руководство пользователя

1
По вопросам рекламы [email protected]