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

Обработка событий исполняющего модуля AnyLogic

Моделирование в AnyLogic представляет собой выполнение последовательности событийных и временных шагов.

Во время временного шага:

  • Обновляется значение модельного времени.
  • «Дискретное» состояние модели (состояния диаграмм состояний, портов, событий, потоков) остается неизменным.
  • Численно решаются текущие активные уравнения (если они есть), и соответствующим образом изменяются значения переменных.
  • Проверяются ожидающие события.

Во время событийного шага:

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

События исполняющего модуля AnyLogic

События исполняющего модуля AnyLogic — это события, происходящие во время работы модели. Пожалуйста, не путайте их со статическими/динамическими событиями, которые являются частью языка моделирования AnyLogic.

Есть несколько типов событий моделирующей машины:

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

События исполняющего модуля AnyLogic хранятся в очереди сообщений. Любое событие, находящееся в очереди событий, может быть связано с:

  • активным статическим/динамическим событием;
  • переходом, срабатывающим с заданной интенсивностью или по истечении таймаута.

Новые текущие события могут возникнуть в результате выполнения действия только что произошедшего события, например:

  • Выполнения действия перехода, срабатывающего при получении сообщения или выполнении условия.

Временной шаг

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

Событийный шаг

На один момент времени могут быть запланированы сразу несколько событий. В этом случае AnyLogic выберет одно из этих событий и выполнит его. Это будет повторяться до тех пор, пока не будут выполнены все текущие события. Поэтому сразу несколько событийных шагов могут быть выполнены последовательно, в то время как после временного шага обязательно должен выполняться событийный шаг. Одновременные события могут как зависеть друг от друга, так и быть истинно параллельными.

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

Пример обработки очереди событий AnyLogic показан на приведенном ниже рисунке.

Очередь событий AnyLogic (ожидающие события не отображены)

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