AnyLogic позволяет пользователям создавать свои собственные функции. С помощью функций вы можете единожды задать определенную последовательность действий (обычно - вычислений, возвращающих результат), которую нужно будет выполнять из разных мест (или в разные моменты жизни) модели. Функции пишутся на языке Java, поэтому в вашем распоряжении имеются все преимущества этого языка, такие, как, например, условные операторы ( if-then-else), циклические операторы ( while, for ), операторы ветвления ( switch) и т.д.
AnyLogic поддерживает специальный тип функций – табличные функции. Табличная функция – это функция, заданная в табличной форме. Она может быть сделана непрерывной с помощью интерполяции и экстраполяции. Табличные функции обычно используются для задания сложных нелинейных зависимостей, которые не могут быть описаны с помощью стандартных функций, или для приведения собранных с какой-то периодичностью и заданных в виде таблицы экспериментальных данных к непрерывному виду.
Имя – Имя функции.
Отображать имя – Если опция выбрана, то имя функции будет отображаться в графическом редакторе.
Исключить – Если опция выбрана, то функция будет исключена из модели.
Видимость – Если опция выбрана, то функция будет отображаться на презентации во время выполнения модели.
Тип возвращаемого значения
– Тип возвращаемого функцией значения. Если вам нужно, чтобы функция возвращала результат проведенных ею вычислений, то вам нужно будет указать здесь, какого типа будет возвращаемое значение. Функция может возвращать как значение одного из наиболее
часто используемых типов (int, double,
boolean, String), так и значение любого другого (и это уникальная особенность AnyLogic) Java класса (в этом случае вам нужно будет выбрать опцию
Другой
и ввести имя типа в расположенном справа поле).
Если функция не возвращает ничего, выберите выше
Действие (не возвращает ничего).
Здесь вы можете задать аргументы функции, с помощью которых вы сможете передавать функции данные, необходимые для вычислений. Каждый аргумент задается в отдельной строке таблицы.
Введите здесь тело функции. Функции пишутся на языке Java, поэтому в вашем распоряжении имеются все преимущества этого языка, такие, как, например, условные операторы (if-then-else), циклические операторы (while, for), операторы ветвления (switch) и т.д. Также вы можете оперировать здесь аргументами функции.
Последняя строка должна возвращать значение с помощью оператора
return.
Статическая – [Параметр доступен только в Режиме разработчика библиотек] Если опция выбрана, то функция будет статической, т.е. будет иметь одно и то же значение во всех имеющихся в модели экземплярах данного класса (например, во всех агентах популяции). Не используйте статические функции, если вы планируете проводить сложный эксперимент (оптимизационный эксперимент, эксперимент варьирования параметров и т.д.), предусматривающий параллельное выполнение нескольких итераций на разных ядрах процессора (возможность параллельного выполнения итераций задается с помощью опции Разрешить параллельное выполнение итераций в настройках эксперимента).
Уровень доступа – Уровень доступа к функции. Есть четыре уровня доступа:
private
– функция доступна только из этого типа агентов
protected
- функция
доступна из этого типа агентов и его подтипов
default
- функция
доступна из любого места модели
public
- функция
доступна из всех открытых моделей.
Единицы измерения (сист. динамика) – Если опция выбрана, то вы можете задать единицы измерения для возвращаемого функцией значения.
Если вам будет нужно передавать функции какие-то данные, необходимые для проведения вычислений, вы можете использовать для этого аргументы функции.
Если вы зададите у функции аргументы, то при каждом вызове этой функции вам будет нужно передавать ей значения этих аргументов (в том же порядке, в каком они заданы в секции Аргументы).
AnyLogic позволяет изменять порядок следования аргументов в таблице с помощью кнопок
и
. Чтобы удалить аргумент, выделите соответствующую строку в таблице и щелкните по кнопке
.
По умолчанию функции могут вызываться из любого места модели, в которой они заданы. Вы можете ограничить доступ к функции, изменив ее уровень доступа с помощью выпадающего списка Уровень доступа.
Есть четыре уровня доступа:
private – функция доступна только из этого типа агентов
protected - функция доступна из этого типа агентов и его подтипов
default - функция доступна из любого места модели
public - функция доступна из всех открытых моделей.