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

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

Кнопка

Команда

Описание


Запустить

[Видна, если модель в текущий момент не выполняется]

Запускает модель с текущего состояния. Модель будет выполняться до тех пор, пока вы не (при)остановите ее с помощью кнопки Пауза или Прекратить выполнение эксперимента, или же до тех пор, пока она не будет (при)остановлена какой-то активностью в самой модели.

Вы можете запустить модель до заданного момента модельного времени либо на заданный интервал времени от текущего момента, после чего ее выполнение будет приостановлено. Более подробно эти возможности запуска описаны здесь.


Пауза

[Видна, если модель в текущий момент выполняется]

Приостанавливает выполнение модели. Вы можете продолжить выполнение модели в любой момент времени, нажав на кнопку Запустить.

Вы можете приостановить модель в заданный момент модельного времени. Более подробно эта возможность приостановки описана здесь.


Прекратить выполнение эксперимента

Прекращает выполнение модели.

Обратите внимание, что кнопка Запустить может стать недоступна. Это будет означать, что в модели не происходит никаких активностей, и ее работа завершена.

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

Программное управление выполнением модели

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

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

Чтобы вызвать функцию исполняющего модуля, напишите, например, getEngine().finish() в соответствующем месте кода вашей модели.

Или же вы можете вызвать аналогичную функцию finishSimulation() из любой активности агента вашей модели.

Функция исполняющего модуля

Функция агента

Краткое описание

Полное описание

boolean start() нет Запускает модель (если она еще не была запущена) и приостанавливает ее выполнение.

Команда исполняющего модуля, выполняемая только в том случае, если модуль находится в состоянии IDLE (в других состояниях не делает ничего, просто возвращает false).

Функция выполняет следующее:

1. Устанавливает время запуска модели.
2. Создает необходимое содержимое агента верхнего уровня путем вызова функции root.create();
3. Запускает модель (планирует первые события) путем вызова функции root.start();
4. Переводит исполняющий модуль в состояние паузы PAUSED.

boolean pause()

boolean pauseSimulation()

Приостанавливает запущенную модель. Переводит исполняющий модуль в состояние PAUSED после завершения выполнения текущего события.

Команда исполняющего модуля, выполняемая только в том случае, если модуль находится в состоянии RUNNING (в других состояниях не делает ничего, просто возвращает false). Переводит исполняющий модуль в состояние PLEASE_WAIT и затем выставляет флаг, который при проверке исполняющим модулем, вынуждает его завершить выполнение после завершения выполнения текущего события. Дальнейшее поведение зависит от контекста, из которого была вызвана эта функция:

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

Обратите внимание, что ко времени завершения работы этой функции исполняющий модуль может находиться в состоянии PAUSED, FINISHED или ERROR.

Возвращает:
false, если текущее состояние исполняющего модуля не позволяет приостановить выполнение модели

boolean run() boolean runSimulation() Запускает приостановленную модель. Переводит исполняющий модуль в состояние RUNNING и затем возобновляет выполнение модели.

Команда исполняющего модуля, выполняемая только в том случае, если модуль находится в состоянии PAUSED (в других состояниях не делает ничего, просто возвращает false). Переводит исполняющий модуль в состояние RUNNING и затем запускает модель в отдельном потоке. Выполнение может быть прервано в результате одного из следующих событий:

- больше нет событий, которые нужно выполнить (состояние -> FINISHED)

- достигнуто конечное время stopTime (состояние -> FINISHED)

- была вызвана функция pause() (состояние -> PAUSED)

- агент верхнего уровня был уничтожен (состояние -> FINISHED)

- во время выполнения события или уничтожения агента произошло исключение (состояние -> ERROR)

Эта функция не должна вызываться из потока выполнения модели!

Обратите внимание, что ко времени завершения работы этой функции исполняющий модуль может находиться в состоянии PAUSED, FINISHED или ERROR.

Возвращает:
false , если текущее состояние исполняющего модуля не позволяет произвести запуск модели

boolean stop()

boolean stopSimulation()

Останавливает выполнение модели затем уничтожает ее и "забывает" о ней, переводя исполняющий модуль в состояние IDLE.

Команда исполняющего модуля, выполняемая только в том случае, если модуль не находится в состоянии IDLE (в состоянии IDLE не делает ничего, просто возвращает false). Если модуль находится в состоянии RUNNING, то устанавливает флаг, который при проверке потоком выполнения модели, вынуждает исполняющий модуль завершить выполнение модели. Дальнейшее поведение зависит от контекста, из которого вызван эта функция:

  • Если эта функция вызывается из потока выполнения модели, из кода действия элемента управления или из действия по щелчку фигуры, то она мгновенно возвращает true, оставляя модуль в состоянии PLEASE_WAIT. Модель останавливается и уничтожается позднее (обработку этого момента можно добавить в Действие после "прогона" модели эксперимента или в Действие при уничтожении агента верхнего уровня). В таких ситуациях рекомендуется использовать функцию finish().

  • Если эта функция вызвана из какого-либо другого места (например, из заданного пользователем параллельного потока), то она ждет завершения потока выполнения модели, затем уничтожает модель (путем вызова root.onDestroy()) и "забывает" о ней. Затем переводит исполняющий модуль в состояние IDLE и возвращает true.

boolean finish()

boolean finishSimulation()

Завершает выполнение запущенной или приостановленной модели. В отличие от функции stop() модель при этом не уничтожается, и вы можете анализировать ее состояние.

Команда исполняющего модуля, выполняемая только в том случае, если модуль находится в состоянии RUNNING или PAUSED (в других состояниях не делает ничего, просто возвращает false). Устанавливает флаг, который при проверке исполняющим модулем, вынуждает его завершить выполнение после завершения выполнения текущего события. Дальнейшее поведение зависит от контекста, из которого вызвана эта функция:

  • Если эта функция вызывается из потока выполнения модели, из кода действия элемента управления или из действия по щелчку фигуры, то она мгновенно возвращает true. Модель останавливается сразу после выполнения текущего события (обработку этого момента можно добавить в Действие после "прогона" модели эксперимента.
  • Если эта функция вызвана из какого-либо другого места (например, из заданного пользователем параллельного потока), то она ждет завершения потока выполнения модели и возвращает true.

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

Возвращает:
false, если текущее состояние исполняющего модуля не позволяет остановить выполнение модели

boolean runFast()

нет

Запускает модель самым быстрым из возможных способов из текущего потока. Запуск производится в режиме виртуального времени безотносительно заданных настроек.

Запускает модель самым быстрым из возможных способов из текущего потока. Запуск производится в режиме виртуального времени безотносительно заданных настроек.

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

- недопустимое состояние исполняющего модуля в момент вызова функции (возвращает false, во всех остальных случаях возвращает true)

- больше нет ни одного события/уравнения, которые нужно выполнить/решить (состояние -> FINISHED)

- была вызвана функция pause() (состояние -> PAUSED)

- была вызвана функция finish() (состояние -> FINISHED)

- достигнуто конечное время stopTime (состояние -> FINISHED)

- агент верхнего уровня был уничтожен (состояние -> FINISHED)

- во время выполнения события или уничтожения агента произошло исключение (состояние -> ERROR)

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

Возвращает:
false, если текущее состояние исполняющего модуля не позволяет произвести запуск модели

boolean step()

нет

Выполняет не более одного дискретного шага модели (шаг может быть выполнен только из состояния паузы PAUSED).

Выполняет не более одного дискретного шага модели (шаг может быть выполнен только из состояния паузы PAUSED).

Обратите внимание, что ко времени завершения работы этой функции исполняющий модуль может находиться в состоянии PAUSED, FINISHED или ERROR.

Эта функция не должна вызываться из потока выполнения модели!

Возвращает:
false, если текущее состояние исполняющего модуля не позволяет произвести выполнение шага

Engine.State getState()

нет

Возвращает текущее состояние исполняющего модуля (IDLE, PAUSED, RUNNING, FINISHED, ERROR или PLEASE_WAIT).

Возвращает текущее состояние исполняющего модуля:

IDLE - не выполняется ни одна из моделей, ничего не происходит

PAUSED - модель была выбрана и уже запущена, а в данный момент готова к продолжению выполнения или к выполнению шага

RUNNING - находится в цикле выполнения модели, вызванного функцией run() или runFast()

FINISHED - выполнение модели успешно завершено, но модель еще не уничтожена

ERROR - выполнение модели завершено с ошибкой, но модель еще не уничтожена

PLEASE_WAIT - находится в процессе выполнения непрерываемой команды, такой, как pause(), step() или stop()

Обратите внимание, что актуальность возвращаемого состояния не гарантируется, поскольку оно может быть изменено из параллельного потока.

boolean getRealTimeMode()

нет

Возвращает текущий режим выполнения модели.

Возвращает true, если на данный момент модель выполняется в режиме реального времени. Если модель выполняется в режиме виртуального времени, функция возвращает false.

void setRealTimeMode
(boolean on)

нет

Задает режим выполнения модели: в виртуальном времени или в реальном времени.

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

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

double getRealTimeScale()

нет

Возвращает текущий коэффициент скорости моделирования.

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

Этот коэффициент применим, только если модель выполняется в режиме реального времени.

void setRealTimeScale
(double scale)

нет

Задает коэффициент скорости моделирования.

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

Этот коэффициент применим, только если модель выполняется в режиме реального времени.

Параметр:
scale - новый коэффициент скорости моделирования.


См. также

Окно модели

Запуск эксперимента