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

API исполняющего модуля

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

Управление выполнением модели
Функция Описание
boolean run() Команда исполняющего модуля, которую можно применить только если модуль находится в состоянии PAUSED. В других случаях функция не делает ничего и возвращает false.
Переводит исполняющий модуль в состояние RUNNING и начинает выполнение модели в отдельном потоке. Выполнение («прогон») может быть прервано в следующих случаях:
  • в модели больше нет событий (состояние: FINISHED)
  • истекло заданное время «прогона» (состояние: FINISHED)
  • вызвана функция pause() (состояние: PAUSED)
  • агент верхнего уровня был уничтожен (состояние: FINISHED)
  • произошла ошибка при срабатывании события или уничтожении агента (состояние: ERROR)
Эту функцию не следует вызывать в потоке, в котором выполняется модель!
На момент окончания вызова функции исполняющий модуль уже может быть в одном из состояний: PAUSED, FINISHED или ERROR.
boolean runFast() Запускает модель самым быстрым возможным образом в том же потоке, в котором вызывается функция. «Прогон» осуществляется в виртуальном режиме без учета других настроек. Выполнение может быть прервано в одном из следующих случаев:
  • некорректное состояние исполняющего модуля при вызове функции (возвращает false, в прочих случаях возвращает true)
  • в модели не осталось несработавших событий и нерешенных уравнений (состояние: FINISHED)
  • истекло заданное время «прогона» (состояние: FINISHED)
  • вызвана функция pause() (состояние: PAUSED)
  • вызвана функция finish() (состояние: FINISHED)
  • агент верхнего уровня был уничтожен (состояние: FINISHED)
  • произошла ошибка при выполнении модели (состояние: ERROR)
На время выполнения «прогона» модель заблокирована для чтения и записи, так что вам не следует отображать презентации агентов или выполнять параллельно другие операции, требующие доступа к модели.
boolean runFast(double pauseTime) Вызывает функцию runFast(), но при этом ставит выполнение модели на паузу при достижении заданного модельного времени и возвращает true. Если «прогон» заканчивается в связи с достижением заданного времени окончания «прогона» или вызовом функции finish() до времени pauseTime, модель выполняется только до момента, указанного одной из этих настроек.
Возвращает false, если состояние исполняющего модуля не позволяет запустить модель.

pauseTime — время, когда «прогон» модели будет поставлен на паузу
boolean pause() Команда исполняющего модуля, которую можно применить, только если модуль находится в состоянии RUNNING. В других случаях функция не делает ничего и возвращает false.
Переводит исполняющий модуль в состоянии PLEASE_WAIT и активирует проверку, при выполнении которой исполняющий модуль переходит в режим паузы после окончания обработки текущего события. Дальнейшее поведение зависит от контекста вызова функции:
  • Если функция вызвана из потока выполнения модели, из кода действия элемента или кода, срабатывающего по щелчку по фигуре, функция возвращает true, а выполнение модели ставится на паузу после окончания обработки текущего события.
  • Когда эта функция вызвана из других мест (например, из созданного пользователем параллельного потока), сначала ожидается окончание потока выполнения модели, после чего функция возвращает true.
На момент окончания вызова функции исполняющий модуль уже может быть в одном из состояний: PAUSED, FINISHED или ERROR.
boolean step() Выполняет максимум один дискретный шаг модели (срабатывает, только если исполняющий модуль находится в состоянии PAUSED). После вызова модуль остается в состоянии FINISHED, ERROR или PAUSED. Возвращает false, если исполняющий модуль не позволяет выполнить шаг.
Эту функцию не следует вызывать из потока выполнения модели!
boolean stop() Останавливает и уничтожает модель (см. также функцию finish(), которая не уничтожает модель).
Команда исполняющего модуля, которую можно использовать при любом состоянии, кроме IDLE. При IDLE функция не делает ничего и возвращает false.
Если исполняющий модуль находится в состоянии RUNNING, активирует проверку, при выполнении которой поток выполнения модели уничтожается. Дальнейшее поведение зависит от контекста вызова функции:
  • Если функция вызвана из потока выполнения модели, из кода действия элемента или кода, срабатывающего по щелчку по фигуре, функция возвращает true незамедлительно, переводя модель в состояние PLEASE_WAIT. Модель останавливается и уничтожается некоторое время спустя: в это время можно вызывать код Действия после "прогона" модели или код При уничтожении агента верхнего уровня.
  • Когда эта функция вызвана из других мест (например, из созданного пользователем параллельного потока), сначала ожидается окончание потока выполнения модели, а затем уничтожается и забывается модель (путем вызова функции root.onDestroy()). После этого функция переводит исполняющий модуль в состояние IDLE и возвращает true.
  • Если эта функция вызвана в процессе «быстрого» выполнения модели, то она просто останавливает модель: соберите все необходимые данные из завершившейся модели и остановите исполняющий модуль вручную.
boolean finish() Уничтожает модель после срабатывания текущего события. Не уничтожает модель.
Это команда исполняющего модуля, которую можно вызвать только в состоянии RUNNING или PAUSED. В других случаях функция не делает ничего и возвращает false.
Активирует проверку, при выполнении которой исполняющий модуль останавливается после срабатывания текущего события. Дальнейшее поведение зависит от контекста вызова функции:
  • Если функция вызвана из потока выполнения модели, из кода действия элемента или кода, срабатывающего по щелчку по фигуре, функция возвращает true незамедлительно. Модель останавливается сразу после срабатывания текущего события: в это время можно вызывать код Действия после "прогона" модели.
  • Когда эта функция вызвана из других мест (например, из созданного пользователем параллельного потока), сначала ожидается окончание потока выполнения модели, после чего функция возвращает true.
На момент окончания вызова функции исполняющий модуль уже может быть в одном из состояний: FINISHED или ERROR.
double getProgress() Возвращает текущую стадию «прогона» в виде числа от 0 до 1 (в зависимости от того, какая часть эксперимента была завершена). Возвращает -1, если установить стадию не представляется возможным (не задано конечное время «прогона»). Если исполняющий модуль находится в состоянии IDLE или ERROR, также возвращает -1.
Experiment.State getState() Возвращает текущее состояние исполняющего модуля.
Возможные значения:
  • IDLE — никакая модель не запущена. Исполняющий модуль не делает ничего;
  • PAUSED — модель запущена, исполняющий модуль готов запустить ее или совершить шаг моделирования;
  • RUNNING — исполняющий модуль выполняет цикл моделирования, запущенный в результате вызова функций run() или runFast();
  • FINISHED — выполнение «прогона» успешно завершено, но модель еще не уничтожена;
  • ERROR — выполнение «прогона» завершено с ошибкой, но модель еще не уничтожена;
  • PLEASE_WAIT — исполняющий модуль находится в состоянии выполнения непрерываемой команды: например, pause(), step() или stop().
Корректность результата не гарантируется, так как в процессе вызова функции исполняющий модуль может переходить в другое состояние.
Время начала и окончания прогона
Функция Описание
double getStartTime() Возвращает заданное время начала «прогона» (в единицах модельного времени) — значение модельного времени, в которое начинается эксперимент. По умолчанию равно 0.
double getStartTime(TimeUnits units) Возвращает заданное время начала «прогона» (в указанных единицах измерения времени) — значение модельного времени, в которое начинается эксперимент. По умолчанию равно 0.

units — константа, задающая единицы измерения времени
java.util.Date getStartDate() Возвращает дату начала «прогона» (в часовом поясе TimeZone, заданном виртуальной машиной Java).
double getStopTime() Возвращает заданное время остановки «прогона» (в единицах модельного времени)  — значение модельного времени, в которое эксперимент должен быть остановлен.
Возвращает +infinity, если время остановки эксперимента не задано.
double getStopTime(TimeUnits units) Возвращает заданное время остановки «прогона» (в указанных единицах измерения времени)  — значение модельного времени, в которое эксперимент должен быть остановлен.
Возвращает +infinity, если время остановки эксперимента не задано.

units — константа, задающая единицы измерения модельного времени
java.util.Date getStopDate() Возвращает дату остановки «прогона» (в часовом поясе TimeZone, заданном виртуальной машиной Java).
Возвращает null, если время остановки эксперимента не задано.
void setStartTime(double tstart) Задает время начала «прогона» — стартовое значение модельного времени. По умолчанию — 0.
Функция работает только перед запуском прогона.

tstart — время начала прогона в единицах модельного времени
void setStartTime(double tstart, TimeUnits units) Задает время начала «прогона» — стартовое значение модельного времени. По умолчанию — 0.
Функция работает только перед запуском прогона.

tstart — время начала прогона в заданных единицах
units — константа, задающая единицы измерения модельного времени
void setStartDate(java.util.Date date) Задает дату начала «прогона».

date — дата начала «прогона» в стандартном формате в часовом поясе виртуальной машины Java
void setStopTime(double tstop) Задает время окончания «прогона» в единицах модельного времени. Выполнение модели не остановится, если функция вызвана позже указанного времени окончания, или время окончания равно +infinity. Если какие-то события срабатывают непосредственно в момент окончания модели, они будут запущены.
По умолчанию время окончания «прогона» равно +infinity, так что «прогон» может длиться бесконечно.

tstop — время окончания прогона в единицах модельного времени
void setStopTime(double tstop, TimeUnits units) Задает время окончания «прогона» в заданных единицах. Выполнение модели не остановится, если функция вызвана позже указанного времени окончания, или время окончания равно +infinity. Если какие-то события срабатывают непосредственно в момент окончания модели, они будут запущены.
По умолчанию время окончания «прогона» равно +infinity, так что «прогон» может длиться бесконечно.

tstart — время окончания прогона в заданных единицах
units — константа, задающая единицы измерения времени
void setStopDate(java.util.Date date) Задает дату окончания «прогона» путем конвертирования переданной параметром даты с учетом модельного времени, даты начала и настроек используемых единиц измерения времени и даты. Сбрасывает ранее заданное время окончания прогона.

date — дата окончания «прогона» в стандартном формате в часовом поясе виртуальной машины Java
Время
Функция Описание
double time() Возвращает текущее модельное (логическое) время в единицах модельного времени.
double time(TimeUnits units) Возвращает текущее модельное (логическое) время в заданных единицах измерения времени.

units — константа, задающая единицы измерения времени.
java.util.Date date() Возвращает текущую модельную дату с учетом времени и даты начала «прогона» и единиц модельного времени.
java.util.Date timeToDate(double t) Конвертирует заданное модельное время в дату с учетом времени и даты начала «прогона» и единиц модельного времени. Возвращает null, если время равно бесконечности.

t — модельное время
double dateToTime(java.util.Date d) Конвертирует заданную дату в модельное время с учетом времени и даты начала «прогона» и единиц модельного времени.

d — модельная дата
int getAmPm() Возвращает значение, показывающее то, к первой (значение AM) или второй (значение PM) половине дня относится час текущей модельной даты. Эта функция используется для 12-часовых часов. Например, для даты 10:04:15.250 PM результат будет равен 1. Возможные значения:
  • 0 — AM
  • 1 — PM
int getDayOfMonth() Возвращает порядковый номер дня в месяце для текущей модельной даты с учетом времени и даты начала «прогона» и единиц модельного времени.
Первому дню месяца соответствует значение 1.
int getDayOfYear() Возвращает порядковый номер дня в году для текущей модельной даты с учетом времени и даты начала «прогона» и единиц модельного времени.
Первому дню года соответствует значение 1.
int getDayOfWeek() Возвращает порядковый номер дня в неделе для текущей модельной даты с учетом времени и даты начала «прогона» и единиц модельного времени.
Результат зависит от установленного языка системы: так, в некоторых странах неделя начинается с воскресенья, так что понедельнику соответствует значение 2, тогда как в других странах неделя начинается с понедельника — и понедельнику соответствует значение 1.
int getHour() Возвращает текущий час утра или вечера текущей модельной даты с учетом начального времени/даты эксперимента и того, какие в этом эксперименте выбраны единицы модельного времени.
Этот метод используется для 12-часовых часов.
Полдень и полночь задаются значениями 0, а не 12.
Например, для даты 10:04:15.250 PM результат будет равен 10.
int getHourOfDay() Возвращает текущий час дня текущей модельной даты с учетом начального времени/даты эксперимента и того, какие в этом эксперименте выбраны единицы модельного времени.
Этот метод используется для 24-часовых часов.
Например, для даты 10:04:15.250 PM результат будет равен 22.
int getMillisecond() Возвращает текущую миллисекунду в секунде текущей модельной даты с учетом начального времени/даты эксперимента и того, какие в этом эксперименте выбраны единицы модельного времени.
Например, для даты 10:04:15.250 PM результат будет равен 250.
int getMinute() Возвращает текущую минуту в часе текущей модельной даты с учетом начального времени/даты эксперимента и того, какие в этом эксперименте выбраны единицы модельного времени.
Например, для даты 10:04:15.250 PM результат будет равен 4.
int getMonth() Возвращает месяц текущей модельной даты с учетом начального времени/даты эксперимента и того, какие в этом эксперименте выбраны единицы модельного времени.
Значение будет зависеть от типа используемого календаря.
Первым месяцем года в григорианском и юлианском календарях является январь (JANUARY), которому соответствует значение 0. Номер последнего месяца зависит от количества месяцев в году.
Возможные значения:
0 — JANUARY
1 — FEBRUARY
2 — MARCH
3 — APRIL
4 — MAY
5 — JUNE
6 — JULY
7 — AUGUST
8 — SEPTEMBER
9 — OCTOBER
10 — NOVEMBER
11 — DECEMBER
12 — UNDECIMBER (обозначает тринадцатый месяц года. Хотя григорианский календарь GregorianCalendar и не использует это значение, но он есть в лунных календарях).
int getSecond() Возвращает текущую секунду в минуте текущей модельной даты с учетом начального времени/даты эксперимента и того, какие в этом эксперименте выбраны единицы модельного времени.
Например, для даты 10:04:15.250 PM результат будет равен 15.
int getYear() Возвращает год текущей модельной даты с учетом начального времени/даты эксперимента и того, какие в этом эксперименте выбраны единицы модельного времени.
Значение будет зависеть от типа используемого календаря.
TimeUnits getTimeUnit() Возвращает константу, определяющую единицы измерения модельного времени.
Агент верхнего уровня
Функция Описание
Agent getRoot() Возвращает заданного для исполняющего модуля агента верхнего уровня. Обычно (по умолчанию) этим агентом является экземпляр агента типа Main.
База данных
Функция Описания
ModelDatabase getModelDatabase() Возвращает базу данных модели.
Генератор случайных чисел
Функция Описание
java.util.Random getDefaultRandomGenerator() Возвращает используемый по умолчанию генератор случайных чисел.
void setDefaultRandomGenerator(java.util.Random r) Изменяет используемый по умолчанию генератор случайных чисел.

r — новый генератор случайных чисел.
Слепки состояния модели
Функция Описание
void saveRootObjectSnapshot(String snapshotFileName) Сохраняет агента верхнего уровня и текущее состояние исполняющего модуля в указанный файл слепка состояния. Эта функция предназначена для использования в нестандартных экспериментах и доступна для использования только в AnyLogic Profession.
Функцию не следует вызывать:
  • Из потока «прогона» модели, кроме тех случаев, когда вызов производится из нестандартного эксперимента, а модель выполняется по итогу вызова функции runFast().
  • Если исполняющий модуль находится в состоянии RUNNING.

snapshotFileName — абсолютный путь до файла слепка состояния.
Созданный таким образом файл слепка можно использовать только с функциями loadRootObjectFromSnapshot(), т.к. он не предназначен для запуска экспериментов с анимацией и совместим только с нестандартными экспериментами.
Agent loadRootObjectFromSnapshot(String snapshotFileName) Загружает и извлекает агента верхнего уровня из заданного файла слепка состояния, кэшируя содержимое этого файла для улучшения производительности.
Функция поддерживает файлы слепков, созданные на основе любых экспериментов с анимацией (т.е. не только нестандартных), равно как и файлы слепков, созданные в результате вызова функции saveRootObjectSnapshot(String).

snapshotFileName — абсолютный путь до файла слепка состояния.
Agent loadRootObjectFromSnapshot(String snapshotFileName, boolean cacheSnapshot) Загружает и извлекает агента верхнего уровня из заданного файла слепка состояния, опционально кэшируя содержимое этого файла для улучшения производительности.
Функция поддерживает файлы слепков, созданные на основе любых экспериментов с анимацией (т.е. не только нестандартных), равно как и файлы слепков, созданные в результате вызова функции saveRootObjectSnapshot(String).

snapshotFileName — абсолютный путь до файла слепка состояния.
cacheSnapshot — если true, файл слепка будет закэширован для увеличения производительности.
void flushSnapshotCache() Очищает кэш от содержимого недавно загруженного файла слепка состояния.
При загрузке нового слепка кэш очищается автоматически.
Сообщения об ошибках
Функция Описание
RuntimeException error(String errorText) Сообщает об ошибке в процессе «прогона» модели путем срабатывания RuntimeException с заданным текстом errorText, которому предшествует полное имя агента. Функция не возвращает значение, а генерирует ошибку выполнения программы. Тип возвращаемого значения задается для тех случаев, когда вы хотите использовать вызов формата throw error("сообщение");

errorText — выводимый текст описания ошибки.
RuntimeException error(Throwable cause, String errorText) Сообщает об ошибке в процессе «прогона» модели путем срабатывания RuntimeException с заданным текстом errorText. Функция не возвращает значение, а генерирует ошибку выполнения программы. Тип возвращаемого значения задается для тех случаев, когда вы хотите использовать вызов формата throw error("сообщение");

cause — причина ошибки (сохраняется в сообщении), может быть null.
errorText — выводимый текст описания ошибки.
RuntimeException errorInModel(String errorText) Сообщает об ошибке в логике модели путем срабатывания ModelException с заданным текстом errorText. Функция не возвращает значение, а генерирует ошибку выполнения программы. Тип возвращаемого значения задается для тех случаев, когда вы хотите использовать вызов формата throw error("сообщение");
Функция отличается от error() тем, как именно выводится сообщение об ошибке. Ошибки в логике модели считаются менее критичными, чем другие: при их наличии автору модели может быть достаточно просто внести небольшие изменения в значения параметров. Например: «агент не смог покинуть блок диаграммы, так как следующий блок был занят», «недостаточная вместимость стеллажа» и так далее.

cause — причина ошибки (сохраняется в сообщении), может быть null.
errorText — выводимый текст описания ошибки.
RuntimeException errorInModel(Throwable cause, String errorText) Сообщает об ошибке в логике модели путем срабатывания ModelException с заданным текстом errorText. Функция не возвращает значение, а генерирует ошибку выполнения программы. Тип возвращаемого значения задается для тех случаев, когда вы хотите использовать вызов формата throw error("сообщение");
Функция отличается от error() тем, как именно выводится сообщение об ошибке. Ошибки в логике модели считаются менее критичными, чем другие: при их наличии автору модели может быть достаточно просто внести небольшие изменения в значения параметров. Например: «агент не смог покинуть блок диаграммы, так как следующий блок был занят», «недостаточная вместимость стеллажа» и так далее.

cause — причина ошибки (сохраняется в сообщении), может быть null.
errorText — выводимый текст описания ошибки.
Численные решатели
Функция Описание
Engine.SolverODEType getSolverODE() Возвращает тип решателя для дифференциальных уравнений первого порядка.
Возможные значения:
  • SOLVER_ODE_EULER
  • SOLVER_ODE_RK4
Engine.SolverNAEType getSolverNAE() Возвращает тип решателя для алгебраических уравнений.
Возможные значения:
  • SOLVER_NAE_MODIFIED_NEWTON
  • SOLVER_NAE_FAST_NEWTON
  • SOLVER_NAE_CLASSIC_NEWTON
Engine.SolverDAEType getSolverDAE() Возвращает тип решателя для смешанных дифференциально-алгебраических уравнений.
Возможные значения:
  • SOLVER_DAE_RK45_NEWTON
  • SOLVER_DAE_EULER_NEWTON
void setSolverODE(Engine.SolverODEType solverODE) Задает тип решателя для дифференциальных уравнений первого порядка.
Доступные решатели:
  • SOLVER_ODE_EULER (по умолчанию)
  • SOLVER_ODE_RK4

solverODE — тип решателя для дифференциальных уравнений первого порядка.
void setSolverNAE(Engine.SolverNAEType solverNAE) Задает тип решателя для алгебраических уравнений.
Доступные решатели:
  • SOLVER_NAE_MODIFIED_NEWTON (по умолчанию)
  • SOLVER_NAE_FAST_NEWTON
  • SOLVER_NAE_CLASSIC_NEWTON

solverNAE — тип решателя для алгебраических уравнений.
void setSolverDAE(Engine.SolverDAEType solverDAE) Задает тип решателя для смешанных дифференциально-алгебраических уравнений.
Доступные решатели:
  • SOLVER_DAE_RK45_NEWTON (default)
  • SOLVER_DAE_EULER_NEWTON

solverDAE — тип решателя для смешанных дифференциально-алгебраических уравнений.
double getATOL() Возвращает абсолютную точность численного метода.
double getRTOL() Возвращает относительную точность численного метода.
double getTTOL() Возвращает временную точность численного метода.
double getHTOL() Возвращает фиксированный шаг численного метода.
void setATOL(double atol) Задает абсолютную точность численного метода.

atol — новое значение абсолютной точности.
void setRTOL(double rtol) Задает относительную точность численного метода.

rtol — новое значение относительной точности.
void setTTOL(double ttol) Задает временную точность численного метода.

ttol — новое значение временной точности.
void setHTOL(double htol) Задает фиксированный шаг численного метода.

htol — новое значение фиксированного шага.
void setEventAwareSolver(boolean eventAwareSolver) Эту настройку можно использовать в моделях, содержащих дискретно-событийные компоненты и уравнения системной динамики одновременно.
Если true, уравнения системной динамики будут решаться одновременно с каждым срабатыванием события. Такой подход обеспечивает наиболее точные результаты, но в некоторых случаях сильно замедляет модель: например, если множество асинхронных агентов генерируют большое число событий за короткий период по ходу выполнения модели.
Если false, уравнения системной динамики будут решаться с фиксированным шагом без учета срабатывания событий. Как итог, события будут взаимодействовать с последними значениями непрерывных переменных. Эти значения могут быть неактуальны, т.к. соответствуют результатам, полученным на последнем шаге интегрирования. В худшем случае «отставание» значения будет равно значению фиксированного шага в заданных единицах измерения времени. Кроме того, в этом режиме формулы системной динамики не вычисляются при срабатывании событий: подсчет результатов решателем производится только в рамках фиксированных шагов.
По умолчанию true.
Эксперимент
Функция Описание
Experiment<?> getExperiment() Возвращает эксперимент, управляющий «прогоном» модели.
Эта функция не предназначена для использования в AnyLogic Cloud.
Кроме того, она возвращает null для нестандартных экспериментов.
IExperimentHost getExperimentHost() Возвращает объект презентации AnyLogic, связанный с запущенным исполняющим модулем, или пустой нефункциональный объект, если модуль не запущен.
Нестандартный эксперимент
Функция Описание
ExperimentCustom getExperimentCustom() Возвращает нестандартный эксперимент, управляющий «прогоном» модели. Для прочих типов экспериментов возвращает null.
void resetBeforeStart() Используется с нестандартными экспериментами, которые записывают данные в журнал базы данных модели. Перезагружает переменные состояния, которые используются корневыми параметрами перед вызовом функции start(Agent).
Если состояние исполняющего модуля отлично от IDLE, функция не делает ничего.
Специфические
Функция Описание
long getStep() Возвращает число событий, выполненных исполняющим модулем.
long getEventCount() Возвращает число запланированных событий.
int getRunCount() Возвращает номер текущего «прогона» (если точнее — число раз, которое модель была уничтожена).
Как мы можем улучшить эту статью?