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

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

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

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

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

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

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

  1. Откройте диаграмму MC. Мы зададим нужные нам процессы с помощью элементов палитры Диаграммы действий.
  2. Вначале перетащите элемент Диаграмма действий из палитры в графический редактор.

  3. Назовите диаграмму findTransport. Эта диаграмма действий Возвращает значение, и Типом возвращаемого значения является Transport. Аргументы диаграммы действий задаются ниже в таблице Аргументы: аргумент request Типа  ServiceRequest:

  4. Далее, вставьте элемент Цикл For в нашу диаграмму действий findTransport. Работая с элементами диаграммы действий, убедитесь, что вставляете элементы в правильное место:

  5. Тип этого цикла for: Итератор по коллекции. Укажите поля Элемент и Коллекция как показано на рисунке ниже: необходимость в грузовике или вертолете определяется типом запроса на обслуживание. Вы можете изменить размер элемента для лучшего отображения содержимого.

  6. Нам необходимо добавить Решение (If ... Else) , которое будет проверять, имеется ли требуемый транспорт в наличии. Условие заявляет, что транспортное средство должно быть в состоянии AtCenter (в сервисном центре) той самой диаграммы состояний, которую мы создали на типе агента  Transport. Обратите внимание, что в графическом редакторе отображается содержимое параметра Метка:

  7. Вставьте элемент Вернуть значение в ветку true, выходящую из решения. Пусть этот элемент возвращает t. В качестве последнего шага, выделите элемент диаграммы Вернуть значение, который возвращает значение и для всей диаграммы, и для ветки false и укажите Возвращаемое значение: null.

  8. Эта диаграмма действий будет проверять, есть ли в наличии в сервисном центре запрашиваемый вид транспорта: грузовик или вертолет.

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

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

Чтобы получить доступ к полю вложенного объекта, вы должны поставить точку "." после имени объекта и затем написать имя этого поля. Например, мы ссылались на функцию getX() сервисного центра center при создании диаграммы действий на   Main: center.getX(). Если объект является реплицированным, то его имя является именем коллекции объектов, и вам нужно указать, какой именно объект из этой коллекции вам нужен. 

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

Чтобы получить доступ к контейнеру текущего объекта (того агента, куда вложен текущий), укажите его имя. Обратите внимание на специальный элемент,  Ссылка на агента верхнего уровня, который присутствует на диаграмме каждого типа, чьи агенты живут в среде этого агента верхнего уровня (в нашей модели это тип агента Main). Ссылка называется по имени этого агента верхнего уровня и позволяет обращаться к нему по этому имени, чтобы получить доступ к элементам, находящимся на его диаграмме. Например, чтобы получить доступ к элементу trucks[..], который находится на диаграмме Main, из агента MC, мы пишем main.trucks, находясь на диаграмме MC

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

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


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

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