Синхронизация агентов

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

AnyLogic предоставляет встроенную поддержку синхронных агентных моделей. Предположим, что в Вашей модели есть класс активного объекта Person для агентов, у которого установлен флажок Агент, добавлен объект Среда на диаграмму корневого класса Main и у вложенного объекта people (типа Person) этот объект указан в поле Среда.

  Чтобы добавить синхронизацию в агентную модель

  1. На вкладке Основные панели свойств среды установите флажок Выполнять шаги. По умолчанию шаг длится 1 единицу модельного времени, но его длительность может быть изменена в поле Длительность шага (в единицах мод. времени).
  2. В полях Действие перед выполнением шага и Действие после выполнения шага напишите код, который будет выполняться соответствено до и после того, как все агенты выполнят свои шаги, если таковые будут.
  3. На вкладке Агент панели свойств класса активного объекта Person задайте Действие перед выполнением шага и Действие на шаге (хотя Вы можете и оставить эти поля пустыми).

В моменты времени 0, 1, 2, 3, ... будет гарантировано выполнение событий в следующем порядке: 

  1. Выполняется Действие перед выполнением шага среды.
  2. У всех агентов выполняются Действия перед выполнением шага (в каком-то определенном порядке).
  3. В том же самом порядке у всех агентов выполняются Действия на шаге.
  4. Выполняется Действие после выполнения шага среды.

Обычно две стадии действия среды используются для подготовки модели к шагу и для "обертывания" шага, например, для обновления статистики. Две стадии действия агента используются для сбора информации и для принятия некоторых решений. Например, в известной игре Жизнь каждая ячейка считает количество живых соседей в коде Действия перед выполнением шага и изменяет свое состояние в коде Действия на шаге.

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