Имитационное моделирование на базе AnyLogic

Агентное моделирование в AnyLogic

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

Основные мысли

В результате изучения лекции слушатель будет способен:
1. Объяснить, как агентный подход может воспроизводить модели системной динамики и дискретно-событийного моделирования.
2. Сравнить системную динамику, дискретно-событийный и агентный подходы по критериям производительности, удобства и выразительной способности.
3. Обосновать выбор агентного подхода для задач, где необходимо моделировать индивидуальное поведение, историю или сложную логику принятия решений объектами.
4. Применять диаграммы состояний (statechart) для визуализации и настройки жизненного цикла агента.
5. Различать типы событий (по тайм-ауту, с заданной интенсивностью, динамические) и использовать их для инициации действий агентов.
6. Описать механизмы синхронизации агентов, доступные в среде моделирования.
7. Классифицировать типы пространств (дискретное, непрерывное, ГИС) и способы размещения в них агентов.
8. Объяснить роль коммуникации и сетей связей между агентами для возникновения коллективной динамики.
Показывать лекцию целиком
Краткое изложение
Агентное моделирование: обобщающий подход

Мы переходим к агентному моделированию. Это агрегирующий метод, который может включать в себя все остальные подходы. Понятие агента и его движение по процессу мы видели и в дискретно-событийном подходе, и в системной динамике. Но там агенты присутствовали в неявном виде, не являясь основным элементом. В агентных моделях агент — это и есть ключевой элемент.

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

Агенты существуют в рамках некоторой среды. По умолчанию создается универсальная среда Main, в которой находится вся модель. Это не значит, что все агенты должны быть в Main. Можно создать подагента внутри Main, а уже внутри него будут существовать остальные агенты, выстраивая иерархию.

Сравнение агентного подхода с системной динамикой
Рассмотрим разницу на примере модели распространения нового продукта по Бассу. Слева — системно-динамическая модель, а справа — та же модель, реализованная через принципы агентного подхода.

В системной динамике потенциальные клиенты перетекали в контейнер полноценных клиентов как общая масса. Мы не различали отдельных представителей. В агентной модели мы контролируем состояние на уровне каждого агента. Это реализуется с помощью диаграммы состояний (statechart).
• Начальное состояние: При появлении агент автоматически получает статус Потенциальный клиент (Potential Adopter).
• Первый канал (реклама): С интенсивностью, равной эффективности рекламы (AdEffectiveness), агент переходит в состояние Клиент (Adopter). Это аналог произведения коэффициента эффективности на количество потенциальных клиентов.
• Второй канал (устная реклама): Агенты в состоянии «Клиент» с интенсивностью контактов (ContactRate) посылают случайно выбранному агенту сообщение «Купи». Если получатель находится в состоянии «Потенциальный клиент», то он перейдет в состояние «Клиент» с вероятностью, равной коэффициенту эффективности устной рекламы (AdoptionFraction). Для агентов, которые уже являются клиентами, это сообщение бессмысленно.

Этот простой стейтчарт абсолютно эквивалентен модели системной динамики. Любая модель, реализованная в системно-динамическом или дискретно-событийном подходе, может быть реализована и в агентном. В этом смысле агентное моделирование обобщает их.

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

Преимущество гибкости агентного подхода

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

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

• Мы создаем переменную timePerchase, которая фиксирует, как давно агент стал клиентом.
• В логику отправки сообщения «Купи» добавляется условие: вероятность отправки обратно пропорциональна прошедшему времени.

В результате мы увидим, что привлечение клиентов падает. Например, к определенному моменту времени мы охватим не весь рынок, а только его часть (скажем, 80%), потеряв часть клиентов из-за более жизненного описания устной рекламы. Реализовать такую же логику в системной динамике можно, но потребуются более сложные функции для хранения и учета моментов времени из истории.

Сравнение агентного подхода с дискретно-событийным
Рассмотрим сервисный процесс. В дискретно-событийной модели: появляется заявка, поступает на обслуживание, где тратятся ресурсы. Если решение не найдено, заявка через задержку возвращается на обслуживание. Если решение найдено — покидает систему.

В агентном подходе для этого потребуется два типа агентов: Клиент и Ресурс.
Ресурс имеет два состояния: Свободен и Занят.
Клиент выполняет последовательность действий:
1. Делает запрос ресурса. Если ресурс свободен, захватывает его.
2. Переходит в стадию Обслуживание.
3. Завершает обслуживание и отпускает ресурс (команда «отпустить ресурс»).
4. Происходит проверка решения. Если решение не найдено — возвращается к началу. Если найдено — уходит на задержку, после чего покидает систему.

Таким образом, и дискретно-событийный подход реализуем в агентном. Более того, агентный подход позволяет легко добавлять новые ветки логики, например, аварийный процесс (пожар), создав отдельное состояние Тревога и переход в него.

Выбор подхода к моделированию

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

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

Ключевые инструменты агентного моделирования
1. События (Events)
Событие провоцирует действие. Оно может быть:
• По тайм-ауту (Timeout): Срабатывает через заданный промежуток времени. Может быть разовым или циклическим.
• С заданной интенсивностью (Rate): Срабатывает в среднем с заданной частотой, как пуассоновский поток. Это делает момент срабатывания не строго периодическим, что приближает модель к реальности (например, приход клиентов в банк).
• Ручной вызов: Вызывается напрямую из кода с помощью команды event.restart().
• Динамическое событие (Dynamic Event): Событие, которое планирует другие события в будущем. Пример: при наступлении события «Вылет самолета» динамически создается и планируется событие «Прилет самолета» с учетом среднего времени полета.

2. Диаграмма состояний (Statechart)
Определяет жизненный цикл агента, наглядно показывая его состояния и переходы между ними. Пример — часы: с помощью нажатий на кнопку и тайм-аутов можно переключаться между состояниями «Отображение времени», «Отображение даты», «Установка будильника», а при низком заряде батареи перейти в состояние «Остановка».

3. Синхронизация агентов
Когда несколько агентов должны совершить действие одновременно (например, на производстве), необходима синхронизация. Для этого у всех агентов есть встроенные действия: «перед выполнением шага» и «на шаге», которые гарантируют согласованность поведения.

4. Пространство
Агенты могут существовать в пространстве разных типов:
• Дискретное (сетка ячеек): Агенты живут в ячейках и могут перемещаться между ними. Важно понятие соседства:
o Евклидово расстояние: Соседи только по вертикали и горизонтали.
o Расстояние Мура: Диагональные элементы тоже считаются соседями.
Методы ячейки: getRow(), getColumn(), jumpToCell(), jumpToRandomCell().
• Непрерывное (2D/3D): Агенты имеют координаты X, Y, Z. Методы для движения:
o jumpTo(): мгновенное перемещение.
o moveTo(): непрерывное движение с заданной скоростью.
o moveToInTime(): движение, при котором агент достигает цели за указанное время (скорость вычисляется автоматически).
o stop(): остановка движения.
o getX(), getY(), distanceTo(), timeToArrival(), setVelocity().
ГИС-пространство: Движение по картам. Методы аналогичны непрерывному пространству (получение долготы, широты и т.д.).

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

5. Коммуникация и сети агентов
Общение между агентами — ключевой момент, определяющий динамику системы. Агент может менять свое решение на основе полученных сообщений.

Методы коммуникации:
connectTo(agent): установить связь с агентом.
disconnectFrom(agent): разорвать связь.
sendToAll("message"): отправить сообщение всем.
sendToRandom("message"): отправить случайному агенту.
sendToRandomConnected("message"): отправить случайному агенту из числа «присоединенных».

Типы сетей связей:
• Случайная (Random).
• Решеточная (Lattice): связи только с соседями.
• Малый мир (Small-world): небольшое число дальних связей.
• Безмасштабная (Scale-free): каждый связан с каждым.

Сети можно динамически менять в процессе моделирования.

6. Масштабирование модели
Моделировать каждого агента в огромной популяции (например, все население страны) неэффективно. Есть два подхода:
1. Уменьшение среды: Моделируется небольшая репрезентативная область, а результат экстраполируется на всю популяцию.
2. Агрегирование групп: Вместо отдельных людей создаются агенты, представляющие целые группы (например, «молодые люди 18-23 лет с восточного побережья»).

Краткие итоги

Представленный материал выстраивает стройную концепцию агентного моделирования, помещая его в центр современной имитационной парадигмы не как обособленный метод, а как универсальную надстройку. Сначала демонстрируется концептуальная полнота подхода: через прямую реализацию моделей системной динамики и дискретно-событийных процессов показывается, что агентная логика способна воспроизвести любую модель, но на более детальном уровне. Ключевой вывод из этого сравнения — не в том, что один метод «лучше», а в том, что агентный подход по своей природе избыточен и требователен к ресурсам. Его применение становится инженерным компромиссом, где платой за гибкость и выразительность выступает производительность.

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

Далее следует систематизация инструментов, которая переводит теорию в практическую плоскость конструирования. Рассмотренные элементы — события, диаграммы состояний, механизмы синхронизации и пространства — представляют собой не просто перечень функций, а палитру для настройки автономности и коллективного взаимодействия. Особо выделяется роль коммуникации как главного драйвера системной динамики: способность агентов избирательно отправлять и получать сообщения позволяет моделировать эмерджентные эффекты, недостижимые при анализе усредненных потоков. В сочетании с возможностью выбора типа сети связей это дает исследователю мощный аппарат для воссоздания сложного социального, биологического или технического поведения. Финальный акцент на методах агрегирования и масштабирования снимает кажущееся противоречие между микроуровневым моделированием и реальными размерами систем, предлагая стратегии снижения размерности без потери ключевых свойств моделируемой популяции.
Агентное моделирование: суть и место среди подходов

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

Главное преимущество подхода — способность детализировать поведение на уровне отдельных объектов, а главный недостаток — более низкая производительность, так как он не оперирует усредненными показателями.

Сравнение с другими парадигмами

• Системная динамика: На примере модели Басса видно, что вместо накопителей с общей массой клиентов, агентный подход с помощью диаграммы состояний (statechart) отслеживает статус каждого индивида. Агент рождается «Потенциальным клиентом». Переход в «Клиенты» происходит либо с интенсивностью рекламы (AdEffectiveness), либо при получении сообщения «Купи» от другого клиента с вероятностью AdoptionFraction. Модели полностью эквивалентны, но агентная проще усложняется. Например, введение зависимости эффективности сарафанного радио от давности покупки делается через личную переменную агента timePerchase без концептуальной перестройки, что в системной динамике потребовало бы сложных функций.
• Дискретно-событийный подход: Сервисный процесс с возвратом на обслуживание реализуется через двух типов агентов — Клиент и Ресурс. Ресурс имеет состояния «Свободен»/«Занят», а Клиент проходит цикл: запрос ресурса -> обслуживание -> проверка решения -> (если не решено) возврат к началу или уход. Агентный подход позволяет легко добавлять ветки, например, аварийную эвакуацию.

Правило выбора подхода

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

Ключевые инструменты агентного моделирования
• События (Events):
o По тайм-ауту (Timeout): разовое или циклическое действие через заданное время.
o С заданной интенсивностью (Rate): нерегулярное событие со средней частотой (как пуассоновский поток), что повышает реалистичность.
o Динамическое событие: планирует другие события в будущем (например, вылет самолета динамически создает событие его прилета).
Диаграмма состояний (Statechart): визуальное представление всех состояний агента и правил перехода между ними.
Синхронизация: встроенные действия «перед выполнением шага» и «на шаге» позволяют согласовывать действия разных агентов во времени.
• Пространство:
o Дискретное (сетка): агенты в ячейках, перемещаются через jumpToCell(). Есть понятие соседства (Евклидово или Мура).
o Непрерывное (2D/3D): агенты с координатами. moveTo() — движение, jumpTo() — телепортация, moveToInTime() — прибытие точно в срок.
o ГИС: движение по картам с аналогичными методами.
• Коммуникация и сети: Обмен сообщениями (sendToAll(), sendToRandom()) — основа коллективной динамики. Агентов можно соединять в сети (решеточные, «малый мир», безмасштабные) и динамически менять связи (connectTo(), disconnectFrom()).

Масштабирование

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

Выводы

1. Агентное моделирование является методом, который концептуально объединяет и может воспроизводить модели системной динамики и дискретно-событийного подхода.
2. Агент — это ключевой элемент модели, который может представлять как материальные объекты (люди, машины), так и абстрактные сущности (проекты).
3. Агентный подход позволяет реализовать ту же логику, что и в других парадигмах (например, модель Басса), но с контролем состояния на уровне каждого отдельного объекта.
4. Главное ограничение агентного моделирования — более низкая производительность по сравнению с подходами, оперирующими агрегированными данными.
5. Основное преимущество агентного подхода — исключительная гибкость в усложнении логики поведения объектов без концептуальной перестройки модели.
6. Моделирование затухающей во времени устной рекламы тривиально реализуется в агентной модели, но требует сложных решений в системной динамике.
7. Для реализации сервисных процессов в агентном подходе требуется создание нескольких типов агентов (например, «Клиент» и «Ресурс») и настройка их взаимодействия.
8. Среда моделирования позволяет комбинировать парадигмы, создавая мультиподходные модели, где агентный блок может взаимодействовать с системно-динамическим или дискретно-событийным.
9. События с заданной интенсивностью генерируются как пуассоновский поток, что делает их не строго периодическими и повышает реалистичность моделей поведения людей.
10. Ключевым механизмом сложной системной динамики является способность агентов обмениваться сообщениями, а также возможность формировать и динамически менять сети связей между ними.
11. Для снижения вычислительной нагрузки при моделировании больших популяций применяются стратегии уменьшения среды или агрегирования агентов в репрезентативные группы.
12. Поведение агента может задаваться гибким сочетанием инструментов: диаграммой состояний, событиями, динамическими переменными и прямым программированием на Java.

Вопросы для самопроверки

1. Почему агентное моделирование считается подходом, обобщающим системную динамику и дискретно-событийное моделирование?
2. В чем ключевое отличие представления клиентов в агентной модели Басса по сравнению с системно-динамической?
3. Каким образом в агентной модели Басса с помощью стейтчарта реализуется канал устной рекламы, включая условие, что сообщение получает агент в статусе «Потенциальный клиент»?
4. Почему агентная модель всегда будет работать медленнее, чем эквивалентная ей модель системной динамики?
5. В чем заключается практическая выгода от использования агентного подхода при необходимости добавить в модель фактор «времени с момента покупки»?
6. Опишите разницу в моделировании одного и того же сервисного процесса в дискретно-событийном и агентном подходах. Сколько типов агентов потребуется во втором случае?
7. Приведите пример ситуации, когда выбор агентного подхода является обоснованным и дает преимущество над традиционными методами.
8. Чем принципиально отличается событие, заданное «с интенсивностью» (Rate), от циклического события (Timeout с циклом), и в каких случаях первое предпочтительнее?
9. Объясните на примере с авиарейсом, что такое динамическое событие и какую задачу оно решает.
10. Какие существуют типы пространств для агентов и в чем практическая разница между методами jumpTo() и moveTo() в непрерывном пространстве?
11. Для чего нужна синхронизация агентов и с помощью какого встроенного механизма она гарантируется?
12. Какую роль в агентном моделировании играет обмен сообщениями между агентами и какие существуют способы отправки сообщений в зависимости от типа связи?
Вернуться к учебному плану