AnyLogic
Развернуть
Размер шрифта

Шаг 6. Завершение настройки логики транспорта

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

Укажите тип транспорта

  1. Откройте графическую диаграмму агента Truck, дважды щелкнув по соответствующему элементу в дереве модели.
  2. В секции свойств Действия агента укажите тип агента в поле При запуске с помощью следующего выражения: type = AUTO;
  3. Тем же способом в свойствах агента Helicopter укажите соответствующий тип: type = AVIA;

Настройте диаграмму состояний

  1. Дважды щелкните по агенту Transport, чтобы открыть его графическую диаграмму. На ней вы обнаружите ранее созданную диаграмму состояний. Теперь мы можем задать ее настройки.
  2. У состояний в диаграмме (AtCenter, MovingToTurbine, Servicing, MovingToMC) нет каких-то особенных свойств. Мы будем задавать логику движения транспорта с помощью различных переходов между состояниями.
  3. Переход из состояния AtCenter в состояние MovingToTurbine происходит При получении сообщения типа ServiceRequest. Здесь необходимо указать Действие, которое следует выполнить транспорту: двигаться к турбине, от которой пришло сообщение.

    moveTo(msg.turbine);
  4. Переход из состояния MovingToTurbine в состояние Servicing запускается По прибытию агента . Грузовик или вертолет, который достиг турбины, начинает выполнять свою задачу сразу после прибытия на место. По завершению обслуживания, о чем нас "оповещает" турбина, транспортное средство может отправляться обратно на базу.

  5. Следующий переход идет из состояния Servicing в состояние MovingToMC. Действие, задающее возвращение в сервисный центр, происходит По таймауту .

    Таймаут: type == AVIA ? uniform(10, 20) : 10

    Действие:

    send("repaired", request.turbine);
    moveTo(main.center);
    request = null;
  6. На рисунке выше вы видите, что последний переход, из MovingToMC в ветвление, откуда транспорт может направиться либо в состояние MovingToTurbine, либо вернуться в AtCenter, происходит По прибытию агента . Когда он происходит, выполняется проверка, при прохождении которой транспортное средство либо выезжает на обслуживание очередной турбины, либо отправляется обратно в сервисный центр и остается там, пока снова не понадобится для обслуживания.
  7. Выберите переход из ветвления в состояние MovingToTurbine. Здесь нам необходимо задать Условие и Действие: код в поле Условие проверит, есть ли в данный момент запросы от турбины на запланированные ремонтные работы или срочный ремонт из-за поломки. Если такие запросы есть, код в поле Действие проверит, какой именно запрос поступил, и отправит соответствующий тип транспорта к турбине:

    Условие:

    type == AUTO ? !main.autoRequests.isEmpty() : !main.aviaRequests.isEmpty()

    Действие:

    request = type == AUTO ? main.autoRequests.removeFirst() : main.aviaRequests.removeFirst();
    moveTo(request.turbine);

Теперь, если вы откроете тип агента Truck или Helicopter, вы увидите там проекцию элементов типа агента Transport, который они расширяют. Эти элементы отображаются на их диаграммах для удобства, но чтобы изменять их свойства, вернитесь обратно на диаграмму самого агента:

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

Демо-модель: Maintenance — Phase 6 Открыть страницу модели в AnyLogic Cloud. Там можно запустить модель или скачать ее по ссылке Исходные файлы модели.

Мы закончили задавать логику модели, давайте теперь улучшим анимацию, создадим 3D анимацию и исследуем модель во время прогона.

Как мы можем улучшить эту статью?