AnyLogic
Развернуть
Размер шрифта

Статические, динамические и кодовые параметры

Типы параметров библиотечных блоков

Параметры блоков всех библиотек AnyLogic бывают трех типов: статические, динамические и кодовые.

Статические параметры

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

В панели свойств блока статические параметры помечаются иконкой .

Динамические параметры

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

Пример динамического параметра: Время задержки блока Delay.

Вы можете задать в поле параметра как значение, например, 5, так и Java выражение, которое вернет значение требуемого типа. Это может быть, например, вызов функции вероятностного распределения: exponential(0.1) или вызов функции, заданной самим пользователем.

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

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

Кодовые параметры

Кодовые параметры обычно располагаются в секции свойств Действия. Имя кодового параметра обычно начинается со слова При, например, При входе. Если соединить эти слова вместе: Действие при входе, станет понятнее смысл этого параметра. Кодовый параметр по сути представляет собой место, где пользователь может задать Java код, который будет выполняться в соответствующий ключевой момент жизни агента внутри этого блока, например, при поступлении агента в блок, при окончании обслуживания агента, при освобождении ресурса, при выходе поезда из железнодорожной сети и т.д. Наш пример - Действие при входе - будет выполняться каждый раз, когда в блок поступает новый агент.

Каждая строка кода в поле кодового параметра отделяется точкой с запятой (в отличие от строки в поле задания значения динамического параметра).

В панели свойств кодовые параметры помечаются иконкой .

Примеры параметров

Тип параметра Блок Параметр Пример значения
Статический Queue Вместимость 15
Статический Delay Место агентов pathDelay
Динамический SelectOutput Условие randomTrue(0.7)
Динамический Service Время задержки agent.amount * 60
Кодовый Sink При входе
dataset.add( time() - agent.timestamp );
serviced;
Кодовый TrainSource Инициализация вагона
if( carindex == 0 ) {
   car.setShape( locomotive );
}
else {
  car.setShape( boxCar );
}

Локальные переменные

Как в выражениях динамических параметров, так и в коде кодовых параметров вы можете использовать локальные переменные. Например, в Библиотеке моделирования процессов наиболее часто поддерживается локальная переменная agent, которая ссылается на того агента, для которого в текущий момент вычисляется значение динамического параметра или выполняется код. Аналогичная переменная в Пешеходной библиотеке - ped - ссылается на текущего пешехода. В Железнодорожной библиотеке вы встретите такие локальные переменные, как train, track и т.д.

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

Изменение значения статического параметра во время выполнения модели

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

Чтобы изменить значение параметра, вызовите автоматически генерируемую функцию set_кодовоеИмяПараметра(), передав новое значение параметра в качестве аргумента этой функции.

Например, чтобы изменить значение параметра Вместимость блока Queue на 50, вам следует вызвать queue.set_capacity(50);

Кодовое имя параметра - это не имя параметра, которое отображается в панели Свойства. Кодовое имя можно узнать, обратившись к разделу Справочные руководства по библиотекам. Найдя нужный параметр блока в соответствующей статье, щелкните по метке . Нужное вам имя будет указано в появившейся ниже строке Синтаксис.

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