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