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

Функции

AnyLogic позволяет пользователям создавать свои собственные функции. С помощью функций вы можете единожды задать определенную последовательность действий (обычно — вычислений, возвращающих результат), которую нужно будет выполнять из разных мест (или в разные моменты жизни) модели. Функции пишутся на языке Java, поэтому в вашем распоряжении имеются все преимущества этого языка, такие, как, например, условные операторы (if-then-else), циклические операторы (while, for), операторы ветвления (switch) и т.д.

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

Чтобы задать функцию

  1. Перетащите элемент Функция из палитры  Агент на диаграмму типа агентов (или эксперимента).
  2. Перейдите в панель Свойства и задайте свойства функции.
  3. Введите имя функции в поле Имя.
  4. Если ваша функция только выполняет какие-то действия, но не возвращает никакого результата проведенных вычислений, укажите, что эта функция не возвращает ничего, выбрав в группе кнопок Действие (не возвращает ничего).
  5. Если вам нужно, чтобы функция возвращала результат проведенных ею вычислений, то вам нужно будет указать, какого типа будет возвращаемое значение. Функция может возвращать как значение одного из наиболее часто используемых типов (int, double, boolean, String), так и значение любого другого Java класса (в этом случае вам нужно будет выбрать опцию Другой и ввести имя класса в расположенном справа поле).
  6. Функция может быть объявлена статической. Статическая функция не требует создания экземпляров того типа агентов, в котором она задана. Статическая функция myFunction, объявленная в типе агента MyClass, будет доступна из любого места модели как MyClass.myFunction(). Чтобы сделать функцию статической, установите флажок Статическая в секции свойств Специфические.
  7. Перейдите в секцию Тело функции панели Свойства и введите код в редактируемом поле. Последняя строка должна возвращать значение с помощью оператора return:
    return
          <выражение, возвращающее значение заданного типа>;

Свойства

Основные свойства

Имя — Имя функции.

Отображать имя — Если опция выбрана, то имя функции будет отображаться в графическом редакторе.

Исключить — Если опция выбрана, то функция будет исключена из модели.

Видимость — Если опция выбрана, то функция будет отображаться на презентации во время выполнения модели.

Тип возвращаемого значения — Тип возвращаемого функцией значения. Если вам нужно, чтобы функция возвращала результат проведенных ею вычислений, то вам нужно будет указать здесь, какого типа будет возвращаемое значение. Функция может возвращать как значение одного из наиболее часто используемых типов, так и значение любого другого (и это уникальная особенность AnyLogic) Java класса (в этом случае вам нужно будет выбрать опцию Другой и ввести имя типа в расположенном справа поле). Если функция не возвращает ничего, выберите выше Действие (не возвращает ничего).

Аргументы

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

Тело функции

Введите здесь тело функции. Функции пишутся на языке Java, поэтому в вашем распоряжении имеются все преимущества этого языка, такие, как, например, условные операторы (if-then-else), циклические операторы (while, for), операторы ветвления (switch) и т.д. Также вы можете оперировать здесь аргументами функции.
Последняя строка должна возвращать значение с помощью оператора return.

Специфические

Статическая — [Параметр доступен только в Режиме разработчика библиотек] Если опция выбрана, то функция будет статической, т.е. будет иметь одно и то же значение во всех имеющихся в модели экземплярах данного класса (например, во всех агентах популяции). Не используйте статические функции, если вы планируете проводить сложный эксперимент (оптимизационный эксперимент, эксперимент варьирования параметров и т.д.), предусматривающий параллельное выполнение нескольких итераций на разных ядрах процессора (возможность параллельного выполнения итераций задается с помощью опции Разрешить параллельное выполнение итераций в настройках эксперимента).

Уровень доступа — Уровень доступа к функции. Есть четыре уровня доступа:

private — функция доступна только из этого типа агентов
protected — функция доступна из этого типа агентов и его подтипов
default — функция доступна из любого места модели
public — функция доступна из всех открытых моделей

Единицы измерения (сист. динамика) — Если опция выбрана, то вы можете задать единицы измерения для возвращаемого функцией значения.

Аргументы функции

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

Чтобы задать аргументы функции

  1. Выберите функцию в графическом редакторе или в панели Проекты.
  2. Задайте аргументы в таблице секции Аргументы панели Свойства. Каждый аргумент задается в отдельной строке таблицы.
  3. Введите имя аргумента в ячейке Имя.
  4. Укажите тип аргумента в ячейке Тип. Щелкните мышью в ячейке и выберите нужный вам тип из выпадающего списка, либо же введите его самостоятельно.

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

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

Уровень доступа к функции

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

Есть четыре уровня доступа:

private — функция доступна только из этого типа агентов
protected — функция доступна из этого типа агентов и его подтипов
default — функция доступна из любого места модели
public — функция доступна из всех открытых моделей

Изменение процесса создания агента с помощью функции

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

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

  • onBeforeCreate() — Такая функция агента будет выполнена перед началом фазы создания этого агента.
  • onCreate() — Такая функция агента будет выполнена после завершения фазы создания этого агента.
Код, который вы сохраните в этой функции, перезапишет стандартный код, обрабатываемый исполняющим модулем AnyLogic. Используйте эту возможность осторожно.
Как мы можем улучшить эту статью?