|
Здравствуйте, прошел курс "Концептуальное проектирование систем в 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.

