Функции (методы)

В Java, чтобы вызвать функцию (или метод, что является более точным термином в объектно-ориентированных языках наподобие Java, поскольку функция является методом класса), Вам нужно написать имя функции, за которым будут следовать значения ее аргументов (в скобках). Например, ниже приведен вызов функции треугольного вероятностного распределения с тремя численными аргументами:

triangular( 2, 5, 14 )

А следующий вызов функции распечатывает в лог модели координаты агента вместе с временной меткой:

traceln( time() + ": X = " + getX() + " Y = " + getY() );

Аргумент этого вызова функции является строковым выражением, состоящим из пяти компонент, три из которых также являются вызовами функций: time(), getX() и getY().

Даже если у функции нет аргументов, Вы все равно должны поставить скобки после имени функции: time()

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

Стандартные и системные функции

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

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

Математические функции (импортированы из класса java.lang.Math, всего около 45 функций):

Функции, связанные с модельным временем, датой или элементами даты (около 20 функций):

Функции вероятностных распределений (поддерживается более 30 распределений):

Вывод в лог модели и форматирование:

Управление выполнением модели:

Навигация по структуре и окружению модели:

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

Функции, связанные с сетями и взаимодействием агентов:

Функции, связанные с пространством и движением:

Вы можете получить список всех функций, доступных в текущем контексте, например, в поле свойства элемента, вызвав Мастер подстановки кода (нажав Ctrl+пробел (Mac OS: Alt+пробел)).

Функции элементов модели

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

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

Вот некоторые примеры вызова функций элементов текущего агента:

Планирование и отмена запланированных событий:

Посылка сообщений диаграмме состояний и проверка текущего состояния:

Отображение области просмотра:

Изменение цвета фигуры:

Получение текущего значения элемента управления - флажка:

Эта строка кода прячет или показывает фигуру, в зависимости от текущего состояния флажка checkbox:

Изменение состояний и значений параметров вложенных агентов:

Обратите внимание, что параметр rate отображается на панели свойств объекта как Интенсивность прибытия.

Вы можете получить список всех функций объекта, вызвав Мастер подстановки кода. Для этого напишите в коде имя объекта, поставьте точку и затем вызовите Мастер, нажав Ctrl+пробел (Mac OS: Alt+пробел).

Задание Вашей собственной функции

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

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


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