Концептуальное проектирование систем в AnyLogic и GPSS World

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

Разбить на страницы
Показывать лекцию целиком

Модель в AnyLogic

Постановка задачи

Система авиаперевозок включает два аэропорта. Перевозки выполняются из первого аэропорта во второй и обратно. Время полета между аэропортами распределено по нормальному закону.

Грузы в каждый аэропорт поступают партиями в контейнерах. Количество контейнеров в партии распределено по равномерному закону. Интервалы времени между поступлениями партий грузов распределены по экспоненциальному закону.

Для авиаперевозок используют два типа самолетов А и Б и грузоподъемностями q1 и q2 шт. контейнеров соответственно (q1 < q2). В аэропорту нет фиксированного расписания. Каждый самолет отправляется в полет сразу после его полной загрузки. Время погрузки и время выгрузки одного контейнера распределены по экспоненциальному закону. В первую очередь используются самолеты типа А, а при их отсутствии - типа Б.

Исходные данные

ХарактеристикиАэропорты
12
Количество самолётов типа А, шт.20
Грузоподъёмность самолёта типа А, шт.5050
Количество самолётов типа Б, шт.10
Грузоподъёмность самолёта типа Б, шт.100100
Минимальное количество контейнеров в партии, шт.11
Максимальное количество контейнеров в партии, шт.1522
Средний интервал поступления партий грузов, час0,50,4
Количество одновременно погружаемых контейнеров в самолёт типа А, шт.22
Количество одновременно погружаемых контейнеров в самолёт типа Б, шт.22
Количество одновременно выгружаемых контейнеров из самолёта типа А, шт.32
Количество одновременно выгружаемых контейнеров из самолёта типа Б, шт.32
Среднее время погрузки контейнера в самолёт типа А, час0,10,2
Среднее время погрузки контейнера в самолёт типа Б, час0,10,1
Среднее время выгрузки контейнера из самолёта типа А, час0,20,2
Среднее я время выгрузки контейнера из самолёта типа Б, час0,20,2
Среднее время полета самолёта типа А из аэропорта 1 в аэропорт 2 и из аэропорта 2 в аэропорт 1, час3,43,6
Стандартное отклонение времени полёта самолёта типа А из аэропорта 1 в аэропорт 2 и из аэропорта 2 в аэропорт 1, час0,50,6
Среднее время полета самолёта типа Б из аэропорта 1 в аэропорт 2 и из аэропорта 2 в аэропорт 1, час3,24,1
Стандартное отклонение времени полёта самолёта типа Б из аэропорта 1 в аэропорт 2 и из аэропорта 2 в аэропорт 1, час0,50,8

Задание на исследование

Построить имитационную модель функционирования системы воздушных перевозок с целью определения следующих её показателей:

  • коэффициенты доставки грузов самолётами типов А и Б в аэропорты 1 и 2;
  • коэффициент доставки грузов системой перевозок в целом;
  • коэффициенты использования самолётов типов А и Б в аэропортах 1 и 2;
  • коэффициент использования самолётов системой перевозок в целом;
  • коэффициенты использования средств погрузки, выгрузки в аэропортах 1 и 2 и самолётов при выполнении ими полётов.
  • Исследовать влияние на показатели функционирования системы воздушных перевозок её характеристик, выявить среди них существенные и несущественные.

    Сделать выводы о построении эффективной системы воздушных перевозок и возможных направлениях совершенствования после введения в эксплуатацию.

    Формализованное описание модели

    Представим систему воздушных перевозок в виде СМО (Рис. 9.1).

    Система воздушных перевозок представляет собой многофазную многоканальную СМО сложной структуры с различными видами заявок. Модель, исходя из такой структуры, должна состоять из двух частей:

  • имитация функционирования аэропорта 1;
  • имитация функционирования аэропорта 2.
  • В каждую из этих частей модели нужно включить следующие сегменты:

  • имитация функционирования аэропорта 1:
  • прибытие самолётов в аэропорт 1, ожидание погрузки;
  • поступление и учёт грузов в аэропорту 1;
  • погрузка грузов в аэропорту 1;
  • полёт из аэропорта 1 в аэропорт 2;
  • ожидание разгрузки в аэропорту 1;
  • разгрузка самолётов в аэропорту 1;
  • имитация функционирования аэропорта 2:
  • поступление и учёт грузов в аэропорту 2;
  • ожидание разгрузки в аэропорту 2;
  • разгрузка самолётов в аэропорту 2;
  • ожидание погрузки в аэропорту 2;
  • погрузка грузов в аэропорту 2;
  • полёт из аэропорта 2 в аэропорт 1.
  • В модели с точки зрения интерпретации целесообразно рассматривать заявки трёх видов:

  • заявки как транспортные средства - самолёты;
  • заявки как поступающие грузы в аэропорт 1;
  • заявки как поступающие грузы в аэропорт 2.
  • Заявки как транспортные средства - самолёты должны иметь следующие параметры (поля):

  • типТрансп - код типа транспортного средства - самолёта;
  • колГрузоМест - количество груза (контейнеров) в загруженном транспортном средстве - самолёте;
  • врПолёта - время полёта самолёта из аэропорта отправления в аэропорт назначения;
  • разные - другие характеристики процесса перевозки грузов воздушным транспортом.
  • (рис 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.
  • Создание областей просмотра

    Создайте следующие области просмотра, на которых вы будете помещать сегменты имитационной модели:

  • исхДанные;
  • Результаты;
  • Аэропорт1;
  • Аэропорт2.
  • При необходимости вы можете создать и другие области просмотра в зависимости от возможностей вашего компьютера и монитора. При этом можете пользоваться встроенными средствами перехода к областям просмотра или добавить свои соответствующие элементы управления.

    Значения свойств элементов Область просмотра установите согласно Табл. 9.2.

    СвойстваОбласти просмотра
    Имя:исхДанныеРезультатыАэропорт1Аэропорт1
    Х:10101010
    Y:1860260010790
    Ширина:62053010801110
    Высота:490470480490

    Для всех областей просмотра оставьте Выравнивать по: Верхнему левому углу, установите из списка Масштабирование: Подогнать под окно.

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

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

  • Перетащите элемент Скруглённый прямоугольник на элемент Область просмотра с именем исхДанные.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 30, Y: 1880, Ширина: 580, Высота: 450.
  • Перетащите элемент text и в поле Текст: введите Исходные данные.
  • Из библиотеки Основная перетащите элементы Параметр и поместите их так, как на рис. 9.2.
  • Значения свойств установите согласно Табл. 9.3.
  • (рис 9.2) Элементы Параметр для ввода исходных данных
    ИмяТипЗначение по умолчанию
    Самолёты типа А
    колСамТипАint2
    грузПодСамАint50
    Аэропорт 1
    минКонтПост1int1
    максКонтПост1int15
    срВрПостКонт1double0,5
    погрКонтСам1Аint2
    погрКонтСам1Бint2
    выгрКонтСам1Аint3
    выгрКонтСам1Бint3
    срВрПогрКонтСам1Аdouble0,1
    срВрПогрКонтСам1Бdouble0,1
    срВрВыгрКонтСам1Аdouble0,2
    срВрВыгрКонтСам1Бdouble0,2
    срВрПолётаА12double3,4
    отклВрПолётаА12double0,5
    срВрПолётаБ12double3,2
    отклВрПолётаБ12double0,5
    Самолёты типа Б
    колСамТипБint1
    грузПодСамБint100
    Аэропорт 2
    минКонтПост2int1
    максКонтПост2int22
    срВрПостКонт2double0,4
    погрКонтСам2Аint2
    погрКонтСам2Бint2
    выгрКонтСам2Аint2
    выгрКонтСам2Бint2
    срВрПогрКонтСам2Аdouble0,2
    срВрПогрКонтСам2Бdouble0,1
    срВрВыгрКонтСам2Аdouble0,2
    срВрВыгрКонтСам2Бdouble0,2
    срВрПолётаА12double3,6
    отклВрПолётаА12double0,6
    срВрПолётаБ12double4,1
    отклВрПолётаБ12double0,8

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

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

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

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

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

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

  • Из палитры Презентация перетащите элемент Прямоугольник.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 30, Y: 50, Ширина: 310, Высота: 200.
  • Перетащите элемент text и в поле Текст: введите Прибытие самолётов в аэропорт 1. Ожидание погрузки.
  • Перетащите из Основной библиотеки по два объекта source, enter, queue, hold и один объект exit. Поместите и соедините их так, как на рис. 9.4.
  • При построении модели вам придётся воспользоваться Java-кодом, в котором потребуются дополнительные поля заявок. Для этого вы должны создать нестандартный класс заявки с дополнительными полями для записи и хранения параметров, о которых упоминалось ранее (см. п. 9.1.4).

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

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

    (рис 9.4) Сегмент Прибытие самолётов в аэропорт 1 (рис 9.5) Поля нового Java класса ТранспСредство

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Из палитры Презентация перетащите элемент Прямоугольник.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 30, Y: 270, Ширина: 220, Высота: 200.
  • Перетащите элемент text и в поле Текст: введите Поступление и учёт контейнеров в аэропорту 1.
  • Перетащите из Основной библиотеки по одному объекту source, selectOutput5 (имя selectOutput) и sink. Поместите и соедините их так, как на рис. 9.6.
  • Установите свойства объектов согласно табл. 9.5.

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

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

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

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

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

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

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

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

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

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

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

    Погрузка контейнеров в аэропорту 1

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

    Создайте сегмент Погрузка контейнеров в аэропорту 1.

  • Из палитры Презентация перетащите элемент Прямоугольник.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 350, Y: 50, Ширина: 460, Высота: 200. (рис 9.7) Сегмент Погрузка контейнеров в аэропорту 1
  • Перетащите элемент text и в поле Текст: введите Погрузка контейнеров в аэропорту 1.
  • Перетащите из Основной библиотеки по два объекта enter, split, queue, delay, selectOutput и по одному объекту exit и sink. Поместите и соедините их так, как на рис. 9.7.
  • Установите свойства объектов согласно табл. 9.6.
  • СвойствоЗначения
    enter2
    Класс заявки:ТранспСредство
    enter3
    Класс заявки:ТранспСредство
    split
    Классы заявок:
    Оригинал, КопияТранспСредство,
    ТранспСредство
    Количество копийentity.колГрузоМест-1
    Новая заявка (копия)new ТранспСредство()
    Действие при выходе копииentity.типТрансп=
    original.типТрансп;
    entity.колГрузоМест=
    original.колГрузоМест;
    entity.tPolet=
    original.tPolet;
    entity.разные =original.разные;
    split1
    Классы заявок:
    Оригинал, КопияТранспСредство,
    ТранспСредство
    Количество копийentity.колГрузоМест-1
    Новая заявка (копия)new ТранспСредство()
    Действие при выходе копииentity.типТрансп=
    original.типТрансп;
    entity.колГрузоМест=
    original.колГрузоМест;
    entity.врПолёта=
    original.врПолёта;
    entity.разные =original.разные;
    Имя:очПогр1А
    Класс заявки:ТранспСредство
    Максимальная вместимостьУстановить флажок
    Действие при выходеentity.разные=
    срВрПогрКонтСам1А;
    Включить сбор статистикиУстановить флажок
    queue1
    Имя:очПогр1Б
    Класс заявки:ТранспСредство
    Максимальная вместимостьУстановить флажок
    Действие при выходеentity.разные=
    срВрПогрКонтСам1Б;
    Включить сбор статистикиУстановить флажок
    delay
    Имя:погрузка1А
    Класс заявки:ТранспСредство
    Задержка задаётсяЯвно
    Время задержкиexponential
    (1/entity.разные)
    ВместимостьпогрКонтСам1А
    Действие при выходепогрКонтА1++;
    Включить сбор статистикиУстановить флажок
    delay1
    Имя:погрузка1Б
    Класс заявки:ТранспСредство
    Задержка задаётсяЯвно
    Время задержкиexponential
    (1/entity.разные)
    ВместимостьпогрКонтСам1Б
    Действие при выходепогрКонтБ1++;
    Включить сбор статистикиУстановить флажок
    selectOutput1
    Класс заявки:ТранспСредство
    Выход true выбираетсяПри выполнении условия
    Условиеentity.колГрузоМест
    ==погрКонтА1
    Действие при выходе (true)entity.врПолёта=
    normal(отклВрПолётаА12,
    срВрПолётаА12);
    погрКонтА1=0;
    selectOutput2
    Класс заявки:ТранспСредство
    Выход true выбираетсяПри выполнении условия
    Условиеentity.колГрузоМест
    ==погрКонтБ1
    Действие при выходе (true)entity.врПолёта=
    normal(отклВрПолётаБ12,
    срВрПолётаБ12);
    погрКонтБ1=0;
    exit
    Имя:наВзлёт12
    Класс заявки:ТранспСредство
    Действие при выходеif (entity.типТрансп==1) enter4.take(entity);
    else enter5.take(entity);
    sink
    Класс заявки:ТранспСредство

    Предположим, что из сегмента ожидания погрузки через объект enter2 поступила заявка-самолёт типа А в объект split. Объектом split заявка размножается на число заявок, равное количеству контейнеров, которые должны быть погружены в самолёт. Заявка-оригинал из модели не выводится.

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

    Заявки-контейнеры занимают очередь к объекту погрузка1А, имитирующему непосредственно погрузку контейнеров в самолёт типа А в аэропорту 1. При покидании очереди выполняется код entity.разные=срВрПогрКонтСам1А, записывающий в поле с именем разные заявки-контейнера среднее время погрузки одного контейнера.

    После объекта погрузка1А, на выходе которого ведётся счёт погруженных контейнеров (погрКонтА1++), заявки-контейнеры входят в объект selectOutput1.

    Этот объект проверяет условие (entity.колГрузоМест ==погрКонтБ1): полная ли загрузка самолёта? При выполнении этого условия, а оно будет выполнено тогда, когда будет загружен последний контейнер, последняя заявка теперь уже в качестве заявки-самолёта поступит в объект наВзлёт (exit).

    Из этого объекта заявка-самолёт типа А с полным грузом поступит в сегмент имитации полёта из аэропорта 1 в аэропорт 2.

    Аналогичным образом имитируется погрузка в самолёт типа Б. Имитация начинается с поступления заявки-самолёта через объект enter3 в объект split1.

    Полёт из аэропорта 1 в аэропорт 2

    Сегмент Полёт из аэропорта 1 в аэропорт 2 предназначен для имитации полёта самолётов с грузом из аэропорта 1 в аэропорт 2.

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

  • Из палитры Презентация перетащите элемент Прямоугольник.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 830, Y: 50, Ширина: 240, Высота: 200.
  • Перетащите элемент text и в поле Текст: введите Полёт из аэропорта 1 в аэропорт 2.
  • Перетащите из Основной библиотеки по два объекта enter, delay и один объект exit. Поместите и соедините их так, как на рис. 9.8.
  • Установите свойства объектов согласно табл. 9.7.
  • Предположим, что поступила заявка-самолёт типа А в объект enter4 и далее в объект с именем полётА12 (delay). Идентификатор полётА12 означает, что объект имитирует непосредственно полёт из аэропорта 1 в аэропорт 2. В аэропорту 2 заявка-самолёт входит в сегмент ожидания разгрузки.

    (рис 9.8) Сегмент Полёт из аэропорта 1 в аэропорт 2
    СвойствоЗначения
    enter4
    Класс заявки:ТранспСредство
    enter5
    Класс заявки:ТранспСредство
    delay
    Имя:полётА12
    Класс заявки:ТранспСредство
    Задержка задаётсяЯвно
    Время задержкиentity.врПолёта
    ВместимостьколСамТипА
    Включить сбор статистикиУстановить флажок
    delay1
    Имя:ПолётБ12
    Класс заявки:ТранспСредство
    Задержка задаётсяЯвно
    Время задержкиentity.врПолёта
    ВместимостьколСамТипБ
    Включить сбор статистикиУстановить флажок
    exit
    Действие при выходеif (entity.типТрансп==1) enter10.take(entity);
    else enter11.take(entity);

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

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

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

  • Из палитры Презентация перетащите элемент Прямоугольник.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 270, Y: 270, Ширина: 310, Высота: 200.
  • Перетащите элемент text и в поле Текст: введите Ожидание разгрузки в аэропорту 1.
  • Перетащите из Основной библиотеки по два объекта enter, queue, hold и один объект exit. Поместите и соедините их так, как на рис. 9.9.
  • Установите свойства объектов согласно табл. 9.8.
  • Предположим, что поступила заявка-самолёт из аэропорта 2 в объект enter6. Если средства разгрузки свободны, то есть выполняется условие (разгрузка1А.size()==0), разблокировывается объект hold2 и заявка-самолёт входит в объект наРазгрузку1 и далее в сегмент имитации разгрузки.

    (рис 9.9) Сегмент Ожидание разгрузки в аэропорту 1
    СвойствоЗначения
    enter6
    Класс заявки:ТранспСредство
    Действие при входеif (разгрузка1А.size()==0) hold2.setBlocked(false);
    enter7
    Класс заявки:ТранспСредство
    Действие при входеif (разгрузка1Б.size()==0) hold3.setBlocked(false);
    queue
    Имя:стоянкаРазгр1А
    Класс заявки:ТранспСредство
    ВместимостьколСамТипА
    Включить сбор статистикиУстановить флажок
    queue1
    Имя:стоянкаРазгр1Б
    Класс заявки:ТранспСредство
    ВместимостьколСамТипБ
    Включить сбор статистикиУстановить флажок
    hold2
    Класс заявки:ТранспСредство
    Изначально заблокированУстановить флажок
    hold3
    Класс заявки:ТранспСредство
    Изначально заблокированУстановить флажок
    exit
    Имя:наРазгрузку1
    Действие при выходеif (entity.типТрансп==1) {hold2.setBlocked(true);
    enter8.take(entity);}
    else {hold3.setBlocked(true);
    enter9.take(entity);}

    При выходе из объекта наРазгрузку1 блокируется объект hold2 кодом hold2.setBlocked(true), так как теперь средства разгрузки самолётов типа А аэропорта 1 заняты.

    Если поступает заявка-самолёт типа Б, то она входит в сегмент через объект enter7. Имитация ожидания разгрузки заявкой-самолётом типа Б производится аналогично.

    Разгрузка самолётов в аэропорту 1

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

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

  • Из палитры Презентация перетащите элемент Прямоугольник.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 600, Y: 270, Ширина: 470, Высота: 200.
  • Перетащите элемент text и в поле Текст: введите Разгрузка самолётов в аэропорту 1.
  • Перетащите из Основной библиотеки по два объекта enter, split, queue, delay, selectOutput и по одному объекту exit и sink. Поместите и соедините их так, как на рис. 9.10.
  • Установите свойства объектов согласно табл. 9.9.
  • Предположим, что из сегмента ожидания разгрузки через объект enter8 поступила заявка-самолёт типа А в объект split2. Объектом split2 заявка размножается на число заявок, равное количеству контейнеров, которые должны быть выгружены из самолёта. Заявка-оригинал из модели не выводится.

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

    (рис 9.10) Сегмент Разгрузка самолётов в аэропорту 1
    СвойствоЗначения
    enter8
    Класс заявки:ТранспСредство
    enter9
    Класс заявки:ТранспСредство
    split2
    Классы заявок:
    Оригинал, КопияТранспСредство,
    ТранспСредство
    Количество копийentity.колГрузоМест-1
    Новая заявка (копия)new ТранспСредство()
    Действие при выходе копииentity.типТрансп=
    original.типТрансп;
    entity.колГрузоМест=
    original.колГрузоМест;
    entity.врПолёта=
    original.врПолёта;
    entity.разные=
    original.разные;
    split3
    Классы заявок:
    Оригинал, КопияТранспСредство,
    ТранспСредство
    Количество копийentity.колГрузоМест-1
    Новая заявка (копия)new ТранспСредство()
    Действие при выходе копииentity.типТрансп=
    original.типТрансп;
    entity.колГрузоМест=
    original.колГрузоМест;
    entity.врПолёта=
    original.врПолёта;
    entity.разные =original.разные;
    queue
    Имя:очРазгр1А
    Класс заявки:ТранспСредство
    Максимальная вместимостьУстановить флажок
    Действие при выходеentity.разные=
    срВрВыгрКонтСам1А
    Включить сбор статистикиУстановить флажок
    queue1
    Имя:очРазгр1Б
    Класс заявки:ТранспСредство
    Максимальная вместимостьУстановить флажок
    Действие при выходеentity.разные=
    срВрВыгрКонтСам1А
    Включить сбор статистикиУстановить флажок
    delay
    Имя:разгрузка1А
    Класс заявки:ТранспСредство
    Задержка задаётсяЯвно
    Время задержкиexponential
    (1/entity.разные)
    ВместимостьвыгрКонтСам1А
    Действие при выходевыгрКонтА1++;
    Включить сбор статистикиУстановить флажок
    delay1
    Имя:разгрузка1Б
    Класс заявки:ТранспСредство
    Задержка задаётсяЯвно
    Время задержкиexponential
    (1/entity.разные)
    ВместимостьвыгрКонтСам1Б
    Действие при выходевыгрКонтБ1++;
    Включить сбор статистикиУстановить флажок
    selectOutput3
    Класс заявки:ТранспСредство
    Выход true выбираетсяПри выполнении условия
    Условиеentity.колГрузоМест==
    выгрКонтА1
    Действие при выходе (true)выгрКонтА1=0;
    достКА21+=
    entity.колГрузоМест;
    hold2.setBlocked(false);
    selectOutput4
    Класс заявки:ТранспСредство
    Выход true выбираетсяПри выполнении условия
    Условиеentity.колГрузоМест==
    выгрКонтБ1
    Действие при выходе (true)выгрКонтБ1=0;
    достКБ21+=
    entity.колГрузоМест;
    hold3.setBlocked(false);
    exit
    Имя:наОжПогр1
    Класс заявки:ТранспСредство
    Действие при выходедостК21+=
    entity.колГрузоМест;
    if (entity.типТрансп==1) enter.take(entity);
    else enter1.take(entity);
    sink2
    Класс заявки:ТранспСредство

    Заявки-контейнеры занимают очередь к объекту разгрузка1А, имитирующему непосредственно выгрузку контейнеров из самолёта типа А в аэропорту 1. При покидании очереди выполняется код entity.разные=срВрВыгрКонтСам1А, записывающий в поле с именем разные заявки-контейнера среднее время выгрузки одного контейнера.

    После объекта разгрузка1А, на выходе которого ведётся счёт выгруженных контейнеров (выгрКонтА1++), заявки-контейнеры входят в объект selectOutput3.

    Этот объект проверяет условие (entity.колГрузоМест ==выгрКонтА1): полная ли выгрузка самолёта? При выполнении этого условия, а оно будет выполнено тогда, когда будет выгружен последний контейнер, последняя заявка теперь уже в качестве заявки-самолёта поступит в объект наОжПогр1 (exit).

    При выходе из объекта selectOutput3 переменной выгрКонтА1 присваивается значение 0, так она должна участвовать в очередной имитации выгрузки. Кроме того, разблокировывается объект hold2, так как теперь средства выгрузки аэропорта 1 самолётов типа А свободны

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

    Аналогичным образом имитируется выгрузка из самолёта типа Б. Имитация начинается с поступления заявки-самолёта через объект enter9 в объект split3.

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

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

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

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

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

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

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

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

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

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

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

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

  • Из палитры Презентация перетащите элемент Прямоугольник.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 30, Y: 1040, Ширина: 310, Высота: 220.
  • Перетащите элемент text и в поле Текст: введите Ожидание разгрузки в аэропорту 2.
  • Перетащите из Основной библиотеки по два объекта enter, queue, hold и один объект exit. Поместите и соедините их так, как на рис. 9.12.
  • Установите свойства объектов согласно табл. 9.11
  • (рис 9.12) Сегмент Ожидание разгрузки в аэропорту 2

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

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

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

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

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

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

  • Из палитры Презентация перетащите элемент Прямоугольник.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 360, Y: 1040, Ширина: 470, Высота: 220.
  • Перетащите элемент text и в поле Текст: введите Разгрузка самолётов в аэропорту 2.
  • Перетащите из Основной библиотеки по два объекта enter, split, queue, delay, selectOutput и по одному объекту exit и sink. Поместите и соедините их так, как на рис. 9.13.
  • Установите свойства объектов согласно табл. 9.12.
  • Предположим, что из сегмента ожидания разгрузки (п. 9.1.9.2) через объект enter13 поступила заявка-самолёт типа Б в объект split5. Объектом split5 заявка размножается на число заявок, равное количеству контейнеров, которые должны быть выгружены из самолёта. Заявка-оригинал из модели не выводится. Поэтому количество копий на 1 меньше, чем количество выгружаемых контейнеров (entity.колГрузоМест-1).

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

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

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

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

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

  • Из палитры Презентация перетащите элемент Прямоугольник.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 340, Y: 830, Ширина: 290, Высота: 190.
  • Перетащите элемент text и в поле Текст: введите Ожидание погрузки в аэропорту 2.
  • Перетащите из Основной библиотеки по два объекта enter, queue, hold и один объект exit. Поместите и соедините их так, как на рис. 9.14.
  • Установите свойства объектов согласно табл. 9.13.
  • Данный сегмент отличается от аналогичного сегмента аэропорта 1 тем, что он не предназначен в том числе и для первичного приёма самолётов. Заявки-самолёты поступают на имитируемые объектами queue стоянки стоянкаПогр2А и стоянкаПогр2Б соответственно только после разгрузки.

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

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

    Погрузка контейнеров в аэропорту 2

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

    Создайте сегмент Погрузка контейнеров в аэропорту 2.

  • Из палитры Презентация перетащите элемент Прямоугольник.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 350, Y: 50, Ширина: 460, Высота: 200.
  • Перетащите элемент text и в поле Текст: введите Погрузка контейнеров в аэропорту 1.
  • Перетащите из Основной библиотеки по два объекта enter, split, queue, delay, selectOutput и по одному объекту exit и sink. Поместите и соедините их так, как на рис. 9.15.
  • Установите свойства объектов согласно табл. 9.14.
  • (рис 9.15) Сегмент Погрузка контейнеров в аэропорту 2
    СвойствоЗначения
    enter2
    Класс заявки:ТранспСредство
    enter3
    Класс заявки:ТранспСредство
    split6
    Классы заявок:
    Оригинал, КопияТранспСредство,
    ТранспСредство
    Количество копийentity.колГрузоМест-1
    Новая заявка (копия)new ТранспСредство()
    Действие при выходе копииentity.типТрансп=
    original.типТрансп;
    entity.колГрузоМест=
    original.колГрузоМест;
    entity.tPolet=
    original.tPolet;
    entity.разные= original.разные;
    split7
    Классы заявок:
    Оригинал, КопияТранспСредство,
    ТранспСредство
    Количество копийentity.колГрузоМест-1
    Новая заявка (копия)new ТранспСредство()
    Действие при выходе копииentity.типТрансп=
    original.типТрансп;
    entity.колГрузоМест=
    original.колГрузоМест;
    entity.врПолёта=
    original.врПолёта;
    entity.разные= original.разные;
    queue
    Имя:очПогр2А
    Класс заявки:ТранспСредство
    Максимальная вместимостьУстановить флажок
    Действие при выходеentity.разные=
    срВрПогрКонтСам2А;
    Включить сбор статистикиУстановить флажок
    queue1
    Имя:очПогр2Б
    Класс заявки:ТранспСредство
    Максимальная вместимостьУстановить флажок
    Действие при выходеentity.разные=
    срВрПогрКонтСам2Б;
    Включить сбор статистикиУстановить флажок
    delay
    Имя:Погрузка2А
    Класс заявки:ТранспСредство
    Задержка задаётсяЯвно
    Время задержкиeexponential
    (1/entity.разные)
    ВместимостьпогрКонтСам2А
    Действие при выходепогрКонтА2++;
    Включить сбор статистикиУстановить флажок
    delay1
    Имя:Погрузка2Б
    Класс заявки:ТранспСредство
    Задержка задаётсяЯвно
    Время задержкиexponential
    (1/entity.разные)
    ВместимостьпогрКонтСам2Б
    Действие при выходепогрКонтБ2++;
    Включить сбор статистикиУстановить флажок
    selectOutput8
    Класс заявки:ТранспСредство
    Выход true выбираетсяПри выполнении условия
    Условиеentity.колГрузоМест
    ==погрКонтА2
    Действие при выходе (true)entity.врПолёта=
    normal(отклВрПолётаА21,
    срВрПолётаА21);
    погрКонтА2=0;
    selectOutput9
    Класс заявки:ТранспСредство
    Выход true выбираетсяПри выполнении условия
    Условиеentity.колГрузоМест
    ==погрКонтБ2
    Действие при выходе (true)entity.врПолёта=
    normal(отклВрПолётаБ21,
    срВрПолётаБ21);
    погрКонтБ2=0;
    exit
    Имя:наВзлёт21
    Класс заявки:ТранспСредство
    Действие при выходеif (entity.типТрансп==1) enter18.take(entity);
    else enter19.take(entity);
    sink
    Класс заявки:ТранспСредство

    Полёт из аэропорта 2 в аэропорт 1

    Сегмент Полёт из аэропорта 2 в аэропорт 1 предназначен для имитации полёта самолётов с грузом из аэропорта 2 в аэропорт 1.

  • Из палитры Презентация перетащите элемент Прямоугольник.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 850, Y: 1040, Ширина: 250, Высота: 220.
  • Перетащите элемент text и в поле Текст: введите Полёт из аэропорта 2 в аэропорт 1. (рис 9.16) Сегмент Полёт из аэропорта 2 в аэропорт 1
  • Перетащите из Основной библиотеки по два объекта enter, delay и один объект exit. Поместите и соедините их так, как на рис. 9.16.
  • Установите свойства объектов согласно табл. 9.15.
  • СвойствоЗначения
    enter18
    Класс заявки:ТранспСредство
    enter19
    Класс заявки:ТранспСредство
    delay
    Имя:полётА21
    Класс заявки:ТранспСредство
    Задержка задаётсяЯвно
    Время задержкиentity.врПолёта
    ВместимостьколСамТипА
    Включить сбор статистикиУстановить флажок
    delay1
    Имя:ПолётБ21
    Класс заявки:ТранспСредство
    Задержка задаётсяЯвно
    Время задержкиentity.врПолёта
    ВместимостьколСамТипБ
    Включить сбор статистикиУстановить флажок
    exit
    Имя:наОжРазгр1
    Действие при выходеif (entity.типТрансп==1) enter6.take(entity);
    else enter7.take(entity);

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

    Для вывода результатов моделирования воспользуйтесь событием, происходящим по истечении таймаута.

  • Перетащите элемент из палитры Модель на область просмотра Результаты как на рис. 9.3. Измените его имя на ОбрабРезультМодел. Нажмите Enter.
  • Установите флажок Отображать имя.
  • С помощью выпадающего списка Tип события: выберите По таймауту.
  • Установите Режим: Срабатывает один раз.
  • Время срабатывания (абсолютное) 720000.
  • В поле Действие введите Java код, который будет выполняться при появлении этого события.
    коэфДост21=достК21/всегоПостК2;
    коэфДост12=достК12/всегоПостК1;
    коэфПогр1А=погрузка1А.statsUtilization.mean();
    коэфПогр1Б=погрузка1Б.statsUtilization.mean();
    коэфПогр2А=погрузка2А.statsUtilization.mean();
    коэфПогр2Б=погрузка2Б.statsUtilization.mean();
    коэфРазгр1А=разгрузка1А.statsUtilization.mean();
    коэфРазгр1Б=разгрузка1Б.statsUtilization.mean();
    коэфРазгр2А=разгрузка2А.statsUtilization.mean();
    коэфРазгр2Б=разгрузка2Б.statsUtilization.mean();
    коэфПолётА12=полётА12.statsUtilization.mean();
    коэфПолётБ12=полётБ12.statsUtilization.mean();
    коэфИспСам1А=коэфПогр1А+коэфРазгр1А+коэфПолётА12;
    коэфИспСам1Б=коэфПогр1Б+коэфРазгр1Б+коэфПолётБ12;
    коэфПолётА21=полётА21.statsUtilization.mean();
    коэфПолётБ21=полётБ21.statsUtilization.mean();
    коэфИспСам2А=коэфПогр2А+коэфРазгр2А+коэфПолётА21;
    коэфИспСам2Б=коэфПогр2Б+коэфРазгр2Б+коэфПолётБ21;
    коэфИспСамА=(коэфИспСам1А+коэфИспСам2А)/2;
    коэфИспСамБ=(коэфИспСам1Б+коэфИспСам2Б)/2;
    коэфДост=(достК12+достК21)/(всегоПостК1+всегоПостК2);
    коэфИспСам=(коэфИспСамА+коэфИспСамБ)/2;
  • Запуск и отладка модели

    Прежде чем запустить модель:

  • В окне Проекты выделите ВоздушныеПеревозки.
  • На странице Основные в поле Единицы модельного времени: установите часы.
  • В окне Проекты выделите Simulation: Main.
  • На странице Основные установите Фиксированное начальное число (воспроизводимые "прогоны").
  • В поле Начальное число: введите 15657 (можно ввести и другое начальное число, тогда результаты моделирования будут отличаться от тех, что получены при рекомендуемом начальном числе и показаны на рис. 9.17).
  • Перейдите на страницу Модельное время. В поле Остановить: выберите В заданное время.
  • В поле Конечное время: введите 720000.0. Время моделирования увеличено в 1000 раз по числу прогонов модели в GPSS World. Таким образом, моделируется функционирование системы воздушных перевозок в течение 720 часов (30-ти суток).
  • Запустите модель. Если появятся ошибки, исправьте их.
  • При правильном построении модели вы получите результаты, показанные на рис. 9.17.

    (рис 9.17) Результаты моделирования

    Видно, что коэффициент доставки системы воздушных перевозок при принятых её характеристиках и потоках грузов составляет коэфДост = 0,31 при среднем коэффициенте использования самолётов обоих типов коэфИспСам = 0,638. Коэффициент использования самолёта типа Б (0,481) ниже коэфИспСамА = 0,795.

    Страницы:

    Модель в AnyLogic

    Постановка задачи

    Система авиаперевозок включает два аэропорта. Перевозки выполняются из первого аэропорта во второй и обратно. Время полета между аэропортами распределено по нормальному закону.

    Грузы в каждый аэропорт поступают партиями в контейнерах. Количество контейнеров в партии распределено по равномерному закону. Интервалы времени между поступлениями партий грузов распределены по экспоненциальному закону.

    Для авиаперевозок используют два типа самолетов А и Б и грузоподъемностями q1 и q2 шт. контейнеров соответственно (q1 < q2). В аэропорту нет фиксированного расписания. Каждый самолет отправляется в полет сразу после его полной загрузки. Время погрузки и время выгрузки одного контейнера распределены по экспоненциальному закону. В первую очередь используются самолеты типа А, а при их отсутствии - типа Б.

    Исходные данные

    ХарактеристикиАэропорты
    12
    Количество самолётов типа А, шт.20
    Грузоподъёмность самолёта типа А, шт.5050
    Количество самолётов типа Б, шт.10
    Грузоподъёмность самолёта типа Б, шт.100100
    Минимальное количество контейнеров в партии, шт.11
    Максимальное количество контейнеров в партии, шт.1522
    Средний интервал поступления партий грузов, час0,50,4
    Количество одновременно погружаемых контейнеров в самолёт типа А, шт.22
    Количество одновременно погружаемых контейнеров в самолёт типа Б, шт.22
    Количество одновременно выгружаемых контейнеров из самолёта типа А, шт.32
    Количество одновременно выгружаемых контейнеров из самолёта типа Б, шт.32
    Среднее время погрузки контейнера в самолёт типа А, час0,10,2
    Среднее время погрузки контейнера в самолёт типа Б, час0,10,1
    Среднее время выгрузки контейнера из самолёта типа А, час0,20,2
    Среднее я время выгрузки контейнера из самолёта типа Б, час0,20,2
    Среднее время полета самолёта типа А из аэропорта 1 в аэропорт 2 и из аэропорта 2 в аэропорт 1, час3,43,6
    Стандартное отклонение времени полёта самолёта типа А из аэропорта 1 в аэропорт 2 и из аэропорта 2 в аэропорт 1, час0,50,6
    Среднее время полета самолёта типа Б из аэропорта 1 в аэропорт 2 и из аэропорта 2 в аэропорт 1, час3,24,1
    Стандартное отклонение времени полёта самолёта типа Б из аэропорта 1 в аэропорт 2 и из аэропорта 2 в аэропорт 1, час0,50,8

    Задание на исследование

    Построить имитационную модель функционирования системы воздушных перевозок с целью определения следующих её показателей:

  • коэффициенты доставки грузов самолётами типов А и Б в аэропорты 1 и 2;
  • коэффициент доставки грузов системой перевозок в целом;
  • коэффициенты использования самолётов типов А и Б в аэропортах 1 и 2;
  • коэффициент использования самолётов системой перевозок в целом;
  • коэффициенты использования средств погрузки, выгрузки в аэропортах 1 и 2 и самолётов при выполнении ими полётов.
  • Исследовать влияние на показатели функционирования системы воздушных перевозок её характеристик, выявить среди них существенные и несущественные.

    Сделать выводы о построении эффективной системы воздушных перевозок и возможных направлениях совершенствования после введения в эксплуатацию.

    Формализованное описание модели

    Представим систему воздушных перевозок в виде СМО (Рис. 9.1).

    Система воздушных перевозок представляет собой многофазную многоканальную СМО сложной структуры с различными видами заявок. Модель, исходя из такой структуры, должна состоять из двух частей:

  • имитация функционирования аэропорта 1;
  • имитация функционирования аэропорта 2.
  • В каждую из этих частей модели нужно включить следующие сегменты:

  • имитация функционирования аэропорта 1:
  • прибытие самолётов в аэропорт 1, ожидание погрузки;
  • поступление и учёт грузов в аэропорту 1;
  • погрузка грузов в аэропорту 1;
  • полёт из аэропорта 1 в аэропорт 2;
  • ожидание разгрузки в аэропорту 1;
  • разгрузка самолётов в аэропорту 1;
  • имитация функционирования аэропорта 2:
  • поступление и учёт грузов в аэропорту 2;
  • ожидание разгрузки в аэропорту 2;
  • разгрузка самолётов в аэропорту 2;
  • ожидание погрузки в аэропорту 2;
  • погрузка грузов в аэропорту 2;
  • полёт из аэропорта 2 в аэропорт 1.
  • В модели с точки зрения интерпретации целесообразно рассматривать заявки трёх видов:

  • заявки как транспортные средства - самолёты;
  • заявки как поступающие грузы в аэропорт 1;
  • заявки как поступающие грузы в аэропорт 2.
  • Заявки как транспортные средства - самолёты должны иметь следующие параметры (поля):

  • типТрансп - код типа транспортного средства - самолёта;
  • колГрузоМест - количество груза (контейнеров) в загруженном транспортном средстве - самолёте;
  • врПолёта - время полёта самолёта из аэропорта отправления в аэропорт назначения;
  • разные - другие характеристики процесса перевозки грузов воздушным транспортом.
  • (рис 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.
  • Создание областей просмотра

    Создайте следующие области просмотра, на которых вы будете помещать сегменты имитационной модели:

  • исхДанные;
  • Результаты;
  • Аэропорт1;
  • Аэропорт2.
  • При необходимости вы можете создать и другие области просмотра в зависимости от возможностей вашего компьютера и монитора. При этом можете пользоваться встроенными средствами перехода к областям просмотра или добавить свои соответствующие элементы управления.

    Значения свойств элементов Область просмотра установите согласно Табл. 9.2.

    СвойстваОбласти просмотра
    Имя:исхДанныеРезультатыАэропорт1Аэропорт1
    Х:10101010
    Y:1860260010790
    Ширина:62053010801110
    Высота:490470480490

    Для всех областей просмотра оставьте Выравнивать по: Верхнему левому углу, установите из списка Масштабирование: Подогнать под окно.

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

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

  • Перетащите элемент Скруглённый прямоугольник на элемент Область просмотра с именем исхДанные.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 30, Y: 1880, Ширина: 580, Высота: 450.
  • Перетащите элемент text и в поле Текст: введите Исходные данные.
  • Из библиотеки Основная перетащите элементы Параметр и поместите их так, как на рис. 9.2.
  • Значения свойств установите согласно Табл. 9.3.
  • (рис 9.2) Элементы Параметр для ввода исходных данных
    ИмяТипЗначение по умолчанию
    Самолёты типа А
    колСамТипАint2
    грузПодСамАint50
    Аэропорт 1
    минКонтПост1int1
    максКонтПост1int15
    срВрПостКонт1double0,5
    погрКонтСам1Аint2
    погрКонтСам1Бint2
    выгрКонтСам1Аint3
    выгрКонтСам1Бint3
    срВрПогрКонтСам1Аdouble0,1
    срВрПогрКонтСам1Бdouble0,1
    срВрВыгрКонтСам1Аdouble0,2
    срВрВыгрКонтСам1Бdouble0,2
    срВрПолётаА12double3,4
    отклВрПолётаА12double0,5
    срВрПолётаБ12double3,2
    отклВрПолётаБ12double0,5
    Самолёты типа Б
    колСамТипБint1
    грузПодСамБint100
    Аэропорт 2
    минКонтПост2int1
    максКонтПост2int22
    срВрПостКонт2double0,4
    погрКонтСам2Аint2
    погрКонтСам2Бint2
    выгрКонтСам2Аint2
    выгрКонтСам2Бint2
    срВрПогрКонтСам2Аdouble0,2
    срВрПогрКонтСам2Бdouble0,1
    срВрВыгрКонтСам2Аdouble0,2
    срВрВыгрКонтСам2Бdouble0,2
    срВрПолётаА12double3,6
    отклВрПолётаА12double0,6
    срВрПолётаБ12double4,1
    отклВрПолётаБ12double0,8

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

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

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

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

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

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

  • Из палитры Презентация перетащите элемент Прямоугольник.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 30, Y: 50, Ширина: 310, Высота: 200.
  • Перетащите элемент text и в поле Текст: введите Прибытие самолётов в аэропорт 1. Ожидание погрузки.
  • Перетащите из Основной библиотеки по два объекта source, enter, queue, hold и один объект exit. Поместите и соедините их так, как на рис. 9.4.
  • При построении модели вам придётся воспользоваться Java-кодом, в котором потребуются дополнительные поля заявок. Для этого вы должны создать нестандартный класс заявки с дополнительными полями для записи и хранения параметров, о которых упоминалось ранее (см. п. 9.1.4).

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

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

    (рис 9.4) Сегмент Прибытие самолётов в аэропорт 1 (рис 9.5) Поля нового Java класса ТранспСредство

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Из палитры Презентация перетащите элемент Прямоугольник.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 30, Y: 270, Ширина: 220, Высота: 200.
  • Перетащите элемент text и в поле Текст: введите Поступление и учёт контейнеров в аэропорту 1.
  • Перетащите из Основной библиотеки по одному объекту source, selectOutput5 (имя selectOutput) и sink. Поместите и соедините их так, как на рис. 9.6.
  • Установите свойства объектов согласно табл. 9.5.

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

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

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

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

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

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

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

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

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

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

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

    Погрузка контейнеров в аэропорту 1

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

    Создайте сегмент Погрузка контейнеров в аэропорту 1.

  • Из палитры Презентация перетащите элемент Прямоугольник.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 350, Y: 50, Ширина: 460, Высота: 200. (рис 9.7) Сегмент Погрузка контейнеров в аэропорту 1
  • Перетащите элемент text и в поле Текст: введите Погрузка контейнеров в аэропорту 1.
  • Перетащите из Основной библиотеки по два объекта enter, split, queue, delay, selectOutput и по одному объекту exit и sink. Поместите и соедините их так, как на рис. 9.7.
  • Установите свойства объектов согласно табл. 9.6.
  • СвойствоЗначения
    enter2
    Класс заявки:ТранспСредство
    enter3
    Класс заявки:ТранспСредство
    split
    Классы заявок:
    Оригинал, КопияТранспСредство,
    ТранспСредство
    Количество копийentity.колГрузоМест-1
    Новая заявка (копия)new ТранспСредство()
    Действие при выходе копииentity.типТрансп=
    original.типТрансп;
    entity.колГрузоМест=
    original.колГрузоМест;
    entity.tPolet=
    original.tPolet;
    entity.разные =original.разные;
    split1
    Классы заявок:
    Оригинал, КопияТранспСредство,
    ТранспСредство
    Количество копийentity.колГрузоМест-1
    Новая заявка (копия)new ТранспСредство()
    Действие при выходе копииentity.типТрансп=
    original.типТрансп;
    entity.колГрузоМест=
    original.колГрузоМест;
    entity.врПолёта=
    original.врПолёта;
    entity.разные =original.разные;
    Имя:очПогр1А
    Класс заявки:ТранспСредство
    Максимальная вместимостьУстановить флажок
    Действие при выходеentity.разные=
    срВрПогрКонтСам1А;
    Включить сбор статистикиУстановить флажок
    queue1
    Имя:очПогр1Б
    Класс заявки:ТранспСредство
    Максимальная вместимостьУстановить флажок
    Действие при выходеentity.разные=
    срВрПогрКонтСам1Б;
    Включить сбор статистикиУстановить флажок
    delay
    Имя:погрузка1А
    Класс заявки:ТранспСредство
    Задержка задаётсяЯвно
    Время задержкиexponential
    (1/entity.разные)
    ВместимостьпогрКонтСам1А
    Действие при выходепогрКонтА1++;
    Включить сбор статистикиУстановить флажок
    delay1
    Имя:погрузка1Б
    Класс заявки:ТранспСредство
    Задержка задаётсяЯвно
    Время задержкиexponential
    (1/entity.разные)
    ВместимостьпогрКонтСам1Б
    Действие при выходепогрКонтБ1++;
    Включить сбор статистикиУстановить флажок
    selectOutput1
    Класс заявки:ТранспСредство
    Выход true выбираетсяПри выполнении условия
    Условиеentity.колГрузоМест
    ==погрКонтА1
    Действие при выходе (true)entity.врПолёта=
    normal(отклВрПолётаА12,
    срВрПолётаА12);
    погрКонтА1=0;
    selectOutput2
    Класс заявки:ТранспСредство
    Выход true выбираетсяПри выполнении условия
    Условиеentity.колГрузоМест
    ==погрКонтБ1
    Действие при выходе (true)entity.врПолёта=
    normal(отклВрПолётаБ12,
    срВрПолётаБ12);
    погрКонтБ1=0;
    exit
    Имя:наВзлёт12
    Класс заявки:ТранспСредство
    Действие при выходеif (entity.типТрансп==1) enter4.take(entity);
    else enter5.take(entity);
    sink
    Класс заявки:ТранспСредство

    Предположим, что из сегмента ожидания погрузки через объект enter2 поступила заявка-самолёт типа А в объект split. Объектом split заявка размножается на число заявок, равное количеству контейнеров, которые должны быть погружены в самолёт. Заявка-оригинал из модели не выводится.

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

    Заявки-контейнеры занимают очередь к объекту погрузка1А, имитирующему непосредственно погрузку контейнеров в самолёт типа А в аэропорту 1. При покидании очереди выполняется код entity.разные=срВрПогрКонтСам1А, записывающий в поле с именем разные заявки-контейнера среднее время погрузки одного контейнера.

    После объекта погрузка1А, на выходе которого ведётся счёт погруженных контейнеров (погрКонтА1++), заявки-контейнеры входят в объект selectOutput1.

    Этот объект проверяет условие (entity.колГрузоМест ==погрКонтБ1): полная ли загрузка самолёта? При выполнении этого условия, а оно будет выполнено тогда, когда будет загружен последний контейнер, последняя заявка теперь уже в качестве заявки-самолёта поступит в объект наВзлёт (exit).

    Из этого объекта заявка-самолёт типа А с полным грузом поступит в сегмент имитации полёта из аэропорта 1 в аэропорт 2.

    Аналогичным образом имитируется погрузка в самолёт типа Б. Имитация начинается с поступления заявки-самолёта через объект enter3 в объект split1.

    Полёт из аэропорта 1 в аэропорт 2

    Сегмент Полёт из аэропорта 1 в аэропорт 2 предназначен для имитации полёта самолётов с грузом из аэропорта 1 в аэропорт 2.

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

  • Из палитры Презентация перетащите элемент Прямоугольник.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 830, Y: 50, Ширина: 240, Высота: 200.
  • Перетащите элемент text и в поле Текст: введите Полёт из аэропорта 1 в аэропорт 2.
  • Перетащите из Основной библиотеки по два объекта enter, delay и один объект exit. Поместите и соедините их так, как на рис. 9.8.
  • Установите свойства объектов согласно табл. 9.7.
  • Предположим, что поступила заявка-самолёт типа А в объект enter4 и далее в объект с именем полётА12 (delay). Идентификатор полётА12 означает, что объект имитирует непосредственно полёт из аэропорта 1 в аэропорт 2. В аэропорту 2 заявка-самолёт входит в сегмент ожидания разгрузки.

    (рис 9.8) Сегмент Полёт из аэропорта 1 в аэропорт 2
    СвойствоЗначения
    enter4
    Класс заявки:ТранспСредство
    enter5
    Класс заявки:ТранспСредство
    delay
    Имя:полётА12
    Класс заявки:ТранспСредство
    Задержка задаётсяЯвно
    Время задержкиentity.врПолёта
    ВместимостьколСамТипА
    Включить сбор статистикиУстановить флажок
    delay1
    Имя:ПолётБ12
    Класс заявки:ТранспСредство
    Задержка задаётсяЯвно
    Время задержкиentity.врПолёта
    ВместимостьколСамТипБ
    Включить сбор статистикиУстановить флажок
    exit
    Действие при выходеif (entity.типТрансп==1) enter10.take(entity);
    else enter11.take(entity);

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

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

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

  • Из палитры Презентация перетащите элемент Прямоугольник.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 270, Y: 270, Ширина: 310, Высота: 200.
  • Перетащите элемент text и в поле Текст: введите Ожидание разгрузки в аэропорту 1.
  • Перетащите из Основной библиотеки по два объекта enter, queue, hold и один объект exit. Поместите и соедините их так, как на рис. 9.9.
  • Установите свойства объектов согласно табл. 9.8.
  • Предположим, что поступила заявка-самолёт из аэропорта 2 в объект enter6. Если средства разгрузки свободны, то есть выполняется условие (разгрузка1А.size()==0), разблокировывается объект hold2 и заявка-самолёт входит в объект наРазгрузку1 и далее в сегмент имитации разгрузки.

    (рис 9.9) Сегмент Ожидание разгрузки в аэропорту 1
    СвойствоЗначения
    enter6
    Класс заявки:ТранспСредство
    Действие при входеif (разгрузка1А.size()==0) hold2.setBlocked(false);
    enter7
    Класс заявки:ТранспСредство
    Действие при входеif (разгрузка1Б.size()==0) hold3.setBlocked(false);
    queue
    Имя:стоянкаРазгр1А
    Класс заявки:ТранспСредство
    ВместимостьколСамТипА
    Включить сбор статистикиУстановить флажок
    queue1
    Имя:стоянкаРазгр1Б
    Класс заявки:ТранспСредство
    ВместимостьколСамТипБ
    Включить сбор статистикиУстановить флажок
    hold2
    Класс заявки:ТранспСредство
    Изначально заблокированУстановить флажок
    hold3
    Класс заявки:ТранспСредство
    Изначально заблокированУстановить флажок
    exit
    Имя:наРазгрузку1
    Действие при выходеif (entity.типТрансп==1) {hold2.setBlocked(true);
    enter8.take(entity);}
    else {hold3.setBlocked(true);
    enter9.take(entity);}

    При выходе из объекта наРазгрузку1 блокируется объект hold2 кодом hold2.setBlocked(true), так как теперь средства разгрузки самолётов типа А аэропорта 1 заняты.

    Если поступает заявка-самолёт типа Б, то она входит в сегмент через объект enter7. Имитация ожидания разгрузки заявкой-самолётом типа Б производится аналогично.

    Разгрузка самолётов в аэропорту 1

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

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

  • Из палитры Презентация перетащите элемент Прямоугольник.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 600, Y: 270, Ширина: 470, Высота: 200.
  • Перетащите элемент text и в поле Текст: введите Разгрузка самолётов в аэропорту 1.
  • Перетащите из Основной библиотеки по два объекта enter, split, queue, delay, selectOutput и по одному объекту exit и sink. Поместите и соедините их так, как на рис. 9.10.
  • Установите свойства объектов согласно табл. 9.9.
  • Предположим, что из сегмента ожидания разгрузки через объект enter8 поступила заявка-самолёт типа А в объект split2. Объектом split2 заявка размножается на число заявок, равное количеству контейнеров, которые должны быть выгружены из самолёта. Заявка-оригинал из модели не выводится.

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

    (рис 9.10) Сегмент Разгрузка самолётов в аэропорту 1
    СвойствоЗначения
    enter8
    Класс заявки:ТранспСредство
    enter9
    Класс заявки:ТранспСредство
    split2
    Классы заявок:
    Оригинал, КопияТранспСредство,
    ТранспСредство
    Количество копийentity.колГрузоМест-1
    Новая заявка (копия)new ТранспСредство()
    Действие при выходе копииentity.типТрансп=
    original.типТрансп;
    entity.колГрузоМест=
    original.колГрузоМест;
    entity.врПолёта=
    original.врПолёта;
    entity.разные=
    original.разные;
    split3
    Классы заявок:
    Оригинал, КопияТранспСредство,
    ТранспСредство
    Количество копийentity.колГрузоМест-1
    Новая заявка (копия)new ТранспСредство()
    Действие при выходе копииentity.типТрансп=
    original.типТрансп;
    entity.колГрузоМест=
    original.колГрузоМест;
    entity.врПолёта=
    original.врПолёта;
    entity.разные =original.разные;
    queue
    Имя:очРазгр1А
    Класс заявки:ТранспСредство
    Максимальная вместимостьУстановить флажок
    Действие при выходеentity.разные=
    срВрВыгрКонтСам1А
    Включить сбор статистикиУстановить флажок
    queue1
    Имя:очРазгр1Б
    Класс заявки:ТранспСредство
    Максимальная вместимостьУстановить флажок
    Действие при выходеentity.разные=
    срВрВыгрКонтСам1А
    Включить сбор статистикиУстановить флажок
    delay
    Имя:разгрузка1А
    Класс заявки:ТранспСредство
    Задержка задаётсяЯвно
    Время задержкиexponential
    (1/entity.разные)
    ВместимостьвыгрКонтСам1А
    Действие при выходевыгрКонтА1++;
    Включить сбор статистикиУстановить флажок
    delay1
    Имя:разгрузка1Б
    Класс заявки:ТранспСредство
    Задержка задаётсяЯвно
    Время задержкиexponential
    (1/entity.разные)
    ВместимостьвыгрКонтСам1Б
    Действие при выходевыгрКонтБ1++;
    Включить сбор статистикиУстановить флажок
    selectOutput3
    Класс заявки:ТранспСредство
    Выход true выбираетсяПри выполнении условия
    Условиеentity.колГрузоМест==
    выгрКонтА1
    Действие при выходе (true)выгрКонтА1=0;
    достКА21+=
    entity.колГрузоМест;
    hold2.setBlocked(false);
    selectOutput4
    Класс заявки:ТранспСредство
    Выход true выбираетсяПри выполнении условия
    Условиеentity.колГрузоМест==
    выгрКонтБ1
    Действие при выходе (true)выгрКонтБ1=0;
    достКБ21+=
    entity.колГрузоМест;
    hold3.setBlocked(false);
    exit
    Имя:наОжПогр1
    Класс заявки:ТранспСредство
    Действие при выходедостК21+=
    entity.колГрузоМест;
    if (entity.типТрансп==1) enter.take(entity);
    else enter1.take(entity);
    sink2
    Класс заявки:ТранспСредство

    Заявки-контейнеры занимают очередь к объекту разгрузка1А, имитирующему непосредственно выгрузку контейнеров из самолёта типа А в аэропорту 1. При покидании очереди выполняется код entity.разные=срВрВыгрКонтСам1А, записывающий в поле с именем разные заявки-контейнера среднее время выгрузки одного контейнера.

    После объекта разгрузка1А, на выходе которого ведётся счёт выгруженных контейнеров (выгрКонтА1++), заявки-контейнеры входят в объект selectOutput3.

    Этот объект проверяет условие (entity.колГрузоМест ==выгрКонтА1): полная ли выгрузка самолёта? При выполнении этого условия, а оно будет выполнено тогда, когда будет выгружен последний контейнер, последняя заявка теперь уже в качестве заявки-самолёта поступит в объект наОжПогр1 (exit).

    При выходе из объекта selectOutput3 переменной выгрКонтА1 присваивается значение 0, так она должна участвовать в очередной имитации выгрузки. Кроме того, разблокировывается объект hold2, так как теперь средства выгрузки аэропорта 1 самолётов типа А свободны

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

    Аналогичным образом имитируется выгрузка из самолёта типа Б. Имитация начинается с поступления заявки-самолёта через объект enter9 в объект split3.

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

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

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

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

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

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

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

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

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

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

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

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

  • Из палитры Презентация перетащите элемент Прямоугольник.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 30, Y: 1040, Ширина: 310, Высота: 220.
  • Перетащите элемент text и в поле Текст: введите Ожидание разгрузки в аэропорту 2.
  • Перетащите из Основной библиотеки по два объекта enter, queue, hold и один объект exit. Поместите и соедините их так, как на рис. 9.12.
  • Установите свойства объектов согласно табл. 9.11
  • (рис 9.12) Сегмент Ожидание разгрузки в аэропорту 2

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

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

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

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

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

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

  • Из палитры Презентация перетащите элемент Прямоугольник.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 360, Y: 1040, Ширина: 470, Высота: 220.
  • Перетащите элемент text и в поле Текст: введите Разгрузка самолётов в аэропорту 2.
  • Перетащите из Основной библиотеки по два объекта enter, split, queue, delay, selectOutput и по одному объекту exit и sink. Поместите и соедините их так, как на рис. 9.13.
  • Установите свойства объектов согласно табл. 9.12.
  • Предположим, что из сегмента ожидания разгрузки (п. 9.1.9.2) через объект enter13 поступила заявка-самолёт типа Б в объект split5. Объектом split5 заявка размножается на число заявок, равное количеству контейнеров, которые должны быть выгружены из самолёта. Заявка-оригинал из модели не выводится. Поэтому количество копий на 1 меньше, чем количество выгружаемых контейнеров (entity.колГрузоМест-1).

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

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

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

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

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

  • Из палитры Презентация перетащите элемент Прямоугольник.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 340, Y: 830, Ширина: 290, Высота: 190.
  • Перетащите элемент text и в поле Текст: введите Ожидание погрузки в аэропорту 2.
  • Перетащите из Основной библиотеки по два объекта enter, queue, hold и один объект exit. Поместите и соедините их так, как на рис. 9.14.
  • Установите свойства объектов согласно табл. 9.13.
  • Данный сегмент отличается от аналогичного сегмента аэропорта 1 тем, что он не предназначен в том числе и для первичного приёма самолётов. Заявки-самолёты поступают на имитируемые объектами queue стоянки стоянкаПогр2А и стоянкаПогр2Б соответственно только после разгрузки.

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

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

    Погрузка контейнеров в аэропорту 2

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

    Создайте сегмент Погрузка контейнеров в аэропорту 2.

  • Из палитры Презентация перетащите элемент Прямоугольник.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 350, Y: 50, Ширина: 460, Высота: 200.
  • Перетащите элемент text и в поле Текст: введите Погрузка контейнеров в аэропорту 1.
  • Перетащите из Основной библиотеки по два объекта enter, split, queue, delay, selectOutput и по одному объекту exit и sink. Поместите и соедините их так, как на рис. 9.15.
  • Установите свойства объектов согласно табл. 9.14.
  • (рис 9.15) Сегмент Погрузка контейнеров в аэропорту 2
    СвойствоЗначения
    enter2
    Класс заявки:ТранспСредство
    enter3
    Класс заявки:ТранспСредство
    split6
    Классы заявок:
    Оригинал, КопияТранспСредство,
    ТранспСредство
    Количество копийentity.колГрузоМест-1
    Новая заявка (копия)new ТранспСредство()
    Действие при выходе копииentity.типТрансп=
    original.типТрансп;
    entity.колГрузоМест=
    original.колГрузоМест;
    entity.tPolet=
    original.tPolet;
    entity.разные= original.разные;
    split7
    Классы заявок:
    Оригинал, КопияТранспСредство,
    ТранспСредство
    Количество копийentity.колГрузоМест-1
    Новая заявка (копия)new ТранспСредство()
    Действие при выходе копииentity.типТрансп=
    original.типТрансп;
    entity.колГрузоМест=
    original.колГрузоМест;
    entity.врПолёта=
    original.врПолёта;
    entity.разные= original.разные;
    queue
    Имя:очПогр2А
    Класс заявки:ТранспСредство
    Максимальная вместимостьУстановить флажок
    Действие при выходеentity.разные=
    срВрПогрКонтСам2А;
    Включить сбор статистикиУстановить флажок
    queue1
    Имя:очПогр2Б
    Класс заявки:ТранспСредство
    Максимальная вместимостьУстановить флажок
    Действие при выходеentity.разные=
    срВрПогрКонтСам2Б;
    Включить сбор статистикиУстановить флажок
    delay
    Имя:Погрузка2А
    Класс заявки:ТранспСредство
    Задержка задаётсяЯвно
    Время задержкиeexponential
    (1/entity.разные)
    ВместимостьпогрКонтСам2А
    Действие при выходепогрКонтА2++;
    Включить сбор статистикиУстановить флажок
    delay1
    Имя:Погрузка2Б
    Класс заявки:ТранспСредство
    Задержка задаётсяЯвно
    Время задержкиexponential
    (1/entity.разные)
    ВместимостьпогрКонтСам2Б
    Действие при выходепогрКонтБ2++;
    Включить сбор статистикиУстановить флажок
    selectOutput8
    Класс заявки:ТранспСредство
    Выход true выбираетсяПри выполнении условия
    Условиеentity.колГрузоМест
    ==погрКонтА2
    Действие при выходе (true)entity.врПолёта=
    normal(отклВрПолётаА21,
    срВрПолётаА21);
    погрКонтА2=0;
    selectOutput9
    Класс заявки:ТранспСредство
    Выход true выбираетсяПри выполнении условия
    Условиеentity.колГрузоМест
    ==погрКонтБ2
    Действие при выходе (true)entity.врПолёта=
    normal(отклВрПолётаБ21,
    срВрПолётаБ21);
    погрКонтБ2=0;
    exit
    Имя:наВзлёт21
    Класс заявки:ТранспСредство
    Действие при выходеif (entity.типТрансп==1) enter18.take(entity);
    else enter19.take(entity);
    sink
    Класс заявки:ТранспСредство

    Полёт из аэропорта 2 в аэропорт 1

    Сегмент Полёт из аэропорта 2 в аэропорт 1 предназначен для имитации полёта самолётов с грузом из аэропорта 2 в аэропорт 1.

  • Из палитры Презентация перетащите элемент Прямоугольник.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 850, Y: 1040, Ширина: 250, Высота: 220.
  • Перетащите элемент text и в поле Текст: введите Полёт из аэропорта 2 в аэропорт 1. (рис 9.16) Сегмент Полёт из аэропорта 2 в аэропорт 1
  • Перетащите из Основной библиотеки по два объекта enter, delay и один объект exit. Поместите и соедините их так, как на рис. 9.16.
  • Установите свойства объектов согласно табл. 9.15.
  • СвойствоЗначения
    enter18
    Класс заявки:ТранспСредство
    enter19
    Класс заявки:ТранспСредство
    delay
    Имя:полётА21
    Класс заявки:ТранспСредство
    Задержка задаётсяЯвно
    Время задержкиentity.врПолёта
    ВместимостьколСамТипА
    Включить сбор статистикиУстановить флажок
    delay1
    Имя:ПолётБ21
    Класс заявки:ТранспСредство
    Задержка задаётсяЯвно
    Время задержкиentity.врПолёта
    ВместимостьколСамТипБ
    Включить сбор статистикиУстановить флажок
    exit
    Имя:наОжРазгр1
    Действие при выходеif (entity.типТрансп==1) enter6.take(entity);
    else enter7.take(entity);

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

    Для вывода результатов моделирования воспользуйтесь событием, происходящим по истечении таймаута.

  • Перетащите элемент из палитры Модель на область просмотра Результаты как на рис. 9.3. Измените его имя на ОбрабРезультМодел. Нажмите Enter.
  • Установите флажок Отображать имя.
  • С помощью выпадающего списка Tип события: выберите По таймауту.
  • Установите Режим: Срабатывает один раз.
  • Время срабатывания (абсолютное) 720000.
  • В поле Действие введите Java код, который будет выполняться при появлении этого события.
    коэфДост21=достК21/всегоПостК2;
    коэфДост12=достК12/всегоПостК1;
    коэфПогр1А=погрузка1А.statsUtilization.mean();
    коэфПогр1Б=погрузка1Б.statsUtilization.mean();
    коэфПогр2А=погрузка2А.statsUtilization.mean();
    коэфПогр2Б=погрузка2Б.statsUtilization.mean();
    коэфРазгр1А=разгрузка1А.statsUtilization.mean();
    коэфРазгр1Б=разгрузка1Б.statsUtilization.mean();
    коэфРазгр2А=разгрузка2А.statsUtilization.mean();
    коэфРазгр2Б=разгрузка2Б.statsUtilization.mean();
    коэфПолётА12=полётА12.statsUtilization.mean();
    коэфПолётБ12=полётБ12.statsUtilization.mean();
    коэфИспСам1А=коэфПогр1А+коэфРазгр1А+коэфПолётА12;
    коэфИспСам1Б=коэфПогр1Б+коэфРазгр1Б+коэфПолётБ12;
    коэфПолётА21=полётА21.statsUtilization.mean();
    коэфПолётБ21=полётБ21.statsUtilization.mean();
    коэфИспСам2А=коэфПогр2А+коэфРазгр2А+коэфПолётА21;
    коэфИспСам2Б=коэфПогр2Б+коэфРазгр2Б+коэфПолётБ21;
    коэфИспСамА=(коэфИспСам1А+коэфИспСам2А)/2;
    коэфИспСамБ=(коэфИспСам1Б+коэфИспСам2Б)/2;
    коэфДост=(достК12+достК21)/(всегоПостК1+всегоПостК2);
    коэфИспСам=(коэфИспСамА+коэфИспСамБ)/2;
  • Запуск и отладка модели

    Прежде чем запустить модель:

  • В окне Проекты выделите ВоздушныеПеревозки.
  • На странице Основные в поле Единицы модельного времени: установите часы.
  • В окне Проекты выделите Simulation: Main.
  • На странице Основные установите Фиксированное начальное число (воспроизводимые "прогоны").
  • В поле Начальное число: введите 15657 (можно ввести и другое начальное число, тогда результаты моделирования будут отличаться от тех, что получены при рекомендуемом начальном числе и показаны на рис. 9.17).
  • Перейдите на страницу Модельное время. В поле Остановить: выберите В заданное время.
  • В поле Конечное время: введите 720000.0. Время моделирования увеличено в 1000 раз по числу прогонов модели в GPSS World. Таким образом, моделируется функционирование системы воздушных перевозок в течение 720 часов (30-ти суток).
  • Запустите модель. Если появятся ошибки, исправьте их.
  • При правильном построении модели вы получите результаты, показанные на рис. 9.17.

    (рис 9.17) Результаты моделирования

    Видно, что коэффициент доставки системы воздушных перевозок при принятых её характеристиках и потоках грузов составляет коэфДост = 0,31 при среднем коэффициенте использования самолётов обоих типов коэфИспСам = 0,638. Коэффициент использования самолёта типа Б (0,481) ниже коэфИспСамА = 0,795.

    Вернуться к учебному плану