Опубликован: 07.11.2014 | Доступ: свободный | Студентов: 442 / 37 | Длительность: 15:17:00
ISBN: 978-5-9556-0161-8
Тема: САПР
Лекция 9:

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

< Лекция 8 || Лекция 9: 12345 || Лекция 10 >
Погрузка контейнеров в аэропорту 1

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

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

  1. Из палитры Презентация перетащите элемент Прямоугольник.
  2. На странице Местоположение и размер панели Свойства введите в поля X: 350, Y: 50, Ширина: 460, Высота: 200.
    Сегмент Погрузка контейнеров в аэропорту 1

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

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

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

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

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

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

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

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

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

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

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

  1. Из палитры Презентация перетащите элемент Прямоугольник.
  2. На странице Местоположение и размер панели Свойства введите в поля X: 830, Y: 50, Ширина: 240, Высота: 200.
  3. Перетащите элемент text и в поле Текст: введите Полёт из аэропорта 1 в аэропорт 2.
  4. Перетащите из Библиотеки моделирования процессов по два объекта enter, delay и один объект exit. Поместите и соедините их так, как на Рис. 9.10.
  5. Установите свойства объектов согласно Табл. 9.7.

Предположим, что поступила заявка-самолёт типа А в объект enter4 и далее в объект с именем полётА12 (delay). Идентификатор полётА12 означает, что объект имитирует непосредственно полёт из аэропорта 1 в аэропорт 2. В аэропорту 2 заявка-самолёт входит в сегмент ожидания разгрузки.

Сегмент Полёт из аэропорта 1 в аэропорт 2

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

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

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

  1. Из палитры Презентация перетащите элемент Прямоугольник.
  2. На странице Местоположение и размер панели Свойства введите в поля X: 270, Y: 270, Ширина: 310, Высота: 200.
  3. Перетащите элемент text и в поле Текст: введите Ожидание разгрузки в аэропорту 1.
  4. Перетащите из Библиотеки моделирования процессов по два объекта enter, queue, hold и один объект exit. Поместите и соедините их так, как на Рис. 9.11.
  5. Установите свойства объектов согласно Табл. 9.8.

Предположим, что поступила заявка-самолёт из аэропорта 2 в объект enter6. Если средства разгрузки свободны, то есть выполняется условие (разгрузка1А.size()==0), разблокировывается объект hold2 и заявка-самолёт входит в объект наРазгрузку1 и далее в сегмент имитации разгрузки.

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

увеличить изображение
Рис. 9.11. Сегмент Ожидание разгрузки в аэропорту 1
Таблица 9.8.
Свойство Значения
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.

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

  1. Из палитры Презентация перетащите элемент Прямоугольник.
  2. На странице Местоположение и размер панели Свойства введите в поля X: 600, Y: 270, Ширина: 470, Высота: 200.
  3. Перетащите элемент text и в поле Текст: введите Разгрузка самолётов в аэропорту 1.
  4. Перетащите по два объекта enter, split, queue, delay, selectOutput и по одному объекту exit и sink. Поместите и соедините их так, как на Рис. 9.12.
  5. Установите свойства объектов согласно Табл. 9.9.

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

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

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

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

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

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

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

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

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

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

< Лекция 8 || Лекция 9: 12345 || Лекция 10 >
Игорь Маникин
Игорь Маникин

Коллеги, спасибо за очень информативный и полезный курс. Прошёл три лекции. Столкнулся с проблемой, что обе модели не могут закончить расчёт по причине ограничения бесплатной версии "создано максимально допустимое число динамически создаваемых агентов (50000)". По скриншотам Лекции 2 видно, что да, модель создает гораздо больше 50000 агентов. В принципе, мне то и диплом не особо нужен. Но хотелось бы выполнить практические работы. Нет ли возможности откорректировать эту проблему? Или может я чего не так делаю?

Еще раз спасибо за прекрасный курс!

Артём Нагайцев
Артём Нагайцев

Выдает ошибку "entity cannot be resolved to a variable" при попытке запуска. В чем может быть причина? Ошибка в строках

entity.time_vxod=time(); 

time_obrabotki.add(time()-entity.time_vxod);