Изменение значений параметров и переменных во время работы модели

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

AnyLogic предоставляет сразу несколько способов изменения значений параметров и переменных:

Можно выделить общие для всех этих способов правила:

Изменение параметров и переменных с помощью окон инспекта

Проще всего изменять значения параметров и переменных по ходу моделирования с помощью окон инспекта. С их помощью можно изменять значения:

Чтобы изменить значение параметра/переменной из окна инспекта
  1. Во время работы модели, щелкните мышью по значку параметра/переменной в окне презентации.
  2. Вы увидите небольшое окошко желтого цвета - окно инспекта. Оно имеет три режима - отображение значения, изменение значения и отображение графика истории изменения значений параметра/переменной.

  1. По умолчанию окно инспекта отображает значение параметра/переменной. Чтобы переключиться в режим изменения значения, щелкните мышью по кнопке с карандашом  в верхней части окна инспекта.
  1. Введите новое значение в открывшемся поле редактирования. Вы можете заметить, что в случае введения значений, недопустимых для типа данного параметра/переменной (например, значений, отличных от true и false для логического параметра типа boolean), будет выдано предупреждение об ошибке. Информация о типе данных отображается в нижней части окна инспекта.
  2. Когда закончите ввод значения, нажмите клавишу Enter. Вы увидите, что параметру/переменной будет присвоено новое значение. 
  1. Можете закрыть окно инспекта, наведя мышь на заголовок окна инспекта и затем щелкнув по появившейся кнопке  в верхней правом углу окна инспекта.

Изменение параметров и переменных с помощью элементов управления

Вы можете также привычно изменять значения переменных и параметров с помощью элементов управления. Приведенная ниже таблица перечисляет элементы управления, которые могут для этого использоваться, а также приводит информацию о том, параметры и переменные каких типов можно связать с каждым элементом управления:

Элемент управления

Можно связать с переменной/параметром типа

Комментарий

Флажок

boolean

При выборе флажка связанная переменная примет значение true, при сбросе - false.

Текстовое поле

String, double, int

Значения целочисленных переменных и параметров удобнее изменять с помощью бегунков.

Бегунок

double, int

Значения вещественных переменных и параметров типа double удобнее изменять с помощью текстового поля.

Переключатель

int

При выборе первой кнопки переключателя связанной переменной/параметру будет присвоено значение 0, при выборе второй кнопки 1 и т.д.

Выпадающий список

String

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

Список

String

Связать список с параметром или переменной можно будет только в том случае, если вы не выберете у него опцию Выбор нескольких элементов.

Чтобы изменять значение параметра/переменной с помощью элемента управления

  1. Добавьте требуемый элемент управления из палитры Элементы управления на диаграмму вашего агента или эксперимента.
  2. Выберите в свойствах этого элемента флажок Связать с и введите имя параметра/переменной в расположенном справа поле.
  3. Если вы хотите связать с элементом управления численный параметр или переменную, то возможно вы захотите задать границы диапазона допустимых значений в полях Минимальное значение и Максимальное значение.
  4. После этого, запустив модель, вы сможете изменять значение связанной с элементом переменной или параметра, изменяя состояние или значение элемента управления.

Можете посмотреть на простейшую модель, в которой значение параметра можно изменять с помощью связанного с ним бегунка.

Пример модели: Slider Linked To Parameter


Программное изменение значений параметров и переменных

Как параметры, так и переменные доступны из кода по своим именам, например, parameterA, plainVar2.

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

Программное изменение значений переменных

Чтобы изменить значение скалярной переменной, нужно просто выполнить строку кода, в которой с помощью оператора присваивания переменной присваивается новое значение, например: plainVar = 10;

Если же у вас есть, скажем, переменная-массив целочисленных значений plainVar (с типом int[] и начальным значением new int[5]), то чтобы присвоить первому элементу массива (с индексом 0) значение 10, нужно будет выполнить строку кода plainVar[0]=10;

вы не можете программно изменять значения простых переменных, объявленных константами.

Программное изменение значений параметров

Значение параметра также можно изменять с помощью простого оператора присваивания, например, если у нас есть целочисленный параметр  parameter, то присвоить ему значение 10 можно так: parameter = 10;  Но в этом случае остальные элементы модели не будут знать о произведенном изменении, и оно может не повлиять на модель должным образом.

Поэтому мы рекомендуем изменять значение параметра посредством вызова метода set_имяПараметра() (в данном случае - set_parameter() ), автоматически генерируемого AnyLogic, которому в качестве аргумента нужно передать новое значение.
В этом случае изменение будет распространяться и по всем зависимостям этого параметра.

При необходимости, вы можете задать действия, которые должны выполняться при изменении значения параметра, написав обработчик этого события в свойстве параметра Действие при изменении. Введенный здесь код будет вызываться при вызовах функции set_имяПараметра().  В этом коде доступна локальная переменная oldValue, которая хранит старое значение параметра (то значение, которое было у параметра до этого изменения значения).

 Действие при изменении параметра не будет выполняться, если новое значение, задаваемое методом set_имяПараметра() будет равно текущему значению данного параметра.