![](/user_photo/_userpic.png)
Литература / Работы 8_9
.pdf
|
|
|
Продолжение табл. 9.3 |
|
|
|
|
Имя |
Тип |
|
Значение по умолчанию |
срВрПолётаБ12 |
double |
|
3.2 |
отклВрПолётаБ12 |
double |
|
0.5 |
|
Самолёты типа Б |
|
|
колСамТипБ |
int |
|
1 |
грузПодСамБ |
int |
|
100 |
|
Аэропорт 2 |
|
|
минКонтПост2 |
int |
|
1 |
максКонтПост2 |
int |
|
22 |
срВрПостКонт2 |
double |
|
0.4 |
погрКонтСам2А |
int |
|
2 |
погрКонтСам2Б |
int |
|
2 |
выгрКонтСам2А |
int |
|
2 |
выгрКонтСам2Б |
int |
|
2 |
срВрПогрКонтСам2А |
double |
|
0.2 |
срВрПогрКонтСам2Б |
double |
|
0.1 |
срВрВыгрКонтСам2А |
double |
|
0.2 |
срВрВыгрКонтСам2Б |
double |
|
0.2 |
срВрПолётаА12 |
double |
|
3.6 |
отклВрПолётаА12 |
double |
|
0.6 |
срВрПолётаБ12 |
double |
|
4.1 |
отклВрПолётаБ12 |
double |
|
0.8 |
9.1.7. Вывод результатов моделирования
Организуйте вывод результатов моделирования. Их также, как и исходные данные, следует разбить на две группы по признаку принадлежности к соответствующему аэропорту, выделить итоговые показатели. На этой области просмотра можно поместить и вспомогательные переменные, предназначенные для накопления необходимых для расчёта показателей статистических данных.
1.Перетащите элемент Скруглённый прямоугольник на элемент Область просмотра с именем Результаты.
2.На странице Местоположение и размер панели Свойства
введите в поля X: 25, Y: 2610, Ширина: 510, Высота: 450.
3.Перетащите элемент text и на сранице Текст: введите Ре-
зультаты моделирования.
4. Из библиотеки Основная перетащите элементы Переменная и поместите их так, как на рис. 9.3. Для всех переменных сохраните предлагаемый тип double, значение по умолчанию — 0.
336
![](/html/23035/253/html_zS2UGhF9Zd.ni6O/htmlconvd-dV0QWj32x1.jpg)
Рис. 9.3. Элементы Переменная для вывода результатов моделирования
5.Перетащите ещё элементы text и введите пояснения к результатам моделирования как на рис. 9.3.
6.Перетащите элемент text и в поле Текст: введите Вспо-
могательные переменные.
7.Перетащите элементы Переменная и поместите их согласно рис. 9.3. Для всех переменных оставьте предлагаемый тип double, значение по умолчанию — 0.
8.С целью сокращения машинного времени для вывода результатов моделирования используйте способ Событие (event). Код, который необходим для обработки статистических данных при наступлении события, вы напишите после построения событийной части модели.
Приступайте к построению событийной части модели, которая
всоответствии со структурой системы воздушных перевозок включает имитацию функционирования аэропорта 1 (рис. 9.4) и аэропорта 2 (рис. 9.5).
337
![](/html/23035/253/html_zS2UGhF9Zd.ni6O/htmlconvd-dV0QWj33x1.jpg)
Рис. 9.4. Сегмент имитации функционирования аэропорта 1
338
![](/html/23035/253/html_zS2UGhF9Zd.ni6O/htmlconvd-dV0QWj34x1.jpg)
Рис. 9.5. Сегмент имитации функционирования аэропорта 2
339
9.1.8.Имитация функционирования аэропорта 1
9.1.8.1.Прибытие самолётов в аэропорт 1. Ожидание погрузки
Сегмент предназначен для имитации первоначального (последующего) прибытия самолётов в аэропорт 1, размещения их на стоянках, ожидания и отправки на погрузку (разгрузку) контейнеров.
1.Из палитры Презентация перетащите элемент Прямо-
угольник.
2.На странице Местоположение и размер панели Свойства
введите в поля X: 30, Y: 50, Ширина: 310, Высота: 200.
3.Перетащите элемент text и в поле Текст: введите Прибы-
тие самолётов в аэропорт 1. Ожидание погрузки.
4.Перетащите из Библиотеки моделирования процессов по
два объекта source, enter, queue, hold и один объект exit. Поместите и соедините их так, как на рис. 9.6.
При построении модели вам придётся воспользоваться Javaкодом, в котором потребуются дополнительные поля заявок. Для этого вы должны создать нестандартный тип заявки с дополнительными полями для записи и хранения параметров, о которых упоминалось ранее (см. п. 9.1.4).
Создайте тип заявок ТранспСредство.
1.Выделите объект source.
2.В панели Проект щёлкните правой кнопкой мыши элемент модели верхнего уровня дерева и выберите Создать/Java класс.
3.Появится диалоговое окно Новый Java класс. В поле
Имя: введите имя нового класса: ТранспСредство.
4.В поле Базовый класс: выберите из выпадающего списка Entity в качестве базового класса. Щёлкните кнопку Далее.
5.Появится вторая страница Мастера создания Java класса. Добавьте поля Java класса, показанные на рис. 9.7.
6.Оставьте флажки Создать конструктор и Создать метод toString (). Щёлкните Готово. Закройте редактор кода.
7.Щёлкните правой кнопкой созданный Java класс и из меню выберите Преобразовать Java класс в тип агента.
8.Аналогичным образом создайте типы заявок ГрузАэропорт1 и ГрузАэропорт2 с дополнительными полями колГрузоМест1 и колГрузоМест2 типа int соответственно. Эти классы заявок, как вы помните, будут использоваться при имитации поступления партий грузов в аэропорты 1 и 2 соответственно.
340
![](/html/23035/253/html_zS2UGhF9Zd.ni6O/htmlconvd-dV0QWj36x1.jpg)
Рис. 9.6. Сегмент Прибытие самолётов в аэропорт 1
Рис. 9.7. Поля нового Java класса ТранспСредство
341
Продолжите построение сегмента имитации Прибытие само-
лётов в аэропорт 1 и ожидания погрузки.
Поочередно выделите объекты этого сегмента и установите их свойства согласно табл. 9.4.
|
|
Таблица 9.4 |
|
|
|
Свойство |
Значения |
|
|
|
source |
Имя: |
|
самолёт1 |
Тип заявки: |
|
ТранспСредство |
Прибывают согласно |
Времени между прибытиями |
|
Время между прибытиями |
0 |
|
Количество заявок, прибы- |
колСамТипА |
|
вающих за один раз |
||
Ограниченное |
количество |
Установить флажок |
прибытий |
|
|
Максимальное |
количество |
1 |
прибытий |
|
|
Новая заявка |
|
ТранспСредство |
Действия |
|
entity.типТрансп=1; |
При выходе: |
|
entity.колГрузоМест= |
|
|
грузПодСамА; |
|
|
source1 |
Имя: |
|
самолёт2 |
Тип заявки: |
|
ТранспСредство |
Прибывают согласно |
Времени между прибытиями |
|
Время между прибытиями |
0 |
|
Количество заявок, прибы- |
колСамТипБ |
|
вающих за один раз |
||
Ограниченное |
количество |
Установить флажок |
прибытий |
|
|
Максимальное |
количество |
1 |
прибытий |
|
|
Новая заявка |
|
ТранспСредство |
Действия |
|
entity.типТрансп=2; |
При выходе: |
|
entity.колГрузоМест= |
|
|
грузПодСамБ; |
|
|
queue |
Имя: |
|
стоянкаПогр1А |
Тип заявки: |
|
ТранспСредство |
Вместимость |
|
колСамТипА |
Включить сбор статистики |
Установить флажок |
342
|
Продолжение табл. 9.4 |
|
|
Свойство |
Значения |
|
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.
343
Заявка-самолёт поступает на объект наПогрузку1 (объект exit) и далее на сегмент Погрузка контейнеров в аэропорту 1.
Если ожидающих погрузку самолётов типа А нет, а количество контейнеров достаточно для полной загрузки самолёта типа Б и он имеется в наличии, то аналогично формируется команда на разблокировывание элемента hold1. Заявка-самолёт также поступает на объект наПогрузку1 (объект exit) и далее на сегмент Погруз-
ка контейнеров в аэропорту 1.
Элементы enter и enter1 увеличивают число входов объектов queue и queue1 соответственно. Через них поступают в последующем заявки-самолёты, прибывшие из аэропорта 2, разгруженные и теперь отправленные на стоянки ожидания погрузки в аэропорту 1.
9.1.8.2. Поступление и учёт контейнеров в аэропорту 1
Сегмент Поступление и учёт контейнеров в аэропорту 1
предназначен для имитации приёма поступающих от источников грузов (контейнеров), учёта их, определения необходимого количества контейнеров для загрузки соответствующего самолёта и формирования команды для отправки этого самолёта на погрузку контейнеров.
Создайте этот сегмент.
1.Из палитры Презентация перетащите элемент Прямо-
угольник.
2.На странице Местоположение и размер панели Свойства
введите в поля X: 30, Y: 270, Ширина: 220, Высота: 200.
3.Перетащите элемент text и в поле Текст: введите По-
ступление и учёт контейнеров в аэропорту 1.
4.Перетащите из Библиотеки моделирования процессов по
одному объекту source, selectOutput5 (имя selectOutput) и sink.
Поместите и соедините их так, как на рис. 9.8. Установите свойства объектов согласно табл. 9.5.
Объект source с именем истГрузов1 генерирует заявкупартию класса ГрузАэропорт1 поступивших контейнеров, число которых в партии распределено по равномерному закону. Заяв- ка-партия поступает на объект selectOutput.
В условии 1 проверяется наличие числа контейнеров, достаточного для полной загрузки самолёта типа А. Если число контейнеров недостаточно, заявка-партия уничтожается. Так продолжается до тех пор, пока не выполнится условие 1.
344
![](/html/23035/253/html_zS2UGhF9Zd.ni6O/htmlconvd-dV0QWj40x1.jpg)
Рис. 9.8. Сегмент Поступление и учёт контейнеров в аэропорту 1
|
|
Таблица 9.5 |
|
|
|
Свойство |
|
Значения |
|
|
source |
Имя: |
|
истГрузов1 |
Тип заявки: |
|
ГрузАэропорт1 |
Прибывают согласно |
|
Времени между прибытиями |
Время между прибытиями |
|
exponential(1/срВрПостКонт1) |
Количество заявок, прибы- |
1 |
|
вающих за один раз |
|
|
Новая заявка |
|
ГрузАэропорт1 |
Действия При выходе |
|
a=(uniform_ |
|
|
discr(минКонтПост1, |
|
|
максКонтПост1)); |
|
|
всегоПостК1+=a; |
|
|
текНалКонт1+=a; |
|
selectOutput |
|
Тип заявки: |
|
ГрузАэропорт1 |
Использовать: |
|
Условия |
Условие 1 |
|
текНалК1<грузПодСамА |
Условие 2 |
|
стоянкаПогр1А.size()>0&& |
|
|
погрузка1А.size()==0 |
Действия При выходе 2 |
|
текНалК1-=грузПодСамА; |
|
|
hold.setBlocked(false); |
Условие 3 |
|
текНалК1<грузПодСамБ |
345