Модели одной и той же простой системы массового обслуживания, разработанные в рамках различных подходов к моделированию, демонстрирует гибкость платформы AnyLogic. Модель с именем Agent Based mms model находится в папке Part IV. Окно анимации работающей модели представлено на рис. 16.3.
В модели представлена система массового обслуживания, относящаяся к классу M/M/s-систем. Это s-канальная система (т. е. система с s-обслуживающими приборами) с экспоненциальным (пуассоновским) законом распределения времени обслуживания заявок обслуживающими приборами и одной бесконечной очередью ожидания заявками обслуживания типа FIFO (First-In First-Out, первый прибыл, первый обслужен).
На платформе AnyLogic для этой системы построены три независимые модели, собранные в пакеты (packages) для удобства. Пакеты используются в AnyLogic для структуризации модели.
Первый пакет, classical_discrete_event, в единственном классе активных объектов Main содержит 4 блока библиотеки Enterprise Library (рис. 16.4). Структура блок-схемы совершенно ясна. У блока delay значением параметра capacity является параметр RecourceCapacity включающего объекта, т. е. число обслуживающих приборов можно легко менять.
Второй пакет, agent_decentarised, имеет три класса активных объектов: класс Agent (заявки на обслуживание), класс unit (обслуживающие приборы) и класс Main. Поведение агента отражает его состояние с точки зрения системы. Агент имеет два состояния: он может либо ждать обслуживания
в очереди, либо обслуживаться прибором обслуживания. Это полная аналогия того, что мы имели в системной динамике ранее, когда различные состояния стейтчарта активных объектов характеризовали положение элементов в системе: нахождение этих объектов в том или другом накопителе. Ресурс имеет также два состояния: состояние занятости обслуживанием заявки и состояние простоя. Активный объект Main представляет саму модель, объединяющую динамически изменяющееся число агентов и статическое число приборов. Вначале число реплицированных агентов в системе 0. Статический циклический таймер arrivals, срабатывающий каждый раз через случайный интервал времени, распределенный по экспоненциальному закону, порождает очередного агента, который либо сразу помещается на обслуживание (переходит в состояние service), либо становится в очередь на ожидание прибора обслуживания. По окончании ослуживания агент изымается из системы (уничтожается).
Третий пакет, agent_with_dispatcher, имеет четыре класса активных объектов: кроме перечисленных ранее классов, которые есть в предыдущей модели, этот пакет включает еще и активный объект "диспетчер". Каждый агент сразу после появления в системе запрашивает обслуживание у диспетчера. Диспетчер отслеживает все ресурсы и заявки на обслуживание от каждого порожденного агента. При запросе агентом обслуживания диспетчер либо выделяет ему свободный ресурс, либо ставит агента в очередь. При освобождении ресурса агентом, этот ресурс передается диспетчером следующему агенту из очереди, если очередь не пуста, в противном случае диспетчер запоминает, что этот ресурс свободен.
Четвертый пакет, model, включает по одному экземпляру класса Main всех трех предыдущих пакетов. Иными словами, в этой модели параллельно и независимо функционируют все три описанные ранее модели (обращаясь, впрочем, к одному и тому же генератору случайных чисел).