Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Литература / Compyuternoe_modelirovanie_v_AnyLogic_7_Boev_VD.pdf
Скачиваний:
225
Добавлен:
12.02.2018
Размер:
8.72 Mб
Скачать

 

 

 

Таблица 8.1

 

 

 

 

 

Элементы и их свойства

 

Параметр

Параметр

Имя

Значение

Имя

Значение

по умолчанию

по умолчанию

 

 

Tp

30

T1

15

n

4

To1

2

T11

30

p11

0.50

T12

40

p12

0.75

T13

50

p13

1.00

T21

20

p21

0.50

T22

30

p22

0.75

T23

40

p23

1.00

T31

15

p31

0.50

T32

25

p32

0.75

T33

35

p33

1.00

T41

25

p41

0.50

T42

35

p42

0.75

T43

45

p43

1.00

колПрог

1000

колДисп

2

колМастеров1

2

колМастеров3

1

колМастеров2

1

колМастеров4

1

8.2.2.Вывод результатов моделирования

1.На Область просмотра мы уже перетащили Скруглен-

ный прямоугольник. На нём мы будем также размещать, как от-

мечалось ранее, элементы для вывода результатов моделирования. 2. Перетащите на него элемент text и на странице Текст: панели Свойства вместо слова text введите Результаты моделирования. Поместите этот текст посредине в нижней части эле-

мента Скругленный прямоугольник.

3. Из палитры Основная перетащите элементы Переменная. Разместите их и дайте им имена согласно рис. 8.2. Тип всех пере-

менных double.

8.2.3. Построение событийной части модели

Строить событийную часть модели будем последовательной реализацией средствами AnyLogic выделенных ранее сегментов

(см. п. 8.1.4):

источники заявок;

311

диспетчеры; мастера;

учёт выполненных заявок.

1. Создайте область просмотра для размещения элементов модели на агенте Main. Из палитры Презентация перетащите элемент Область просмотра. Перейдите на страницу Основные панели Свойства. В поле Имя введите МодРемУслуги.

2. Задайте, как будет располагаться область просмотра относительно ее якоря, с помощью элемента управления Выравнивать по: Верхн. левому углу.

3.Выберите режим масштабирования из выпадающего спис-

ка Масштабирование: Подогнать под окно.

4.На странице Местоположение и размер панели Свойства

введите в поля X: 0, Y: 0, Ширина: 1240, Высота: 460.

5.Из палитры Презентация перетащите элемент Прямоугольник. Оставьте имя, предложенное системой. В прямоугольнике мы разместим объект source для имитации поступления заявок.

6.На странице Местоположение и размер панели Свойства

введите в поля X: 20, Y: 120, Ширина: 100, Высота: 140.

7.Перетащите элемент text на прямоугольник и на странице

Текст панели Свойства введите Источники заявок.

8.Перетащите ещё один элемент Прямоугольник. Оставьте имя, предложенное системой. В этом прямоугольнике мы разместим объекты сегмента Диспетчеры для имитации работы диспетчеров.

9.На странице Местоположение и размер панели Свойства

введите в поля X: 130, Y: 30, Ширина: 590, Высота: 410.

10. Перетащите элемент text на прямоугольник и на странице

Текст панели Свойства введите Диспетчеры.

На рис. 8.3 показаны объекты двух сегментов: Источники заявок и Диспетчеры. Приступим к их построению.

8.2.3.1. Сегмент Источники заявок

1. Из Библиотеки моделирования процессов перетащите объект source на прямоугольник с названием Источники заявок (см. рис. 8.3). Создайте новый тип агента Заявка.

2. В панели Проект щёлкните правой кнопкой мыши элемент модели верхнего уровня дерева и выберите Создать/Java класс.

312

Рис. 8.3. Сегменты Источники заявок и Диспетчеры

3. Появится диалоговое окно Новый Java класс. В поле Имя: введите имя нового типа агента Заявка.

313

4.В поле Базовый класс: выберите из выпадающего списка Entity в качестве базового класса. Щёлкните Далее.

5.Появится вторая страница Мастера создания Java класса. Добавьте следующие поля Java класса:

double типЗ; double видР; double времяР;

6.Оставьте выбранными флажки Создать конструктор и Создать метод toString ().

7.Щёлкните кнопку Готово. Выделите правой кнопкой мы-

ши созданный Java класс Заявка и выполните в контекстном меню Преобразовать Java класс в тип агента.

8. Выделите объект source. На странице Основные панели

Свойства уберите флажок Отображать имя. В полях Тип заявки: и Новая заявка Agent замените Заявка.

Установите:

Прибывают согласно Времени между прибытиями

Время между прибытиями exponential(1/(Tp/n))

Действия При выходе: entity.типЗ=uniform(); entity.видР=uniform();

Java-кодом в поля entity.типЗ и entity.видР заносятся равномерно распределённые случайные числа. Они нужны далее для розыгрыша кодов типов заявок и кодов видов ремонта.

8.2.3.2. Сегмент Диспетчеры

Сегмент Диспетчеры предназначен для распределения по группам мастеров заявок согласно их типам и видам ремонта в зависимости от занятости мастеров в текущий момент времени.

Данный сегмент реализуется шестью объектами selectOutput5, восемью объектами selectOutput, объектами queue, delay и sink

(см. рис. 8.3).

1. Перетащите указанные объекты (или, перетащив один, скопируйте остальные, но перед копированием измените свойства, общие для всех копируемых объектов, например, класс заявки Заявка) из Основной библиотеки на диаграмму класса Main. Соедините их так, как показано на рис. 8.3.

2. Установите свойства объектов согласно табл. 8.2.

314

Таблица 8.2

Свойства

Значение

Имя

типЗаявки

Использовать

Условия

Условие 1

entity.типЗ<=p1

Действия

entity.типЗ=1;

При выходе 1

 

постЗаявТип1++;

 

постЗаявТип++;

Условие 2

entity.типЗ<=p2

Действия

entity.типЗ=2;

При выходе 2

постЗаявТип2++;

 

постЗаявТип++;

Условие 3

entity.типЗ<=p3

Действия

entity.типЗ=3;

При выходе 3

постЗаявТип3++;

 

постЗаявТип++;

Условие 4

entity.типЗ<=p4

Действия

entity.типЗ=4;

При выходе 4

постЗаявТип4++;

 

постЗаявТип++;

Имя

oтказ

Выход true выбирается

C заданной вероятностью

Вероятность

0.98

Имя

поТипамЗаяв

Использовать

Условия

Условие 1

entity.типЗ==1

Условие 2

entity.типЗ==2

Условие 3

entity.типЗ==3

Условие 4

entity.типЗ==4

Имя

видРемЗаяв1

Использовать

Условия

Условие 1

entity.видР<=p11

Действия

entity.видР=1;

При выходе 1

 

entity.времяР=exponential(1/T11);

Условие 2

entity. видР<=p12

Действия

entity.видР=2;

При выходе 2

entity.времяР=exponential(1/T12);

Условие 3

entity.видР=<p13

Действия

entity.видР=3;

При выходе 3

entity.времяР=exponential(1/T13);

315

 

Продолжение табл. 8.2

 

 

Свойства

Значение

 

 

Имя

видРемЗаяв2

Использовать

Условия

Условие 1

entity.видР<=p21

Действия

entity.видР=1;

При выходе 1

entity.времяР=exponential(1/T21);

Условие 2

entity. видР<=p22

Действия

entity.видР=2;

При выходе 2

entity.времяР=exponential(1/T22);

Условие 3

entity.видР=<p23

Действия

entity.видР=3;

При выходе 3

entity.времяР=exponential(1/T23);

Имя

видРемЗаяв3

Использовать

Условия

Условие 1

entity.видР<=p31

Действия

entity.видР=1;

При выходе 1

entity.времяР=exponential(1/T31);

Условие 2

entity. видР<=p32

Действия

entity.видР=2;

При выходе 2

entity.времяР=exponential(1/T32);

Условие 3

entity.видР=<p33

Действия

entity.видР=3;

При выходе 3

entity.времяР=exponential(1/T33);

Имя

видРемЗаяв4

Использовать

Условия

Условие 1

entity.видР<=p41

Действия

entity.видР=1;

При выходе 1

entity.времяР=exponential(1/T41);

Условие 2

entity. видР<=p42

Действия

entity.видР=2;

При выходе 2

entity.времяР=exponential(1/T42);

Условие 3

entity.видР=<p43

Действия

entity.видР=3;

При выходе 3

entity.времяР=exponential(1/T43);

Имя

свобМастер1_2

Выход true выби-

При выполнении условия

рается

(очМастеров1.size()==0)&&

Условие

 

(мастера1.size()<колМастеров1)&&

 

(мастера2.size()!=0)

316

 

Окончание табл. 8.2

 

 

Свойства

Значение

Имя

свобМастер1_3

Выход true выбирается

При выполнении условия

Условие

(очМастеров1.size()==0)&&

 

(мастера1.size()<колМастеров1)&&

 

(мастера3.size()!=0)

Имя

свобМастер1_4

Выход true выбирается

При выполнении условия

Условие

(очМастеров1.size()==0)&&

 

(мастера1.size()<колМастеров1)&&

 

(мастера4.size()!=0)

Имя

свобМастер2_3

Выход true выбирается

При выполнении условия

Условие

(очМастеров2.size()==0)&&

 

(мастера2.size()<колМастеров2)&&

 

(мастера3.size()!=0)

Имя

свобМастер2_4

Выход true выбирается

При выполнении условия

Условие

(очМастеров2.size()==0)&&

 

(мастера2.size()<колМастеров2)&&

 

(мастера4.size()!=0)

Имя

свобМастер3_4

Выход true выбирается

При выполнении условия

Условие

(очМастеров3.size()==0)&&

 

(мастера3.size()<колМастеров3)&&

 

(мастера4.size()!=0)

Имя

очДисп

Макс. вместимость

Установить флажок

Имя

Дисп

Тип

Определённое время

Время задержки

normal(To1,T1)

Вместимость

колДисп

Действия при выходе

коэфИспДисп=дисп.statsUtilization.mean();

Объектом типЗаявки разыгрывается код типа заявки. Например, в поступившей заявке entity.типЗ=0.723. Проверяется условие 0: entity.типЗ=0.723<=p1=0.5. Условие 0 не в ы- полняется. Тогда проверяется условие 1: entity.типЗ= 0.723 <=p2=0.75. Условие 1 выполняется. Заявка пропускается на выход 1. При этом выполняется код, записанный в поле Действия При выходе 1,

317