Шаг 4. Настройка поведения сервисного центра

Задайте запросы на транспорт для сервисного центра

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

Коллекция представляет собой группу объектов, известных как ее элементы. Некоторые коллекции позволяют хранение нескольких одинаковых элементов, некоторые - нет. Некоторые коллекции упорядочены, некоторые - нет. Коллекция используется для задания объекта данных, объединяющего в себе сразу несколько однотипных элементов. С помощью коллекций вы можете хранить, извлекать и управлять агрегированными данными. Обычно коллекции представляют элементы данных, которые образуют группу, например, очередь (в этом случае элементы представляют собой людей, ожидающих в очереди) или автопарк (элементы задают автомобили), или телефонный справочник (коллекция хранит соответствие имен и телефонных номеров).

  1. Откройте диаграмму Main. Добавьте два элемента Коллекция из палитры Агент.
  2. Назовите коллекции aviaRequests и autoRequests. Обе коллекции имеют Класс коллекции LinkedList и Тип элементов ServiceRequest.

Теперь мы создадим функцию, которая будет искать свободный транспорт, чтобы выполнить сервисные работы.

Задайте логику управления транспортным парком

  1. Перетащите элемент Функция из палитры Агент на диаграмму Main.
  2. Назовите функцию findTransport.
  3. Эта функция будет выполнять поиск свободного транспорта. Обнаружив свободный транспорт, функция должна его вернуть, поэтому выберите опцию Возвращает значение и задайте Тип значения Transport.
  4. Функция должна проанализировать тип входящих запросов на сервисные работы. Для этого нам необходимо добавить один аргумент функции - с его помощью мы сможем передать функции запрос на сервисные работы. Разверните секцию Аргументы в свойствах функции и задайте в таблице аргумент request Типа ServiceRequest.
  5. Нам осталось задать алгоритм функции. Разверните секцию Тело функции в панели Свойства и введите код Java, как указано на изображении:

В теле функции мы задаем цикл for. Этот цикл не всегда выполняет итерирование агентов одной популяции. Здесь он анализирует тип запроса на сервисные работы и проверяет, выполняется ли условие request.type == AUTO. Если условие выполняется, значит, поступил запрос на автомобильный транспорт, и далее цикл производит итерирование популяции trucks. Если же проверка условия возвращает значение false, это значит, что поступил запрос на вертолет. В таком случае цикл выполняет итерацию другой популяции: helicopters.

Внутри цикла мы проверяем, свободен ли в данный момент итерируемый агент. Для этого мы используем функцию агента inState(). Если управление диаграммой состояний агента на данный момент находится в состоянии AtCenter, это значит, что мы нашли свободный транспорт. В таком случае выполнение функции завершается на строке return t; и функция возвращает найденное значение (свободный транспорт). Если свободного транспорта нет, эта строка не будет выполняться и после цикла for выполнится следующая строка кода: return null; Таким образом мы сообщаем модели, что грузовик не найден (функция вернула значение null - свободный транспорт не существует).

В AnyLogic иногда нужно будет вводить код в параметрах различных элементов модели. Важно понимать, где именно вы "находитесь", вписывая код (какому типу агента принадлежит этот элемент), и как получить доступ к другим элементам из этого поля.

Элементы модели, принадлежащие тому же типу агента, доступны просто по именам.

Чтобы получить доступ к полю вложенного объекта, вы должны поставить точку "." после имени объекта и затем написать имя этого поля. Например, чтобы получить доступ к состоянию AtCenter диаграммы состояний, которая находится в агенте Transport, из агента Main, мы вызываем Transport.AtCenter.

Контрольная модель: Maintenance - Phase 4

Далее давайте настроим тип агента Turbine.


Шаг 3. Настройка логических процессов транспорта

Шаг 5. Настройка поведения турбин