Система авиаперевозок включает два аэропорта. Перевозки выполняются из первого аэропорта во второй и обратно. Время полета между аэропортами распределено по нормальному закону.
Грузы в каждый аэропорт поступают партиями в контейнерах. Количество контейнеров в партии распределено по равномерному закону. Интервалы времени между поступлениями партий грузов распределены по экспоненциальному закону.
Для авиаперевозок используют два типа самолетов А и Б и грузоподъемностями q1 и q2 шт. контейнеров соответственно (q1 < q2). В аэропорту нет фиксированного расписания. Каждый самолет отправляется в полет сразу после его полной загрузки. Время погрузки и время выгрузки одного контейнера распределены по экспоненциальному закону. В первую очередь используются самолеты типа А, а при их отсутствии - типа Б.
| Характеристики | Аэропорты | |
|---|---|---|
| 1 | 2 | |
| Количество самолётов типа А, шт. | 2 | 0 |
| Грузоподъёмность самолёта типа А, шт. | 50 | 50 |
| Количество самолётов типа Б, шт. | 1 | 0 |
| Грузоподъёмность самолёта типа Б, шт. | 100 | 100 |
| Минимальное количество контейнеров в партии, шт. | 1 | 1 |
| Максимальное количество контейнеров в партии, шт. | 15 | 22 |
| Средний интервал поступления партий грузов, час | 0,5 | 0,4 |
| Количество одновременно погружаемых контейнеров в самолёт типа А, шт. | 2 | 2 |
| Количество одновременно погружаемых контейнеров в самолёт типа Б, шт. | 2 | 2 |
| Количество одновременно выгружаемых контейнеров из самолёта типа А, шт. | 3 | 2 |
| Количество одновременно выгружаемых контейнеров из самолёта типа Б, шт. | 3 | 2 |
| Среднее время погрузки контейнера в самолёт типа А, час | 0,1 | 0,2 |
| Среднее время погрузки контейнера в самолёт типа Б, час | 0,1 | 0,1 |
| Среднее время выгрузки контейнера из самолёта типа А, час | 0,2 | 0,2 |
| Среднее я время выгрузки контейнера из самолёта типа Б, час | 0,2 | 0,2 |
| Среднее время полета самолёта типа А из аэропорта 1 в аэропорт 2 и из аэропорта 2 в аэропорт 1, час | 3,4 | 3,6 |
| Стандартное отклонение времени полёта самолёта типа А из аэропорта 1 в аэропорт 2 и из аэропорта 2 в аэропорт 1, час | 0,5 | 0,6 |
| Среднее время полета самолёта типа Б из аэропорта 1 в аэропорт 2 и из аэропорта 2 в аэропорт 1, час | 3,2 | 4,1 |
| Стандартное отклонение времени полёта самолёта типа Б из аэропорта 1 в аэропорт 2 и из аэропорта 2 в аэропорт 1, час | 0,5 | 0,8 |
Построить имитационную модель функционирования системы воздушных перевозок с целью определения следующих её показателей:
Исследовать влияние на показатели функционирования системы воздушных перевозок её характеристик, выявить среди них существенные и несущественные.
Сделать выводы о построении эффективной системы воздушных перевозок и возможных направлениях совершенствования после введения в эксплуатацию.
Представим систему воздушных перевозок в виде СМО (Рис. 9.1).
Система воздушных перевозок представляет собой многофазную многоканальную СМО сложной структуры с различными видами заявок. Модель, исходя из такой структуры, должна состоять из двух частей:
В каждую из этих частей модели нужно включить следующие сегменты:
В модели с точки зрения интерпретации целесообразно рассматривать заявки трёх видов:
Заявки как транспортные средства - самолёты должны иметь следующие параметры (поля):
типТрансп - код типа транспортного средства - самолёта;
колГрузоМест - количество груза (контейнеров) в загруженном транспортном средстве - самолёте;
врПолёта - время полёта самолёта из аэропорта отправления в аэропорт назначения;
разные - другие характеристики процесса перевозки грузов воздушным транспортом.
(рис 9.1) Система воздушных перевозок как СМО
В постановке задачи транспортные средства - самолёты определены двух типов А и Б. Для идентификации этих типов в поле типТрансп следует использовать коды 1 и 2 соответственно.
Для фиксации количества поступающих грузов в аэропорты 1 и 2 в соответствующих заявках следует использовать поля колГрузоМест1 и колГрузоМест2.
Для параметров - исходных данных и для показателей функционирования системы воздушных перевозок разработаны идентификаторы (п. 9.1.6 и п. 9.1.7 соответственно).
Показатели системы воздушных перевозок разделены на две группы:
В первую группу включены следующие показатели:
коэфПогр1А, коэфПогр1Б, коэфПогр2А, коэфПогр2Б - коэффициенты использования средств погрузки при погрузке в самолёты типов А и Б в аэропортах 1 и 2 соответственно;
коэфРазгр1А, коэфРазгр1Б, коэфРазгр2А, коэфРазгр2Б - коэффициенты использования средств разгрузки при разгрузке самолётов типов А и Б в аэропортах 1 и 2 соответственно;
коэфПолётА12, коэфПолётБ12, коэфПолётА21, коэфПолётБ21 - коэффициенты нахождения самолётов типов А и Б в полётах из аэропорта 1 в аэропорт 2 и из аэропорта 2 в аэропорт 1 соответственно.Вторую группу составляют следующие показатели:
коэфДост21=достК21/всегоПостК2 - коэффициент доставки грузов из аэропорта 2 в аэропорт 1, достК21 - количество доставленного груза из аэропорта 2 в аэропорт 1, всегоПостК2 - количество всего поступившего груза в аэропорт 2;
коэфДост12=достК12/всегоПостК1 - коэффициент доставки грузов из аэропорта 1 в аэропорт 2, достК12 - количество доставленного груза из аэропорта 1 в аэропорт 2, всегоПостК1 - количество всего поступившего груза в аэропорт 1;
коэфДост=(достК12+достК21)/(всегоПостК1+всегоПостК2) - коэффициент доставки грузов системой перевозок в целом;
коэфИспСам1А=коэфПогр1А+коэфРазгр1А+коэфПолётА12 - коэффициент использования самолётов типа А в аэропорту 1;
коэфИспСам1Б=коэфПогр1Б+коэфРазгр1Б+коэфПолётБ12 - коэффициент использования самолётов типа Б в аэропорту 1;
коэфИспСам2А, коэфИспСам2Б - коэффициенты использования самолётов типа А и Б в аэропорту 2.Создайте следующие области просмотра, на которых вы будете помещать сегменты имитационной модели:
При необходимости вы можете создать и другие области просмотра в зависимости от возможностей вашего компьютера и монитора. При этом можете пользоваться встроенными средствами перехода к областям просмотра или добавить свои соответствующие элементы управления.
Значения свойств элементов Область просмотра установите согласно Табл. 9.2.
| Свойства | Области просмотра | |||
|---|---|---|---|---|
| Имя: | исхДанные | Результаты | Аэропорт1 | Аэропорт1 |
| Х: | 10 | 10 | 10 | 10 |
| Y: | 1860 | 2600 | 10 | 790 |
| Ширина: | 620 | 530 | 1080 | 1110 |
| Высота: | 490 | 470 | 480 | 490 |
Для всех областей просмотра оставьте Выравнивать по: Верхнему левому углу, установите из списка Масштабирование: Подогнать под окно.
Организуйте ввод исходных данных для модели в одном месте. Для удобства пользования, например, при модификации исходных данных, все их целесообразно разделить на две группы по признаку принадлежности к аэропорту 1 и аэропорту 2.
Скруглённый прямоугольник на элемент Область просмотра с именем исхДанные.
Дополнительные панели Свойства. Введите в поля X: 30, Y: 1880, Ширина: 580, Высота: 450.
text и в поле Текст: введите Исходные данные.
Основная перетащите элементы Параметр и поместите их так, как на рис. 9.2.
(рис 9.2) Элементы Параметр для ввода исходных данных
| Имя | Тип | Значение по умолчанию |
|---|---|---|
| Самолёты типа А | ||
колСамТипА | 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 |
Организуйте вывод результатов моделирования. Их также, как и исходные данные, следует разбить на две группы по признаку принадлежности к соответствующему аэропорту, выделить итоговые показатели. На этой области просмотра можно поместить и вспомогательные переменные, предназначенные для накопления необходимых для расчёта показателей статистических данных.
Скруглённый прямоугольник на элемент Область просмотра с именем Результаты.
Дополнительные панели Свойства. Введите в поля X: 25, Y: 2610, Ширина: 510, Высота: 450.
text и в поле Текст: введите Результаты моделирования.
Основная перетащите элементы Простая переменная и поместите их так, как на рис. 9.3. Для всех переменных сохраните предлагаемый тип double, значение по умолчанию - 0.
(рис 9.3) Элементы Простая переменная для вывода результатов моделирования
text и введите пояснения к результатам моделирования как на рис. 9.3.
text и в поле Текст: введите Вспомогательные переменные.
Простая переменная и поместите их согласно рис. 9.3.
double, значение по умолчанию - 0.
Событие (event). Код, который необходим для обработки статистических данных при наступлении события, вы напишите после построения событийной части модели.Приступайте к построению событийной части модели, которая в соответствии со структурой системы воздушных перевозок включает имитацию функционирования аэропорта 1 и аэропорта 2.
Сегмент предназначен для имитации первоначального (последующего) прибытия самолётов в аэропорт 1, размещения их на стоянках, ожидания и отправки на погрузку (разгрузку) контейнеров.
Презентация перетащите элемент Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 30, Y: 50, Ширина: 310, Высота: 200.
text и в поле Текст: введите Прибытие самолётов в аэропорт 1. Ожидание погрузки.
Основной библиотеки по два объекта source, enter, queue, hold и один объект exit. Поместите и соедините их так, как на рис. 9.4.При построении модели вам придётся воспользоваться Java-кодом, в котором потребуются дополнительные поля заявок. Для этого вы должны создать нестандартный класс заявки с дополнительными полями для записи и хранения параметров, о которых упоминалось ранее (см. п. 9.1.4).
Создайте класс заявок ТранспСредство.
source.
Проект щелкните правой кнопкой мыши элемент модели верхнего уровня дерева и выберите Создать/Java класс.
Новый Java класс. В поле Имя: введите имя нового класса: ТранспСредство.
Базовый класс: выберите из выпадающего списка Entity в качестве базового класса. Щелкните кнопку Далее.
Мастера создания Java класса. Добавьте поля Java класса, показанные на рис. 9.5.
Создать конструктор и Создать метод toString ().
Готово. Закройте редактор кода.Аналогичным образом создайте классы заявок ГрузАэропорт1 и ГрузАэропорт2 с дополнительными полями колГрузоМест1 и колГрузоМест2 типа int соответственно. Эти классы заявок, как вы помните, будут использоваться при имитации поступления партий грузов в аэропорты 1 и 2 соответственно.
(рис 9.4) Сегмент Прибытие самолётов в аэропорт 1
(рис 9.5) Поля нового Java класса ТранспСредство
Продолжите построение сегмента имитации Прибытие самолётов в аэропорт 1 и ожидания погрузки.
Поочередно выделите объекты этого сегмента и установите их свойства согласно Табл. 9.4.
| Свойство | Значения |
|---|---|
source | |
| Имя: | самолёт1 |
| Класс заявки: | ТранспСредство |
| Заявки прибывают согласно | Времени между прибытиями |
| Время между прибытиями | 0 |
| Количество заявок, прибывающих за один раз | колСамТипА |
| Ограниченное количество прибытий | Установить флажок |
| Максимальное количество прибытий | 1 |
| Новая заявка | new ТранспСредство() |
| Действие при выходе | entity.типТрансп=1; |
entity.колГрузоМест= | |
грузПодСамА; | |
source1 | |
| Имя: | самолёт2 |
| Класс заявки: | ТранспСредство |
| Заявки прибывают согласно | Времени между прибытиями |
| Время между прибытиями | 0 |
| Количество заявок, прибывающих за один раз | колСамТипА |
| Ограниченное количество прибытий | Установить флажок |
| Максимальное количество прибытий | 1 |
| Новая заявка | new ТранспСредство() |
| Действие при выходе | 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 предназначен для имитации приёма поступающих от источников грузов (контейнеров), учёта их, определения необходимого количества контейнеров для загрузки соответствующего самолёта и формирования команды для отправки этого самолёта на погрузку контейнеров.
Создайте этот сегмент.
Презентация перетащите элемент Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 30, Y: 270, Ширина: 220, Высота: 200.
text и в поле Текст: введите Поступление и учёт контейнеров в аэропорту 1.
Основной библиотеки по одному объекту source, selectOutput5 (имя selectOutput) и sink. Поместите и соедините их так, как на рис. 9.6.Установите свойства объектов согласно табл. 9.5.
Объект source с именем истГрузов1 генерирует заявку-партию класса ГрузАэропорт1 поступивших контейнеров, число которых в партии распределено по равномерному закону. Заявка-партия поступает на объект selectOutput.
В условии 0 проверяется наличие числа контейнеров, достаточного для полной загрузки самолёта типа А. Если число контейнеров недостаточно, заявка-партия уничтожается. Так продолжается до тех пор, пока не выполнится условие 0.
(рис 9.6) Сегмент Поступление и учёт контейнеров в аэропорту 1
| Свойство | Значения |
|---|---|
source | |
| Имя: | истГрузов1 |
| Класс заявки: | ГрузАэропорт1 |
| Заявки прибывают согласно | Времени между прибытиями |
| Время между прибытиями | exponential(1/срВрПостКонт1) |
| Количество заявок, прибывающих за один раз | 1 |
| Новая заявка | new ГрузАэропорт1() |
| Действие при выходе | a=(uniform_ |
discr(минКонтПост1, | |
максКонтПост1)); | |
всегоПостК1+=a; | |
текНалКонт1+=a; | |
selectOutput | |
| Класс заявки: | ГрузАэропорт1 |
| Использовать: | Условия |
| Условие 0 | текНалК1<грузПодСамА |
| Условие 1 | стоянкаПогр1А.size()>0 |
погрузка1А.size()==0 | |
| Действие при выходе 1 | текНалК1-=грузПодСамА; |
hold.setBlocked(false); | |
| Условие 2 | текНалК1<грузПодСамБ |
| Условие 3 | |
| Действие при выходе 3 | |
sink | |
| Класс заявки: | ГрузАэропорт1 |
После выполнения условия 0 проверяется условие 1: наличие самолётов типа А на стоянке ожидания погрузки и незанятость пунктов погрузки.
При выполнении условия 1 формируется команда на разблокировывание элемента hold (см. п. 9.1.8.2) и самолёт типа А отправляется на погрузку.
Если условие 1 не выполняется, например, при отсутствии свободного самолёта типа А, проверяется условие 2.
Если условие 2 не выполняется, то есть недостаточно контейнеров для полной загрузки самолёта типа Б, то заявка-партия уничтожается.
Если условие 2 выполняется (поступило число контейнеров, достаточное для полной загрузки самолёта типа Б), проверяется условие 3: наличие самолётов типа Б на стоянке ожидания погрузки и незанятость пунктов погрузки.
Если условие 3 не выполняется, заявка-партия уничтожается.
При выполнении условия 3 формируется команда на разблокировывание элемента hold1 (см. п. 9.1.8.2) и самолёт типа Б отправляется на погрузку.
Описанная последовательность проверок производится каждый раз при появлении в модели очередной заявки-партии. Все заявки класса ГрузАэропорт1 выводятся из модели.
Сегмент Погрузка контейнеров в аэропорту 1 предназначен для имитации погрузки в самолёты и отправки загруженных самолётов в полёт в аэропорт назначения.
Создайте сегмент Погрузка контейнеров в аэропорту 1.
Презентация перетащите элемент Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 350, Y: 50, Ширина: 460, Высота: 200.
(рис 9.7) Сегмент Погрузка контейнеров в аэропорту 1
text и в поле Текст: введите Погрузка контейнеров в аэропорту 1.
Основной библиотеки по два объекта enter, split, queue, delay, selectOutput и по одному объекту exit и sink. Поместите и соедините их так, как на рис. 9.7.
| Свойство | Значения |
|---|---|
enter2 | |
| Класс заявки: | ТранспСредство |
enter3 | |
| Класс заявки: | ТранспСредство |
split | |
| Классы заявок: | |
| Оригинал, Копия | ТранспСредство, |
ТранспСредство | |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | new ТранспСредство() |
| Действие при выходе копии | entity.типТрансп= |
original.типТрансп; | |
entity.колГрузоМест= | |
original.колГрузоМест; | |
entity.tPolet= | |
original.tPolet; | |
entity.разные =original.разные; | |
split1 | |
| Классы заявок: | |
| Оригинал, Копия | ТранспСредство, |
ТранспСредство | |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | new ТранспСредство() |
| Действие при выходе копии | entity.типТрансп= |
original.типТрансп; | |
entity.колГрузоМест= | |
original.колГрузоМест; | |
entity.врПолёта= | |
original.врПолёта; | |
entity.разные =original.разные; | |
| Имя: | очПогр1А |
| Класс заявки: | ТранспСредство |
| Максимальная вместимость | Установить флажок |
| Действие при выходе | entity.разные= |
срВрПогрКонтСам1А; | |
| Включить сбор статистики | Установить флажок |
queue1 | |
| Имя: | очПогр1Б |
| Класс заявки: | ТранспСредство |
| Максимальная вместимость | Установить флажок |
| Действие при выходе | entity.разные= |
срВрПогрКонтСам1Б; | |
| Включить сбор статистики | Установить флажок |
delay | |
| Имя: | погрузка1А |
| Класс заявки: | ТранспСредство |
| Задержка задаётся | Явно |
| Время задержки | exponential |
(1/entity.разные) | |
| Вместимость | погрКонтСам1А |
| Действие при выходе | погрКонтА1++; |
| Включить сбор статистики | Установить флажок |
delay1 | |
| Имя: | погрузка1Б |
| Класс заявки: | ТранспСредство |
| Задержка задаётся | Явно |
| Время задержки | exponential |
(1/entity.разные) | |
| Вместимость | погрКонтСам1Б |
| Действие при выходе | погрКонтБ1++; |
| Включить сбор статистики | Установить флажок |
selectOutput1 | |
| Класс заявки: | ТранспСредство |
Выход true выбирается | При выполнении условия |
| Условие | entity.колГрузоМест |
==погрКонтА1 | |
Действие при выходе (true) | entity.врПолёта= |
normal(отклВрПолётаА12, | |
срВрПолётаА12); | |
погрКонтА1=0; | |
selectOutput2 | |
| Класс заявки: | ТранспСредство |
Выход true выбирается | При выполнении условия |
| Условие | entity.колГрузоМест |
==погрКонтБ1 | |
Действие при выходе (true) | entity.врПолёта= |
normal(отклВрПолётаБ12, | |
срВрПолётаБ12); | |
погрКонтБ1=0; | |
exit | |
| Имя: | наВзлёт12 |
| Класс заявки: | ТранспСредство |
| Действие при выходе | if (entity.типТрансп==1) enter4.take(entity); |
else enter5.take(entity); | |
sink | |
| Класс заявки: | ТранспСредство |
Предположим, что из сегмента ожидания погрузки через объект enter2 поступила заявка-самолёт типа А в объект split. Объектом split заявка размножается на число заявок, равное количеству контейнеров, которые должны быть погружены в самолёт. Заявка-оригинал из модели не выводится.
Таким образом, далее каждая заявка интерпретируется как заявка-контейнер. Тем не менее, каждой копии присваиваются значения полей оригинала, так как после погрузки все заявки-контейнеры, кроме последней, будут выведены из модели.
Заявки-контейнеры занимают очередь к объекту погрузка1А, имитирующему непосредственно погрузку контейнеров в самолёт типа А в аэропорту 1. При покидании очереди выполняется код entity.разные=срВрПогрКонтСам1А, записывающий в поле с именем разные заявки-контейнера среднее время погрузки одного контейнера.
После объекта погрузка1А, на выходе которого ведётся счёт погруженных контейнеров (погрКонтА1++), заявки-контейнеры входят в объект selectOutput1.
Этот объект проверяет условие (entity.колГрузоМест ==погрКонтБ1): полная ли загрузка самолёта? При выполнении этого условия, а оно будет выполнено тогда, когда будет загружен последний контейнер, последняя заявка теперь уже в качестве заявки-самолёта поступит в объект наВзлёт (exit).
Из этого объекта заявка-самолёт типа А с полным грузом поступит в сегмент имитации полёта из аэропорта 1 в аэропорт 2.
Аналогичным образом имитируется погрузка в самолёт типа Б. Имитация начинается с поступления заявки-самолёта через объект enter3 в объект split1.
Сегмент Полёт из аэропорта 1 в аэропорт 2 предназначен для имитации полёта самолётов с грузом из аэропорта 1 в аэропорт 2.
Создайте сегмент.
Презентация перетащите элемент Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 830, Y: 50, Ширина: 240, Высота: 200.
text и в поле Текст: введите Полёт из аэропорта 1 в аэропорт 2.
Основной библиотеки по два объекта enter, delay и один объект exit. Поместите и соедините их так, как на рис. 9.8.
Предположим, что поступила заявка-самолёт типа А в объект enter4 и далее в объект с именем полётА12 (delay). Идентификатор полётА12 означает, что объект имитирует непосредственно полёт из аэропорта 1 в аэропорт 2. В аэропорту 2 заявка-самолёт входит в сегмент ожидания разгрузки.
(рис 9.8) Сегмент Полёт из аэропорта 1 в аэропорт 2
| Свойство | Значения |
|---|---|
enter4 | |
| Класс заявки: | ТранспСредство |
enter5 | |
| Класс заявки: | ТранспСредство |
delay | |
| Имя: | полётА12 |
| Класс заявки: | ТранспСредство |
| Задержка задаётся | Явно |
| Время задержки | entity.врПолёта |
| Вместимость | колСамТипА |
| Включить сбор статистики | Установить флажок |
delay1 | |
| Имя: | ПолётБ12 |
| Класс заявки: | ТранспСредство |
| Задержка задаётся | Явно |
| Время задержки | entity.врПолёта |
| Вместимость | колСамТипБ |
| Включить сбор статистики | Установить флажок |
exit | |
| Действие при выходе | if (entity.типТрансп==1) enter10.take(entity); |
else enter11.take(entity); | |
Сегмент Ожидание разгрузки в аэропорту 1 предназначен для имитации ожидания разгрузки самолётов, прибывающих с грузом из аэропорта 2.
Создайте сегмент.
Презентация перетащите элемент Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 270, Y: 270, Ширина: 310, Высота: 200.
text и в поле Текст: введите Ожидание разгрузки в аэропорту 1.
Основной библиотеки по два объекта enter, queue, hold и один объект exit. Поместите и соедините их так, как на рис. 9.9.
Предположим, что поступила заявка-самолёт из аэропорта 2 в объект enter6. Если средства разгрузки свободны, то есть выполняется условие (разгрузка1А.size()==0), разблокировывается объект hold2 и заявка-самолёт входит в объект наРазгрузку1 и далее в сегмент имитации разгрузки.
(рис 9.9) Сегмент Ожидание разгрузки в аэропорту 1
| Свойство | Значения |
|---|---|
enter6 | |
| Класс заявки: | ТранспСредство |
| Действие при входе | if (разгрузка1А.size()==0) hold2.setBlocked(false); |
enter7 | |
| Класс заявки: | ТранспСредство |
| Действие при входе | if (разгрузка1Б.size()==0) hold3.setBlocked(false); |
queue | |
| Имя: | стоянкаРазгр1А |
| Класс заявки: | ТранспСредство |
| Вместимость | колСамТипА |
| Включить сбор статистики | Установить флажок |
queue1 | |
| Имя: | стоянкаРазгр1Б |
| Класс заявки: | ТранспСредство |
| Вместимость | колСамТипБ |
| Включить сбор статистики | Установить флажок |
hold2 | |
| Класс заявки: | ТранспСредство |
| Изначально заблокирован | Установить флажок |
hold3 | |
| Класс заявки: | ТранспСредство |
| Изначально заблокирован | Установить флажок |
exit | |
| Имя: | наРазгрузку1 |
| Действие при выходе | if (entity.типТрансп==1) {hold2.setBlocked(true); |
enter8.take(entity);} | |
else {hold3.setBlocked(true); | |
enter9.take(entity);} | |
При выходе из объекта наРазгрузку1 блокируется объект hold2 кодом hold2.setBlocked(true), так как теперь средства разгрузки самолётов типа А аэропорта 1 заняты.
Если поступает заявка-самолёт типа Б, то она входит в сегмент через объект enter7. Имитация ожидания разгрузки заявкой-самолётом типа Б производится аналогично.
Сегмент Разгрузка самолётов в аэропорту 1 предназначен для имитации разгрузки самолётов, прибывающих с грузом из аэропорта 2.
Создайте сегмент.
Презентация перетащите элемент Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 600, Y: 270, Ширина: 470, Высота: 200.
text и в поле Текст: введите Разгрузка самолётов в аэропорту 1.
Основной библиотеки по два объекта enter, split, queue, delay, selectOutput и по одному объекту exit и sink. Поместите и соедините их так, как на рис. 9.10.
Предположим, что из сегмента ожидания разгрузки через объект enter8 поступила заявка-самолёт типа А в объект split2. Объектом split2 заявка размножается на число заявок, равное количеству контейнеров, которые должны быть выгружены из самолёта. Заявка-оригинал из модели не выводится.
Таким образом, далее каждая заявка интерпретируется как заявка-контейнер. Тем не менее, каждой копии присваиваются значения полей оригинала, так как после выгрузки все заявки-контейнеры, кроме последней, будут выведены из модели. Однако неизвестно какая из заявок будет последней - оригинал или копия. Поэтому и присваиваются копиям значения полей оригинала.
(рис 9.10) Сегмент Разгрузка самолётов в аэропорту 1
| Свойство | Значения |
|---|---|
enter8 | |
| Класс заявки: | ТранспСредство |
enter9 | |
| Класс заявки: | ТранспСредство |
split2 | |
| Классы заявок: | |
| Оригинал, Копия | ТранспСредство, |
ТранспСредство | |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | new ТранспСредство() |
| Действие при выходе копии | entity.типТрансп= |
original.типТрансп; | |
entity.колГрузоМест= | |
original.колГрузоМест; | |
entity.врПолёта= | |
original.врПолёта; | |
entity.разные= | |
original.разные; | |
split3 | |
| Классы заявок: | |
| Оригинал, Копия | ТранспСредство, |
ТранспСредство | |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | new ТранспСредство() |
| Действие при выходе копии | entity.типТрансп= |
original.типТрансп; | |
entity.колГрузоМест= | |
original.колГрузоМест; | |
entity.врПолёта= | |
original.врПолёта; | |
entity.разные =original.разные; | |
queue | |
| Имя: | очРазгр1А |
| Класс заявки: | ТранспСредство |
| Максимальная вместимость | Установить флажок |
| Действие при выходе | entity.разные= |
срВрВыгрКонтСам1А | |
| Включить сбор статистики | Установить флажок |
queue1 | |
| Имя: | очРазгр1Б |
| Класс заявки: | ТранспСредство |
| Максимальная вместимость | Установить флажок |
| Действие при выходе | entity.разные= |
срВрВыгрКонтСам1А | |
| Включить сбор статистики | Установить флажок |
delay | |
| Имя: | разгрузка1А |
| Класс заявки: | ТранспСредство |
| Задержка задаётся | Явно |
| Время задержки | exponential |
(1/entity.разные) | |
| Вместимость | выгрКонтСам1А |
| Действие при выходе | выгрКонтА1++; |
| Включить сбор статистики | Установить флажок |
delay1 | |
| Имя: | разгрузка1Б |
| Класс заявки: | ТранспСредство |
| Задержка задаётся | Явно |
| Время задержки | exponential |
(1/entity.разные) | |
| Вместимость | выгрКонтСам1Б |
| Действие при выходе | выгрКонтБ1++; |
| Включить сбор статистики | Установить флажок |
selectOutput3 | |
| Класс заявки: | ТранспСредство |
Выход true выбирается | При выполнении условия |
| Условие | entity.колГрузоМест== |
выгрКонтА1 | |
Действие при выходе (true) | выгрКонтА1=0; |
достКА21+= | |
entity.колГрузоМест; | |
hold2.setBlocked(false); | |
selectOutput4 | |
| Класс заявки: | ТранспСредство |
Выход true выбирается | При выполнении условия |
| Условие | entity.колГрузоМест== |
выгрКонтБ1 | |
Действие при выходе (true) | выгрКонтБ1=0; |
достКБ21+= | |
entity.колГрузоМест; | |
hold3.setBlocked(false); | |
exit | |
| Имя: | наОжПогр1 |
| Класс заявки: | ТранспСредство |
| Действие при выходе | достК21+= |
entity.колГрузоМест; | |
if (entity.типТрансп==1) enter.take(entity); | |
else enter1.take(entity); | |
sink2 | |
| Класс заявки: | ТранспСредство |
Заявки-контейнеры занимают очередь к объекту разгрузка1А, имитирующему непосредственно выгрузку контейнеров из самолёта типа А в аэропорту 1. При покидании очереди выполняется код entity.разные=срВрВыгрКонтСам1А, записывающий в поле с именем разные заявки-контейнера среднее время выгрузки одного контейнера.
После объекта разгрузка1А, на выходе которого ведётся счёт выгруженных контейнеров (выгрКонтА1++), заявки-контейнеры входят в объект selectOutput3.
Этот объект проверяет условие (entity.колГрузоМест ==выгрКонтА1): полная ли выгрузка самолёта? При выполнении этого условия, а оно будет выполнено тогда, когда будет выгружен последний контейнер, последняя заявка теперь уже в качестве заявки-самолёта поступит в объект наОжПогр1 (exit).
При выходе из объекта selectOutput3 переменной выгрКонтА1 присваивается значение 0, так она должна участвовать в очередной имитации выгрузки. Кроме того, разблокировывается объект hold2, так как теперь средства выгрузки аэропорта 1 самолётов типа А свободны
Из объекта наОжПогр1 (exit) заявка-самолёт типа А поступит в сегмент имитации ожидания погрузки самолётов типа А аэропорта 1.
Аналогичным образом имитируется выгрузка из самолёта типа Б. Имитация начинается с поступления заявки-самолёта через объект enter9 в объект split3.
Сегменты, имитирующие функционирование аэропорта 2, построены в основном также, как и сегменты аэропорта 1, поэтому будут отмечены лишь некоторые особенности.
Сегмент Поступление и учёт контейнеров в аэропорту 2 предназначен для имитации приёма поступающих от источников грузов (контейнеров), учёта их, определения необходимого количества контейнеров для загрузки соответствующего самолёта и формирования команды для отправки этого самолёта на погрузку контейнеров (при наличии самолёта).
Презентация перетащите элемент Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 30, Y: 830, Ширина: 290, Высота: 190.
text и в поле Текст: введите Поступление и учёт контейнеров в аэропорту 2.
Основной библиотеки по одному объекту source, selectOutput5 (имя selectOutput5) и sink. Поместите и соедините их так, как на рис. 9.11.Установите свойства объектов согласно табл. 9.10.
(рис 9.11) Сегмент Поступление и учёт контейнеров в аэропорту 2
| Свойство | Значения |
|---|---|
source | |
| Имя: | истГрузов2 |
| Класс заявки: | ГрузАэропорт2 |
| Заявки прибывают согласно | Времени между прибытиями |
| Время между прибытиями | Exponential |
(1/срВрПостКонт2) | |
| Количество заявок, прибывающих за один раз | |
| Новая заявка | 1 |
| Действие при выходе | new ГрузАэропорт2() |
d=(uniform_discr(минКонтПост2, | |
максКонтПост2)); | |
всегоПостК2+=d; | |
текНалК2+=d; | |
selectOutput5 | |
| Класс заявки: | ГрузАэропорт2 |
| Использовать: | Условия |
| Условие 0 | текНалК2<грузПодСамА |
| Условие 1 | стоянкаПогр2А.size()>0 |
погрузка2А.size()==0 | |
| Действие при выходе 1 | текНалК2-=грузПодСамА; |
hold6.setBlocked(false); | |
| Условие 2 | текНалК2<грузПодСамБ |
| Условие 3 | стоянкаПогр2Б.size()>0 |
погрузка2Б.size()==0 | |
| Действие при выходе 3 | текНалК2-=грузПодСамБ; |
hold7.setBlocked(false); | |
sink | |
| Класс заявки: | ГрузАэропорт2 |
Объект source с именем истГрузов2 генерирует заявку-партию класса ГрузАэропорт2 поступивших контейнеров. Заявка-партия поступает на объект selectOutput5.
Описанная в п. 9.1.8.2 последовательность проверок условий производится и в данном сегменте каждый раз при появлении в модели очередной заявки-партии. Все заявки класса ГрузАэропорт2 также выводятся из модели.
В данном сегменте, как и в п. 9.1.8.2, при выполнении подобных условий, только относительно аэропорта 2, формируются команды на отправку самолётов на погрузку.
Сегмент Ожидание разгрузки в аэропорту 2 предназначен для имитации ожидания разгрузки самолётов, прибывших из аэропорта 1.
Создайте сегмент.
Презентация перетащите элемент Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 30, Y: 1040, Ширина: 310, Высота: 220.
text и в поле Текст: введите Ожидание разгрузки в аэропорту 2.
Основной библиотеки по два объекта enter, queue, hold и один объект exit. Поместите и соедините их так, как на рис. 9.12.
(рис 9.12) Сегмент Ожидание разгрузки в аэропорту 2
Предположим, что поступила заявка-самолёт в объект enter11. В нём проверяется условие: средства разгрузки свободны (разгрузка2Б.size()==0) и на стоянке нет ожидающих разгрузку самолётов? Если да, то разблокировывается объект hold5 и заявка-самолёт типа Б входит в объект наРазгрузку2 и далее в сегмент имитации разгрузки аэропорта 2.
| Свойство | Значения |
|---|---|
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 предназначен для имитации разгрузки самолётов, прибывающих из аэропорта 1.
(рис 9.13) Сегмент Разгрузка самолётов в аэропорту 2
Создайте сегмент.
Презентация перетащите элемент Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 360, Y: 1040, Ширина: 470, Высота: 220.
text и в поле Текст: введите Разгрузка самолётов в аэропорту 2.
Основной библиотеки по два объекта enter, split, queue, delay, selectOutput и по одному объекту exit и sink. Поместите и соедините их так, как на рис. 9.13.
Предположим, что из сегмента ожидания разгрузки (п. 9.1.9.2) через объект enter13 поступила заявка-самолёт типа Б в объект split5. Объектом split5 заявка размножается на число заявок, равное количеству контейнеров, которые должны быть выгружены из самолёта. Заявка-оригинал из модели не выводится. Поэтому количество копий на 1 меньше, чем количество выгружаемых контейнеров (entity.колГрузоМест-1).
Таким образом, также, как и в соответствующем сегменте аэропорта 2, далее каждая заявка интерпретируется как заявка-контейнер. Тем не менее, каждой копии присваиваются значения полей оригинала, так как после выгрузки все заявки-контейнеры, кроме последней, будут выведены из модели. Однако неизвестно какая из заявок будет последней - оригинал или копия. Поэтому также и присваиваются копиям значения полей оригинала.
| Свойство | Значения |
|---|---|
enter12 | |
| Класс заявки: | ТранспСредство |
enter13 | |
| Класс заявки: | ТранспСредство |
split4 | |
| Классы заявок: | |
| Оригинал, Копия | ТранспСредство, |
ТранспСредство | |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | new ТранспСредство() |
| Действие при выходе копии | entity.типТрансп= |
original.типТрансп; | |
entity.колГрузоМест= | |
original.колГрузоМест; | |
entity.врПолёта= | |
original.врПолёта; | |
entity.разные = | |
original.разные; | |
split5 | |
| Классы заявок: | |
| Оригинал, Копия | ТранспСредство, |
ТранспСредство | |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | new ТранспСредство() |
| Действие при выходе копии | 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.колГрузоМест== |
выгрКонтА2 | |
Действие при выходе (true) | выгрКонтА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 предназначен для имитации ожидания погрузки самолётов, прибывших из аэропорта 1, после разгрузки в аэропорту 2.
Создайте сегмент.
Презентация перетащите элемент Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 340, Y: 830, Ширина: 290, Высота: 190.
text и в поле Текст: введите Ожидание погрузки в аэропорту 2.
Основной библиотеки по два объекта enter, queue, hold и один объект exit. Поместите и соедините их так, как на рис. 9.14.
Данный сегмент отличается от аналогичного сегмента аэропорта 1 тем, что он не предназначен в том числе и для первичного приёма самолётов. Заявки-самолёты поступают на имитируемые объектами queue стоянки стоянкаПогр2А и стоянкаПогр2Б соответственно только после разгрузки.
Элементы hold6 и hold7 также изначально заблокированы, поэтому заявки-самолёты дальше стоянок не проходят. Элементы hold6 и hold7 также управляются сегментом Поступление и учёт контейнеров в аэропорту 2.
(рис 9.14) Сегмент Ожидание погрузки в аэропорту 2
| Свойство | Значения |
|---|---|
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);} | |
Сегмент Погрузка контейнеров в аэропорту 2 предназначен для имитации погрузки в самолёты и отправки загруженных самолётов в полёт в аэропорт назначения.
Создайте сегмент Погрузка контейнеров в аэропорту 2.
Презентация перетащите элемент Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 350, Y: 50, Ширина: 460, Высота: 200.
text и в поле Текст: введите Погрузка контейнеров в аэропорту 1.
Основной библиотеки по два объекта enter, split, queue, delay, selectOutput и по одному объекту exit и sink. Поместите и соедините их так, как на рис. 9.15.
(рис 9.15) Сегмент Погрузка контейнеров в аэропорту 2
| Свойство | Значения |
|---|---|
enter2 | |
| Класс заявки: | ТранспСредство |
enter3 | |
| Класс заявки: | ТранспСредство |
split6 | |
| Классы заявок: | |
| Оригинал, Копия | ТранспСредство, |
ТранспСредство | |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | new ТранспСредство() |
| Действие при выходе копии | entity.типТрансп= |
original.типТрансп; | |
entity.колГрузоМест= | |
original.колГрузоМест; | |
entity.tPolet= | |
original.tPolet; | |
entity.разные= original.разные; | |
split7 | |
| Классы заявок: | |
| Оригинал, Копия | ТранспСредство, |
ТранспСредство | |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | new ТранспСредство() |
| Действие при выходе копии | entity.типТрансп= |
original.типТрансп; | |
entity.колГрузоМест= | |
original.колГрузоМест; | |
entity.врПолёта= | |
original.врПолёта; | |
entity.разные= original.разные; | |
queue | |
| Имя: | очПогр2А |
| Класс заявки: | ТранспСредство |
| Максимальная вместимость | Установить флажок |
| Действие при выходе | entity.разные= |
срВрПогрКонтСам2А; | |
| Включить сбор статистики | Установить флажок |
queue1 | |
| Имя: | очПогр2Б |
| Класс заявки: | ТранспСредство |
| Максимальная вместимость | Установить флажок |
| Действие при выходе | entity.разные= |
срВрПогрКонтСам2Б; | |
| Включить сбор статистики | Установить флажок |
delay | |
| Имя: | Погрузка2А |
| Класс заявки: | ТранспСредство |
| Задержка задаётся | Явно |
| Время задержки | eexponential |
(1/entity.разные) | |
| Вместимость | погрКонтСам2А |
| Действие при выходе | погрКонтА2++; |
| Включить сбор статистики | Установить флажок |
delay1 | |
| Имя: | Погрузка2Б |
| Класс заявки: | ТранспСредство |
| Задержка задаётся | Явно |
| Время задержки | exponential |
(1/entity.разные) | |
| Вместимость | погрКонтСам2Б |
| Действие при выходе | погрКонтБ2++; |
| Включить сбор статистики | Установить флажок |
selectOutput8 | |
| Класс заявки: | ТранспСредство |
Выход true выбирается | При выполнении условия |
| Условие | entity.колГрузоМест |
==погрКонтА2 | |
Действие при выходе (true) | entity.врПолёта= |
normal(отклВрПолётаА21, | |
срВрПолётаА21); | |
погрКонтА2=0; | |
selectOutput9 | |
| Класс заявки: | ТранспСредство |
Выход true выбирается | При выполнении условия |
| Условие | entity.колГрузоМест |
==погрКонтБ2 | |
Действие при выходе (true) | entity.врПолёта= |
normal(отклВрПолётаБ21, | |
срВрПолётаБ21); | |
погрКонтБ2=0; | |
exit | |
| Имя: | наВзлёт21 |
| Класс заявки: | ТранспСредство |
| Действие при выходе | if (entity.типТрансп==1) enter18.take(entity); |
else enter19.take(entity); | |
sink | |
| Класс заявки: | ТранспСредство |
Сегмент Полёт из аэропорта 2 в аэропорт 1 предназначен для имитации полёта самолётов с грузом из аэропорта 2 в аэропорт 1.
Презентация перетащите элемент Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 850, Y: 1040, Ширина: 250, Высота: 220.
text и в поле Текст: введите Полёт из аэропорта 2 в аэропорт 1.
(рис 9.16) Сегмент Полёт из аэропорта 2 в аэропорт 1
Основной библиотеки по два объекта enter, delay и один объект exit. Поместите и соедините их так, как на рис. 9.16.
| Свойство | Значения |
|---|---|
enter18 | |
| Класс заявки: | ТранспСредство |
enter19 | |
| Класс заявки: | ТранспСредство |
delay | |
| Имя: | полётА21 |
| Класс заявки: | ТранспСредство |
| Задержка задаётся | Явно |
| Время задержки | entity.врПолёта |
| Вместимость | колСамТипА |
| Включить сбор статистики | Установить флажок |
delay1 | |
| Имя: | ПолётБ21 |
| Класс заявки: | ТранспСредство |
| Задержка задаётся | Явно |
| Время задержки | entity.врПолёта |
| Вместимость | колСамТипБ |
| Включить сбор статистики | Установить флажок |
exit | |
| Имя: | наОжРазгр1 |
| Действие при выходе | if (entity.типТрансп==1) enter6.take(entity); |
else enter7.take(entity); | |
Для вывода результатов моделирования воспользуйтесь событием, происходящим по истечении таймаута.
Модель на область просмотра Результаты как на рис. 9.3. Измените его имя на ОбрабРезультМодел. Нажмите Enter.
Отображать имя.
Tип события: выберите По таймауту.
Режим: Срабатывает один раз.
Время срабатывания (абсолютное) 720000.
Действие введите Java код, который будет выполняться при появлении этого события.
коэфДост21=достК21/всегоПостК2; коэфДост12=достК12/всегоПостК1; коэфПогр1А=погрузка1А.statsUtilization.mean(); коэфПогр1Б=погрузка1Б.statsUtilization.mean(); коэфПогр2А=погрузка2А.statsUtilization.mean(); коэфПогр2Б=погрузка2Б.statsUtilization.mean(); коэфРазгр1А=разгрузка1А.statsUtilization.mean(); коэфРазгр1Б=разгрузка1Б.statsUtilization.mean(); коэфРазгр2А=разгрузка2А.statsUtilization.mean(); коэфРазгр2Б=разгрузка2Б.statsUtilization.mean(); коэфПолётА12=полётА12.statsUtilization.mean(); коэфПолётБ12=полётБ12.statsUtilization.mean(); коэфИспСам1А=коэфПогр1А+коэфРазгр1А+коэфПолётА12; коэфИспСам1Б=коэфПогр1Б+коэфРазгр1Б+коэфПолётБ12; коэфПолётА21=полётА21.statsUtilization.mean(); коэфПолётБ21=полётБ21.statsUtilization.mean(); коэфИспСам2А=коэфПогр2А+коэфРазгр2А+коэфПолётА21; коэфИспСам2Б=коэфПогр2Б+коэфРазгр2Б+коэфПолётБ21; коэфИспСамА=(коэфИспСам1А+коэфИспСам2А)/2; коэфИспСамБ=(коэфИспСам1Б+коэфИспСам2Б)/2; коэфДост=(достК12+достК21)/(всегоПостК1+всегоПостК2); коэфИспСам=(коэфИспСамА+коэфИспСамБ)/2;
Прежде чем запустить модель:
Проекты выделите ВоздушныеПеревозки.
Основные в поле Единицы модельного времени: установите часы.
Проекты выделите Simulation: Main.
Основные установите Фиксированное начальное число (воспроизводимые "прогоны").
Начальное число: введите 15657 (можно ввести и другое начальное число, тогда результаты моделирования будут отличаться от тех, что получены при рекомендуемом начальном числе и показаны на рис. 9.17).
Модельное время. В поле Остановить: выберите В заданное время.
Конечное время: введите 720000.0. Время моделирования увеличено в 1000 раз по числу прогонов модели в GPSS World. Таким образом, моделируется функционирование системы воздушных перевозок в течение 720 часов (30-ти суток).
При правильном построении модели вы получите результаты, показанные на рис. 9.17.
(рис 9.17) Результаты моделирования
Видно, что коэффициент доставки системы воздушных перевозок при принятых её характеристиках и потоках грузов составляет коэфДост = 0,31 при среднем коэффициенте использования самолётов обоих типов коэфИспСам = 0,638. Коэффициент использования самолёта типа Б (0,481) ниже коэфИспСамА = 0,795.
Система авиаперевозок включает два аэропорта. Перевозки выполняются из первого аэропорта во второй и обратно. Время полета между аэропортами распределено по нормальному закону.
Грузы в каждый аэропорт поступают партиями в контейнерах. Количество контейнеров в партии распределено по равномерному закону. Интервалы времени между поступлениями партий грузов распределены по экспоненциальному закону.
Для авиаперевозок используют два типа самолетов А и Б и грузоподъемностями q1 и q2 шт. контейнеров соответственно (q1 < q2). В аэропорту нет фиксированного расписания. Каждый самолет отправляется в полет сразу после его полной загрузки. Время погрузки и время выгрузки одного контейнера распределены по экспоненциальному закону. В первую очередь используются самолеты типа А, а при их отсутствии - типа Б.
| Характеристики | Аэропорты | |
|---|---|---|
| 1 | 2 | |
| Количество самолётов типа А, шт. | 2 | 0 |
| Грузоподъёмность самолёта типа А, шт. | 50 | 50 |
| Количество самолётов типа Б, шт. | 1 | 0 |
| Грузоподъёмность самолёта типа Б, шт. | 100 | 100 |
| Минимальное количество контейнеров в партии, шт. | 1 | 1 |
| Максимальное количество контейнеров в партии, шт. | 15 | 22 |
| Средний интервал поступления партий грузов, час | 0,5 | 0,4 |
| Количество одновременно погружаемых контейнеров в самолёт типа А, шт. | 2 | 2 |
| Количество одновременно погружаемых контейнеров в самолёт типа Б, шт. | 2 | 2 |
| Количество одновременно выгружаемых контейнеров из самолёта типа А, шт. | 3 | 2 |
| Количество одновременно выгружаемых контейнеров из самолёта типа Б, шт. | 3 | 2 |
| Среднее время погрузки контейнера в самолёт типа А, час | 0,1 | 0,2 |
| Среднее время погрузки контейнера в самолёт типа Б, час | 0,1 | 0,1 |
| Среднее время выгрузки контейнера из самолёта типа А, час | 0,2 | 0,2 |
| Среднее я время выгрузки контейнера из самолёта типа Б, час | 0,2 | 0,2 |
| Среднее время полета самолёта типа А из аэропорта 1 в аэропорт 2 и из аэропорта 2 в аэропорт 1, час | 3,4 | 3,6 |
| Стандартное отклонение времени полёта самолёта типа А из аэропорта 1 в аэропорт 2 и из аэропорта 2 в аэропорт 1, час | 0,5 | 0,6 |
| Среднее время полета самолёта типа Б из аэропорта 1 в аэропорт 2 и из аэропорта 2 в аэропорт 1, час | 3,2 | 4,1 |
| Стандартное отклонение времени полёта самолёта типа Б из аэропорта 1 в аэропорт 2 и из аэропорта 2 в аэропорт 1, час | 0,5 | 0,8 |
Построить имитационную модель функционирования системы воздушных перевозок с целью определения следующих её показателей:
Исследовать влияние на показатели функционирования системы воздушных перевозок её характеристик, выявить среди них существенные и несущественные.
Сделать выводы о построении эффективной системы воздушных перевозок и возможных направлениях совершенствования после введения в эксплуатацию.
Представим систему воздушных перевозок в виде СМО (Рис. 9.1).
Система воздушных перевозок представляет собой многофазную многоканальную СМО сложной структуры с различными видами заявок. Модель, исходя из такой структуры, должна состоять из двух частей:
В каждую из этих частей модели нужно включить следующие сегменты:
В модели с точки зрения интерпретации целесообразно рассматривать заявки трёх видов:
Заявки как транспортные средства - самолёты должны иметь следующие параметры (поля):
типТрансп - код типа транспортного средства - самолёта;
колГрузоМест - количество груза (контейнеров) в загруженном транспортном средстве - самолёте;
врПолёта - время полёта самолёта из аэропорта отправления в аэропорт назначения;
разные - другие характеристики процесса перевозки грузов воздушным транспортом.
(рис 9.1) Система воздушных перевозок как СМО
В постановке задачи транспортные средства - самолёты определены двух типов А и Б. Для идентификации этих типов в поле типТрансп следует использовать коды 1 и 2 соответственно.
Для фиксации количества поступающих грузов в аэропорты 1 и 2 в соответствующих заявках следует использовать поля колГрузоМест1 и колГрузоМест2.
Для параметров - исходных данных и для показателей функционирования системы воздушных перевозок разработаны идентификаторы (п. 9.1.6 и п. 9.1.7 соответственно).
Показатели системы воздушных перевозок разделены на две группы:
В первую группу включены следующие показатели:
коэфПогр1А, коэфПогр1Б, коэфПогр2А, коэфПогр2Б - коэффициенты использования средств погрузки при погрузке в самолёты типов А и Б в аэропортах 1 и 2 соответственно;
коэфРазгр1А, коэфРазгр1Б, коэфРазгр2А, коэфРазгр2Б - коэффициенты использования средств разгрузки при разгрузке самолётов типов А и Б в аэропортах 1 и 2 соответственно;
коэфПолётА12, коэфПолётБ12, коэфПолётА21, коэфПолётБ21 - коэффициенты нахождения самолётов типов А и Б в полётах из аэропорта 1 в аэропорт 2 и из аэропорта 2 в аэропорт 1 соответственно.Вторую группу составляют следующие показатели:
коэфДост21=достК21/всегоПостК2 - коэффициент доставки грузов из аэропорта 2 в аэропорт 1, достК21 - количество доставленного груза из аэропорта 2 в аэропорт 1, всегоПостК2 - количество всего поступившего груза в аэропорт 2;
коэфДост12=достК12/всегоПостК1 - коэффициент доставки грузов из аэропорта 1 в аэропорт 2, достК12 - количество доставленного груза из аэропорта 1 в аэропорт 2, всегоПостК1 - количество всего поступившего груза в аэропорт 1;
коэфДост=(достК12+достК21)/(всегоПостК1+всегоПостК2) - коэффициент доставки грузов системой перевозок в целом;
коэфИспСам1А=коэфПогр1А+коэфРазгр1А+коэфПолётА12 - коэффициент использования самолётов типа А в аэропорту 1;
коэфИспСам1Б=коэфПогр1Б+коэфРазгр1Б+коэфПолётБ12 - коэффициент использования самолётов типа Б в аэропорту 1;
коэфИспСам2А, коэфИспСам2Б - коэффициенты использования самолётов типа А и Б в аэропорту 2.Создайте следующие области просмотра, на которых вы будете помещать сегменты имитационной модели:
При необходимости вы можете создать и другие области просмотра в зависимости от возможностей вашего компьютера и монитора. При этом можете пользоваться встроенными средствами перехода к областям просмотра или добавить свои соответствующие элементы управления.
Значения свойств элементов Область просмотра установите согласно Табл. 9.2.
| Свойства | Области просмотра | |||
|---|---|---|---|---|
| Имя: | исхДанные | Результаты | Аэропорт1 | Аэропорт1 |
| Х: | 10 | 10 | 10 | 10 |
| Y: | 1860 | 2600 | 10 | 790 |
| Ширина: | 620 | 530 | 1080 | 1110 |
| Высота: | 490 | 470 | 480 | 490 |
Для всех областей просмотра оставьте Выравнивать по: Верхнему левому углу, установите из списка Масштабирование: Подогнать под окно.
Организуйте ввод исходных данных для модели в одном месте. Для удобства пользования, например, при модификации исходных данных, все их целесообразно разделить на две группы по признаку принадлежности к аэропорту 1 и аэропорту 2.
Скруглённый прямоугольник на элемент Область просмотра с именем исхДанные.
Дополнительные панели Свойства. Введите в поля X: 30, Y: 1880, Ширина: 580, Высота: 450.
text и в поле Текст: введите Исходные данные.
Основная перетащите элементы Параметр и поместите их так, как на рис. 9.2.
(рис 9.2) Элементы Параметр для ввода исходных данных
| Имя | Тип | Значение по умолчанию |
|---|---|---|
| Самолёты типа А | ||
колСамТипА | 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 |
Организуйте вывод результатов моделирования. Их также, как и исходные данные, следует разбить на две группы по признаку принадлежности к соответствующему аэропорту, выделить итоговые показатели. На этой области просмотра можно поместить и вспомогательные переменные, предназначенные для накопления необходимых для расчёта показателей статистических данных.
Скруглённый прямоугольник на элемент Область просмотра с именем Результаты.
Дополнительные панели Свойства. Введите в поля X: 25, Y: 2610, Ширина: 510, Высота: 450.
text и в поле Текст: введите Результаты моделирования.
Основная перетащите элементы Простая переменная и поместите их так, как на рис. 9.3. Для всех переменных сохраните предлагаемый тип double, значение по умолчанию - 0.
(рис 9.3) Элементы Простая переменная для вывода результатов моделирования
text и введите пояснения к результатам моделирования как на рис. 9.3.
text и в поле Текст: введите Вспомогательные переменные.
Простая переменная и поместите их согласно рис. 9.3.
double, значение по умолчанию - 0.
Событие (event). Код, который необходим для обработки статистических данных при наступлении события, вы напишите после построения событийной части модели.Приступайте к построению событийной части модели, которая в соответствии со структурой системы воздушных перевозок включает имитацию функционирования аэропорта 1 и аэропорта 2.
Сегмент предназначен для имитации первоначального (последующего) прибытия самолётов в аэропорт 1, размещения их на стоянках, ожидания и отправки на погрузку (разгрузку) контейнеров.
Презентация перетащите элемент Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 30, Y: 50, Ширина: 310, Высота: 200.
text и в поле Текст: введите Прибытие самолётов в аэропорт 1. Ожидание погрузки.
Основной библиотеки по два объекта source, enter, queue, hold и один объект exit. Поместите и соедините их так, как на рис. 9.4.При построении модели вам придётся воспользоваться Java-кодом, в котором потребуются дополнительные поля заявок. Для этого вы должны создать нестандартный класс заявки с дополнительными полями для записи и хранения параметров, о которых упоминалось ранее (см. п. 9.1.4).
Создайте класс заявок ТранспСредство.
source.
Проект щелкните правой кнопкой мыши элемент модели верхнего уровня дерева и выберите Создать/Java класс.
Новый Java класс. В поле Имя: введите имя нового класса: ТранспСредство.
Базовый класс: выберите из выпадающего списка Entity в качестве базового класса. Щелкните кнопку Далее.
Мастера создания Java класса. Добавьте поля Java класса, показанные на рис. 9.5.
Создать конструктор и Создать метод toString ().
Готово. Закройте редактор кода.Аналогичным образом создайте классы заявок ГрузАэропорт1 и ГрузАэропорт2 с дополнительными полями колГрузоМест1 и колГрузоМест2 типа int соответственно. Эти классы заявок, как вы помните, будут использоваться при имитации поступления партий грузов в аэропорты 1 и 2 соответственно.
(рис 9.4) Сегмент Прибытие самолётов в аэропорт 1
(рис 9.5) Поля нового Java класса ТранспСредство
Продолжите построение сегмента имитации Прибытие самолётов в аэропорт 1 и ожидания погрузки.
Поочередно выделите объекты этого сегмента и установите их свойства согласно Табл. 9.4.
| Свойство | Значения |
|---|---|
source | |
| Имя: | самолёт1 |
| Класс заявки: | ТранспСредство |
| Заявки прибывают согласно | Времени между прибытиями |
| Время между прибытиями | 0 |
| Количество заявок, прибывающих за один раз | колСамТипА |
| Ограниченное количество прибытий | Установить флажок |
| Максимальное количество прибытий | 1 |
| Новая заявка | new ТранспСредство() |
| Действие при выходе | entity.типТрансп=1; |
entity.колГрузоМест= | |
грузПодСамА; | |
source1 | |
| Имя: | самолёт2 |
| Класс заявки: | ТранспСредство |
| Заявки прибывают согласно | Времени между прибытиями |
| Время между прибытиями | 0 |
| Количество заявок, прибывающих за один раз | колСамТипА |
| Ограниченное количество прибытий | Установить флажок |
| Максимальное количество прибытий | 1 |
| Новая заявка | new ТранспСредство() |
| Действие при выходе | 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 предназначен для имитации приёма поступающих от источников грузов (контейнеров), учёта их, определения необходимого количества контейнеров для загрузки соответствующего самолёта и формирования команды для отправки этого самолёта на погрузку контейнеров.
Создайте этот сегмент.
Презентация перетащите элемент Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 30, Y: 270, Ширина: 220, Высота: 200.
text и в поле Текст: введите Поступление и учёт контейнеров в аэропорту 1.
Основной библиотеки по одному объекту source, selectOutput5 (имя selectOutput) и sink. Поместите и соедините их так, как на рис. 9.6.Установите свойства объектов согласно табл. 9.5.
Объект source с именем истГрузов1 генерирует заявку-партию класса ГрузАэропорт1 поступивших контейнеров, число которых в партии распределено по равномерному закону. Заявка-партия поступает на объект selectOutput.
В условии 0 проверяется наличие числа контейнеров, достаточного для полной загрузки самолёта типа А. Если число контейнеров недостаточно, заявка-партия уничтожается. Так продолжается до тех пор, пока не выполнится условие 0.
(рис 9.6) Сегмент Поступление и учёт контейнеров в аэропорту 1
| Свойство | Значения |
|---|---|
source | |
| Имя: | истГрузов1 |
| Класс заявки: | ГрузАэропорт1 |
| Заявки прибывают согласно | Времени между прибытиями |
| Время между прибытиями | exponential(1/срВрПостКонт1) |
| Количество заявок, прибывающих за один раз | 1 |
| Новая заявка | new ГрузАэропорт1() |
| Действие при выходе | a=(uniform_ |
discr(минКонтПост1, | |
максКонтПост1)); | |
всегоПостК1+=a; | |
текНалКонт1+=a; | |
selectOutput | |
| Класс заявки: | ГрузАэропорт1 |
| Использовать: | Условия |
| Условие 0 | текНалК1<грузПодСамА |
| Условие 1 | стоянкаПогр1А.size()>0 |
погрузка1А.size()==0 | |
| Действие при выходе 1 | текНалК1-=грузПодСамА; |
hold.setBlocked(false); | |
| Условие 2 | текНалК1<грузПодСамБ |
| Условие 3 | |
| Действие при выходе 3 | |
sink | |
| Класс заявки: | ГрузАэропорт1 |
После выполнения условия 0 проверяется условие 1: наличие самолётов типа А на стоянке ожидания погрузки и незанятость пунктов погрузки.
При выполнении условия 1 формируется команда на разблокировывание элемента hold (см. п. 9.1.8.2) и самолёт типа А отправляется на погрузку.
Если условие 1 не выполняется, например, при отсутствии свободного самолёта типа А, проверяется условие 2.
Если условие 2 не выполняется, то есть недостаточно контейнеров для полной загрузки самолёта типа Б, то заявка-партия уничтожается.
Если условие 2 выполняется (поступило число контейнеров, достаточное для полной загрузки самолёта типа Б), проверяется условие 3: наличие самолётов типа Б на стоянке ожидания погрузки и незанятость пунктов погрузки.
Если условие 3 не выполняется, заявка-партия уничтожается.
При выполнении условия 3 формируется команда на разблокировывание элемента hold1 (см. п. 9.1.8.2) и самолёт типа Б отправляется на погрузку.
Описанная последовательность проверок производится каждый раз при появлении в модели очередной заявки-партии. Все заявки класса ГрузАэропорт1 выводятся из модели.
Сегмент Погрузка контейнеров в аэропорту 1 предназначен для имитации погрузки в самолёты и отправки загруженных самолётов в полёт в аэропорт назначения.
Создайте сегмент Погрузка контейнеров в аэропорту 1.
Презентация перетащите элемент Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 350, Y: 50, Ширина: 460, Высота: 200.
(рис 9.7) Сегмент Погрузка контейнеров в аэропорту 1
text и в поле Текст: введите Погрузка контейнеров в аэропорту 1.
Основной библиотеки по два объекта enter, split, queue, delay, selectOutput и по одному объекту exit и sink. Поместите и соедините их так, как на рис. 9.7.
| Свойство | Значения |
|---|---|
enter2 | |
| Класс заявки: | ТранспСредство |
enter3 | |
| Класс заявки: | ТранспСредство |
split | |
| Классы заявок: | |
| Оригинал, Копия | ТранспСредство, |
ТранспСредство | |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | new ТранспСредство() |
| Действие при выходе копии | entity.типТрансп= |
original.типТрансп; | |
entity.колГрузоМест= | |
original.колГрузоМест; | |
entity.tPolet= | |
original.tPolet; | |
entity.разные =original.разные; | |
split1 | |
| Классы заявок: | |
| Оригинал, Копия | ТранспСредство, |
ТранспСредство | |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | new ТранспСредство() |
| Действие при выходе копии | entity.типТрансп= |
original.типТрансп; | |
entity.колГрузоМест= | |
original.колГрузоМест; | |
entity.врПолёта= | |
original.врПолёта; | |
entity.разные =original.разные; | |
| Имя: | очПогр1А |
| Класс заявки: | ТранспСредство |
| Максимальная вместимость | Установить флажок |
| Действие при выходе | entity.разные= |
срВрПогрКонтСам1А; | |
| Включить сбор статистики | Установить флажок |
queue1 | |
| Имя: | очПогр1Б |
| Класс заявки: | ТранспСредство |
| Максимальная вместимость | Установить флажок |
| Действие при выходе | entity.разные= |
срВрПогрКонтСам1Б; | |
| Включить сбор статистики | Установить флажок |
delay | |
| Имя: | погрузка1А |
| Класс заявки: | ТранспСредство |
| Задержка задаётся | Явно |
| Время задержки | exponential |
(1/entity.разные) | |
| Вместимость | погрКонтСам1А |
| Действие при выходе | погрКонтА1++; |
| Включить сбор статистики | Установить флажок |
delay1 | |
| Имя: | погрузка1Б |
| Класс заявки: | ТранспСредство |
| Задержка задаётся | Явно |
| Время задержки | exponential |
(1/entity.разные) | |
| Вместимость | погрКонтСам1Б |
| Действие при выходе | погрКонтБ1++; |
| Включить сбор статистики | Установить флажок |
selectOutput1 | |
| Класс заявки: | ТранспСредство |
Выход true выбирается | При выполнении условия |
| Условие | entity.колГрузоМест |
==погрКонтА1 | |
Действие при выходе (true) | entity.врПолёта= |
normal(отклВрПолётаА12, | |
срВрПолётаА12); | |
погрКонтА1=0; | |
selectOutput2 | |
| Класс заявки: | ТранспСредство |
Выход true выбирается | При выполнении условия |
| Условие | entity.колГрузоМест |
==погрКонтБ1 | |
Действие при выходе (true) | entity.врПолёта= |
normal(отклВрПолётаБ12, | |
срВрПолётаБ12); | |
погрКонтБ1=0; | |
exit | |
| Имя: | наВзлёт12 |
| Класс заявки: | ТранспСредство |
| Действие при выходе | if (entity.типТрансп==1) enter4.take(entity); |
else enter5.take(entity); | |
sink | |
| Класс заявки: | ТранспСредство |
Предположим, что из сегмента ожидания погрузки через объект enter2 поступила заявка-самолёт типа А в объект split. Объектом split заявка размножается на число заявок, равное количеству контейнеров, которые должны быть погружены в самолёт. Заявка-оригинал из модели не выводится.
Таким образом, далее каждая заявка интерпретируется как заявка-контейнер. Тем не менее, каждой копии присваиваются значения полей оригинала, так как после погрузки все заявки-контейнеры, кроме последней, будут выведены из модели.
Заявки-контейнеры занимают очередь к объекту погрузка1А, имитирующему непосредственно погрузку контейнеров в самолёт типа А в аэропорту 1. При покидании очереди выполняется код entity.разные=срВрПогрКонтСам1А, записывающий в поле с именем разные заявки-контейнера среднее время погрузки одного контейнера.
После объекта погрузка1А, на выходе которого ведётся счёт погруженных контейнеров (погрКонтА1++), заявки-контейнеры входят в объект selectOutput1.
Этот объект проверяет условие (entity.колГрузоМест ==погрКонтБ1): полная ли загрузка самолёта? При выполнении этого условия, а оно будет выполнено тогда, когда будет загружен последний контейнер, последняя заявка теперь уже в качестве заявки-самолёта поступит в объект наВзлёт (exit).
Из этого объекта заявка-самолёт типа А с полным грузом поступит в сегмент имитации полёта из аэропорта 1 в аэропорт 2.
Аналогичным образом имитируется погрузка в самолёт типа Б. Имитация начинается с поступления заявки-самолёта через объект enter3 в объект split1.
Сегмент Полёт из аэропорта 1 в аэропорт 2 предназначен для имитации полёта самолётов с грузом из аэропорта 1 в аэропорт 2.
Создайте сегмент.
Презентация перетащите элемент Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 830, Y: 50, Ширина: 240, Высота: 200.
text и в поле Текст: введите Полёт из аэропорта 1 в аэропорт 2.
Основной библиотеки по два объекта enter, delay и один объект exit. Поместите и соедините их так, как на рис. 9.8.
Предположим, что поступила заявка-самолёт типа А в объект enter4 и далее в объект с именем полётА12 (delay). Идентификатор полётА12 означает, что объект имитирует непосредственно полёт из аэропорта 1 в аэропорт 2. В аэропорту 2 заявка-самолёт входит в сегмент ожидания разгрузки.
(рис 9.8) Сегмент Полёт из аэропорта 1 в аэропорт 2
| Свойство | Значения |
|---|---|
enter4 | |
| Класс заявки: | ТранспСредство |
enter5 | |
| Класс заявки: | ТранспСредство |
delay | |
| Имя: | полётА12 |
| Класс заявки: | ТранспСредство |
| Задержка задаётся | Явно |
| Время задержки | entity.врПолёта |
| Вместимость | колСамТипА |
| Включить сбор статистики | Установить флажок |
delay1 | |
| Имя: | ПолётБ12 |
| Класс заявки: | ТранспСредство |
| Задержка задаётся | Явно |
| Время задержки | entity.врПолёта |
| Вместимость | колСамТипБ |
| Включить сбор статистики | Установить флажок |
exit | |
| Действие при выходе | if (entity.типТрансп==1) enter10.take(entity); |
else enter11.take(entity); | |
Сегмент Ожидание разгрузки в аэропорту 1 предназначен для имитации ожидания разгрузки самолётов, прибывающих с грузом из аэропорта 2.
Создайте сегмент.
Презентация перетащите элемент Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 270, Y: 270, Ширина: 310, Высота: 200.
text и в поле Текст: введите Ожидание разгрузки в аэропорту 1.
Основной библиотеки по два объекта enter, queue, hold и один объект exit. Поместите и соедините их так, как на рис. 9.9.
Предположим, что поступила заявка-самолёт из аэропорта 2 в объект enter6. Если средства разгрузки свободны, то есть выполняется условие (разгрузка1А.size()==0), разблокировывается объект hold2 и заявка-самолёт входит в объект наРазгрузку1 и далее в сегмент имитации разгрузки.
(рис 9.9) Сегмент Ожидание разгрузки в аэропорту 1
| Свойство | Значения |
|---|---|
enter6 | |
| Класс заявки: | ТранспСредство |
| Действие при входе | if (разгрузка1А.size()==0) hold2.setBlocked(false); |
enter7 | |
| Класс заявки: | ТранспСредство |
| Действие при входе | if (разгрузка1Б.size()==0) hold3.setBlocked(false); |
queue | |
| Имя: | стоянкаРазгр1А |
| Класс заявки: | ТранспСредство |
| Вместимость | колСамТипА |
| Включить сбор статистики | Установить флажок |
queue1 | |
| Имя: | стоянкаРазгр1Б |
| Класс заявки: | ТранспСредство |
| Вместимость | колСамТипБ |
| Включить сбор статистики | Установить флажок |
hold2 | |
| Класс заявки: | ТранспСредство |
| Изначально заблокирован | Установить флажок |
hold3 | |
| Класс заявки: | ТранспСредство |
| Изначально заблокирован | Установить флажок |
exit | |
| Имя: | наРазгрузку1 |
| Действие при выходе | if (entity.типТрансп==1) {hold2.setBlocked(true); |
enter8.take(entity);} | |
else {hold3.setBlocked(true); | |
enter9.take(entity);} | |
При выходе из объекта наРазгрузку1 блокируется объект hold2 кодом hold2.setBlocked(true), так как теперь средства разгрузки самолётов типа А аэропорта 1 заняты.
Если поступает заявка-самолёт типа Б, то она входит в сегмент через объект enter7. Имитация ожидания разгрузки заявкой-самолётом типа Б производится аналогично.
Сегмент Разгрузка самолётов в аэропорту 1 предназначен для имитации разгрузки самолётов, прибывающих с грузом из аэропорта 2.
Создайте сегмент.
Презентация перетащите элемент Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 600, Y: 270, Ширина: 470, Высота: 200.
text и в поле Текст: введите Разгрузка самолётов в аэропорту 1.
Основной библиотеки по два объекта enter, split, queue, delay, selectOutput и по одному объекту exit и sink. Поместите и соедините их так, как на рис. 9.10.
Предположим, что из сегмента ожидания разгрузки через объект enter8 поступила заявка-самолёт типа А в объект split2. Объектом split2 заявка размножается на число заявок, равное количеству контейнеров, которые должны быть выгружены из самолёта. Заявка-оригинал из модели не выводится.
Таким образом, далее каждая заявка интерпретируется как заявка-контейнер. Тем не менее, каждой копии присваиваются значения полей оригинала, так как после выгрузки все заявки-контейнеры, кроме последней, будут выведены из модели. Однако неизвестно какая из заявок будет последней - оригинал или копия. Поэтому и присваиваются копиям значения полей оригинала.
(рис 9.10) Сегмент Разгрузка самолётов в аэропорту 1
| Свойство | Значения |
|---|---|
enter8 | |
| Класс заявки: | ТранспСредство |
enter9 | |
| Класс заявки: | ТранспСредство |
split2 | |
| Классы заявок: | |
| Оригинал, Копия | ТранспСредство, |
ТранспСредство | |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | new ТранспСредство() |
| Действие при выходе копии | entity.типТрансп= |
original.типТрансп; | |
entity.колГрузоМест= | |
original.колГрузоМест; | |
entity.врПолёта= | |
original.врПолёта; | |
entity.разные= | |
original.разные; | |
split3 | |
| Классы заявок: | |
| Оригинал, Копия | ТранспСредство, |
ТранспСредство | |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | new ТранспСредство() |
| Действие при выходе копии | entity.типТрансп= |
original.типТрансп; | |
entity.колГрузоМест= | |
original.колГрузоМест; | |
entity.врПолёта= | |
original.врПолёта; | |
entity.разные =original.разные; | |
queue | |
| Имя: | очРазгр1А |
| Класс заявки: | ТранспСредство |
| Максимальная вместимость | Установить флажок |
| Действие при выходе | entity.разные= |
срВрВыгрКонтСам1А | |
| Включить сбор статистики | Установить флажок |
queue1 | |
| Имя: | очРазгр1Б |
| Класс заявки: | ТранспСредство |
| Максимальная вместимость | Установить флажок |
| Действие при выходе | entity.разные= |
срВрВыгрКонтСам1А | |
| Включить сбор статистики | Установить флажок |
delay | |
| Имя: | разгрузка1А |
| Класс заявки: | ТранспСредство |
| Задержка задаётся | Явно |
| Время задержки | exponential |
(1/entity.разные) | |
| Вместимость | выгрКонтСам1А |
| Действие при выходе | выгрКонтА1++; |
| Включить сбор статистики | Установить флажок |
delay1 | |
| Имя: | разгрузка1Б |
| Класс заявки: | ТранспСредство |
| Задержка задаётся | Явно |
| Время задержки | exponential |
(1/entity.разные) | |
| Вместимость | выгрКонтСам1Б |
| Действие при выходе | выгрКонтБ1++; |
| Включить сбор статистики | Установить флажок |
selectOutput3 | |
| Класс заявки: | ТранспСредство |
Выход true выбирается | При выполнении условия |
| Условие | entity.колГрузоМест== |
выгрКонтА1 | |
Действие при выходе (true) | выгрКонтА1=0; |
достКА21+= | |
entity.колГрузоМест; | |
hold2.setBlocked(false); | |
selectOutput4 | |
| Класс заявки: | ТранспСредство |
Выход true выбирается | При выполнении условия |
| Условие | entity.колГрузоМест== |
выгрКонтБ1 | |
Действие при выходе (true) | выгрКонтБ1=0; |
достКБ21+= | |
entity.колГрузоМест; | |
hold3.setBlocked(false); | |
exit | |
| Имя: | наОжПогр1 |
| Класс заявки: | ТранспСредство |
| Действие при выходе | достК21+= |
entity.колГрузоМест; | |
if (entity.типТрансп==1) enter.take(entity); | |
else enter1.take(entity); | |
sink2 | |
| Класс заявки: | ТранспСредство |
Заявки-контейнеры занимают очередь к объекту разгрузка1А, имитирующему непосредственно выгрузку контейнеров из самолёта типа А в аэропорту 1. При покидании очереди выполняется код entity.разные=срВрВыгрКонтСам1А, записывающий в поле с именем разные заявки-контейнера среднее время выгрузки одного контейнера.
После объекта разгрузка1А, на выходе которого ведётся счёт выгруженных контейнеров (выгрКонтА1++), заявки-контейнеры входят в объект selectOutput3.
Этот объект проверяет условие (entity.колГрузоМест ==выгрКонтА1): полная ли выгрузка самолёта? При выполнении этого условия, а оно будет выполнено тогда, когда будет выгружен последний контейнер, последняя заявка теперь уже в качестве заявки-самолёта поступит в объект наОжПогр1 (exit).
При выходе из объекта selectOutput3 переменной выгрКонтА1 присваивается значение 0, так она должна участвовать в очередной имитации выгрузки. Кроме того, разблокировывается объект hold2, так как теперь средства выгрузки аэропорта 1 самолётов типа А свободны
Из объекта наОжПогр1 (exit) заявка-самолёт типа А поступит в сегмент имитации ожидания погрузки самолётов типа А аэропорта 1.
Аналогичным образом имитируется выгрузка из самолёта типа Б. Имитация начинается с поступления заявки-самолёта через объект enter9 в объект split3.
Сегменты, имитирующие функционирование аэропорта 2, построены в основном также, как и сегменты аэропорта 1, поэтому будут отмечены лишь некоторые особенности.
Сегмент Поступление и учёт контейнеров в аэропорту 2 предназначен для имитации приёма поступающих от источников грузов (контейнеров), учёта их, определения необходимого количества контейнеров для загрузки соответствующего самолёта и формирования команды для отправки этого самолёта на погрузку контейнеров (при наличии самолёта).
Презентация перетащите элемент Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 30, Y: 830, Ширина: 290, Высота: 190.
text и в поле Текст: введите Поступление и учёт контейнеров в аэропорту 2.
Основной библиотеки по одному объекту source, selectOutput5 (имя selectOutput5) и sink. Поместите и соедините их так, как на рис. 9.11.Установите свойства объектов согласно табл. 9.10.
(рис 9.11) Сегмент Поступление и учёт контейнеров в аэропорту 2
| Свойство | Значения |
|---|---|
source | |
| Имя: | истГрузов2 |
| Класс заявки: | ГрузАэропорт2 |
| Заявки прибывают согласно | Времени между прибытиями |
| Время между прибытиями | Exponential |
(1/срВрПостКонт2) | |
| Количество заявок, прибывающих за один раз | |
| Новая заявка | 1 |
| Действие при выходе | new ГрузАэропорт2() |
d=(uniform_discr(минКонтПост2, | |
максКонтПост2)); | |
всегоПостК2+=d; | |
текНалК2+=d; | |
selectOutput5 | |
| Класс заявки: | ГрузАэропорт2 |
| Использовать: | Условия |
| Условие 0 | текНалК2<грузПодСамА |
| Условие 1 | стоянкаПогр2А.size()>0 |
погрузка2А.size()==0 | |
| Действие при выходе 1 | текНалК2-=грузПодСамА; |
hold6.setBlocked(false); | |
| Условие 2 | текНалК2<грузПодСамБ |
| Условие 3 | стоянкаПогр2Б.size()>0 |
погрузка2Б.size()==0 | |
| Действие при выходе 3 | текНалК2-=грузПодСамБ; |
hold7.setBlocked(false); | |
sink | |
| Класс заявки: | ГрузАэропорт2 |
Объект source с именем истГрузов2 генерирует заявку-партию класса ГрузАэропорт2 поступивших контейнеров. Заявка-партия поступает на объект selectOutput5.
Описанная в п. 9.1.8.2 последовательность проверок условий производится и в данном сегменте каждый раз при появлении в модели очередной заявки-партии. Все заявки класса ГрузАэропорт2 также выводятся из модели.
В данном сегменте, как и в п. 9.1.8.2, при выполнении подобных условий, только относительно аэропорта 2, формируются команды на отправку самолётов на погрузку.
Сегмент Ожидание разгрузки в аэропорту 2 предназначен для имитации ожидания разгрузки самолётов, прибывших из аэропорта 1.
Создайте сегмент.
Презентация перетащите элемент Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 30, Y: 1040, Ширина: 310, Высота: 220.
text и в поле Текст: введите Ожидание разгрузки в аэропорту 2.
Основной библиотеки по два объекта enter, queue, hold и один объект exit. Поместите и соедините их так, как на рис. 9.12.
(рис 9.12) Сегмент Ожидание разгрузки в аэропорту 2
Предположим, что поступила заявка-самолёт в объект enter11. В нём проверяется условие: средства разгрузки свободны (разгрузка2Б.size()==0) и на стоянке нет ожидающих разгрузку самолётов? Если да, то разблокировывается объект hold5 и заявка-самолёт типа Б входит в объект наРазгрузку2 и далее в сегмент имитации разгрузки аэропорта 2.
| Свойство | Значения |
|---|---|
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 предназначен для имитации разгрузки самолётов, прибывающих из аэропорта 1.
(рис 9.13) Сегмент Разгрузка самолётов в аэропорту 2
Создайте сегмент.
Презентация перетащите элемент Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 360, Y: 1040, Ширина: 470, Высота: 220.
text и в поле Текст: введите Разгрузка самолётов в аэропорту 2.
Основной библиотеки по два объекта enter, split, queue, delay, selectOutput и по одному объекту exit и sink. Поместите и соедините их так, как на рис. 9.13.
Предположим, что из сегмента ожидания разгрузки (п. 9.1.9.2) через объект enter13 поступила заявка-самолёт типа Б в объект split5. Объектом split5 заявка размножается на число заявок, равное количеству контейнеров, которые должны быть выгружены из самолёта. Заявка-оригинал из модели не выводится. Поэтому количество копий на 1 меньше, чем количество выгружаемых контейнеров (entity.колГрузоМест-1).
Таким образом, также, как и в соответствующем сегменте аэропорта 2, далее каждая заявка интерпретируется как заявка-контейнер. Тем не менее, каждой копии присваиваются значения полей оригинала, так как после выгрузки все заявки-контейнеры, кроме последней, будут выведены из модели. Однако неизвестно какая из заявок будет последней - оригинал или копия. Поэтому также и присваиваются копиям значения полей оригинала.
| Свойство | Значения |
|---|---|
enter12 | |
| Класс заявки: | ТранспСредство |
enter13 | |
| Класс заявки: | ТранспСредство |
split4 | |
| Классы заявок: | |
| Оригинал, Копия | ТранспСредство, |
ТранспСредство | |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | new ТранспСредство() |
| Действие при выходе копии | entity.типТрансп= |
original.типТрансп; | |
entity.колГрузоМест= | |
original.колГрузоМест; | |
entity.врПолёта= | |
original.врПолёта; | |
entity.разные = | |
original.разные; | |
split5 | |
| Классы заявок: | |
| Оригинал, Копия | ТранспСредство, |
ТранспСредство | |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | new ТранспСредство() |
| Действие при выходе копии | 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.колГрузоМест== |
выгрКонтА2 | |
Действие при выходе (true) | выгрКонтА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 предназначен для имитации ожидания погрузки самолётов, прибывших из аэропорта 1, после разгрузки в аэропорту 2.
Создайте сегмент.
Презентация перетащите элемент Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 340, Y: 830, Ширина: 290, Высота: 190.
text и в поле Текст: введите Ожидание погрузки в аэропорту 2.
Основной библиотеки по два объекта enter, queue, hold и один объект exit. Поместите и соедините их так, как на рис. 9.14.
Данный сегмент отличается от аналогичного сегмента аэропорта 1 тем, что он не предназначен в том числе и для первичного приёма самолётов. Заявки-самолёты поступают на имитируемые объектами queue стоянки стоянкаПогр2А и стоянкаПогр2Б соответственно только после разгрузки.
Элементы hold6 и hold7 также изначально заблокированы, поэтому заявки-самолёты дальше стоянок не проходят. Элементы hold6 и hold7 также управляются сегментом Поступление и учёт контейнеров в аэропорту 2.
(рис 9.14) Сегмент Ожидание погрузки в аэропорту 2
| Свойство | Значения |
|---|---|
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);} | |
Сегмент Погрузка контейнеров в аэропорту 2 предназначен для имитации погрузки в самолёты и отправки загруженных самолётов в полёт в аэропорт назначения.
Создайте сегмент Погрузка контейнеров в аэропорту 2.
Презентация перетащите элемент Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 350, Y: 50, Ширина: 460, Высота: 200.
text и в поле Текст: введите Погрузка контейнеров в аэропорту 1.
Основной библиотеки по два объекта enter, split, queue, delay, selectOutput и по одному объекту exit и sink. Поместите и соедините их так, как на рис. 9.15.
(рис 9.15) Сегмент Погрузка контейнеров в аэропорту 2
| Свойство | Значения |
|---|---|
enter2 | |
| Класс заявки: | ТранспСредство |
enter3 | |
| Класс заявки: | ТранспСредство |
split6 | |
| Классы заявок: | |
| Оригинал, Копия | ТранспСредство, |
ТранспСредство | |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | new ТранспСредство() |
| Действие при выходе копии | entity.типТрансп= |
original.типТрансп; | |
entity.колГрузоМест= | |
original.колГрузоМест; | |
entity.tPolet= | |
original.tPolet; | |
entity.разные= original.разные; | |
split7 | |
| Классы заявок: | |
| Оригинал, Копия | ТранспСредство, |
ТранспСредство | |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | new ТранспСредство() |
| Действие при выходе копии | entity.типТрансп= |
original.типТрансп; | |
entity.колГрузоМест= | |
original.колГрузоМест; | |
entity.врПолёта= | |
original.врПолёта; | |
entity.разные= original.разные; | |
queue | |
| Имя: | очПогр2А |
| Класс заявки: | ТранспСредство |
| Максимальная вместимость | Установить флажок |
| Действие при выходе | entity.разные= |
срВрПогрКонтСам2А; | |
| Включить сбор статистики | Установить флажок |
queue1 | |
| Имя: | очПогр2Б |
| Класс заявки: | ТранспСредство |
| Максимальная вместимость | Установить флажок |
| Действие при выходе | entity.разные= |
срВрПогрКонтСам2Б; | |
| Включить сбор статистики | Установить флажок |
delay | |
| Имя: | Погрузка2А |
| Класс заявки: | ТранспСредство |
| Задержка задаётся | Явно |
| Время задержки | eexponential |
(1/entity.разные) | |
| Вместимость | погрКонтСам2А |
| Действие при выходе | погрКонтА2++; |
| Включить сбор статистики | Установить флажок |
delay1 | |
| Имя: | Погрузка2Б |
| Класс заявки: | ТранспСредство |
| Задержка задаётся | Явно |
| Время задержки | exponential |
(1/entity.разные) | |
| Вместимость | погрКонтСам2Б |
| Действие при выходе | погрКонтБ2++; |
| Включить сбор статистики | Установить флажок |
selectOutput8 | |
| Класс заявки: | ТранспСредство |
Выход true выбирается | При выполнении условия |
| Условие | entity.колГрузоМест |
==погрКонтА2 | |
Действие при выходе (true) | entity.врПолёта= |
normal(отклВрПолётаА21, | |
срВрПолётаА21); | |
погрКонтА2=0; | |
selectOutput9 | |
| Класс заявки: | ТранспСредство |
Выход true выбирается | При выполнении условия |
| Условие | entity.колГрузоМест |
==погрКонтБ2 | |
Действие при выходе (true) | entity.врПолёта= |
normal(отклВрПолётаБ21, | |
срВрПолётаБ21); | |
погрКонтБ2=0; | |
exit | |
| Имя: | наВзлёт21 |
| Класс заявки: | ТранспСредство |
| Действие при выходе | if (entity.типТрансп==1) enter18.take(entity); |
else enter19.take(entity); | |
sink | |
| Класс заявки: | ТранспСредство |
Сегмент Полёт из аэропорта 2 в аэропорт 1 предназначен для имитации полёта самолётов с грузом из аэропорта 2 в аэропорт 1.
Презентация перетащите элемент Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 850, Y: 1040, Ширина: 250, Высота: 220.
text и в поле Текст: введите Полёт из аэропорта 2 в аэропорт 1.
(рис 9.16) Сегмент Полёт из аэропорта 2 в аэропорт 1
Основной библиотеки по два объекта enter, delay и один объект exit. Поместите и соедините их так, как на рис. 9.16.
| Свойство | Значения |
|---|---|
enter18 | |
| Класс заявки: | ТранспСредство |
enter19 | |
| Класс заявки: | ТранспСредство |
delay | |
| Имя: | полётА21 |
| Класс заявки: | ТранспСредство |
| Задержка задаётся | Явно |
| Время задержки | entity.врПолёта |
| Вместимость | колСамТипА |
| Включить сбор статистики | Установить флажок |
delay1 | |
| Имя: | ПолётБ21 |
| Класс заявки: | ТранспСредство |
| Задержка задаётся | Явно |
| Время задержки | entity.врПолёта |
| Вместимость | колСамТипБ |
| Включить сбор статистики | Установить флажок |
exit | |
| Имя: | наОжРазгр1 |
| Действие при выходе | if (entity.типТрансп==1) enter6.take(entity); |
else enter7.take(entity); | |
Для вывода результатов моделирования воспользуйтесь событием, происходящим по истечении таймаута.
Модель на область просмотра Результаты как на рис. 9.3. Измените его имя на ОбрабРезультМодел. Нажмите Enter.
Отображать имя.
Tип события: выберите По таймауту.
Режим: Срабатывает один раз.
Время срабатывания (абсолютное) 720000.
Действие введите Java код, который будет выполняться при появлении этого события.
коэфДост21=достК21/всегоПостК2; коэфДост12=достК12/всегоПостК1; коэфПогр1А=погрузка1А.statsUtilization.mean(); коэфПогр1Б=погрузка1Б.statsUtilization.mean(); коэфПогр2А=погрузка2А.statsUtilization.mean(); коэфПогр2Б=погрузка2Б.statsUtilization.mean(); коэфРазгр1А=разгрузка1А.statsUtilization.mean(); коэфРазгр1Б=разгрузка1Б.statsUtilization.mean(); коэфРазгр2А=разгрузка2А.statsUtilization.mean(); коэфРазгр2Б=разгрузка2Б.statsUtilization.mean(); коэфПолётА12=полётА12.statsUtilization.mean(); коэфПолётБ12=полётБ12.statsUtilization.mean(); коэфИспСам1А=коэфПогр1А+коэфРазгр1А+коэфПолётА12; коэфИспСам1Б=коэфПогр1Б+коэфРазгр1Б+коэфПолётБ12; коэфПолётА21=полётА21.statsUtilization.mean(); коэфПолётБ21=полётБ21.statsUtilization.mean(); коэфИспСам2А=коэфПогр2А+коэфРазгр2А+коэфПолётА21; коэфИспСам2Б=коэфПогр2Б+коэфРазгр2Б+коэфПолётБ21; коэфИспСамА=(коэфИспСам1А+коэфИспСам2А)/2; коэфИспСамБ=(коэфИспСам1Б+коэфИспСам2Б)/2; коэфДост=(достК12+достК21)/(всегоПостК1+всегоПостК2); коэфИспСам=(коэфИспСамА+коэфИспСамБ)/2;
Прежде чем запустить модель:
Проекты выделите ВоздушныеПеревозки.
Основные в поле Единицы модельного времени: установите часы.
Проекты выделите Simulation: Main.
Основные установите Фиксированное начальное число (воспроизводимые "прогоны").
Начальное число: введите 15657 (можно ввести и другое начальное число, тогда результаты моделирования будут отличаться от тех, что получены при рекомендуемом начальном числе и показаны на рис. 9.17).
Модельное время. В поле Остановить: выберите В заданное время.
Конечное время: введите 720000.0. Время моделирования увеличено в 1000 раз по числу прогонов модели в GPSS World. Таким образом, моделируется функционирование системы воздушных перевозок в течение 720 часов (30-ти суток).
При правильном построении модели вы получите результаты, показанные на рис. 9.17.
(рис 9.17) Результаты моделирования
Видно, что коэффициент доставки системы воздушных перевозок при принятых её характеристиках и потоках грузов составляет коэфДост = 0,31 при среднем коэффициенте использования самолётов обоих типов коэфИспСам = 0,638. Коэффициент использования самолёта типа Б (0,481) ниже коэфИспСамА = 0,795.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.