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

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

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

Вы можете добавить синхронизацию "вручную" или использовать встроенные сервисы AnyLogic, предоставляемые средой и агентами. Вот простейший способ добавить синхронизацию вручную: на диаграмме Main (или в любой другой диаграмме агента) создайте цикличное событие, происходящее по истечению таймаута с таймаутом, равным 1, и следующим кодом действия:

for( Person p : people )
    p.step();

где Person — это тип агента ваших агентов, people — их популяция диаграммы Main, а step — функция типа Person.

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

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

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

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

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

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

Демо-модель: The Game of Life Открыть страницу модели в AnyLogic Cloud. Там можно запустить модель или скачать ее по ссылке Исходные файлы модели.

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

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