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

Дискретно-событийное моделирование в AnyLogic

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

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

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

Основы дискретно-событийного подхода

Мы переходим к детальному рассмотрению дискретно-событийного моделирования. В рамках этого подхода учитываются только важные моменты в жизни системы, которые называются событиями (events). Любые длительные изменения можно представить через последовательность таких мгновенных событий.
Примеры событий:
• В банковское отделение приходит клиент.
• Завершается обработка счета.
• Количество сырья достигает минимально допустимого уровня.

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

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

Отличие от системной динамики

Это ключевое отличие от системной динамики. Там пересчёт всех параметров происходит в каждый такт времени. В дискретно-событийном подходе пересчёт происходит не в промежуточные моменты, а только когда наступает событие. События не обязательно происходят в целые моменты времени, они могут быть распределены случайным образом (например, момент 7.5).

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

Библиотека моделирования процессов

В AnyLogic существует Библиотека моделирования процессов (Process Modeling Library). Она предоставляет высокоуровневый интерфейс для быстрого создания моделей в стиле блок-схем. Блоки этой библиотеки сами по себе являются агентами, хотя это скрыто от пользователя. Каждый элемент может взаимодействовать с другими.

Базовая цепочка элементов:
1. Источник (Source): генерирует агентов (заявки). Агенты появляются согласно заданной интенсивности прибытия. Сгенерированная заявка — это агент.
2. Очередь (Queue): имеет характеристику вместимости. Если очередь ограничена и переполнена, новые заявки уходят в отказ, пока место не освободится.
3. Задержка (Delay): моделирует процесс обслуживания. Время задержки можно задать стохастически, например, треугольным распределением или любым другим, полученным из практики.
4. Уничтожение (Sink): завершение процесса и удаление агента. Может выполнять действия при входе агента.

Дополнительные элементы:
• Блокировка/Разблокировка потока.
• Выбор (Select): бинарный или множественный выбор вариантов.
• Разделение (Split): разъединение одного агента на несколько.
• Объединение (Combine): создание одного агента из нескольких.
• Синхронизация (Match): ожидание поступления нескольких агентов для продолжения процесса (например, подача двух деталей на сборку).
• Пакетирование (Batch): преобразование потока агентов в партии. После этого по конвейеру движется не отдельный элемент, а целый пакет.
• Вход (Enter) и Выход (Exit): позволяют извлечь агентов из процесса или доставить их из другого места в середине процесса.

Логика работы, параметры и код

Параметры элементов могут быть статическими (константы) и динамическими (код). В динамических параметрах, а также в полях действий при входе/выходе можно писать код на Java для обеспечения любой нестандартной логики. Важно помнить о синтаксисе: при написании исполняемого кода в конце ставится точка с запятой, а при задании статического или динамического параметра — нет.

Пример с блоком Задержка:
• При входе агента в блок его можно перекрасить в другой цвет: agent.color = blue;
• При выходе увеличить счётчик обслуженных клиентов: servicedClients++;

Агенты и ресурсы

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

Ресурсы — это то, что обеспечивает функционирование процесса. Это могут быть техника, люди, станки. Типы ресурсов:
• Статические: не перемещаются и не могут быть перемещены.
• Перемещаемые: сами не двигаются, но их можно переместить (например, аппарат УЗИ).
• Движущиеся: способны перемещаться самостоятельно (машины, роботы-пылесосы).
Можно создавать собственные (кастомные) типы агентов и ресурсов.

Управление ресурсами: агенты могут захватывать ресурсы, предотвращая их совместное использование. Захват может быть обязательным или нет (уступка места более срочному агенту). Поддерживается вытеснение, прекращение обслуживания, настройка смен и перерывов. В расписании задаются рабочие дни, время работы и перерывы.

Моделирование в пространстве и сети

Для анимации процесса можно рисовать графику поверх блок-схемы, чтобы товар визуально двигался по рисунку. Для этого используются:
• Узел (Node): место, где агент должен задержаться (соответствует блоку Очередь, Задержка, Сборка).
• Путь (Path): траектория движения между узлами.

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

Синхронизация потоков и справедливость

При слиянии нескольких потоков в один используется механизм кругового обслуживания (Round-robin). Объединяющий блок поочередно опрашивает каждый входящий поток: «Есть что передать?». Это обеспечивает справедливое распределение при объединении — блок забирает агентов у всех линий примерно поровну.

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

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

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

Анализ логистики потоков выявляет нетривиальные проблемы, связанные со справедливостью распределения. Важно понимать, что стандартное поведение системы при слиянии потоков — это циклический опрос, гарантирующий равномерность, однако разделение единого потока на параллельные ветки требует явного проектирования управляющей логики через элементы выбора. Без такого вмешательства распределение может стать хаотичным и не отражать реальные производственные правила. Таким образом, глубокое понимание архитектуры библиотеки моделирования процессов позволяет не просто копировать структуру реального процесса, а сознательно конструировать модель, предвосхищая логические коллизии и обеспечивая корректность ее работы на всех этапах.
Дискретно-событийное моделирование (ДСМ) — это подход, который фокусируется на ключевых изменениях в системе, называемых событиями (events). Событие происходит мгновенно (за нулевое время) и обязательно меняет состояние модели или планирует будущие события. Модель эволюционирует, перепрыгивая от события к событию, а не пересчитываясь непрерывно. Важнейшее отличие от системной динамики: ДСМ вычисляет состояние только в моменты событий, которые могут происходить в случайные, нецелочисленные моменты времени. При интеграции подходов это требует особой синхронизации.

Для создания ДСМ используется Библиотека моделирования процессов (Process Modeling Library). Все ее блоки сами являются скрытыми агентами. Основные элементы блок-схемы:
• Source (Источник): генерирует агентов. Генерируемая заявка — это агент.
• Queue (Очередь): буфер с ограниченной или неограниченной вместимостью. При переполнении заявки уходят в отказ.
• Delay (Задержка): моделирует обслуживание. Время задается стохастическими распределениями.
• Sink (Уничтожение): удаляет агента из модели.
Также есть блоки Split (разделение одного агента на несколько), Combine (сборка одного из нескольких), Match (синхронизация потоков) и Batch (пакетирование).

Параметры блоков бывают статическими и динамическими. Для сложной логики прямо в свойствах блока (например, «При входе» или «При выходе») пишется код на языке Java, соблюдая его синтаксис: servicedClients++;. Агенты — это объекты потока (люди, детали, документы). Их меняющиеся характеристики (например, «здоров/заражен») удобно описывать через диаграмму состояний (Statechart). Ресурсы — это средства обслуживания (кассиры, станки). Они делятся на статические, перемещаемые (как аппарат УЗИ) и движущиеся. Агенты могут захватывать ресурсы, не допуская совместного использования, или уступать их. Моделируются смены, перерывы и вытеснение задач.

Для визуализации создается пространственная сеть из узлов (nodes) — мест задержки агента, и путей (paths) — маршрутов между ними. Это позволяет наблюдать анимированное движение агентов по плану здания или географической карте.

При объединении нескольких потоков в один автоматически работает принцип кругового обслуживания (round-robin), обеспечивающий справедливость: итоговый блок по очереди опрашивает каждый входной канал. Однако при разделении одного потока на несколько справедливого распределения по умолчанию нет, так как во время подсчета пропорций могут поступить новые агенты. Для этого необходимо вставлять элемент Select (Выбор) и вручную задавать в нем алгоритм справедливости.

Выводы

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

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

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