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

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

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

Ввод исходных данных

Организуйте ввод исходных данных для модели в одном месте. Для удобства пользования, например, при модификации исходных данных, все их целесообразно разделить на две группы по признаку принадлежности к аэропорту 1 и аэропорту 2.

  1. Перетащите элемент Скруглённый прямоугольник на элемент Область просмотра с именем исхДанные.
  2. На странице Местоположение и размер панели Свойства введите в поля X: 30, Y: 1880, Ширина: 580, Высота: 450.
  3. Перетащите элемент text и в поле Текст: введите Исходные данные.
  4. Из библиотеки Основная перетащите элементы Параметр и поместите их так, как на Рис. 9.2.
  5. Значения свойств установите согласно Табл. 9.3.
Элементы Параметр для ввода исходных данных

увеличить изображение
Рис. 9.2. Элементы Параметр для ввода исходных данных
Таблица 9.3.
Имя Тип Значение по умолчанию
Самолёты типа А
колСамТипА int 2
грузПодСамА int 50
Аэропорт 1
минКонтПост1 int 1
максКонтПост1 int 15
срВрПостКонт1 double 0,5
погрКонтСам1А int 2
погрКонтСам1Б int 2
выгрКонтСам1А int 3
выгрКонтСам1Б int 3
срВрПогрКонтСам1А double 0,1
срВрПогрКонтСам1Б double 0,1
срВрВыгрКонтСам1А double 0,2
срВрВыгрКонтСам1Б double 0,2
срВрПолётаА12 double 3,4
отклВрПолётаА12 double 0,5
срВрПолётаБ12 double 3,2
отклВрПолётаБ12 double 0,5
Самолёты типа Б
колСамТипБ int 1
грузПодСамБ int 100
Аэропорт 2
минКонтПост2 int 1
максКонтПост2 int 22
срВрПостКонт2 double 0,4
погрКонтСам2А int 2
погрКонтСам2Б int 2
выгрКонтСам2А int 2
выгрКонтСам2Б int 2
срВрПогрКонтСам2А double 0,2
срВрПогрКонтСам2Б double 0,1
срВрВыгрКонтСам2А double 0,2
срВрВыгрКонтСам2Б double 0,2
срВрПолётаА12 double 3,6
отклВрПолётаА12 double 0,6
срВрПолётаБ12 double 4,1
отклВрПолётаБ12 double 0,8

Вывод результатов моделирования

Организуйте вывод результатов моделирования. Их также, как и исходные данные, следует разбить на две группы по признаку принадлежности к соответствующему аэропорту, выделить итоговые показатели. На этой области просмотра можно поместить и вспомогательные переменные, предназначенные для накопления необходимых для расчёта показателей статистических данных.

  1. Перетащите элемент Скруглённый прямоугольник на элемент Область просмотра с именем Результаты.
  2. На странице Местоположение и размер панели Свойства введите в поля X: 25, Y: 2610, Ширина: 510, Высота: 450.
  3. Перетащите элемент text и на сранице Текст: введите Результаты моделирования.
  4. Из библиотеки Основная перетащите элементы Переменная и поместите их так, как на Рис. 9.3. Для всех переменных сохраните предлагаемый тип double, значение по умолчанию - 0.
    Элементы Переменная для вывода результатов моделирования

    увеличить изображение
    Рис. 9.3. Элементы Переменная для вывода результатов моделирования
  5. Перетащите ещё элементы text и введите пояснения к результатам моделирования как на Рис. 9.3.
  6. Перетащите элемент text и в поле Текст: введите Вспомогательные переменные.
  7. Перетащите элементы Переменная и поместите их согласно Рис. 9.3. Для всех переменных оставьте предлагаемый тип double, значение по умолчанию - 0.
  8. С целью сокращения машинного времени для вывода результатов моделирования используйте способ Событие (event). Код, который необходим для обработки статистических данных при наступлении события, вы напишите после построения событийной части модели.

Приступайте к построению событийной части модели, которая в соответствии со структурой системы воздушных перевозок включает имитацию функционирования аэропорта 1 (Рис. 9.4) и аэропорта 2 (Рис. 9.5).

Сегмент имитации функционирования аэропорта 1

увеличить изображение
Рис. 9.4. Сегмент имитации функционирования аэропорта 1
Сегмент имитации функционирования аэропорта 2

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

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

Прибытие самолётов в аэропорт 1. Ожидание погрузки

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

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

При построении модели вам придётся воспользоваться Java-кодом, в котором потребуются дополнительные поля заявок. Для этого вы должны создать нестандартный тип заявки с дополнительными полями для записи и хранения параметров, о которых упоминалось ранее (см. п. 9.1.4).

Создайте тип заявок ТранспСредство.

  1. Выделите объект source.
  2. В панели Проект щёлкните правой кнопкой мыши элемент модели верхнего уровня дерева и выберите Создать/Java класс.
  3. Появится диалоговое окно Новый Java класс. В поле Имя: введите имя нового класса: ТранспСредство.
  4. В поле Базовый класс: выберите из выпадающего списка Entity в качестве базового класса. Щёлкните кнопку Далее.
  5. Появится вторая страница Мастера создания Java класса. Добавьте поля Java класса, показанные на Рис. 9.7.
  6. Оставьте флажки Создать конструктор и Создать метод toString (). Щёлкните Готово. Закройте редактор кода.
  7. Щёлкните правой кнопкой созданный Java класс и из меню выберите Преобразовать Java класс в тип агента.
  8. Аналогичным образом создайте типы заявок ГрузАэропорт1 и ГрузАэропорт2 с дополнительными полями колГрузоМест1 и колГрузоМест2 типа int соответственно. Эти классы заявок, как вы помните, будут использоваться при имитации поступления партий грузов в аэропорты 1 и 2 соответственно.
Сегмент Прибытие самолётов в аэропорт 1

увеличить изображение
Рис. 9.6. Сегмент Прибытие самолётов в аэропорт 1
Поля нового Java класса ТранспСредство

Рис. 9.7. Поля нового Java класса ТранспСредство

Продолжите построение сегмента имитации Прибытие самолётов в аэропорт 1 и ожидания погрузки.

Поочередно выделите объекты этого сегмента и установите их свойства согласно Табл. 9.4.

Таблица 9.4.
Свойство Значения
source
Имя: самолёт1
Тип заявки: ТранспСредство
Прибывают согласно Времени между прибытиями
Время между прибытиями 0
Количество заявок, прибывающих за один раз колСамТипА
Ограниченное количество прибытий Установить флажок
Максимальное количество прибытий 1
Новая заявка ТранспСредство
Действия При выходе: entity.типТрансп=1;
entity.колГрузоМест=грузПодСамА;
source1
Имя: самолёт2
Тип заявки: ТранспСредство
Прибывают согласно Времени между прибытиями
Время между прибытиями 0
Количество заявок, прибывающих за один раз колСамТипБ
Ограниченное количество прибытий Установить флажок
Максимальное количество прибытий 1
Новая заявка ТранспСредство
Действия При выходе: entity.типТрансп=2;
entity.колГрузоМест= грузПодСамБ;
queue
Имя: стоянкаПогр1А
Тип заявки: ТранспСредство
Вместимость колСамТипА
Включить сбор статистики Установить флажок
queue1
Имя: стоянкаПогр1Б
Тип заявки: ТранспСредство
Вместимость колСамТипБ
Включить сбор статистики Установить флажок
hold
Тип заявки: ТранспСредство
Изначально заблокирован Установить флажок
hold1
Тип заявки: ТранспСредство
Изначально заблокирован Установить флажок
exit
Имя: наПогрузку1
Тип заявки: ТранспСредство
Действия При выходе: if (entity.типТрансп==1) {hold.setBlocked(true);
enter2.take(entity);}
else {hold1.setBlocked(true);
enter3.take(entity);}
enter
Тип заявки: ТранспСредство
enter1
Тип заявки: ТранспСредство

Остановимся на замысле построения сегмента.

При запуске модели источники самолёт1 и самолёт2 генерируют число заявок, равное количеству самолётов типа А и типа Б соответственно. На этом активность источников прекращается.

Эти заявки-самолёты поступают на имитируемые объектами queue стоянки стоянкаПогр1А и стоянкаПогр1Б соответственно.

Элементы hold и hold1 изначально заблокированы, поэтому заявки-самолёты дальше не проходят.

Элементы hold и hold1 управляются сегментом Поступление и учёт контейнеров в аэропорту 1. Как только в аэропорт 1 поступит количество контейнеров, достаточное для полной загрузки самолёта типа А, и этот самолёт имеется на стоянке, а также нет самолётов типа А на погрузке, формируется команда на разблокировывание элемента hold.

Заявка-самолёт поступает на объект наПогрузку1 (объект exit) и далее на сегмент Погрузка контейнеров в аэропорту 1.

Если ожидающих погрузку самолётов типа А нет, а количество контейнеров достаточно для полной загрузки самолёта типа Б и он имеется в наличии, то аналогично формируется команда на разблокировывание элемента hold1. Заявка-самолёт также поступает на объект наПогрузку1 (объект exit) и далее на сегмент Погрузка контейнеров в аэропорту 1.

Элементы enter и enter1 увеличивают число входов объектов queue и queue1 соответственно. Через них поступают в последующем заявки-самолёты, прибывшие из аэропорта 2, разгруженные и теперь отправленные на стоянки ожидания погрузки в аэропорту 1.

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

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

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

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

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

Объект source с именем истГрузов1 генерирует заявку-партию класса ГрузАэропорт1 поступивших контейнеров, число которых в партии распределено по равномерному закону. Заявка-партия поступает на объект selectOutput.

В условии 1 проверяется наличие числа контейнеров, достаточного для полной загрузки самолёта типа А. Если число контейнеров недостаточно, заявка-партия уничтожается. Так продолжается до тех пор, пока не выполнится условие 1.

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

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

После выполнения условия 1 проверяется условие 2: наличие самолётов типа А на стоянке ожидания погрузки и незанятость пунктов погрузки.

При выполнении условия 2 формируется команда на разблокировывание элемента hold (см. п. 9.1.8.2) и самолёт типа А отправляется на погрузку.

Если условие 2 не выполняется, например, при отсутствии свободного самолёта типа А, проверяется условие 3.

Если условие 3 не выполняется, то есть недостаточно контейнеров для полной загрузки самолёта типа Б, заявка-партия уничтожается.

Если условие 3 выполняется (поступило число контейнеров, достаточное для полной загрузки самолёта типа Б), проверяется условие 4: наличие самолётов типа Б на стоянке ожидания погрузки и незанятость пунктов погрузки.

Если условие 4 не выполняется, заявка-партия уничтожается.

При выполнении условия 4 формируется команда на разблокировывание элемента hold1 (см. п. 9.1.8.2) и самолёт типа Б отправляется на погрузку.

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

< Лекция 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);