Система авиаперевозок включает два аэропорта. Перевозки выполняются из первого аэропорта во второй и обратно. Время полета между аэропортами распределено по нормальному закону.
Грузы в каждый аэропорт поступают партиями в контейнерах. Количество контейнеров в партии распределено по равномерному закону. Интервалы времени между поступлениями партий грузов распределены по экспоненциальному закону.
Для авиаперевозок используют два типа самолетов А и Б и грузоподъемностями 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 |
Построить имитационную модель функционирования системы воздушных перевозок с целью определения следующих её показателей:
А и Б в аэропорты 1 и 2;
А и Б в аэропортах 1 и 2;
Исследовать влияние на показатели функционирования системы воздушных перевозок её характеристик, выявить среди них существенные и несущественные.
Сделать выводы о построении эффективной системы воздушных перевозок и возможных направлениях совершенствования после введения в эксплуатацию.
Представим систему воздушных перевозок в виде СМО (Рис. 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 (Рис. 9.4) и аэропорта 2 (Рис. 9.5).
(рис 9.4) Сегмент имитации функционирования аэропорта 1
(рис 9.5) Сегмент имитации функционирования аэропорта 2
Сегмент предназначен для имитации первоначального (последующего) прибытия самолётов в аэропорт 1, размещения их на стоянках, ожидания и отправки на погрузку (разгрузку) контейнеров.
Презентация перетащите элемент Прямоугольник.
Местоположение и размер панели Свойства введите в поля X: 30, Y: 50, Ширина: 310, Высота: 200.
text и в поле Текст: введите Прибытие самолётов в аэропорт 1. Ожидание погрузки.
Библиотеки моделирования процессов по два объекта source, enter, queue, hold и один объект exit. Поместите и соедините их так, как на Рис. 9.6.При построении модели вам придётся воспользоваться Java-кодом, в котором потребуются дополнительные поля заявок. Для этого вы должны создать нестандартный тип заявки с дополнительными полями для записи и хранения параметров, о которых упоминалось ранее (см. п. 9.1.4).
Создайте тип заявок ТранспСредство.
source.
Проект щёлкните правой кнопкой мыши элемент модели верхнего уровня дерева и выберите Создать/Java класс.
Новый Java класс. В поле Имя: введите имя нового класса: ТранспСредство.
Базовый класс: выберите из выпадающего списка Entity в качестве базового класса. Щёлкните кнопку Далее.
Мастера создания Java класса. Добавьте поля Java класса, показанные на Рис. 9.7.
Создать конструктор и Создать метод toString (). Щёлкните Готово. Закройте редактор кода.
Преобразовать Java класс в тип агента.
ГрузАэропорт1 и ГрузАэропорт2 с дополнительными полями колГрузоМест1 и колГрузоМест2 типа int соответственно. Эти классы заявок, как вы помните, будут использоваться при имитации поступления партий грузов в аэропорты 1 и 2 соответственно.
(рис 9.6) Сегмент Прибытие самолётов в аэропорт 1
(рис 9.7) Поля нового Java класса ТранспСредство
Продолжите построение сегмента имитации Прибытие самолётов в аэропорт 1 и ожидания погрузки.
Поочередно выделите объекты этого сегмента и установите их свойства согласно Табл. 9.4.
| Свойство | Значения |
|---|---|
| source | |
| Имя: | самолёт1 |
| Тип заявки: | ТранспСредство |
| Прибывают согласно | Времени между прибытиями |
| Время между прибытиями | 0 |
| Количество заявок, прибывающих за один раз | колСамТипА |
| Ограниченное количество прибытий | Установить флажок |
| Максимальное количество прибытий | 1 |
| Новая заявка | ТранспСредство |
| Действия При выходе: | entity.типТрансп=1; |
| entity.колГрузоМест=грузПодСамА; | |
| source1 | |
| Имя: | самолёт2 |
| Тип заявки: | ТранспСредство |
| Прибывают согласно | Времени между прибытиями |
| Время между прибытиями | 0 |
| Количество заявок, прибывающих за один раз | колСамТипБ |
| Ограниченное количество прибытий | Установить флажок |
| Максимальное количество прибытий | 1 |
| Новая заявка | ТранспСредство |
| Действия При выходе: | entity.типТрансп=2; |
| entity.колГрузоМест= грузПодСамБ; | |
| queue | |
| Имя: | стоянкаПогр1А |
| Тип заявки: | ТранспСредство |
| Вместимость | колСамТипА |
| Включить сбор статистики | Установить флажок |
| queue1 | |
| Имя: | стоянкаПогр1Б |
| Тип заявки: | ТранспСредство |
| Вместимость | колСамТипБ |
| Включить сбор статистики | Установить флажок |
| hold | |
| Тип заявки: | ТранспСредство |
| Изначально заблокирован | Установить флажок |
| hold1 | |
| Тип заявки: | ТранспСредство |
| Изначально заблокирован | Установить флажок |
| exit | |
| Имя: | наПогрузку1 |
| Тип заявки: | ТранспСредство |
| Действия При выходе: | if (entity.типТрансп==1) {hold.setBlocked(true); |
| enter2.take(entity);} | |
| else {hold1.setBlocked(true); | |
| enter3.take(entity);} | |
| enter | |
| Тип заявки: | ТранспСредство |
| enter1 | |
| Тип заявки: | ТранспСредство |
Остановимся на замысле построения сегмента.
При запуске модели источники самолёт1 и самолёт2 генерируют число заявок, равное количеству самолётов типа А и типа Б соответственно. На этом активность источников прекращается.
Эти заявки-самолёты поступают на имитируемые объектами queue стоянки стоянкаПогр1А и стоянкаПогр1Б соответственно.
Элементы hold и hold1 изначально заблокированы, поэтому заявки-самолёты дальше не проходят.
Элементы hold и hold1 управляются сегментом Поступление и учёт контейнеров в аэропорту 1. Как только в аэропорт 1 поступит количество контейнеров, достаточное для полной загрузки самолёта типа А, и этот самолёт имеется на стоянке, а также нет самолётов типа А на погрузке, формируется команда на разблокировывание элемента hold.
Заявка-самолёт поступает на объект наПогрузку1 (объект exit) и далее на сегмент Погрузка контейнеров в аэропорту 1.
Если ожидающих погрузку самолётов типа А нет, а количество контейнеров достаточно для полной загрузки самолёта типа Б и он имеется в наличии, то аналогично формируется команда на разблокировывание элемента hold1. Заявка-самолёт также поступает на объект наПогрузку1 (объект exit) и далее на сегмент Погрузка контейнеров в аэропорту 1.
Элементы enter и enter1 увеличивают число входов объектов queue и queue1 соответственно. Через них поступают в последующем заявки-самолёты, прибывшие из аэропорта 2, разгруженные и теперь отправленные на стоянки ожидания погрузки в аэропорту 1.
Сегмент Поступление и учёт контейнеров в аэропорту 1 предназначен для имитации приёма поступающих от источников грузов (контейнеров), учёта их, определения необходимого количества контейнеров для загрузки соответствующего самолёта и формирования команды для отправки этого самолёта на погрузку контейнеров.
Создайте этот сегмент.
Презентация перетащите элемент Прямоугольник.
Местоположение и размер панели Свойства введите в поля X: 30, Y: 270, Ширина: 220, Высота: 200.
text и в поле Текст: введите Поступление и учёт контейнеров в аэропорту 1.
Библиотеки моделирования процессов по одному объекту source, selectOutput5 (имя selectOutput) и sink. Поместите и соедините их так, как на Рис. 9.8.Установите свойства объектов согласно Табл. 9.5.
Объект source с именем истГрузов1 генерирует заявку-партию класса ГрузАэропорт1 поступивших контейнеров, число которых в партии распределено по равномерному закону. Заявка-партия поступает на объект selectOutput.
В условии 1 проверяется наличие числа контейнеров, достаточного для полной загрузки самолёта типа А. Если число контейнеров недостаточно, заявка-партия уничтожается. Так продолжается до тех пор, пока не выполнится условие 1.
(рис 9.8) Сегмент Поступление и учёт контейнеров в аэропорту 1
| Свойство | Значения |
|---|---|
| source | |
| Имя: | истГрузов1 |
| Тип заявки: | ГрузАэропорт1 |
| Прибывают согласно | Времени между прибытиями |
| Время между прибытиями | exponential(1/срВрПостКонт1) |
| Количество заявок, прибывающих за один раз | 1 |
| Новая заявка | ГрузАэропорт1 |
| Действия При выходе | a=(uniform_discr(минКонтПост1,максКонтПост1)); |
| всегоПостК1+=a; | |
| текНалКонт1+=a; | |
| selectOutput | |
| Тип заявки: | ГрузАэропорт1 |
| Использовать: | Условия |
| Условие 1 | текНалК1<грузПодСамА |
| Условие 2 | стоянкаПогр1А.size()>0 |
| погрузка1А.size()==0 | |
| Действия При выходе 2 | текНалК1-=грузПодСамА; |
| hold.setBlocked(false); | |
| Условие 3 | текНалК1<грузПодСамБ |
| Условие 4 | стоянкаПогр1Б.size()>0 |
| погрузка1Б.size()==0 | |
| Действия При выходе 4 | текНалК1-=грузПодСамБ; |
| hold1.setBlocked(false); | |
| sink | |
| Тип заявки: | ГрузАэропорт1 |
После выполнения условия 1 проверяется условие 2: наличие самолётов типа А на стоянке ожидания погрузки и незанятость пунктов погрузки.
При выполнении условия 2 формируется команда на разблокировывание элемента hold (см. п. 9.1.8.2) и самолёт типа А отправляется на погрузку.
Если условие 2 не выполняется, например, при отсутствии свободного самолёта типа А, проверяется условие 3.
Если условие 3 не выполняется, то есть недостаточно контейнеров для полной загрузки самолёта типа Б, заявка-партия уничтожается.
Если условие 3 выполняется (поступило число контейнеров, достаточное для полной загрузки самолёта типа Б), проверяется условие 4: наличие самолётов типа Б на стоянке ожидания погрузки и незанятость пунктов погрузки.
Если условие 4 не выполняется, заявка-партия уничтожается.
При выполнении условия 4 формируется команда на разблокировывание элемента hold1 (см. п. 9.1.8.2) и самолёт типа Б отправляется на погрузку.
Описанная последовательность проверок производится каждый раз при появлении в модели очередной заявки-партии. Все заявки типа ГрузАэропорт1 выводятся из модели.
Сегмент Погрузка контейнеров в аэропорту 1 предназначен для имитации погрузки в самолёты и отправки загруженных самолётов в полёт в аэропорт назначения.
Создайте сегмент Погрузка контейнеров в аэропорту 1.
Презентация перетащите элемент Прямоугольник.
Местоположение и размер панели Свойства введите в поля X: 350, Y: 50, Ширина: 460, Высота: 200.
(рис 9.9) Сегмент Погрузка контейнеров в аэропорту 1
text и в поле Текст: введите Погрузка контейнеров в аэропорту 1.
Библиотеки моделирования процессов по два объекта enter, split, queue, delay, selectOutput и по одному объекту exit и sink. Поместите и соедините их так, как на Рис. 9.9.
| Свойство | Значения |
|---|---|
| enter2 | |
| Тип заявки: | ТранспСредство |
| enter3 | |
| Тип заявки: | ТранспСредство |
| split | |
| Типы заявок: | |
| Оригинал, Копия | ТранспСредство, ТранспСредство |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | ТранспСредство |
| Действия При выходе копии: | entity.типТрансп=original.типТрансп; |
| entity.колГрузоМест=original.колГрузоМест; | |
| entity.tPolet=original.tPolet; | |
| entity.разные =original.разные; | |
| split1 | |
| Типы заявок: | |
| Оригинал, Копия | ТранспСредство, ТранспСредство |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | ТранспСредство |
| Действия При выходе копии: | 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.10.
Предположим, что поступила заявка-самолёт типа А в объект enter4 и далее в объект с именем полётА12 (delay). Идентификатор полётА12 означает, что объект имитирует непосредственно полёт из аэропорта 1 в аэропорт 2. В аэропорту 2 заявка-самолёт входит в сегмент ожидания разгрузки.
(рис 9.10) Сегмент Полёт из аэропорта 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.11.
Предположим, что поступила заявка-самолёт из аэропорта 2 в объект enter6. Если средства разгрузки свободны, то есть выполняется условие (разгрузка1А.size()==0), разблокировывается объект hold2 и заявка-самолёт входит в объект наРазгрузку1 и далее в сегмент имитации разгрузки.
(рис 9.11) Сегмент Ожидание разгрузки в аэропорту 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.
split, queue, delay, selectOutput и по одному объекту exit и sink. Поместите и соедините их так, как на Рис. 9.12.
Предположим, что из сегмента ожидания разгрузки через объект enter8 поступила заявка-самолёт типа А в объект split2. Объектом split2 заявка размножается на число заявок, равное количеству контейнеров, которые должны быть выгружены из самолёта. Заявка-оригинал из модели не выводится.
Таким образом, далее каждая заявка интерпретируется как заявка-контейнер. Тем не менее, каждой копии присваиваются значения полей оригинала, так как после выгрузки все заявки-контейнеры, кроме последней, будут выведены из модели. Однако неизвестно какая из заявок будет последней - оригинал или копия. Поэтому и присваиваются копиям значения полей оригинала.
(рис 9.12) Сегмент Разгрузка самолётов в аэропорту 1
| Свойство | Значения |
|---|---|
| enter8 | |
| Тип заявки: | ТранспСредство |
| enter9 | |
| Тип заявки: | ТранспСредство |
| split2 | |
| Типы заявок: | |
| Оригинал, Копия | ТранспСредство, ТранспСредство |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | ТранспСредство |
| Действия При выходе копии: | entity.типТрансп=original.типТрансп; |
| entity.колГрузоМест=original.колГрузоМест; | |
| entity.врПолёта=original.врПолёта; | |
| entity.разные=original.разные; | |
| split3 | |
| Типы заявок: | |
| Оригинал, Копия | ТранспСредство, ТранспСредство |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | ТранспСредство |
| Действия При выходе копии: | 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.13.Установите свойства объектов согласно Табл. 9.10.
(рис 9.13) Сегмент Поступление и учёт контейнеров в аэропорту 2
| Свойство | Значения |
|---|---|
| source | |
| Имя: | истГрузов2 |
| Тип заявки: | ГрузАэропорт2 |
| Прибывают согласно | Времени между прибытиями |
| Время между прибытиями | exponential(1/срВрПостКонт2) |
| Количество заявок, прибывающих за один раз | 1 |
| Новая заявка | ГрузАэропорт2 |
| Действия При выходе: | d=(uniform_discr(минКонтПост2,максКонтПост2)); |
| всегоПостК2+=d; | |
| текНалК2+=d; | |
| selectOutput5 | |
| Тип заявки: | ГрузАэропорт2 |
| Использовать: | Условия |
| Условие 1 | текНалК2<грузПодСамА |
| Условие 2 | стоянкаПогр2А.size()>0 |
| погрузка2А.size()==0 | |
| Действия При выходе 2 | текНалК2-=грузПодСамА; |
| hold6.setBlocked(false); | |
| Условие 3 | текНалК2<грузПодСамБ |
| Условие 4 | стоянкаПогр2Б.size()>0 |
| погрузка2Б.size()==0 | |
| Действия При выходе 4 | текНалК2-=грузПодСамБ; |
| hold7.setBlocked(false); | |
| sink | |
| Тип заявки: | ГрузАэропорт2 |
Объект source с именем истГрузов2 генерирует заявку-партию класса ГрузАэропорт2 поступивших контейнеров. Заявка-партия поступает на объект selectOutput5.
Описанная в п. 9.1.8.2 последовательность проверок условий производится и в данном сегменте каждый раз при появлении в модели очередной заявки-партии. Все заявки класса ГрузАэропорт2 также выводятся из модели.
В данном сегменте, как и в п. 9.1.8.2, при выполнении подобных условий, только относительно аэропорта 2, формируются команды на отправку самолётов на погрузку.
Сегмент Ожидание разгрузки в аэропорту 2 предназначен для имитации ожидания разгрузки самолётов, прибывших из аэропорта 1.
Создайте сегмент.
Презентация перетащите элемент Прямоугольник.
Местоположение и размер панели Свойства введите в поля X: 30, Y: 1040, Ширина: 310, Высота: 220.
text и в поле Текст: введите Ожидание разгрузки в аэропорту 2.
Библиотеки моделирования процессов по два объекта enter, queue, hold и один объект exit. Поместите и соедините их так, как на Рис. 9.14.
Предположим, что поступила заявка-самолёт в объект enter11. В нём проверяется условие: средства разгрузки свободны (разгрузка2Б.size()==0) и на стоянке нет ожидающих разгрузку самолётов? Если да, то разблокировывается объект hold5 и заявка-самолёт типа Б входит в объект наРазгрузку2 и далее в сегмент имитации разгрузки аэропорта 2.
(рис 9.14) Сегмент Ожидание разгрузки в аэропорту 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.15) Сегмент Разгрузка самолётов в аэропорту 2
Создайте сегмент.
Презентация перетащите элемент Прямоугольник.
Местоположение и размер панели Свойства введите в поля X: 360, Y: 1040, Ширина: 470, Высота: 220.
text и в поле Текст: введите Разгрузка самолётов в аэропорту 2.
split, queue, delay, selectOutput и по одному объекту exit и sink. Поместите и соедините их так, как на Рис. 9.15.
Предположим, что из сегмента ожидания разгрузки (п. 9.1.9.2) через объект enter13 поступила заявка-самолёт типа Б в объект split5. Объектом split5 заявка размножается на число заявок, равное количеству контейнеров, которые должны быть выгружены из самолёта. Заявка-оригинал из модели не выводится. Поэтому количество копий на 1 меньше, чем количество выгружаемых контейнеров (entity.колГрузоМест-1).
Таким образом, также, как и в соответствующем сегменте аэропорта 1, далее каждая заявка интерпретируется как заявка-контейнер. Тем не менее, каждой копии присваиваются значения полей оригинала, так как после выгрузки все заявки-контейнеры, кроме последней, будут выведены из модели. Однако неизвестно какая из заявок будет последней - оригинал или копия. Поэтому также и присваиваются копиям значения полей оригинала.
| Свойство | Значения |
|---|---|
| enter12 | |
| Тип заявки: | ТранспСредство |
| enter13 | |
| Тип заявки: | ТранспСредство |
| split4 | |
| Типы заявок: | |
| Оригинал, Копия | ТранспСредство, ТранспСредство |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | ТранспСредство |
| Действия При выходе копии | entity.типТрансп=original.типТрансп; |
| entity.колГрузоМест=original.колГрузоМест; | |
| entity.врПолёта=original.врПолёта; | |
| entity.разные =original.разные; | |
| split5 | |
| Типы заявок: | |
| Оригинал, Копия | ТранспСредство, ТранспСредство |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | ТранспСредство |
| Действия При выходе копии: | entity.типТрансп=original.типТрансп; |
| entity.колГрузоМест=original.колГрузоМест; | |
| entity.врПолёта=original.врПолёта; | |
| entity.разные= original.разные; | |
| queue | |
| Имя: | очРазгр2А |
| Тип заявки: | ТранспСредство |
| Максимальная вместимость | Установить флажок |
| Действия | entity.разные= |
| При выходе: | срВрВыгрКонтСам2А; |
| Включить сбор статистики | Установить флажок |
| queue1 | |
| Имя: | очРазгр2Б |
| Тип заявки: | ТранспСредство |
| Максимальная вместимость | Установить флажок |
| Действия | entity.разные= |
| При выходе: | срВрВыгрКонтСам2Б; |
| Включить сбор статистики | Установить флажок |
| delay | |
| Имя: | разгрузка2А |
| Тип заявки: | ТранспСредство |
| Задержка задаётся | Определённое время |
| Время задержки | exponential(1/entity.разные) |
| Вместимость | выгрКонтСам2А |
| Действия При подходе к выходу | выгрКонтА2++; |
| Включить сбор статистики | Установить флажок |
| delay1 | |
| Имя: | разгрузка2Б |
| Тип заявки: | ТранспСредство |
| Задержка задаётся | Определённое время |
| Время задержки | exponential(1/entity.разные) |
| Вместимость | выгрКонтСам2Б |
| Действия При подходе к выходу | выгрКонтБ2++; |
| Включить сбор статистики | Установить флажок |
| selectOutput6 | |
| Тип заявки: | ТранспСредство |
| Выход true выбирается | При выполнении условия |
| Условие | entity.колГрузоМест== |
| Действия При выходе (true) | выгрКонтА2 |
| выгрКонтА2=0; | |
| достКА12+=entity.колГрузоМест; | |
| hold4.setBlocked(false); | |
| selectOutput7 | |
| Тип заявки: | ТранспСредство |
| Выход true выбирается | При выполнении условия |
| Условие | entity.колГрузоМест==выгрКонтБ2 |
| Действия При выходе (true) | выгрКонтБ2=0; |
| достКБ12+=entity.колГрузоМест; | |
| hold5.setBlocked(false); | |
| exit | |
| Имя: | наОжПогр2 |
| Тип заявки: | ТранспСредство |
| Действия При выходе: | достК12+=entity.колГрузоМест; |
| if (entity.типТрансп==1) enter14.take(entity); | |
| else enter15.take(entity); | |
| sink4 | |
| Тип заявки: | ТранспСредство |
Сегмент Ожидание погрузки в аэропорту 2 предназначен для имитации ожидания погрузки самолётов, прибывших из аэропорта 1, после разгрузки в аэропорту 2 .
Создайте сегмент.
Презентация перетащите элемент Прямоугольник.
Местоположение и размер панели Свойства введите в поля X: 340, Y: 830, Ширина: 290, Высота: 190.
text и в поле Текст: введите Ожидание погрузки в аэропорту 2.
Библиотеки моделирования процессов по два объекта enter, queue, hold и один объект exit. Поместите и соедините их так, как на Рис. 9.16.
Данный сегмент отличается от аналогичного сегмента аэропорта 1 тем, что он не предназначен в том числе и для первичного приёма самолётов. Заявки-самолёты поступают на имитируемые объектами queue стоянки стоянкаПогр2А и стоянкаПогр2Б соответственно только после разгрузки.
Элементы hold6 и hold7 также изначально заблокированы, поэтому заявки-самолёты дальше стоянок не проходят. Элементы hold6 и hold7 также управляются сегментом Поступление и учёт контейнеров в аэропорту 2.
(рис 9.16) Сегмент Ожидание погрузки в аэропорту 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.17.
(рис 9.17) Сегмент Погрузка контейнеров в аэропорту 2
| Свойство | Значения |
|---|---|
| enter16 | |
| Тип заявки: | ТранспСредство |
| enter17 | |
| Тип заявки: | ТранспСредство |
| split6 | |
| Типы заявок: | |
| Оригинал, Копия | ТранспСредство, ТранспСредство |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | ТранспСредство |
| Действия При выходе копии | entity.типТрансп=original.типТрансп; |
| entity.колГрузоМест=original.колГрузоМест; | |
| entity.tPolet=original.tPolet; | |
| entity.разные= original.разные; | |
| split7 | |
| Типы заявок: | |
| Оригинал, Копия | ТранспСредство, ТранспСредство |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | ТранспСредство |
| Действия При выходе копии | entity.типТрансп=original.типТрансп; |
| entity.колГрузоМест=original.колГрузоМест; | |
| entity.врПолёта=original.врПолёта; | |
| entity.разные= original.разные; | |
| queue6 | |
| Имя: | очПогр2А |
| Тип заявки: | ТранспСредство |
| Максимальная вместимость | Установить флажок |
| Действия При выходе | entity.разные=срВрПогрКонтСам2А; |
| Включить сбор статистики | Установить флажок |
| queue7 | |
| Имя: | очПогр2Б |
| Тип заявки: | ТранспСредство |
| Максимальная вместимость | Установить флажок |
| Действия При выходе | entity.разные=срВрПогрКонтСам2Б; |
| Включить сбор статистики | Установить флажок |
| delay | |
| Имя: | Погрузка2А |
| Тип заявки: | ТранспСредство |
| Задержка задаётся | Определённое время |
| Время задержки | exponential(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.18) Сегмент Полёт из аэропорта 2 в аэропорт 1
Библиотеки моделирования процессов по два объекта enter, delay и один объект exit. Поместите и соедините их так, как на Рис. 9.18.
| Свойство | Значения |
|---|---|
| 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.
Модельное время. В поле Остановить: выберите В заданное время.
Конечное время: введите 720000. Время моделирования увеличено в 1000 раз по числу прогонов модели в GPSS World. Таким образом, моделируется функционирование системы воздушных перевозок в течение 720 часов (30-ти суток).
(рис 9.19) Результаты моделирования
Во время выполнения модели не все результаты моделирования видны, так как они рассчитываются и выводятся после окончания заданного времени моделирования.
Видно, что коэффициент доставки системы воздушных перевозок при принятых её характеристиках и потоках грузов составляет коэфДост = 0,31 при среднем коэффициенте использования самолётов обоих типов коэфИспСам = 0,638. Коэффициент использования самолёта типа Б (0,481) ниже коэфИспСамА = 0,795.
Машинное время выполнения модели 467,2 сек.
Система авиаперевозок включает два аэропорта. Перевозки выполняются из первого аэропорта во второй и обратно. Время полета между аэропортами распределено по нормальному закону.
Грузы в каждый аэропорт поступают партиями в контейнерах. Количество контейнеров в партии распределено по равномерному закону. Интервалы времени между поступлениями партий грузов распределены по экспоненциальному закону.
Для авиаперевозок используют два типа самолетов А и Б и грузоподъемностями 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 |
Построить имитационную модель функционирования системы воздушных перевозок с целью определения следующих её показателей:
А и Б в аэропорты 1 и 2;
А и Б в аэропортах 1 и 2;
Исследовать влияние на показатели функционирования системы воздушных перевозок её характеристик, выявить среди них существенные и несущественные.
Сделать выводы о построении эффективной системы воздушных перевозок и возможных направлениях совершенствования после введения в эксплуатацию.
Представим систему воздушных перевозок в виде СМО (Рис. 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 (Рис. 9.4) и аэропорта 2 (Рис. 9.5).
(рис 9.4) Сегмент имитации функционирования аэропорта 1
(рис 9.5) Сегмент имитации функционирования аэропорта 2
Сегмент предназначен для имитации первоначального (последующего) прибытия самолётов в аэропорт 1, размещения их на стоянках, ожидания и отправки на погрузку (разгрузку) контейнеров.
Презентация перетащите элемент Прямоугольник.
Местоположение и размер панели Свойства введите в поля X: 30, Y: 50, Ширина: 310, Высота: 200.
text и в поле Текст: введите Прибытие самолётов в аэропорт 1. Ожидание погрузки.
Библиотеки моделирования процессов по два объекта source, enter, queue, hold и один объект exit. Поместите и соедините их так, как на Рис. 9.6.При построении модели вам придётся воспользоваться Java-кодом, в котором потребуются дополнительные поля заявок. Для этого вы должны создать нестандартный тип заявки с дополнительными полями для записи и хранения параметров, о которых упоминалось ранее (см. п. 9.1.4).
Создайте тип заявок ТранспСредство.
source.
Проект щёлкните правой кнопкой мыши элемент модели верхнего уровня дерева и выберите Создать/Java класс.
Новый Java класс. В поле Имя: введите имя нового класса: ТранспСредство.
Базовый класс: выберите из выпадающего списка Entity в качестве базового класса. Щёлкните кнопку Далее.
Мастера создания Java класса. Добавьте поля Java класса, показанные на Рис. 9.7.
Создать конструктор и Создать метод toString (). Щёлкните Готово. Закройте редактор кода.
Преобразовать Java класс в тип агента.
ГрузАэропорт1 и ГрузАэропорт2 с дополнительными полями колГрузоМест1 и колГрузоМест2 типа int соответственно. Эти классы заявок, как вы помните, будут использоваться при имитации поступления партий грузов в аэропорты 1 и 2 соответственно.
(рис 9.6) Сегмент Прибытие самолётов в аэропорт 1
(рис 9.7) Поля нового Java класса ТранспСредство
Продолжите построение сегмента имитации Прибытие самолётов в аэропорт 1 и ожидания погрузки.
Поочередно выделите объекты этого сегмента и установите их свойства согласно Табл. 9.4.
| Свойство | Значения |
|---|---|
| source | |
| Имя: | самолёт1 |
| Тип заявки: | ТранспСредство |
| Прибывают согласно | Времени между прибытиями |
| Время между прибытиями | 0 |
| Количество заявок, прибывающих за один раз | колСамТипА |
| Ограниченное количество прибытий | Установить флажок |
| Максимальное количество прибытий | 1 |
| Новая заявка | ТранспСредство |
| Действия При выходе: | entity.типТрансп=1; |
| entity.колГрузоМест=грузПодСамА; | |
| source1 | |
| Имя: | самолёт2 |
| Тип заявки: | ТранспСредство |
| Прибывают согласно | Времени между прибытиями |
| Время между прибытиями | 0 |
| Количество заявок, прибывающих за один раз | колСамТипБ |
| Ограниченное количество прибытий | Установить флажок |
| Максимальное количество прибытий | 1 |
| Новая заявка | ТранспСредство |
| Действия При выходе: | entity.типТрансп=2; |
| entity.колГрузоМест= грузПодСамБ; | |
| queue | |
| Имя: | стоянкаПогр1А |
| Тип заявки: | ТранспСредство |
| Вместимость | колСамТипА |
| Включить сбор статистики | Установить флажок |
| queue1 | |
| Имя: | стоянкаПогр1Б |
| Тип заявки: | ТранспСредство |
| Вместимость | колСамТипБ |
| Включить сбор статистики | Установить флажок |
| hold | |
| Тип заявки: | ТранспСредство |
| Изначально заблокирован | Установить флажок |
| hold1 | |
| Тип заявки: | ТранспСредство |
| Изначально заблокирован | Установить флажок |
| exit | |
| Имя: | наПогрузку1 |
| Тип заявки: | ТранспСредство |
| Действия При выходе: | if (entity.типТрансп==1) {hold.setBlocked(true); |
| enter2.take(entity);} | |
| else {hold1.setBlocked(true); | |
| enter3.take(entity);} | |
| enter | |
| Тип заявки: | ТранспСредство |
| enter1 | |
| Тип заявки: | ТранспСредство |
Остановимся на замысле построения сегмента.
При запуске модели источники самолёт1 и самолёт2 генерируют число заявок, равное количеству самолётов типа А и типа Б соответственно. На этом активность источников прекращается.
Эти заявки-самолёты поступают на имитируемые объектами queue стоянки стоянкаПогр1А и стоянкаПогр1Б соответственно.
Элементы hold и hold1 изначально заблокированы, поэтому заявки-самолёты дальше не проходят.
Элементы hold и hold1 управляются сегментом Поступление и учёт контейнеров в аэропорту 1. Как только в аэропорт 1 поступит количество контейнеров, достаточное для полной загрузки самолёта типа А, и этот самолёт имеется на стоянке, а также нет самолётов типа А на погрузке, формируется команда на разблокировывание элемента hold.
Заявка-самолёт поступает на объект наПогрузку1 (объект exit) и далее на сегмент Погрузка контейнеров в аэропорту 1.
Если ожидающих погрузку самолётов типа А нет, а количество контейнеров достаточно для полной загрузки самолёта типа Б и он имеется в наличии, то аналогично формируется команда на разблокировывание элемента hold1. Заявка-самолёт также поступает на объект наПогрузку1 (объект exit) и далее на сегмент Погрузка контейнеров в аэропорту 1.
Элементы enter и enter1 увеличивают число входов объектов queue и queue1 соответственно. Через них поступают в последующем заявки-самолёты, прибывшие из аэропорта 2, разгруженные и теперь отправленные на стоянки ожидания погрузки в аэропорту 1.
Сегмент Поступление и учёт контейнеров в аэропорту 1 предназначен для имитации приёма поступающих от источников грузов (контейнеров), учёта их, определения необходимого количества контейнеров для загрузки соответствующего самолёта и формирования команды для отправки этого самолёта на погрузку контейнеров.
Создайте этот сегмент.
Презентация перетащите элемент Прямоугольник.
Местоположение и размер панели Свойства введите в поля X: 30, Y: 270, Ширина: 220, Высота: 200.
text и в поле Текст: введите Поступление и учёт контейнеров в аэропорту 1.
Библиотеки моделирования процессов по одному объекту source, selectOutput5 (имя selectOutput) и sink. Поместите и соедините их так, как на Рис. 9.8.Установите свойства объектов согласно Табл. 9.5.
Объект source с именем истГрузов1 генерирует заявку-партию класса ГрузАэропорт1 поступивших контейнеров, число которых в партии распределено по равномерному закону. Заявка-партия поступает на объект selectOutput.
В условии 1 проверяется наличие числа контейнеров, достаточного для полной загрузки самолёта типа А. Если число контейнеров недостаточно, заявка-партия уничтожается. Так продолжается до тех пор, пока не выполнится условие 1.
(рис 9.8) Сегмент Поступление и учёт контейнеров в аэропорту 1
| Свойство | Значения |
|---|---|
| source | |
| Имя: | истГрузов1 |
| Тип заявки: | ГрузАэропорт1 |
| Прибывают согласно | Времени между прибытиями |
| Время между прибытиями | exponential(1/срВрПостКонт1) |
| Количество заявок, прибывающих за один раз | 1 |
| Новая заявка | ГрузАэропорт1 |
| Действия При выходе | a=(uniform_discr(минКонтПост1,максКонтПост1)); |
| всегоПостК1+=a; | |
| текНалКонт1+=a; | |
| selectOutput | |
| Тип заявки: | ГрузАэропорт1 |
| Использовать: | Условия |
| Условие 1 | текНалК1<грузПодСамА |
| Условие 2 | стоянкаПогр1А.size()>0 |
| погрузка1А.size()==0 | |
| Действия При выходе 2 | текНалК1-=грузПодСамА; |
| hold.setBlocked(false); | |
| Условие 3 | текНалК1<грузПодСамБ |
| Условие 4 | стоянкаПогр1Б.size()>0 |
| погрузка1Б.size()==0 | |
| Действия При выходе 4 | текНалК1-=грузПодСамБ; |
| hold1.setBlocked(false); | |
| sink | |
| Тип заявки: | ГрузАэропорт1 |
После выполнения условия 1 проверяется условие 2: наличие самолётов типа А на стоянке ожидания погрузки и незанятость пунктов погрузки.
При выполнении условия 2 формируется команда на разблокировывание элемента hold (см. п. 9.1.8.2) и самолёт типа А отправляется на погрузку.
Если условие 2 не выполняется, например, при отсутствии свободного самолёта типа А, проверяется условие 3.
Если условие 3 не выполняется, то есть недостаточно контейнеров для полной загрузки самолёта типа Б, заявка-партия уничтожается.
Если условие 3 выполняется (поступило число контейнеров, достаточное для полной загрузки самолёта типа Б), проверяется условие 4: наличие самолётов типа Б на стоянке ожидания погрузки и незанятость пунктов погрузки.
Если условие 4 не выполняется, заявка-партия уничтожается.
При выполнении условия 4 формируется команда на разблокировывание элемента hold1 (см. п. 9.1.8.2) и самолёт типа Б отправляется на погрузку.
Описанная последовательность проверок производится каждый раз при появлении в модели очередной заявки-партии. Все заявки типа ГрузАэропорт1 выводятся из модели.
Сегмент Погрузка контейнеров в аэропорту 1 предназначен для имитации погрузки в самолёты и отправки загруженных самолётов в полёт в аэропорт назначения.
Создайте сегмент Погрузка контейнеров в аэропорту 1.
Презентация перетащите элемент Прямоугольник.
Местоположение и размер панели Свойства введите в поля X: 350, Y: 50, Ширина: 460, Высота: 200.
(рис 9.9) Сегмент Погрузка контейнеров в аэропорту 1
text и в поле Текст: введите Погрузка контейнеров в аэропорту 1.
Библиотеки моделирования процессов по два объекта enter, split, queue, delay, selectOutput и по одному объекту exit и sink. Поместите и соедините их так, как на Рис. 9.9.
| Свойство | Значения |
|---|---|
| enter2 | |
| Тип заявки: | ТранспСредство |
| enter3 | |
| Тип заявки: | ТранспСредство |
| split | |
| Типы заявок: | |
| Оригинал, Копия | ТранспСредство, ТранспСредство |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | ТранспСредство |
| Действия При выходе копии: | entity.типТрансп=original.типТрансп; |
| entity.колГрузоМест=original.колГрузоМест; | |
| entity.tPolet=original.tPolet; | |
| entity.разные =original.разные; | |
| split1 | |
| Типы заявок: | |
| Оригинал, Копия | ТранспСредство, ТранспСредство |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | ТранспСредство |
| Действия При выходе копии: | 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.10.
Предположим, что поступила заявка-самолёт типа А в объект enter4 и далее в объект с именем полётА12 (delay). Идентификатор полётА12 означает, что объект имитирует непосредственно полёт из аэропорта 1 в аэропорт 2. В аэропорту 2 заявка-самолёт входит в сегмент ожидания разгрузки.
(рис 9.10) Сегмент Полёт из аэропорта 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.11.
Предположим, что поступила заявка-самолёт из аэропорта 2 в объект enter6. Если средства разгрузки свободны, то есть выполняется условие (разгрузка1А.size()==0), разблокировывается объект hold2 и заявка-самолёт входит в объект наРазгрузку1 и далее в сегмент имитации разгрузки.
(рис 9.11) Сегмент Ожидание разгрузки в аэропорту 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.
split, queue, delay, selectOutput и по одному объекту exit и sink. Поместите и соедините их так, как на Рис. 9.12.
Предположим, что из сегмента ожидания разгрузки через объект enter8 поступила заявка-самолёт типа А в объект split2. Объектом split2 заявка размножается на число заявок, равное количеству контейнеров, которые должны быть выгружены из самолёта. Заявка-оригинал из модели не выводится.
Таким образом, далее каждая заявка интерпретируется как заявка-контейнер. Тем не менее, каждой копии присваиваются значения полей оригинала, так как после выгрузки все заявки-контейнеры, кроме последней, будут выведены из модели. Однако неизвестно какая из заявок будет последней - оригинал или копия. Поэтому и присваиваются копиям значения полей оригинала.
(рис 9.12) Сегмент Разгрузка самолётов в аэропорту 1
| Свойство | Значения |
|---|---|
| enter8 | |
| Тип заявки: | ТранспСредство |
| enter9 | |
| Тип заявки: | ТранспСредство |
| split2 | |
| Типы заявок: | |
| Оригинал, Копия | ТранспСредство, ТранспСредство |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | ТранспСредство |
| Действия При выходе копии: | entity.типТрансп=original.типТрансп; |
| entity.колГрузоМест=original.колГрузоМест; | |
| entity.врПолёта=original.врПолёта; | |
| entity.разные=original.разные; | |
| split3 | |
| Типы заявок: | |
| Оригинал, Копия | ТранспСредство, ТранспСредство |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | ТранспСредство |
| Действия При выходе копии: | 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.13.Установите свойства объектов согласно Табл. 9.10.
(рис 9.13) Сегмент Поступление и учёт контейнеров в аэропорту 2
| Свойство | Значения |
|---|---|
| source | |
| Имя: | истГрузов2 |
| Тип заявки: | ГрузАэропорт2 |
| Прибывают согласно | Времени между прибытиями |
| Время между прибытиями | exponential(1/срВрПостКонт2) |
| Количество заявок, прибывающих за один раз | 1 |
| Новая заявка | ГрузАэропорт2 |
| Действия При выходе: | d=(uniform_discr(минКонтПост2,максКонтПост2)); |
| всегоПостК2+=d; | |
| текНалК2+=d; | |
| selectOutput5 | |
| Тип заявки: | ГрузАэропорт2 |
| Использовать: | Условия |
| Условие 1 | текНалК2<грузПодСамА |
| Условие 2 | стоянкаПогр2А.size()>0 |
| погрузка2А.size()==0 | |
| Действия При выходе 2 | текНалК2-=грузПодСамА; |
| hold6.setBlocked(false); | |
| Условие 3 | текНалК2<грузПодСамБ |
| Условие 4 | стоянкаПогр2Б.size()>0 |
| погрузка2Б.size()==0 | |
| Действия При выходе 4 | текНалК2-=грузПодСамБ; |
| hold7.setBlocked(false); | |
| sink | |
| Тип заявки: | ГрузАэропорт2 |
Объект source с именем истГрузов2 генерирует заявку-партию класса ГрузАэропорт2 поступивших контейнеров. Заявка-партия поступает на объект selectOutput5.
Описанная в п. 9.1.8.2 последовательность проверок условий производится и в данном сегменте каждый раз при появлении в модели очередной заявки-партии. Все заявки класса ГрузАэропорт2 также выводятся из модели.
В данном сегменте, как и в п. 9.1.8.2, при выполнении подобных условий, только относительно аэропорта 2, формируются команды на отправку самолётов на погрузку.
Сегмент Ожидание разгрузки в аэропорту 2 предназначен для имитации ожидания разгрузки самолётов, прибывших из аэропорта 1.
Создайте сегмент.
Презентация перетащите элемент Прямоугольник.
Местоположение и размер панели Свойства введите в поля X: 30, Y: 1040, Ширина: 310, Высота: 220.
text и в поле Текст: введите Ожидание разгрузки в аэропорту 2.
Библиотеки моделирования процессов по два объекта enter, queue, hold и один объект exit. Поместите и соедините их так, как на Рис. 9.14.
Предположим, что поступила заявка-самолёт в объект enter11. В нём проверяется условие: средства разгрузки свободны (разгрузка2Б.size()==0) и на стоянке нет ожидающих разгрузку самолётов? Если да, то разблокировывается объект hold5 и заявка-самолёт типа Б входит в объект наРазгрузку2 и далее в сегмент имитации разгрузки аэропорта 2.
(рис 9.14) Сегмент Ожидание разгрузки в аэропорту 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.15) Сегмент Разгрузка самолётов в аэропорту 2
Создайте сегмент.
Презентация перетащите элемент Прямоугольник.
Местоположение и размер панели Свойства введите в поля X: 360, Y: 1040, Ширина: 470, Высота: 220.
text и в поле Текст: введите Разгрузка самолётов в аэропорту 2.
split, queue, delay, selectOutput и по одному объекту exit и sink. Поместите и соедините их так, как на Рис. 9.15.
Предположим, что из сегмента ожидания разгрузки (п. 9.1.9.2) через объект enter13 поступила заявка-самолёт типа Б в объект split5. Объектом split5 заявка размножается на число заявок, равное количеству контейнеров, которые должны быть выгружены из самолёта. Заявка-оригинал из модели не выводится. Поэтому количество копий на 1 меньше, чем количество выгружаемых контейнеров (entity.колГрузоМест-1).
Таким образом, также, как и в соответствующем сегменте аэропорта 1, далее каждая заявка интерпретируется как заявка-контейнер. Тем не менее, каждой копии присваиваются значения полей оригинала, так как после выгрузки все заявки-контейнеры, кроме последней, будут выведены из модели. Однако неизвестно какая из заявок будет последней - оригинал или копия. Поэтому также и присваиваются копиям значения полей оригинала.
| Свойство | Значения |
|---|---|
| enter12 | |
| Тип заявки: | ТранспСредство |
| enter13 | |
| Тип заявки: | ТранспСредство |
| split4 | |
| Типы заявок: | |
| Оригинал, Копия | ТранспСредство, ТранспСредство |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | ТранспСредство |
| Действия При выходе копии | entity.типТрансп=original.типТрансп; |
| entity.колГрузоМест=original.колГрузоМест; | |
| entity.врПолёта=original.врПолёта; | |
| entity.разные =original.разные; | |
| split5 | |
| Типы заявок: | |
| Оригинал, Копия | ТранспСредство, ТранспСредство |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | ТранспСредство |
| Действия При выходе копии: | entity.типТрансп=original.типТрансп; |
| entity.колГрузоМест=original.колГрузоМест; | |
| entity.врПолёта=original.врПолёта; | |
| entity.разные= original.разные; | |
| queue | |
| Имя: | очРазгр2А |
| Тип заявки: | ТранспСредство |
| Максимальная вместимость | Установить флажок |
| Действия | entity.разные= |
| При выходе: | срВрВыгрКонтСам2А; |
| Включить сбор статистики | Установить флажок |
| queue1 | |
| Имя: | очРазгр2Б |
| Тип заявки: | ТранспСредство |
| Максимальная вместимость | Установить флажок |
| Действия | entity.разные= |
| При выходе: | срВрВыгрКонтСам2Б; |
| Включить сбор статистики | Установить флажок |
| delay | |
| Имя: | разгрузка2А |
| Тип заявки: | ТранспСредство |
| Задержка задаётся | Определённое время |
| Время задержки | exponential(1/entity.разные) |
| Вместимость | выгрКонтСам2А |
| Действия При подходе к выходу | выгрКонтА2++; |
| Включить сбор статистики | Установить флажок |
| delay1 | |
| Имя: | разгрузка2Б |
| Тип заявки: | ТранспСредство |
| Задержка задаётся | Определённое время |
| Время задержки | exponential(1/entity.разные) |
| Вместимость | выгрКонтСам2Б |
| Действия При подходе к выходу | выгрКонтБ2++; |
| Включить сбор статистики | Установить флажок |
| selectOutput6 | |
| Тип заявки: | ТранспСредство |
| Выход true выбирается | При выполнении условия |
| Условие | entity.колГрузоМест== |
| Действия При выходе (true) | выгрКонтА2 |
| выгрКонтА2=0; | |
| достКА12+=entity.колГрузоМест; | |
| hold4.setBlocked(false); | |
| selectOutput7 | |
| Тип заявки: | ТранспСредство |
| Выход true выбирается | При выполнении условия |
| Условие | entity.колГрузоМест==выгрКонтБ2 |
| Действия При выходе (true) | выгрКонтБ2=0; |
| достКБ12+=entity.колГрузоМест; | |
| hold5.setBlocked(false); | |
| exit | |
| Имя: | наОжПогр2 |
| Тип заявки: | ТранспСредство |
| Действия При выходе: | достК12+=entity.колГрузоМест; |
| if (entity.типТрансп==1) enter14.take(entity); | |
| else enter15.take(entity); | |
| sink4 | |
| Тип заявки: | ТранспСредство |
Сегмент Ожидание погрузки в аэропорту 2 предназначен для имитации ожидания погрузки самолётов, прибывших из аэропорта 1, после разгрузки в аэропорту 2 .
Создайте сегмент.
Презентация перетащите элемент Прямоугольник.
Местоположение и размер панели Свойства введите в поля X: 340, Y: 830, Ширина: 290, Высота: 190.
text и в поле Текст: введите Ожидание погрузки в аэропорту 2.
Библиотеки моделирования процессов по два объекта enter, queue, hold и один объект exit. Поместите и соедините их так, как на Рис. 9.16.
Данный сегмент отличается от аналогичного сегмента аэропорта 1 тем, что он не предназначен в том числе и для первичного приёма самолётов. Заявки-самолёты поступают на имитируемые объектами queue стоянки стоянкаПогр2А и стоянкаПогр2Б соответственно только после разгрузки.
Элементы hold6 и hold7 также изначально заблокированы, поэтому заявки-самолёты дальше стоянок не проходят. Элементы hold6 и hold7 также управляются сегментом Поступление и учёт контейнеров в аэропорту 2.
(рис 9.16) Сегмент Ожидание погрузки в аэропорту 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.17.
(рис 9.17) Сегмент Погрузка контейнеров в аэропорту 2
| Свойство | Значения |
|---|---|
| enter16 | |
| Тип заявки: | ТранспСредство |
| enter17 | |
| Тип заявки: | ТранспСредство |
| split6 | |
| Типы заявок: | |
| Оригинал, Копия | ТранспСредство, ТранспСредство |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | ТранспСредство |
| Действия При выходе копии | entity.типТрансп=original.типТрансп; |
| entity.колГрузоМест=original.колГрузоМест; | |
| entity.tPolet=original.tPolet; | |
| entity.разные= original.разные; | |
| split7 | |
| Типы заявок: | |
| Оригинал, Копия | ТранспСредство, ТранспСредство |
| Количество копий | entity.колГрузоМест-1 |
| Новая заявка (копия) | ТранспСредство |
| Действия При выходе копии | entity.типТрансп=original.типТрансп; |
| entity.колГрузоМест=original.колГрузоМест; | |
| entity.врПолёта=original.врПолёта; | |
| entity.разные= original.разные; | |
| queue6 | |
| Имя: | очПогр2А |
| Тип заявки: | ТранспСредство |
| Максимальная вместимость | Установить флажок |
| Действия При выходе | entity.разные=срВрПогрКонтСам2А; |
| Включить сбор статистики | Установить флажок |
| queue7 | |
| Имя: | очПогр2Б |
| Тип заявки: | ТранспСредство |
| Максимальная вместимость | Установить флажок |
| Действия При выходе | entity.разные=срВрПогрКонтСам2Б; |
| Включить сбор статистики | Установить флажок |
| delay | |
| Имя: | Погрузка2А |
| Тип заявки: | ТранспСредство |
| Задержка задаётся | Определённое время |
| Время задержки | exponential(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.18) Сегмент Полёт из аэропорта 2 в аэропорт 1
Библиотеки моделирования процессов по два объекта enter, delay и один объект exit. Поместите и соедините их так, как на Рис. 9.18.
| Свойство | Значения |
|---|---|
| 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.
Модельное время. В поле Остановить: выберите В заданное время.
Конечное время: введите 720000. Время моделирования увеличено в 1000 раз по числу прогонов модели в GPSS World. Таким образом, моделируется функционирование системы воздушных перевозок в течение 720 часов (30-ти суток).
(рис 9.19) Результаты моделирования
Во время выполнения модели не все результаты моделирования видны, так как они рассчитываются и выводятся после окончания заданного времени моделирования.
Видно, что коэффициент доставки системы воздушных перевозок при принятых её характеристиках и потоках грузов составляет коэфДост = 0,31 при среднем коэффициенте использования самолётов обоих типов коэфИспСам = 0,638. Коэффициент использования самолёта типа Б (0,481) ниже коэфИспСамА = 0,795.
Машинное время выполнения модели 467,2 сек.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.