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

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

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

ГЛАВА 8. МОДЕЛЬ ПРЕДОСТАВЛЕНИЯ РЕМОНТНЫХ УСЛУГ

8.1.Постановка задачи

Вфирму предоставления ремонтных услуг поступают заявки n типов с вероятностями р1, р2, …, рn соответственно. Интервалы времени Тп между двумя очередными поступлениями одного типа заявок случайные. Каждый любой тип заявки может требовать одного из а1, а2, …, аk видов ремонта с вероятностями рa1, рa2, …, рak соответственно.

Вфирме имеются n1, n2, …, nn мастеров для выполнения заявок каждого типа соответственно. Мастера n1 выполняют заявки первого типа. Если их нет и мастера n2, …, nn групп заняты, они выполняют заявки этих типов. При этом поступающие заявки первого типа ожидают их освобождения. Мастера n2 выполняют заявки второго типа. Если их нет и мастера n3, n4, …, nn групп заняты, они выполняют заявки этих типов. При этом поступающие заявки второго типа ожидают их освобождения. Аналогичные обязанности и у мастеров остальных групп. Только мастера nn выполняют заявки одного n-го типа.

Время выполнения заявки n-го типа случайное, не зависит от мастера, а зависит только от вида ремонта: Т11, Т12, Т13 – для СС первого типа, Т21, Т22, Т23 – для СС второго типа, …, Tn1, Tn2, …, Tnn – для СС n-го типа.

Прием и распределение заявок между группами мастеров осуществляется d диспетчерами. Время, затрачиваемое одним диспетчером на одну заявку, Т1, случайное. Диспетчерами не принимаются к ремонту q заявок всех типов.

8.1.1.Исходные данные

exponential(Тп) = exponential (30); n = 4;

p1

= 0.2, p2 = 0.3, p3 = 0.25, p4 = 0.25;

p11 = 0.5, p12 = 0.25, p13 = 0.25;

 

n1

= 2; T11 = 30;

T12 = 40;

T13 = 50;

n2

= 1; T21 = 20;

T22 = 30;

T23 = 40;

n3

= 1; T31 = 15;

T32 = 25;

T33 = 35;

n4

= 1; T41 = 25;

T42 = 35;

T43 = 45;

d = 2; normal(T1, To1) = normal(15, 2); q = 2 %.

Интервалы времени между поступлениями заявок и время выполнения заявок распределены по экспоненциальному закону.

306

Время обслуживания одной заявки диспетчером подчинено нормальному закону.

8.1.2. Задание на исследование

Разработать имитационную модель предоставления ремонтных услуг. Исследовать зависимость количества выполненных заявок и вероятностей выполнения заявок всех типов от интервала Тп поступления их в ремонт и вероятностей p1, p2, p3, p4.

Результаты моделирования необходимо получить с точностью ε = 0,01 и доверительной вероятностью α = 0,95.

Сделать выводы о загруженности каждой группы мастеров и необходимых мерах по повышению эффективности работы фирмы предоставления ремонтных услуг.

8.1.3. Формализованное описание модели

Уясним задачу на разработку модели, предварительно представив структуру фирмы предоставления ремонтных услуг (рис. 8.1) как СМО.

Рис. 8.1. Фирма предоставления ремонтных услуг как СМО

307

Фирма предоставления ремонтных услуг представляет собой многофазную многоканальную систему массового обслуживания разомкнутого типа с отказами.

Исходя из структуры, модель предоставления ремонтных услуг должна состоять из следующих сегментов:

ввода исходных данных; источника заявок; диспетчеров; мастеров;

учёта выполненных ремонтов.

Заявки на ремонтдолжны иметь следующие параметры (поля): типЗ — код типа заявки; видР — вид ремонта;

времяР — время выполнения одного вида ремонта; Как уже отмечалось, интервалы между соседними заявками

подчинены экспоненциальному закону. Принято, что за время Tp от каждого источника поступает одна заявка. Тогда средний интервал поступления заявок равен Tp/n. Поэтому вместо n объектов имитации источников заявок будем использовать один.

Код типа заявки определяется в виде чисел 1, 2, 3, 4, так как n=4. Код вида ремонта определяется также числами 1…3 соответственно. Для этогоиспользуются следующие исходные данные: p1 … p4 — вероятности поступления заявок 1…4 типов соот-

ветственно;

p11 … p43 — вероятности поступления заявок 1…4 типов с видами 1…3 ремонтов соответственно.

Коды типа заявки и вида ремонта записываются в поля типЗ и видР соответственно.

По этим кодам определяется среднее время вида ремонта и заносится в поле времяР.

В процессе выполнения модели накапливаются следующие статистические данные:

постЗаявТип1 … постЗаявТип1, постЗаявТип — ко-

личество поступивших заявок 1…4 типов и заявок всех типов;

выпЗаявТип1 … выпЗаявТип1, выпЗаявТип — количе-

ство выполненных заявок 1…4 типов и заявок всех типов;

выпРемВида11 … выпРемВида43 — количество выполнен-

ных заявок 1…4 типов с видами 1…3 ремонтов соответственно.

308

Поскольку эти данные накапливаются за все прогоны модели, то для получения средних значений они делятся на количество прогонов колПрог. Например, выпЗаявТип1=выпЗаявТип1/ колПрог.

По этим же статистическим данным рассчитываются:

верВыпЗаяв1 … верВыпЗаяв4, верВыпЗаяв — вероят-

ности выполнения заявок 1…4 типов и заявок всех типов.

Например, верВыпЗаяв1=выпЗаявТип1/постЗаявТип1.

8.2.Модель в AnyLogic

8.2.1.Ввод исходных данных

Элементы для ввода исходных данных разместим на агенте верхнего уровня Main.

1. Выполните команду Файл/Создать/Модель на панели инструментов. Откроется диалоговое окно Новаямодель.

2.В поле Имя модели диалогового окна Новаямодель введите Рем_услуги. Выберите каталог, в котором будут сохранены файлы модели.

3.Щёлкните Готово.

4.Создайте область просмотра для размещения исходных данных на агенте Main. Из палитры Презентация перетащите элемент Область просмотра. На странице Основные панели

Свойства в поле Имя: введите Данные.

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

по: Верхн. левому углу.

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

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

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

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

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

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

введите в поля X: 10, Y: 670, Ширина: 590, Высота: 560.

10. Перетащите элемент text и на странице Текст панели Свойства вместо слова text: введите Исходные данные.

309

Рис. 8.2. Размещение элементов Параметр и Переменная

11.В Палитре выделите Основная. Перетащите элементы

Параметр на элемент Скругленныё прямоугольник. Разместите их так, как показано на рис. 8.2. Используйте копирование.

12.Значения свойств установите согласно табл. 8.1. Во всех элементах оставьте установленным флажок Отображать имя.

13.Тип элементов с именами колДисп, колМасте-

ров1…колМастеров4 установите int. Тип остальных элементов

double.

Имена параметров оставлены практически такими же, как в постановке задачи на разработку имитационной модели. По рис. 8.2 нельзя определить, например, в Т11 русская буква Т или английская. Поэтому принимайте решение сами. Тем не менее, лучше все имена давать на одном языке.

310

 

 

 

Таблица 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