Моделирование в AnyLogic представляет собой выполнение последовательности событийных и временных шагов.
Во время временного шага:
- Обновляется значение модельного времени.
- «Дискретное» состояние модели (состояния диаграмм состояний, портов, событий, потоков) остается неизменным.
- Численно решаются текущие активные уравнения (если они есть), и соответствующим образом изменяются значения переменных.
- Проверяются ожидающие события.
Во время событийного шага:
- Значение модельного времени не изменяется.
- Выполняются действия состояний, переходов, событий, портов и т.д., связанные с этим событием.
- Может измениться состояние модели.
- В очереди событий исполняющего модуля AnyLogic могут быть как удалены некоторые запланированные события, так и добавлены некоторые новые.
События исполняющего модуля AnyLogic — это события, происходящие во время работы модели. Пожалуйста, не путайте их со статическими/динамическими событиями, которые являются частью языка моделирования AnyLogic.
Есть несколько типов событий моделирующей машины:
- текущие — события, которые могут быть выполнены в данный момент
- выбранное — одно из разрешенных событий, которое выбрано, чтобы быть выполненным следующим
- разрешенные — другие текущие события (те, которые потенциально могут быть выполнены следующими)
- запланированные — события, запланированные на какой-то конкретный момент времени в будущем
- ожидающие — события, которые могут произойти в будущем, но неизвестно когда.
События исполняющего модуля AnyLogic хранятся в очереди сообщений. Любое событие, находящееся в очереди событий, может быть связано с:
- активным статическим/динамическим событием;
- переходом, срабатывающим с заданной интенсивностью или по истечении таймаута.
Новые текущие события могут возникнуть в результате выполнения действия только что произошедшего события, например:
- Выполнения действия перехода, срабатывающего при получении сообщения или выполнении условия.
Если текущих событий нет, то AnyLogic выполнит временной шаг до ближайшего события (или событий) в очереди, т.е., увеличит значение модельного времени. Во время выполнения временного шага может произойти событие, вызванное тем, что выполнилось какое-то заданное условие. Дискретная часть исполняющего модуля AnyLogic не знает о том, когда выполнится условие срабатывания перехода: это зависит от системы уравнений, решаемой непрерывной частью исполняющего модуля. Как только это произойдет, значение времени будет увеличено до времени, выданного решателем уравнений, и будет выполнен событийный шаг.
На один момент времени могут быть запланированы сразу несколько событий. В этом случае AnyLogic выберет одно из этих событий и выполнит его. Это будет повторяться до тех пор, пока не будут выполнены все текущие события. Поэтому сразу несколько событийных шагов могут быть выполнены последовательно, в то время как после временного шага обязательно должен выполняться событийный шаг. Одновременные события могут как зависеть друг от друга, так и быть истинно параллельными.
Выполнение события по сути является выполнением кода, заданного в Действии этого события. Выполнение события перехода является выполнением действия, связанного с этим переходом. В результате выполнения события может измениться дискретное состояние модели: могут начать ожидание другие переходы, могут быть запланированы другие события, могут измениться текущие состояния диаграмм состояний. Поэтому некоторые события могут быть удалены из очереди событий, а другие события могут быть добавлены в нее.
Пример обработки очереди событий AnyLogic показан на приведенном ниже рисунке.
-
Как мы можем улучшить эту статью?
-