Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Литература / Работы 8_9

.pdf
Скачиваний:
80
Добавлен:
12.02.2018
Размер:
1.6 Mб
Скачать

 

 

 

Продолжение табл. 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

Рис. 9.3. Элементы Переменная для вывода результатов моделирования

5.Перетащите ещё элементы text и введите пояснения к результатам моделирования как на рис. 9.3.

6.Перетащите элемент text и в поле Текст: введите Вспо-

могательные переменные.

7.Перетащите элементы Переменная и поместите их согласно рис. 9.3. Для всех переменных оставьте предлагаемый тип double, значение по умолчанию — 0.

8.С целью сокращения машинного времени для вывода результатов моделирования используйте способ Событие (event). Код, который необходим для обработки статистических данных при наступлении события, вы напишите после построения событийной части модели.

Приступайте к построению событийной части модели, которая

всоответствии со структурой системы воздушных перевозок включает имитацию функционирования аэропорта 1 (рис. 9.4) и аэропорта 2 (рис. 9.5).

337

Рис. 9.4. Сегмент имитации функционирования аэропорта 1

338

Рис. 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

Рис. 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

Рис. 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