Опубликован: 07.11.2014 | Доступ: свободный | Студентов: 446 / 37 | Длительность: 15:17:00
ISBN: 978-5-9556-0161-8
Тема: САПР
Лекция 9:

Модель функционирования системы воздушных перевозок

< Лекция 8 || Лекция 9: 12345 || Лекция 10 >

Имитация функционирования аэропорта 2

Сегменты, имитирующие функционирование аэропорта 2, построены в основном также, как и сегменты аэропорта 1, поэтому будут отмечены лишь некоторые особенности.

Поступление и учёт контейнеров в аэропорту 2

Сегмент Поступление и учёт контейнеров в аэропорту 2 предназначен для имитации приёма поступающих от источников грузов (контейнеров), учёта их, определения необходимого количества контейнеров для загрузки соответствующего самолёта и формирования команды для отправки этого самолёта на погрузку контейнеров (при наличии самолёта).

  1. Из палитры Презентация перетащите элемент Прямоугольник.
  2. На странице Местоположение и размер панели Свойства введите в поля X: 30, Y: 830, Ширина: 290, Высота: 190.
  3. Перетащите элемент text и в поле Текст: введите Поступление и учёт контейнеров в аэропорту 2.
  4. Перетащите из Основной библиотеки по одному объекту source, selectOutput5 (имя selectOutput5) и sink. Поместите и соедините их так, как на Рис. 9.13.

Установите свойства объектов согласно Табл. 9.10.

Сегмент Поступление и учёт контейнеров в аэропорту 2

увеличить изображение
Рис. 9.13. Сегмент Поступление и учёт контейнеров в аэропорту 2
Таблица 9.10.
Свойство Значения
source
Имя: истГрузов2
Тип заявки: ГрузАэропорт2
Прибывают согласно Времени между прибытиями
Время между прибытиями exponential(1/срВрПостКонт2)
Количество заявок, прибывающих за один раз 1
Новая заявка ГрузАэропорт2
Действия При выходе: d=(uniform_discr(минКонтПост2,максКонтПост2));
всегоПостК2+=d;
текНалК2+=d;
selectOutput5
Тип заявки: ГрузАэропорт2
Использовать: Условия
Условие 1 текНалК2<грузПодСамА
Условие 2 стоянкаПогр2А.size()>0&&
погрузка2А.size()==0
Действия При выходе 2 текНалК2-=грузПодСамА;
hold6.setBlocked(false);
Условие 3 текНалК2<грузПодСамБ
Условие 4 стоянкаПогр2Б.size()>0&&
погрузка2Б.size()==0
Действия При выходе 4 текНалК2-=грузПодСамБ;
hold7.setBlocked(false);
sink
Тип заявки: ГрузАэропорт2

Объект source с именем истГрузов2 генерирует заявку-партию класса ГрузАэропорт2 поступивших контейнеров. Заявка-партия поступает на объект selectOutput5.

Описанная в п. 9.1.8.2 последовательность проверок условий производится и в данном сегменте каждый раз при появлении в модели очередной заявки-партии. Все заявки класса ГрузАэропорт2 также выводятся из модели.

В данном сегменте, как и в п. 9.1.8.2, при выполнении подобных условий, только относительно аэропорта 2, формируются команды на отправку самолётов на погрузку.

Ожидание разгрузки в аэропорту 2

Сегмент Ожидание разгрузки в аэропорту 2 предназначен для имитации ожидания разгрузки самолётов, прибывших из аэропорта 1.

Создайте сегмент.

  1. Из палитры Презентация перетащите элемент Прямоугольник.
  2. На странице Местоположение и размер панели Свойства введите в поля X: 30, Y: 1040, Ширина: 310, Высота: 220.
  3. Перетащите элемент text и в поле Текст: введите Ожидание разгрузки в аэропорту 2.
  4. Перетащите из Библиотеки моделирования процессов по два объекта enter, queue, hold и один объект exit. Поместите и соедините их так, как на Рис. 9.14.
  5. Установите свойства объектов согласно Табл. 9.11

Предположим, что поступила заявка-самолёт в объект enter11. В нём проверяется условие: средства разгрузки свободны (разгрузка2Б.size()==0) и на стоянке нет ожидающих разгрузку самолётов? Если да, то разблокировывается объект hold5 и заявка-самолёт типа Б входит в объект наРазгрузку2 и далее в сегмент имитации разгрузки аэропорта 2.

Сегмент Ожидание разгрузки в аэропорту 2

увеличить изображение
Рис. 9.14. Сегмент Ожидание разгрузки в аэропорту 2
Таблица 9.11.
Свойство Значения
enter10
Тип заявки: ТранспСредство
Действие при входе if (стоянкаРазгр2А.size()==0
&&разгрузка2А.size()==0) hold4.setBlocked(false);
enter11
Тип заявки: ТранспСредство
Действие при входе if (стоянкаРазгр2Б.size()==0
&&разгрузка2Б.size()==0) hold5.setBlocked(false);
queue
Имя: стоянкаРазгр2А
Тип заявки: ТранспСредство
Вместимость колСамТипА
Включить сбор статистики Установить флажок
queue1
Имя: стоянкаРазгр2Б
Тип заявки: ТранспСредство
Вместимость колСамТипБ
Включить сбор статистики Установить флажок
hold4
Тип заявки: ТранспСредство
Изначально заблокирован Установить флажок
hold5
Тип заявки: ТранспСредство
Изначально заблокирован Установить флажок
exit
Имя: наРазгрузку2
Действия При выходе if (entity.типТрансп==1) {hold4.setBlocked(true);
enter12.take(entity);}
else {hold5.setBlocked(true);
enter13.take(entity);}
Разгрузка самолётов в аэропорту 2

Сегмент Разгрузка самолётов в аэропорту 2 предназначен для имитации разгрузки самолётов, прибывающих из аэропорта 1.

Сегмент Разгрузка самолётов в аэропорту 2

увеличить изображение
Рис. 9.15. Сегмент Разгрузка самолётов в аэропорту 2

Создайте сегмент.

  1. Из палитры Презентация перетащите элемент Прямоугольник.
  2. На странице Местоположение и размер панели Свойства введите в поля X: 360, Y: 1040, Ширина: 470, Высота: 220.
  3. Перетащите элемент text и в поле Текст: введите Разгрузка самолётов в аэропорту 2.
  4. Перетащите по два объекта enter, split, queue, delay, selectOutput и по одному объекту exit и sink. Поместите и соедините их так, как на Рис. 9.15.
  5. Установите свойства объектов согласно Табл. 9.12.

Предположим, что из сегмента ожидания разгрузки (п. 9.1.9.2) через объект enter13 поступила заявка-самолёт типа Б в объект split5. Объектом split5 заявка размножается на число заявок, равное количеству контейнеров, которые должны быть выгружены из самолёта. Заявка-оригинал из модели не выводится. Поэтому количество копий на 1 меньше, чем количество выгружаемых контейнеров (entity.колГрузоМест-1).

Таким образом, также, как и в соответствующем сегменте аэропорта 1, далее каждая заявка интерпретируется как заявка-контейнер. Тем не менее, каждой копии присваиваются значения полей оригинала, так как после выгрузки все заявки-контейнеры, кроме последней, будут выведены из модели. Однако неизвестно какая из заявок будет последней - оригинал или копия. Поэтому также и присваиваются копиям значения полей оригинала.

Таблица 9.12.
Свойство Значения
enter12
Тип заявки: ТранспСредство
enter13
Тип заявки: ТранспСредство
split4
Типы заявок:
Оригинал, Копия ТранспСредство, ТранспСредство
Количество копий entity.колГрузоМест-1
Новая заявка (копия) ТранспСредство
Действия При выходе копии entity.типТрансп=original.типТрансп;
entity.колГрузоМест=original.колГрузоМест;
entity.врПолёта=original.врПолёта;
entity.разные =original.разные;
split5
Типы заявок:
Оригинал, Копия ТранспСредство, ТранспСредство
Количество копий entity.колГрузоМест-1
Новая заявка (копия) ТранспСредство
Действия При выходе копии: entity.типТрансп=original.типТрансп;
entity.колГрузоМест=original.колГрузоМест;
entity.врПолёта=original.врПолёта;
entity.разные= original.разные;
queue
Имя: очРазгр2А
Тип заявки: ТранспСредство
Максимальная вместимость Установить флажок
Действия entity.разные=
При выходе: срВрВыгрКонтСам2А;
Включить сбор статистики Установить флажок
queue1
Имя: очРазгр2Б
Тип заявки: ТранспСредство
Максимальная вместимость Установить флажок
Действия entity.разные=
При выходе: срВрВыгрКонтСам2Б;
Включить сбор статистики Установить флажок
delay
Имя: разгрузка2А
Тип заявки: ТранспСредство
Задержка задаётся Определённое время
Время задержки exponential(1/entity.разные)
Вместимость выгрКонтСам2А
Действия При подходе к выходу выгрКонтА2++;
Включить сбор статистики Установить флажок
delay1
Имя: разгрузка2Б
Тип заявки: ТранспСредство
Задержка задаётся Определённое время
Время задержки exponential(1/entity.разные)
Вместимость выгрКонтСам2Б
Действия При подходе к выходу выгрКонтБ2++;
Включить сбор статистики Установить флажок
selectOutput6
Тип заявки: ТранспСредство
Выход true выбирается При выполнении условия
Условие entity.колГрузоМест==
Действия При выходе (true) выгрКонтА2
выгрКонтА2=0;
достКА12+=entity.колГрузоМест;
hold4.setBlocked(false);
selectOutput7
Тип заявки: ТранспСредство
Выход true выбирается При выполнении условия
Условие entity.колГрузоМест==выгрКонтБ2
Действия При выходе (true) выгрКонтБ2=0;
достКБ12+=entity.колГрузоМест;
hold5.setBlocked(false);
exit
Имя: наОжПогр2
Тип заявки: ТранспСредство
Действия При выходе: достК12+=entity.колГрузоМест;
if (entity.типТрансп==1) enter14.take(entity);
else enter15.take(entity);
sink4
Тип заявки: ТранспСредство
Ожидание погрузки в аэропорту 2

Сегмент Ожидание погрузки в аэропорту 2 предназначен для имитации ожидания погрузки самолётов, прибывших из аэропорта 1, после разгрузки в аэропорту 2 .

Создайте сегмент.

  1. Из палитры Презентация перетащите элемент Прямоугольник.
  2. На странице Местоположение и размер панели Свойства введите в поля X: 340, Y: 830, Ширина: 290, Высота: 190.
  3. Перетащите элемент text и в поле Текст: введите Ожидание погрузки в аэропорту 2.
  4. Перетащите из Библиотеки моделирования процессов по два объекта enter, queue, hold и один объект exit. Поместите и соедините их так, как на Рис. 9.16.
  5. Установите свойства объектов согласно Табл. 9.13.

Данный сегмент отличается от аналогичного сегмента аэропорта 1 тем, что он не предназначен в том числе и для первичного приёма самолётов. Заявки-самолёты поступают на имитируемые объектами queue стоянки стоянкаПогр2А и стоянкаПогр2Б соответственно только после разгрузки.

Элементы hold6 и hold7 также изначально заблокированы, поэтому заявки-самолёты дальше стоянок не проходят. Элементы hold6 и hold7 также управляются сегментом Поступление и учёт контейнеров в аэропорту 2.

Сегмент Ожидание погрузки в аэропорту 2

увеличить изображение
Рис. 9.16. Сегмент Ожидание погрузки в аэропорту 2
Таблица 9.13.
Свойство Значения
enter14
Тип заявки: ТранспСредство
enter15
Тип заявки: ТранспСредство
queue
Имя: стоянкаПогр2А
Тип заявки: ТранспСредство
Вместимость колСамТипА
Включить сбор статистики Установить флажок
queue1
Имя: стоянкаПогр2Б
Тип заявки: ТранспСредство
Вместимость колСамТипБ
Включить сбор статистики Установить флажок
hold6
Тип заявки: ТранспСредство
Изначально заблокирован Установить флажок
hold7
Тип заявки: ТранспСредство
Изначально заблокирован Установить флажок
exit
Имя: наПогрузку2
Действия При выходе: if (entity.типТрансп==1) {hold6.setBlocked(true);
enter16.take(entity);}
else {hold7.setBlocked(true);
enter17.take(entity);}
< Лекция 8 || Лекция 9: 12345 || Лекция 10 >
Игорь Маникин
Игорь Маникин

Коллеги, спасибо за очень информативный и полезный курс. Прошёл три лекции. Столкнулся с проблемой, что обе модели не могут закончить расчёт по причине ограничения бесплатной версии "создано максимально допустимое число динамически создаваемых агентов (50000)". По скриншотам Лекции 2 видно, что да, модель создает гораздо больше 50000 агентов. В принципе, мне то и диплом не особо нужен. Но хотелось бы выполнить практические работы. Нет ли возможности откорректировать эту проблему? Или может я чего не так делаю?

Еще раз спасибо за прекрасный курс!

Артём Нагайцев
Артём Нагайцев

Выдает ошибку "entity cannot be resolved to a variable" при попытке запуска. В чем может быть причина? Ошибка в строках

entity.time_vxod=time(); 

time_obrabotki.add(time()-entity.time_vxod);