Здравствуйте, прошел курс "Концептуальное проектирование систем в AnyLogic и GPSS World". Можно ли получить по нему сертификат? У нас в институте требуют сертификаты для создания портфолио. |
Модель функционирования системы воздушных перевозок
Поступление и учёт контейнеров в аэропорту 1
Сегмент Поступление и учёт контейнеров в аэропорту 1 предназначен для имитации приёма поступающих от источников грузов (контейнеров), учёта их, определения необходимого количества контейнеров для загрузки соответствующего самолёта и формирования команды для отправки этого самолёта на погрузку контейнеров.
Создайте этот сегмент.
- Из палитры Презентация перетащите элемент Прямоугольник.
- Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 30, Y: 270, Ширина: 220, Высота: 200.
- Перетащите элемент text и в поле Текст: введите Поступление и учёт контейнеров в аэропорту 1.
- Перетащите из Основной библиотеки по одному объекту source, selectOutput5 (имя selectOutput) и sink. Поместите и соедините их так, как на рис. 9.6.
Установите свойства объектов согласно табл. 9.5.
Объект source с именем истГрузов1 генерирует заявку-партию класса ГрузАэропорт1 поступивших контейнеров, число которых в партии распределено по равномерному закону. Заявка-партия поступает на объект selectOutput.
В условии 0 проверяется наличие числа контейнеров, достаточного для полной загрузки самолёта типа А. Если число контейнеров недостаточно, заявка-партия уничтожается. Так продолжается до тех пор, пока не выполнится условие 0.
Свойство | Значения |
---|---|
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.
- Перетащите элемент 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.