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

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

В 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 функций):

Функция Описание
double min( a, b ) Возвращает минимум из a и b.
double log( a ) Возвращает натуральный логарифм аргумента a
double pow( a, b ) Возвращает значение a, возведенное в степень b.
double sqrt( a ) Возвращает квадратный корень из a.

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

Функция Описание
double time() Возвращает текущее значение модельного времени (в единицах модельного времени).
Date date() Возвращает текущую модельную дату (Date является стандартным Java классом).
int getMinute() Возвращает текущую минуту в часе текущей модельной даты
double minute() Возвращает интервал времени, соответствующий одной минуте, в выбранных в данной модели единицах модельного времени.

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

Функция Описание
double uniform( min, max ) Возвращает число, полученное согласно равномерному распределению
double exponential( rate ) Возвращает число, полученное согласно экспоненциальному распределению

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

Функция Описание
traceln( Object o ) Распечатывает текстовое представление объекта с разделителем строки в консоль
String format( value ) Форматирует значение в имеющую правильное представление строку

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

Функция Описание
boolean finishSimulation() Завершает выполнение модели после выполнения текущего события
boolean pauseSimulation() Приостанавливает выполнение модели, переводит управляющий модуль в состояние «паузы».
error( String msg ) Выдает сообщение об ошибке. Прекращает выполнение модели, выведя заданное сообщение.
Функция Описание
Agent getOwner() Возвращает агента верхнего уровня, включающего в себя данного агента; если такой есть
int getIndex() Возвращает индекс этого агента в списке, если это популяция агентов
Experiment<?> getExperiment() Возвращает эксперимент, управляющий выполнением модели
IExperimentHost getExperimentHost() Возвращает графический интерфейс модели
Engine getEngine() Возвращает исполняющий модуль AnyLogic

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

Функция Описание
inState( Truck.Moving ) Проверяет, находится ли агент (типа Truck) в данный момент в состоянии Moving его диаграммы состояний.

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

Функция Описание
connectTo( agent ) Устанавливает соединение с другим агентом
send( msg, agent ) Посылает сообщение заданному агенту

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

Функция Описание
double getX() Возвращает X-координату агента в непрерывном пространстве
moveTo( x, y, z ) Начинает движение агента к точке (x, y, z) в трехмерном пространстве

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

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

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

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

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

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

  • event.restart( 15*minute() ) — планирует событие event на момент времени, отстоящий от текущего на 15 минут
  • event.reset() — отменяет (возможно, запланированное ранее) событие event

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

  • statechart.receiveMessage( "Go!" ) — доставляет сообщение "Go!" в диаграмму состояний statechart

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

  • viewArea.navigateTo() – отображает часть холста окна презентации, попавшую в область просмотра viewArea

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

  • rectangle.setFillColor( red ) — меняет цвет заливки прямоугольника rectangle на красный

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

  • boolean checkbox.isSelected() — Возвращает текущее состояние флажка checkbox

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

  • rectangle.setVisible( checkbox.isSelected() );

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

  • source.set_rate( 100 ) – присваивает параметру rate объекта source значение 100
  • hold.setBlocked( true ) – переводит объект hold в заблокированное состояние

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

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

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

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

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

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

Как мы можем улучшить эту статью?