AnyLogic поддерживает синхронное, асинхронное и смешанное моделирование. Асинхронное моделирование означает непрерывную ось модельного времени, возможность планирования событий в произвольные моменты времени и выполнение непрерывных процессов, таких, как в системной динамике.Синхронное моделирование подразумевает наличие дискретных временных шагов и синхронное выполнение агентами (а возможно, и средой) действий во время выполнения этих шагов. Хотя в большинстве случаев асинхронные модели ближе к действительности и также более эффективны с точки зрения затрат на вычисления (шаги в этом случае никогда не выполняются зазря ), иногда проблемы лучше решаются с помощью синхронных моделей (это относится к тем системам реального мира, в которых решения принимаются периодически через определенные промежутки времени, например, каждый день или каждый месяц).
Вы можете добавить синхронизацию "вручную" или использовать встроенные сервисы AnyLogic, предоставляемые средой и агентами. Вот простейший способ добавить синхронизацию вручную: на диаграмме Main (или в любой другой диаграмме агента) создайте цикличное событие, происходящее по истечению таймаута с таймаутом, равным 1, и следующим кодом действия:
for( Person p : people )
p.step();
где Person - это тип агента ваших агентов, people - их популяция диаграммы Main, а step - функция типа Person.
AnyLogic предоставляет встроенную поддержку синхронных агентных моделей. Предположим, что в вашей модели есть тип агента Person для агентов, среда задана на диаграмме Main и указанный вложенный объект people принадлежит этой среде.
Чтобы добавить синхронизацию в агентную модель
В моменты времени 0, 1, 2, 3, ... будет гарантировано выполнение событий в следующем порядке:
Обычно две стадии действия среды используются для подготовки модели к шагу и для "обертывания" шага, например, для обновления статистики. Две стадии действия агента используются для сбора информации и для принятия некоторых решений. Например, в известной игре Жизнь каждая ячейка считает количество живых соседей в коде Действия перед выполнением шага и изменяет свое состояние в коде Действия на шаге.
Добавляя такую синхронизацию, вы не ограничиваете динамику вашей модели только лишь дискретными временными шагами. ваши агенты, так же, как и другие объекты, могут планировать другие события, выполнять переходы диаграмм состояний, запускать другие процессы - и все это параллельно выполнению заданных шагов синхронизации.