Коллеги, спасибо за очень информативный и полезный курс. Прошёл три лекции. Столкнулся с проблемой, что обе модели не могут закончить расчёт по причине ограничения бесплатной версии "создано максимально допустимое число динамически создаваемых агентов (50000)". По скриншотам Лекции 2 видно, что да, модель создает гораздо больше 50000 агентов. В принципе, мне то и диплом не особо нужен. Но хотелось бы выполнить практические работы. Нет ли возможности откорректировать эту проблему? Или может я чего не так делаю? Еще раз спасибо за прекрасный курс! |
Модель функционирования системы воздушных перевозок
Имитация функционирования аэропорта 2
Сегменты, имитирующие функционирование аэропорта 2, построены в основном также, как и сегменты аэропорта 1, поэтому будут отмечены лишь некоторые особенности.
Поступление и учёт контейнеров в аэропорту 2
Сегмент Поступление и учёт контейнеров в аэропорту 2 предназначен для имитации приёма поступающих от источников грузов (контейнеров), учёта их, определения необходимого количества контейнеров для загрузки соответствующего самолёта и формирования команды для отправки этого самолёта на погрузку контейнеров (при наличии самолёта).
- Из палитры Презентация перетащите элемент Прямоугольник.
- На странице Местоположение и размер панели Свойства введите в поля X: 30, Y: 830, Ширина: 290, Высота: 190.
- Перетащите элемент text и в поле Текст: введите Поступление и учёт контейнеров в аэропорту 2.
- Перетащите из Основной библиотеки по одному объекту source, selectOutput5 (имя selectOutput5) и sink. Поместите и соедините их так, как на Рис. 9.13.
Установите свойства объектов согласно Табл. 9.10.
Свойство | Значения |
---|---|
source | |
Имя: | истГрузов2 |
Тип заявки: | ГрузАэропорт2 |
Прибывают согласно | Времени между прибытиями |
Время между прибытиями | exponential(1/срВрПостКонт2) |
Количество заявок, прибывающих за один раз | 1 |
Новая заявка | ГрузАэропорт2 |
Действия При выходе: | d=(uniform_discr(минКонтПост2,максКонтПост2)); |
всегоПостК2+=d; | |
текНалК2+=d; | |
selectOutput5 | |
Тип заявки: | ГрузАэропорт2 |
Использовать: | Условия |
Условие 1 | текНалК2<грузПодСамА |
Условие 2 | стоянкаПогр2А.size()>0&& |
погрузка2А.size()==0 | |
Действия При выходе 2 | текНалК2-=грузПодСамА; |
hold6.setBlocked(false); | |
Условие 3 | текНалК2<грузПодСамБ |
Условие 4 | стоянкаПогр2Б.size()>0&& |
погрузка2Б.size()==0 | |
Действия При выходе 4 | текНалК2-=грузПодСамБ; |
hold7.setBlocked(false); | |
sink | |
Тип заявки: | ГрузАэропорт2 |
Объект source с именем истГрузов2 генерирует заявку-партию класса ГрузАэропорт2 поступивших контейнеров. Заявка-партия поступает на объект selectOutput5.
Описанная в п. 9.1.8.2 последовательность проверок условий производится и в данном сегменте каждый раз при появлении в модели очередной заявки-партии. Все заявки класса ГрузАэропорт2 также выводятся из модели.
В данном сегменте, как и в п. 9.1.8.2, при выполнении подобных условий, только относительно аэропорта 2, формируются команды на отправку самолётов на погрузку.
Ожидание разгрузки в аэропорту 2
Сегмент Ожидание разгрузки в аэропорту 2 предназначен для имитации ожидания разгрузки самолётов, прибывших из аэропорта 1.
Создайте сегмент.
- Из палитры Презентация перетащите элемент Прямоугольник.
- На странице Местоположение и размер панели Свойства введите в поля X: 30, Y: 1040, Ширина: 310, Высота: 220.
- Перетащите элемент text и в поле Текст: введите Ожидание разгрузки в аэропорту 2.
- Перетащите из Библиотеки моделирования процессов по два объекта enter, queue, hold и один объект exit. Поместите и соедините их так, как на Рис. 9.14.
- Установите свойства объектов согласно Табл. 9.11
Предположим, что поступила заявка-самолёт в объект 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.
Создайте сегмент.
- Из палитры Презентация перетащите элемент Прямоугольник.
- На странице Местоположение и размер панели Свойства введите в поля X: 360, Y: 1040, Ширина: 470, Высота: 220.
- Перетащите элемент text и в поле Текст: введите Разгрузка самолётов в аэропорту 2.
- Перетащите по два объекта enter, split, queue, delay, selectOutput и по одному объекту exit и sink. Поместите и соедините их так, как на Рис. 9.15.
- Установите свойства объектов согласно Табл. 9.12.
Предположим, что из сегмента ожидания разгрузки (п. 9.1.9.2) через объект enter13 поступила заявка-самолёт типа Б в объект split5. Объектом split5 заявка размножается на число заявок, равное количеству контейнеров, которые должны быть выгружены из самолёта. Заявка-оригинал из модели не выводится. Поэтому количество копий на 1 меньше, чем количество выгружаемых контейнеров (entity.колГрузоМест-1).
Таким образом, также, как и в соответствующем сегменте аэропорта 1, далее каждая заявка интерпретируется как заявка-контейнер. Тем не менее, каждой копии присваиваются значения полей оригинала, так как после выгрузки все заявки-контейнеры, кроме последней, будут выведены из модели. Однако неизвестно какая из заявок будет последней - оригинал или копия. Поэтому также и присваиваются копиям значения полей оригинала.
Свойство | Значения |
---|---|
enter12 | |
Тип заявки: | ТранспСредство |
enter13 | |
Тип заявки: | ТранспСредство |
split4 | |
Типы заявок: | |
Оригинал, Копия | ТранспСредство, ТранспСредство |
Количество копий | entity.колГрузоМест-1 |
Новая заявка (копия) | ТранспСредство |
Действия При выходе копии | entity.типТрансп=original.типТрансп; |
entity.колГрузоМест=original.колГрузоМест; | |
entity.врПолёта=original.врПолёта; | |
entity.разные =original.разные; | |
split5 | |
Типы заявок: | |
Оригинал, Копия | ТранспСредство, ТранспСредство |
Количество копий | entity.колГрузоМест-1 |
Новая заявка (копия) | ТранспСредство |
Действия При выходе копии: | entity.типТрансп=original.типТрансп; |
entity.колГрузоМест=original.колГрузоМест; | |
entity.врПолёта=original.врПолёта; | |
entity.разные= original.разные; | |
queue | |
Имя: | очРазгр2А |
Тип заявки: | ТранспСредство |
Максимальная вместимость | Установить флажок |
Действия | entity.разные= |
При выходе: | срВрВыгрКонтСам2А; |
Включить сбор статистики | Установить флажок |
queue1 | |
Имя: | очРазгр2Б |
Тип заявки: | ТранспСредство |
Максимальная вместимость | Установить флажок |
Действия | entity.разные= |
При выходе: | срВрВыгрКонтСам2Б; |
Включить сбор статистики | Установить флажок |
delay | |
Имя: | разгрузка2А |
Тип заявки: | ТранспСредство |
Задержка задаётся | Определённое время |
Время задержки | exponential(1/entity.разные) |
Вместимость | выгрКонтСам2А |
Действия При подходе к выходу | выгрКонтА2++; |
Включить сбор статистики | Установить флажок |
delay1 | |
Имя: | разгрузка2Б |
Тип заявки: | ТранспСредство |
Задержка задаётся | Определённое время |
Время задержки | exponential(1/entity.разные) |
Вместимость | выгрКонтСам2Б |
Действия При подходе к выходу | выгрКонтБ2++; |
Включить сбор статистики | Установить флажок |
selectOutput6 | |
Тип заявки: | ТранспСредство |
Выход true выбирается | При выполнении условия |
Условие | entity.колГрузоМест== |
Действия При выходе (true) | выгрКонтА2 |
выгрКонтА2=0; | |
достКА12+=entity.колГрузоМест; | |
hold4.setBlocked(false); | |
selectOutput7 | |
Тип заявки: | ТранспСредство |
Выход true выбирается | При выполнении условия |
Условие | entity.колГрузоМест==выгрКонтБ2 |
Действия При выходе (true) | выгрКонтБ2=0; |
достКБ12+=entity.колГрузоМест; | |
hold5.setBlocked(false); | |
exit | |
Имя: | наОжПогр2 |
Тип заявки: | ТранспСредство |
Действия При выходе: | достК12+=entity.колГрузоМест; |
if (entity.типТрансп==1) enter14.take(entity); | |
else enter15.take(entity); | |
sink4 | |
Тип заявки: | ТранспСредство |
Ожидание погрузки в аэропорту 2
Сегмент Ожидание погрузки в аэропорту 2 предназначен для имитации ожидания погрузки самолётов, прибывших из аэропорта 1, после разгрузки в аэропорту 2 .
Создайте сегмент.
- Из палитры Презентация перетащите элемент Прямоугольник.
- На странице Местоположение и размер панели Свойства введите в поля X: 340, Y: 830, Ширина: 290, Высота: 190.
- Перетащите элемент text и в поле Текст: введите Ожидание погрузки в аэропорту 2.
- Перетащите из Библиотеки моделирования процессов по два объекта enter, queue, hold и один объект exit. Поместите и соедините их так, как на Рис. 9.16.
- Установите свойства объектов согласно Табл. 9.13.
Данный сегмент отличается от аналогичного сегмента аэропорта 1 тем, что он не предназначен в том числе и для первичного приёма самолётов. Заявки-самолёты поступают на имитируемые объектами queue стоянки стоянкаПогр2А и стоянкаПогр2Б соответственно только после разгрузки.
Элементы hold6 и hold7 также изначально заблокированы, поэтому заявки-самолёты дальше стоянок не проходят. Элементы hold6 и hold7 также управляются сегментом Поступление и учёт контейнеров в аэропорту 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);} |