На дежурстве находятся n1 средств связи (СС) n2 типов (n21 + n22 + … + n2n2 = n2) в течение n3 часов.
Каждое СС может в любой момент времени выйти из строя. Интервалы времени T21, T22, …, T2n2 между отказами СС, находящимися на дежурстве, случайные. В случае выхода из строя СС заменяют резервным, причем либо сразу, либо по мере появления исправного СС. Тем временем, вышедшее из строя СС ремонтируют, после чего содержат в качестве резервного или направляют его на дежурство. Всего количество резервных СС - n4.
Ремонт неисправных СС производят n5 мастеров. Время T1, T2, …, Tn2 ремонта случайное и зависит от типа СС, но не зависит от того, какой мастер это СС ремонтирует.
Прибыль от СС, находящихся на дежурстве, составляет S1 денежных единиц в час. Почасовой убыток при отсутствии на дежурстве одного СС - S2, …, S2n2 денежных единиц в час. Оплата мастера за ремонт неисправного СС - S31, S32, …, S3n2 денежных единиц в час соответственно.
Затраты на содержание одного резервного СС составляют S4 денежных единиц в час.
Разработать имитационную модель бизнес-процесса предоставления услуг по средствам связи в течение 1000 часов.
Исследовать влияние на ожидаемую прибыль различного количества резервных СС и мастеров.
Определить абсолютные величины и относительные коэффициенты ожидаемой прибыли.
Сделать выводы об использовании СС, мастеров и необходимых мерах по совершенствованию системы предоставления услуг связи.
Уясним задачу на разработку модели, предварительно представив структуру системы предоставления услуг связи (рис. 5.1) как систему СМО.
(рис 5.1) Система предоставления услуг связи как СМО
Система предоставления услуг связи (далее система связи) представляет собой многофазную многоканальную систему массового обслуживания замкнутого типа с отказами.
Таким образом, модель системы связи должна состоять из следующих сегментов (рис. 5.2):
(рис 5.2) Концептуальная схема модели системы связи
Заявки как средства связи, поступившие на дежурство, должны иметь следующие параметры (поля):
tipCC - код типа СС;
timeMeanOtkaz - среднее время между отказами СС;
timeMeanRem - среднее время ремонта одного СС;
nach - время начала ремонта в ремонтном подразделении;
nach1 - время начала дежурства.Возьмём, например, $$n_2=5$$. Код типа СС в виде чисел 1, 2, 3, 4, 5 определяется в самом начале моделирования и остаётся неизменным. Для его определения используются следующие исходные данные:
KCC1 … KCC5 - количество СС первого … пятого типов соответственно;
KCCР1 … KCCР5 - количество резервных СС первого … пятого типов соответственно.По этим же данным определяются количества всех СС по типам KolCC1 … KolCC5, а также общее количество СС всех типов KolCC.
В параметр timeMeanOtkaz заносится интенсивность выхода из строя соответствующего типа СС. Интенсивность рассчитывается по средним значениям интервалов выхода из строя СС первого … пятого типов timeOtkaz1 … timeOtkaz5.
В параметр timeMeanRem заносится интенсивность ремонта соответствующего типа СС. Интенсивность рассчитывается по средним значениям времени ремонта СС соответственно первого … пятого типов timeRem1 … timeRem5.
Рассчитанные интенсивности, например, timeMeanOtkaz = 1/timeOtkaz1 используются для обращения к генератору exponential(timeMeanOtkaz).
Параметры nach1 и nach изменяются при каждом поступлении СС на дежурство и в ремонтное подразделение соответственно. Они используются при расчётах дохода от дежурства и затрат на ремонт неисправного СС. В них заносится время начала дежурства и начала ремонта соответственно.
Кроме рассмотренных, СС имеют еще следующие параметры (не заносимые в дополнительные поля заявок, имитирующих СС):
doxDegCC1 … doxDegCC5 - доход от дежурства одного СС первого … пятого типов соответственно;
zatrResCC1 … zatrResCC5 - затраты на содержание резерва одного СС первого … пятого типов соответственно;
stoimRem1 … stoimRem5 - стоимость ремонта одного СС первого … пятого типов соответственно.В ходе моделирования, а также по завершении моделирования рассчитываются:
PribCC1 … PribCC5, SumPribil - абсолютные величины ожидаемой прибыли по каждому типу СС и в целом;
KoefPribCC1 … KoefPribCC5, KoefPribil -относительные коэффициенты ожидаемой прибыли по каждому типу СС и в целом.Рассмотрим вычисление этих показателей на примере PribCC1 и KoefPribCC1.
Предполагается, что максимальный доход DoxMaxCC1 от дежурства будет в случае, когда все СС первого типа будут постоянно находиться на дежурстве, то есть:
DoxMaxCC1 = KCC1*doxDegCC1*ВремяРабСист
где ВремяРабСист - время работы моделируемой системы.
Фактический доход DoxDegCC1 от дежурства СС первого типа составит:
DoxDegCC1+=(time()-entity.nach1)* get_Main().doxDegCC1;
где (time()-entity.nach1) - время нахождения СС первого типа на дежурстве.
При отсутствии на дежурстве СС первого типа убыток составит:
UbitokCC1=(1-degCC1.statsUtilization.mean())* get_Main().ubitokCC1*ВремяРабСист*KCC1;
где (1-degCC1.statsUtilization.mean()) - средний коэффициент отсутствия СС первого типа на дежурстве за всё время моделирования.
Затраты на ремонт неисправных СС и содержание резервных СС первого типа составят соответственно:
ZatrRemCC1+=(time()-entity.nach)*stoimRemCC1; ZatrResCC1= KCCP1*zatrResCC1* ВремяРабСист
Абсолютная величина ожидаемой прибыли составит:
PribCC1=DoxDegCC1-(ZatrRemCC1+ZatrRemCC1+UbitokCC1).
Относительный коэффициент прибыли равен:
KoefPribCC1=PribCC1/DoxMaxCC1.
Показатели в целом за систему связи:
SumPribil=SumDoxDeg-(SumZatrRes+SumZatrRem+SumUbitok), KoefPrib=SumPrib/SumDoxMax,
где SumDoxMax, SumDoxDeg, SumZatrRes, SumZatrRem, SumUbitok - соответствующие доходы и затраты за систему.
Сегмент предназначен для имитации поступления основных и резервных СС всех типов и постановки их на дежурство.
Файл/Создать/Модель на панели инструментов. Появится диалоговое окно Новая модель.
Имя модели введите ComSystem. Выберите каталог для сохранения файлов модели.
Далее. Откроется вторая страница Мастера создания модели. Выберите Начать создание модели "с нуля". Щелкните кнопку Далее.Используем три области просмотра. В первой области просмотра разместим объекты и элементы сегмента Постановка на дежурство, во второй - сегмента Имитация дежурства СС и сегмента имитации функционирования ремонтного подразделения, в третьей - сегмента Статистика.
Первую область просмотра поместим на диаграмму класса Main, а для второй и третьей областей просмотра создадим новый класс активного объекта Degurstvo.
Создайте область просмотра на диаграмме класса Main для размещения объектов сегмента Постановка на дежурство.
Палитре выделите Презентация. Перетащите элемент Область просмотра.
Основные панели Свойства.
Имя: введите Postanovka.
Выравнивать по: Верхн. левому углу.
Масштабирование: Подогнать под окно.
Дополнительные панели Свойства. Введите в поля X: 0, Y: 0, Ширина: 700, Высота: 970.
Скруглённый прямоугольник. Оставьте имя, предложенное системой. В нём мы разместим объекты сегмента Постановка на дежурство.
Дополнительные панели Свойства. Введите в поля X: 38, Y: 62, Ширина: 642, Высота: 268.Исходные данные, другие необходимые для работы модели параметры разделим и разместим в той области или в том сегменте модели, где они, по нашему мнению, нужны и их удобно использовать.
Организуйте ввод исходных данных для сегмента Постановка на дежурство.
Прямоугольник на элемент Область просмотра, если вы хотите видеть данные в ходе моделирования. Если нет, поместите этот элемент вне области просмотра.
Дополнительные панели Свойства. Введите в поля X: 20, Y: 350, Ширина: 390, Высота: 300.
text и на странице Основные панели Свойства в поле Текст: введите Initial_data_PD (здесь PD - постановка на дежурство).
Палитре выделите Основная. Перетащите элементы Параметр и Простая переменная на элемент с именем Initial_data_PD и разместите их так, как показано на рис. 5.3.
Простые переменные с именами KolCC1…KolCC5 - количество СС по типам, а KolCC - количество СС всех типов. Эти переменные мы будем вычислять по исходным значениям КСС1 … КСС5 и КССР1 … КССР5 и использовать при генерации равного значению КolСС заявок, имитирующих СС. Количество СС изменять можно только перед началом моделирования, так как заявки, имитирующие СС, генерируются только один раз.
(рис 5.3) Размещение элементов Параметр и Простая переменная
Область просмотра мы уже перетащили Скругленный прямоугольник. На нём мы будем размещать, как отмечалось ранее, объекты сегмента Постановка на дежурство.
text и на странице Основные панели Свойства в поле Текст: введите Постановка на дежурство. Поместите этот текст посредине в верхней части элемента Скругленный прямоугольник.
Прямоугольник на Область просмотра. Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 50, Y: 100, Ширина: 160, Высота: 140.
text на Прямоугольник и на странице Основные панели Свойства в поле Текст: введите Имитация поступления СС.
source на Прямоугольник. Для записи и хранения параметров СС в дополнительные поля заявок необходимо создать нестандартный класс заявки. Создайте класс заявки ComFacility.
| Имя | Тип | Значение по умолчанию | Отображать имя |
|---|---|---|---|
KolCC1 | int | 0 | Установить флажок во всех элементах |
KolCC2 | int | 0 | |
KolCC3 | int | 0 | |
KolCC4 | int | 0 | |
KolCC5 | int | 0 | |
KolCC | int | 0 | |
NumCC | int | 0 | |
doxdegCC1 | double | 20 | |
doxdegCC2 | double | 24,2 | |
doxdegCC3 | double | 32,8 | |
doxdegCC4 | double | 23 | |
doxdegCC5 | double | 25,5 | |
zatrResCC1 | double | 21 | |
zatrResCC2 | double | 24,2 | |
zatrResCC3 | double | 28 | |
zatrResCC4 | double | 26 | |
zatrResCC5 | double | 25,5 | |
ubitokCC1 | double | 32 | |
ubitokCC2 | double | 34,2 | |
ubitokCC3 | double | 37 | |
ubitokCC4 | double | 31 | |
ubitokCC5 | double | 32,5 | |
ВремяРабСист | double | 1000 |
Проект щелкните правой кнопкой мыши элемент модели верхнего уровня дерева и выберите Создать/Java класс.
Новый Java класс. В поле Имя: введите имя нового класса ComFacility.
Базовый класс: выберите из выпадающего списка Entity в качестве базового класса. Щелкните кнопку Далее.
Мастера создания Java класса. Добавьте следующие поля Java класса:
int tipCC; double timeMeanRem; double nach; double nach1; double timeMeanOtkaz;
Создать конструктор и Создать метод toString ().
Готово. Вы увидите редактор кода и в автоматически созданный код вашего Java класса. Закройте код.
source. На странице Основные панели Свойства уберите флажок Отображать имя. В полях Класс заявки: и Новая заявка Entity замените ComFacility.
Установите:
Интенсивности.
1
1
установите флажок
1В поле Действие при выходе введите Java код:
KolCC1=degyrstvo.KCC1+degyrstvo.KCCP1; degyrstvo.DoxMaxCC1= round((degyrstvo.KCC1*doxDegCC1)*ВремяРабСист*100); degyrstvo.DoxMaxCC1=degyrstvo.DoxMaxCC1/100; degyrstvo.ZatrResCC1= round((degyrstvo.KCCP1*zatrResCC1)*ВремяРабСист*100); degyrstvo.ZatrResCC1=degyrstvo.ZatrResCC1/100; KolCC2=degyrstvo.KCC2+degyrstvo.KCCP2; degyrstvo.DoxMaxCC2= round((degyrstvo.KCC2*doxDegCC2)*ВремяРабСист*100); degyrstvo.DoxMaxCC2=degyrstvo.DoxMaxCC2/100; degyrstvo.ZatrResCC2= round((degyrstvo.KCCP2*zatrResCC2)*ВремяРабСист*100); degyrstvo.ZatrResCC2=degyrstvo.ZatrResCC2/100; KolCC3=degyrstvo.KCC3+degyrstvo.KCCP3; degyrstvo.DoxMaxCC3= round((degyrstvo.KCC3*doxDegCC3)*ВремяРабСист*100); degyrstvo.DoxMaxCC3=degyrstvo.DoxMaxCC3/100; degyrstvo.ZatrResCC3= round((degyrstvo.KCCP3*zatrResCC3)*ВремяРабСист*100); degyrstvo.ZatrResCC3=degyrstvo.ZatrResCC3/100; KolCC4=degyrstvo.KCC4+degyrstvo.KCCP4; degyrstvo.DoxMaxCC4= round((degyrstvo.KCC4*doxDegCC4)*ВремяРабСист*100); degyrstvo.DoxMaxCC4=degyrstvo.DoxMaxCC4/100; degyrstvo.ZatrResCC4= round((degyrstvo.KCCP4*zatrResCC4)*ВремяРабСист*100); degyrstvo.ZatrResCC4=degyrstvo.ZatrResCC4/100; KolCC5=degyrstvo.KCC5+degyrstvo.KCCP5; degyrstvo.DoxMaxCC5= round((degyrstvo.KCC5*doxDegCC5)*ВремяРабСист*100); degyrstvo.DoxMaxCC5=degyrstvo.DoxMaxCC5/100; KolCC=KolCC1+KolCC2+KolCC3+KolCC4+KolCC5; degyrstvo.ZatrResCC5= round((degyrstvo.KCCP5*zatrResCC5)*ВремяРабСист*100); degyrstvo.ZatrResCC5=degyrstvo.ZatrResCC5/100; degyrstvo.SumDoxMax=degyrstvo.DoxMaxCC1+ degyrstvo.DoxMaxCC2+degyrstvo.DoxMaxCC3+ degyrstvo.DoxMaxCC4+degyrstvo.DoxMaxCC5; degyrstvo.SumZatrRes=degyrstvo.ZatrResCC1+ degyrstvo.ZatrResCC2+degyrstvo.ZatrResCC3+ degyrstvo.ZatrResCC4+degyrstvo.ZatrResCC5;
Введённым кодом определяется количество СС всех типов, включая и резервные средства связи. Эти данные необходимы в последующем в объекте split. Количества СС как исходные данные будут размещены на активном классе Degyrstvo, который мы создадим позже, поэтому в коде используется доступ к ним в виде, например, degyrstvo.KCC1.
Кодом рассчитываются также максимальный доход от каждого типа СС и суммарный максимальный доход, а также затраты на содержание резервных СС по типам и суммарные затраты на содержание резервных СС всех типов.
Такой подход к расчётам максимального дохода и затрат на содержание резервных СС принят для экономии машинного времени, поскольку эти показатели зависят только от продолжительности времени моделирования (ВремяРабСист), дохода от дежурства одного СС и затрат на содержание одного резервного СС. То есть данные для их расчёта не носят стохастический характер. Поэтому указанные показатели целесообразно рассчитать здесь, а затем использовать в конце моделирования при обработке накопленных статистических данных.
Для вывода результатов моделирования с двумя знаками после запятой использовался метод round(). Предварительно результат умножался на 100, а потом делился на эту же величину. Например:
degyrstvo.DoxMaxCC1= round((degyrstvo.KCC1*doxDegCC1)*ВремяРабСист*100); degyrstvo.DoxMaxCC1=degyrstvo.DoxMaxCC1/100;
split и sink (Рис. 5.4).
(рис 5.4) Добавлены объекты split и sink
split. Установите свойства как на рис. 5.5. Так как копии не унаследуют свойств от оригинала, поэтому в поле Действие при выходе копии введите Java код:
NumCC++; if (NumCC <= KolCC) entity.tipCC = 5; if (NumCC <= (KolCC1+KolCC2+KolCC3+KolCC4)) entity.tipCC = 4; if (NumCC <= (KolCC1+KolCC2+KolCC3)) entity.tipCC = 3; if (NumCC <= (KolCC1+KolCC2)) entity.tipCC = 2; if (NumCC <= KolCC1) entity.tipCC = 1;
В поле entity.tipCC запоминается соответствующий код типа СС, например, entity.tipCC = 5, который необходим для нормального функционирования модели, то есть отличия СС по типам.
sink уничтожает заявку-оригинал.
(рис 5.5) Элемент source с установленными свойствами
Блок Распределитель средств связи предназначен для распределения СС согласно их типам, т. е. общее количество поступивших СС он должен разделить по типам.
Данный блок реализуется четырьмя объектами selectOutput и одним объектом queue (Рис. 5.6). Возможна реализация этого блока и одним объектом selectOutput5 совместно также с объектом queue.
Объект queue предназначен для приема, хранения и отправки на дежурство исправных СС, поступающих из ремонта.
selectOutput и один объект queue из библиотеки Enterprise Library на диаграмму класса Main. Соедините их так, как показано на рис. 5.6.
Основные панели Свойства свойства объектов selectOutput согласно табл. 5.2(при использовании объекта selectOutput5 условия разделения СС по типам останутся такими же).
(рис 5.6) Добавлены объекты SelectOutput и queue
| Имя | Отображать имя | Класс заявки: | Выход true выбирается | Условие |
|---|---|---|---|---|
СС1 | Установите флажки | ComFacility | При выполнении условия | entity.tipCC==1 |
СС2 | ComFacility | entity.tipCC==2 | ||
СС3 | ComFacility | entity.tipCC==3 | ||
СС4 | ComFacility | entity.tipCC==4 |
false элемента СС4, поэтому пятый объект selectOutput не нужен.
queue и не устанавливайте флажок Отображать имя.
Вместимость 100 и флажок Включить сбор статистики.
Презентация три элемента text и в соответствующих полях Текст: введите текст, как на рис. 5.6.На рис. 5.7 показан в окончательном виде сегмент Постановка на дежурство после добавления блока На дежурство. Для добавления этого блока, который должен выполнить "связь" между сегментом Постановка на дежурство и сегментом Имитация дежурства, создадим новый класс активного объекта.
Проект щелкните правой кнопкой мыши Main, с которым вы работаете в данный момент, и выберите Создать/Класс активного объекта из контекстного меню.
Новый класс активного объекта.
Имя: имя нового класса Degurstvo.
Описание: введите описание сущности, моделируемой этим классом.
Готово.
Создайте область просмотра на диаграмме класса Degurstvo для размещения элементов сегмента Имитация дежурства и текущих результатов моделирования.
Палитре выделите Презентация. Перетащите элемент Область просмотра.
Основные панели Свойства.
Имя: введите degyr.
Дополнительные панели Свойства. Введите в поля X: 40, Y: 0, Ширина: 730, Высота: 730.
Выравнивать по: Верхн. левому углу.
Масштабирование: Подогнать под окно.
(рис 5.7) Сегмент Постановка на дежурство
Созданный новый класс активного объекта Degyrstvo является вложенным объектом. Как вы помните, нам нужно сделать так, чтобы СС передавались на дежурство в сегмент Имитация дежурства из сегмента Постановка на дежурство, а отремонтированные СС после ремонта из сегмента Имитация дежурства возвращались в сегмент Постановка на дежурство.
Прямоугольник. Установите только флажки На верхнем уровне и На презентации.
Дополнительные панели Свойства. Введите в поля X: 110, Y: 150, Ширина: 100, Высота: 140.
Основная и разместите так, как показано на рис. 5.8. Автоматически они будут объединены прямоугольником (с пунктирными линиями) и появится надпись Значок.
Main.
(рис 5.8) Добавлены на Degyrstvo шесть портов
Проект выделите Degyrstvo, перетащите элемент класса и соедините так, как на рис. 5.7. При этом следует иметь в виду, что положение портов на элементе класса Degyrstvo изменить нельзя. Это можно сделать лишь на самом классе.Области просмотра используются как для навигации по графическому редактору во время создания модели, так и для навигации по окну презентации во время выполнения модели.
Чтобы перейти к другой области просмотра в режиме создания модели:
Области просмотра и выберите из выпадающего списка, к какой именно области просмотра вы хотите перейти. Чтобы перейти к другой области просмотра в режиме выполнения модели:
Область и затем выберите из списка, к какой именно области просмотра вы хотите перейти.
Показать область... и выберите из выпадающего списка, к какой именно области просмотра вы хотите перейти (эта кнопка принадлежит секции панели инструментов Вид, и возможно, чтобы она стала видна, вам нужно будет вначале показать эту секцию панели инструментов).Вы можете также добавлять свои собственные элементы презентации, щелчком на которых будет производиться переход к той или иной области просмотра. Воспользуйтесь последним.
Палитре выделите Презентация. Перетащите элемент text, разместите и введите в поле Текст: Постановка на дежурство, как на рис. 5.7.
text, разместите и введите в поле Текст: Имитация дежурства. Текущие результаты.
Свойства выделите Динамические и в поле Действие по щелчку: введите следующий Java код: degyrstvo.degyr.navigateTo();
Статистика. Введите Java код: degyrstvo.statistika.navigateTo();
Организуйте ввод исходных данных для сегмента Имитация дежурства. Для ввода исходных данных используйте также элемент Параметр.
Прямоугольник. На нём мы разместим элементы для ввода исходных данных.
На презентации.
Дополнительные панели Свойства. Введите в поля X: 50, Y: 790, Ширина: 570, Высота: 190.
text и на странице Основные панели Свойства в поле Текст: введите Initial_data_D (здесь D -дежурство).
Палитре выделите Основная. Перетащите элементы Параметр на элемент с именем Initial_data_D и разместите их так, как показано на рис. 5.9.
Основные панели Свойства каждого элемента Параметр установите свойства согласно табл. 5.3.
(рис 5.9) Размещение элементов Параметр для ввода данных
| Имя | Тип | Значение по умолчанию | Отображать имя |
|---|---|---|---|
KCC1 | int | 55 | Установить флажок во всех элементах |
KCC2 | int | 100 | |
KCC3 | int | 60 | |
KCC4 | int | 45 | |
KCC5 | int | 60 | |
KCCР1 | int | 2 | |
KCCР2 | int | 4 | |
KCCР3 | int | 4 | |
KCCР4 | int | 3 | |
KCCР5 | int | 4 | |
stoimRemCC1 | double | 17 | |
stoimRemCC2 | double | 18 | |
stoimRemCC3 | double | 16 | |
stoimRemCC4 | double | 20 | |
stoimRemCC5 | double | 21 | |
timeRem1 | double | 6,5 | |
timeRem2 | double | 4,2 | |
timeRem3 | double | 2,8 | |
timeRem4 | double | 3 | |
timeRem5 | double | 5,5 | |
timeOtkaz1 | double | 373 | |
timeOtkaz2 | double | 301 | |
timeOtkaz3 | double | 482 | |
timeOtkaz4 | double | 325 | |
timeOtkaz5 | double | 470 | |
kol_master | int | 3 | |
КолПрогон | double | 1000 | |
ВремяРабСист | double | 1000 |
Здесь выводятся все результаты моделирования (Рис. 5.10). Однако с целью экономии машинного времени, выводятся они по-разному. Рассчитанные ранее максимальные доходы от дежурства СС и затраты на содержание резервных СС не выводятся в ходе моделирования. Выводятся только текущие доходы от дежурства СС и текущие затраты на ремонт неисправных СС. Все обработанные результаты выводятся по окончании моделирования. Для организации вывода используется способ Событие (см. п. 5.1.7).
(рис 5.10) Элементы Простая переменная для выводов результатов моделирования
Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 54, Y: 436, Ширина: 696, Высота: 278.
text и на странице Основные панели Свойства в поле Текст: введите Затраты и Доходы соответственно.
Палитре выделите Основная. Перетащите элементы Простая переменная. Разместите их, как показано на рис. 5.10.
Отображать имя и тип double.Реализация событийной части сегмента показана на рис. 5.11.
Скруглённый прямоугольник. На нём мы разместим все элементы сегмента Имитация дежурства.
Дополнительные панели Свойства. Введите в поля X: 60, Y: 60, Ширина: 600, Высота: 350.
Прямоугольник. На нём мы разместим элементы, непосредственно имитирующие дежурство СС.
Дополнительные панели Свойства. Введите в поля X: 250, Y: 70, Ширина: 170, Высота: 330.
Прямоугольник для размещения элементов, имитирующих ремонтное подразделение СС.
Дополнительные панели Свойства. Введите в поля X: 440, Y: 70, Ширина: 190, Высота: 330.
Degyrstvo последовательно: пять объектов queue, пять объектов delay, один объект queue, один объект delay и соедините их так, как показано на рис. 5.11.
text и введите названия в соответствующие поля Текст: согласно рис. 5.11.
Основные панели Свойства каждого объекта установите свойства согласно табл. 5.4.delay с именами degCC1 … degCC5 стоят объекты queue с именами rez1 … rez5 соответственно, то возникает желание поставить такие же объекты на выходах delay. Однако это приведёт к неправильной работе модели: некоторые СС не смогут поступать в ремонтное подразделение.
(рис 5.11) Сегмент Имитация дежурства
| queue | |||
|---|---|---|---|
| Имя | Вместимость | Действие при выходе | |
rez1 | KCCP1 | entity.timeOtkaz=1/timeOtkaz1 | |
rez2 | KCCP2 | entity.timeOtkaz=1/timeOtkaz2 | |
rez3 | KCCP3 | entity.timeOtkaz=1/timeOtkaz3 | |
rez4 | KCCP4 | entity.timeOtkaz=1/timeOtkaz4 | |
rez5 | KCCP5 | entity.timeOtkaz=1/timeOtkaz5 | |
| delay | |||
| Имя | Время задержки | Вместимость | |
degCC1 | exponential(entity.timeOtkaz) | KCC1 | |
degCC2 | exponential(entity.timeOtkaz) | KCC2 | |
degCC3 | exponential(entity.timeOtkaz) | KCC3 | |
degCC4 | exponential(entity.timeOtkaz) | KCC4 | |
degCC5 | exponential(entity.timeOtkaz) | KCC5 | |
remont | exponential(entity.timeMeanRem) | 3 | |
| Имя | Действие при выходе | ||
degCC1 | DoxDegCC1+=(time()-entity.nach1)*get_Main().doxDegCC1; | ||
entity.timeMeanRem=1/timeRem1; | |||
degCC2 | DoxDegCC2+=(time()-entity.nach1)*get_Main().doxDegCC2; | ||
entity.timeMeanRem=1/timeRem2; | |||
degCC3 | DoxDegCC3+=(time()-entity.nach1)*get_Main().doxDegCC3; | ||
entity.timeMeanRem=1/timeRem3; | |||
degCC4 | DoxDegCC4+=(time()-entity.nach1)*get_Main().doxDegCC4; | ||
entity.timeMeanRem=1/timeRem4; | |||
degCC5 | DoxDegCC5+=(time()-entity.nach1)*get_Main().doxDegCC5; | ||
entity.timeMeanRem=1/timeRem5; | |||
Кроме свойств, указанных в табл. 5.4, нужно также:
Класс заявки: Entity заменить ComFacility;
Включить сбор статистики;
delay degCC1 … degCC5 установить:entity.nach1=time();delay с именем remont также ввести Java коды в следующие свойства:entity.nach=time();
if (entity.tipCC == 1)
{ZatrRemCC1+=((time()-entity.nach)*stoimRemCC1);
SumZatrRem+=((time()-entity.nach)*stoimRemCC1);}
if (entity.tipCC == 2)
{ZatrRemCC2+=((time()-entity.nach)*stoimRemCC2);
SumZatrRem+=((time()-entity.nach)*stoimRemCC2);}
if (entity.tipCC == 3)
{ZatrRemCC3+=((time()-entity.nach)*stoimRemCC3);
SumZatrRem+=((time()-entity.nach)*stoimRemCC3);}
if (entity.tipCC == 4)
{ZatrRemCC4+=(time()-entity.nach)*stoimRemCC4;
SumZatrRem+=((time()-entity.nach)*stoimRemCC4);}
if (entity.tipCC == 5)
{ZatrRemCC5+=((time()-entity.nach)*stoimRemCC5);
SumZatrRem+=((time()-entity.nach)*stoimRemCC5);}Палитре выделите Презентация. Перетащите элемент text, разместите и введите в поле Текст: Постановка на дежурство, как на рис. 5.11.
Свойства выделите Динамические и в поле Действие по щелчку: введите следующий Java код: get_Main().Postanovka.navigateTo();
text, разместите и введите в поле Текст: Имитация дежурства.
Свойства выделите Динамические и в поле Действие по щелчку: введите следующий Java код: Degyr.navigateTo();
Статистика. Введите Java код: statistika.navigateTo();
Результаты моделирования выводятся в сегменте Имитация дежурства. Тем не менее, организуем вывод результатов моделирования, можно сказать, в более презентабельном виде. Для этого создадим сегмент Статистика (Рис. 5.12).
(рис 5.12) Сегмент Статистика
Статистика.
Палитре выделите Презентация. Перетащите элемент Область просмотра.
Основные панели Свойства.
Имя: введите statistika.
Дополнительные панели Свойства. Введите в поля X: 0, Y: 1036, Ширина: 960, Высота: 630.
Выравнивать по: Верхн. левому углу.
Масштабирование: Подогнать под окно.
Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 20, Y: 1076, Ширина: 920, Высота: 580.
text и в поле Текст: введите Результаты моделирования. На странице Дополнительные панели Свойства введите в поля X: 360, Y: 1096.
text, разместите и введите в соответствующие поля Текст: надписи, как на рис. 5.12. Например, при размещении надписи Максимальный доход по типам СС укажите в полях X: 48, Y: 1126, при размещении надписи Коэффициенты использования типов средств связи укажите в полях X: 468, Y: 1418, а при размещении надписи Затраты на содержание резервов по типам средств связи в полях X: 485, Y: 1385. Текстовое поле является простейшим текстовым элементом управления, позволяющим пользователю вводить небольшие объемы текста. Вы можете также связать этот элемент управления с переменной или параметром типа String, double или int.
Элементы управления и разместите согласно рис. 5.12.
Текстовое поле, переходите на страницу Основные панели Свойства и в поле Имя: давайте имя элементу согласно табл. 5.5.| 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|
| Максимальный доход по типам СС | |||||
| editbox1 | editbox2 | editbox3 | editbox4 | editbox5 | editbox |
| Доход от дежурства по типам СС и всего | |||||
| editbox11 | editbox12 | editbox13 | editbox14 | editbox15 | editbox16 |
| Стоимость ремонта по типам СС и всего | |||||
| editbox21 | editbox22 | editbox23 | editbox24 | editbox25 | editbox26 |
| Суммарная прибыль от использования СС и всего | |||||
| editbox31 | editbox32 | editbox33 | editbox34 | editbox35 | editbox36 |
| Коэффициенты прибыли по типам СС и всего | |||||
| editbox41 | editbox42 | editbox43 | editbox44 | editbox45 | editbox46 |
| Затраты на содержание резервов по типам СС и всего | |||||
| editbox6 | editbox7 | editbox8 | editbox9 | editbox10 | editbox17 |
С помощью диаграмм AnyLogic позволяет динамически визуализировать данные, собираемые в результате работы модели. Набор диаграмм схож с тем, что предлагается программой MS Excel. Библиотека обладает мощным и удобным интерфейсом, не требующим при создании диаграммы программирования.
Термин диаграмма используется для обозначения, как обычных диаграмм, так и гистограмм. Гистограммы отображают статистически обработанные данные в виде функции плотности вероятности (PDF) и интегральной функции распределения (CDF), учитывающие все когда-либо добавленные на гистограмму значения. Диаграммы отображают текущие значения элементов данных (а некоторые - также недавнюю историю изменения значений).
AnyLogic поддерживает несколько видов диаграмм.
Простые диаграммы:
Диаграммы с историей (временные диаграммы):
Используйте диаграмму с накоплением.
Диаграмма с накоплением показывает вклад нескольких элементов данных в суммирующий результат в виде столбцов, расположенных друг над другом. Высота каждого столбца пропорциональна значению соответствующего элемента данных.
Самый нижний столбец соответствует элементу данных, добавленному вами на диаграмму первым, затем добавленному вторым и т. д. Не допускается присутствие отрицательных значений - в этом случае возникнет ошибка. Вы можете изменить направление роста столбца и его ширину с помощью свойств Направление и Относительная ширина (они находятся на странице свойств Внешний вид).
Диаграмма с накоплением из палитры Статистика и разместите согласно рис. 5.12.
Диаграмма с накоплением, переходите на страницу Внешний вид панели Свойства и установите:40
20
92
138
52
вертикальноеЦвет текста, цвет фона и цвет границы установите по своему усмотрению.
Основные панели Свойства.
Добавить элемент данных.
Заголовок: введите СС1.
Значение: введите Java код
degCC1.statsUtilization.mean()
Масштаб: Фиксированный и Обновлять автоматически. Цвет столбика, который будет отображать коэффициент использования группы СС одного типа, установите по своему усмотрению.
Диаграмма с накоплением. При этом в поле Заголовок: вводите: СС2, СС3, СС4, СС5 соответственно.
Значение: вводите Java коды также для объектов 2…5 соответственно:
degCC2.statsUtilization.mean() degCC3.statsUtilization.mean() degCC4.statsUtilization.mean() degCC5.statsUtilization.mean()
На этом реализация сегмента Статистика завершена. Осталось только организовать переключение между областями просмотра.
Палитре выделите Презентация. Перетащите элемент text, разместите и введите в поле Текст: Постановка на дежурство, как на рис. 5.12.
Свойства выделите Динамические и в поле Действие по щелчку: введите следующий Java код: get_Main().Postanovka.navigateTo();
text, разместите и введите в поле Текст: Имитация дежурства.
Свойства выделите Динамические и в поле Действие по щелчку: введите следующий Java код: degyrstvo.degyr.navigateTo();
Статистика. Введите Java код: statistika.navigateTo();
Все три сегмента модели построены. Теперь вернемся к выводу результатов моделирования с использованием способа событие.
Есть три типа событий.
Событие, происходящее по истечении таймаута. Оно используется тогда, когда Вам нужно запланировать выполнение какого-то действия на определенный момент времени (отстоящий на заданное количество времени (таймаут) от текущего момента). Событие, происходящее по истечению таймаута, предоставляет дополнительные возможности: вы можете сделать событие циклическим, либо же вообще управлять этим событием "вручную".
Событие, происходящее при выполнении заданного условия. Оно используется тогда, когда Вам нужно отслеживать выполнение определенного условия и производить какое-то действие при его происхождении.
Событие, происходящее с заданной интенсивностью. Оно используется для моделирования потока независимых событий (пуассоновский поток). Это часто требуется при моделировании поступления, например, заявок в системах массового обслуживания.
AnyLogic поддерживает еще один тип события, задаваемый уже другим модельным элементом - динамическое событие. Динамические события используются для планирования сразу нескольких одновременных и независимых событий. Например, канал связи, параллельно передающий произвольное количество сообщений, может быть смоделирован с помощью динамических таймеров, создаваемых для каждого сообщения.
Для вывода результатов моделирования воспользуйтесь событием, происходящим по истечении таймаута.
Модель на диаграмму класса активного объекта. Измените его имя на ResulsModeling. Нажмите Enter.
Отображать имя.
Tип события: выберите По таймауту.
Режим: Срабатывает один раз.
Время срабатывания (абсолютное) 1000000.
Действие введите Java код, который будет выполняться при появлении этого события.
//Расчет результатов по СС1 DoxDegCC1=round((DoxDegCC1/КолПрогон)*100); DoxDegCC1=DoxDegCC1/100; ZatrRemCC1=round((ZatrRemCC1/КолПрогон)*100); ZatrRemCC1=ZatrRemCC1/100; UbitokCC1=round((1-degCC1.statsUtilization.mean())*get_Main().ubitokCC1*ВремяРабСист*KCC1*100); UbitokCC1=UbitokCC1/100; PribCC1=round((DoxDegCC1-(ZatrResCC1+ZatrRemCC1+UbitokCC1))*100); PribCC1=PribCC1/100; koefPribCC1=round((PribCC1/DoxMaxCC1)*1000); koefPribCC1=koefPribCC1/1000; //Расчет результатов по СС2 DoxDegCC2=round((DoxDegCC2/КолПрогон)*100); DoxDegCC2=DoxDegCC2/100; ZatrRemCC2=round((ZatrRemCC2/КолПрогон)*100); ZatrRemCC2=ZatrRemCC2/100; UbitokCC2=(1-degCC2.statsUtilization.mean())*get_Main().ubitokCC2*ВремяРабСист*KCC2; PribCC2=round((DoxDegCC2-(ZatrResCC2+ZatrRemCC2+UbitokCC2))*100); PribCC2=PribCC2/100; koefPribCC2=round((PribCC2/DoxMaxCC2)*1000); koefPribCC2=koefPribCC2/1000; //Расчет результатов по СС3 DoxDegCC3=round((DoxDegCC3/КолПрогон)*100); DoxDegCC3=DoxDegCC3/100; ZatrRemCC3=round((ZatrRemCC3/КолПрогон)*100); ZatrRemCC3=ZatrRemCC3/100; UbitokCC3=(1-degCC3.statsUtilization.mean())* get_Main().ubitokCC3*ВремяРабСист*KCC3; PribCC3=round((DoxDegCC3-(ZatrResCC3+ZatrRemCC3+UbitokCC3))*100); PribCC3=PribCC3/100; koefPribCC3=round((PribCC3/DoxMaxCC3)*1000); koefPribCC3=koefPribCC3/1000; //Расчет результатов по СС4 DoxDegCC4=round((DoxDegCC4/КолПрогон)*100); DoxDegCC4=DoxDegCC4/100; ZatrRemCC4=round((ZatrRemCC4/КолПрогон)*100); ZatrRemCC4=ZatrRemCC4/100; UbitokCC4=(1-degCC4.statsUtilization.mean())* get_Main().ubitokCC4*ВремяРабСист*KCC4; PribCC4=round((DoxDegCC4-(ZatrResCC4+ZatrRemCC4+UbitokCC4))*100); PribCC4=PribCC4/100; koefPribCC4=round((PribCC4/DoxMaxCC4)*1000); koefPribCC4=koefPribCC4/1000; //Расчет результатов по СС5 DoxDegCC5=round((DoxDegCC5/КолПрогон)*100); DoxDegCC5=DoxDegCC5/100; ZatrRemCC5=round((ZatrRemCC5/КолПрогон)*100); ZatrRemCC5=ZatrRemCC5/100; UbitokCC5=(1-degCC5.statsUtilization.mean())* get_Main().ubitokCC5*ВремяРабСист*KCC5; PribCC5=round((DoxDegCC5-(ZatrResCC5+ZatrRemCC5+UbitokCC5))*100); PribCC5=PribCC5/100; koefPribCC5=round((PribCC5/DoxMaxCC5)*1000); koefPribCC5=koefPribCC5/1000; //Расчет суммарных результатов SumDoxDeg=DoxDegCC1+DoxDegCC2+DoxDegCC3+ DoxDegCC4+DoxDegCC5; SumZatrRem=round((SumZatrRem)*100/КолПрогон); SumZatrRem=SumZatrRem/100; SumUbitok=UbitokCC1+UbitokCC2+UbitokCC3+ UbitokCC4+UbitokCC5; SumPribil=round((SumDoxDeg-(SumZatrRes+SumZatrRem+SumUbitok))*100); SumPribil=SumPribil/100; koefPribil=round((SumPribil/SumDoxMax)*1000); koefPribil=koefPribil/1000; //вывод максимального дохода, дохода от дежурства по типам СС и всего editbox1.setText(DoxMaxCC1); editbox11.setText(DoxDegCC1); editbox2.setText(DoxMaxCC2); editbox12.setText(DoxDegCC2); editbox3.setText(DoxMaxCC3); editbox13.setText(DoxDegCC3); editbox4.setText(DoxMaxCC4); editbox14.setText(DoxDegCC4); editbox5.setText(DoxMaxCC5); editbox15.setText(DoxDegCC5); editbox.setText(SumDoxMax); editbox16.setText(SumDoxDeg); //вывод стоимости ремонта по типам СС и всего editbox21.setText(ZatrRemCC1); editbox22.setText(ZatrRemCC2); editbox23.setText(ZatrRemCC3); editbox24.setText(ZatrRemCC4); editbox25.setText(ZatrRemCC5); editbox26.setText(SumZatrRem); //вывод чистой прибыли от использования по типам СС и всего editbox31.setText(PribCC1); editbox32.setText(PribCC2); editbox33.setText(PribCC3); editbox34.setText(PribCC4); editbox35.setText(PribCC5); editbox36.setText(SumPribil); //вывод коэфициентов прибыли по типам СС и всего editbox41.setText(koefPribCC1); editbox42.setText(koefPribCC2); editbox43.setText(koefPribCC3); editbox44.setText(koefPribCC4); editbox45.setText(koefPribCC5); editbox46.setText(koefPribil); //вывод затрат на содержание резервов по типам СС и всего editbox6.setText(ZatrResCC1); editbox7.setText(ZatrResCC2); editbox8.setText(ZatrResCC3); editbox9.setText(ZatrResCC4); editbox10.setText(ZatrResCC5); editbox17.setText(SumZatrRes);
Из кода следует, что по окончании моделирования, которое длится 1 000 000 единиц модельного времени, сработает метод событие, будут рассчитаны и выведены результаты моделирования.
Для округления результатов моделирования (коэффициентов прибыли до трех знаков после запятой, а абсолютных величин прибыли и затрат - до двух знаков) использован метод round(). Предварительно результат умножался на 1000 и 100, а потом делился на эти же величины.
Для вывода результатов моделирования в текстовые поля editbox используется функция setText(), в качестве аргумента которой указывается имя элемента Простая переменная, например, editbox1.setText(DoxMaxCC1);
Запустите модель. На рис. 5.13 и рис. 5.14 показаны результаты моделирования.
(рис 5.13) Результаты моделирования
(рис 5.14) Результаты сегмента Статистика
AnyLogic предоставляет пользователю возможность провести следующие эксперименты:
Последние пять экспериментов доступны только в AnyLogic Professional.
Простой эксперимент запускает модель с заданными значениями параметров, поддерживает режимы виртуального и реального времени, анимацию, отладку модели.
При создании модели автоматически создается один простой эксперимент, названный Simulation. Именно такой эксперимент мы с вами и рассматривали до сих пор.
Эксперимент этого типа используется в большинстве случаев. Другие эксперименты нужны тогда, когда важную роль играют значения параметров модели. То есть вам нужно проанализировать, как они влияют на поведение или эффективность моделируемой системы или если вам нужно найти оптимальные параметры вашей модели.
Далее в рамках данного пособия мы остановимся на доступных в версии AnyLogic University экспериментах оптимизации и варьирования переменных, овладев методиками проведения которых, вы самостоятельно сможете выполнять в AnyLogic Professional и другие эксперименты.
Начиная создавать модель в AnyLogic, мы ничего не говорили об экспериментах и особенностях их проведения. Поэтому все исходные данные разместили на Initial_data_PD (рис. 5.3) и Initial_data_D (рис. 5.9) так, как нам представлялось удобным для построения модели и управления ею в ходе проведения простого эксперимента.
Однако при проведении экспериментов и наличии в модели, как в нашем случае, вложенных объектов, необходимо связывать параметры, размещенные на корневом объекте и вложенных объектах. Связывание необходимо потому, что изменять в ходе эксперимента можно только параметры корневого объекта.
В результате связывания значение параметра любого уровня вложенного объекта будет равно значению параметра объекта самого верхнего уровня.
Но следует иметь в виду, что связываются только параметры одного типа и что передача значения параметра производится лишь параметру объекта, находящегося ниже уровнем в иерархическом дереве модели. То есть связываются параметры последовательно от одного уровня к другому, а не через уровень или уровни.
Разместите элементы, как показано на рис. 5.15. Внесите соответствующие изменения в модель. Обратите внимание на различие имён связываемых параметров, например, КССР_1.
Свяжите параметры корневого объекта Main с параметрами вложенного объекта класса Degyrstvo.
Main.
Параметры панели Свойства.
Параметры в поле Значение введите имя параметра класса объекта-владельца Main, значение которого нужно передавать этому параметру вложенного объекта. В результате у вас должно быть так, как на рис. 5.16.
(рис 5.15) Размещение элементов на Initial_data_ PD
(рис 5.16) Фрагмент страницы Параметры после связывания параметров
Эксперимент Оптимизация может проводиться в AnyLogic оптимизатором OptQuest для детерминированных и стохастических моделей.
Наша модель ComSystem стохастическая. Создайте оптимизационный эксперимент стохастической модели с целью определения максимального коэффициента прибыли в зависимости от количества резервных СС и мастеров-ремонтников.
Проект щелкните правой кнопкой мыши элемент модели ComSystem и из контекстного меню выберите Coздать/ Эксперимент.
Тип эксперимента: выберите Оптимизация (рис. 5.17).
(рис 5.17) Диалоговое окно Новый эксперимент
Имя введите имя эксперимента, например, OptComSystem. Имя эксперимента должно начинаться с заглавной буквы - таково правило названия классов в Java.
Корневой класс модели: выберите Main. Этим действием вы задали корневой (главный) класс эксперимента. Объект этого класса будет играть роль корня иерархического дерева объектов модели, запускаемой оптимизационным экспериментом.
Копировать установки модельного времени из: и выберите эксперимент из расположенного справа выпадающего списка. В данном случае оставьте, так как есть: Simulation.
Готово. Появится страница Основные панели Свойства (рис. 5.18).
максимизировать.
Фиксированное начальное число (воспроизводимые прогоны).
Начальное число введите 5672.
root.Поэтому в поле Целевая функция введите root.degyrstvo.koefPribil.
Количество итераций:. Под итерацией понимается один опыт (одно наблюдение). Количество итераций - это цель стратегического планирования эксперимента - определение количества наблюдений и уровней факторов в них для получения полной и достоверной информации о модели.
i-го фактора, $$i=\overline{1,m}$$.
КССР_1…КССР_5 и количество мастеров-ремонтников Kol_masterov, то есть всего m=6 факторов. Факторы имеют следующие уровни: $$k_1=3, k_2=k_3=k_4=6, k_5=k_6=5$$. Тогда число итераций
$$I=k_1 \cdot k_2 \cdot k_3 \cdot k_4 \cdot k_5 \cdot k_6=3 \cdot 6 \cdot 6 \cdot 6 \cdot 5 \cdot 5 =16200$$
(рис 5.18) Вкладка Основные оптимизационного эксперимента
Количество итераций:, так как данная версия AnyLogic ограничена этим количеством итераций.
Main.
КССР_1. Щелкните мышью в ячейке Тип. Выберите тип параметра, отличный от значения фиксированный. Так как параметр KCCР_1 целочисленный типа int, выберите дискретный.
Мин минимальное значение 1, в ячейку Макс максимальное значение, например, для КССР1, 3. Так как параметр дискретный, в ячейке Шаг укажите величину шага 1.
Репликации панели Свойства (рис. 5.19).
Использовать репликации.
Возможность переменного количества репликаций позволяет оптимизатору OptQust проверять на статистическую значимость разницу между средним значением целевой функции в текущей итерации (текущее среднее значение) и лучшим значением, найденным за предыдущие итерации (лучшее значение). Целью такой проверки является удаление худших решений без потери времени на их получение. Таким образом, процесс может быть значительно ускорен за счет прекращения поиска неподходящих решений вместо выполнения заданного максимального количества реализаций.
Фиксированное количество репликаций и в соответствующем поле установите 4.
(рис 5.19) Страница Репликации оптимизационного эксперимента
Основные и щелкните кнопку Создать интерфейс. Кнопка находится в правом верхнем углу страницы Основные. После щелчка удаляется содержимое презентации эксперимента и создается интерфейс эксперимента заново (рис. 5.20) согласно его текущим установкам (набору оптимизационных параметров и их свойствам и т. д.). Поэтому создавать интерфейс нужно только после окончания задания параметров эксперимента. На интерфейсе видны знаки вопросов напротив оптимизационных параметров.
ComSystem/OptComSystem.
Запустить оптимизацию. Начнет выполняться эксперимент. Во время эксперимента можно видеть на графике изменение значения целевой функции. После 500*4=2 000 прогонов (см. рис. 5.21) эксперимент остановится.
КССР_1=2, КССР_2= КССР_3= КССР_4=КССР_5=1, Kol_master=5.
КССР_1… КССР_5 и Kol_master на Initial_data_PD на значения, полученные в оптимизационном эксперименте.
(рис 5.20) Интерфейс оптимизационного эксперимента
(рис 5.21) Результаты оптимизационного эксперимента
Обратите внимание на интерфейс оптимизационного эксперимента (рис. 5.20): заготовка для графика относительного коэффициента прибыли расположена в первом квадранте, то есть коэффициент предполагается положительным. Однако при некоторых параметрах система предоставления услуг связи оказывается убыточной. Поэтому появляется четвёртый квадрант (рис. 5.21), в котором искомый коэффициент отрицательный.
Эксперимент Варьирование параметров также может проводиться для детерминированных и стохастических моделей.
Создайте эксперимент Варьирование параметров для стохастической модели ComSystem с целью наблюдения за изменением коэффициента прибыли в зависимости от дохода за дежурство средств связи.
Проект щелкните правой кнопкой мыши элемент модели ComSystem и из контекстного меню выберите Создать эксперимент.
Тип эксперимента: выберите Варьирование параметров (рис. 5.22).
Имя введите имя эксперимента, например, ParVarComSystem.
(рис 5.22) Окно Новый эксперимент с выбранным экспериментом
(рис 5.23) Страница Основные эксперимента варьирования параметров
Готово. Появится страница Основные панели Свойства (рис. 5.23).
Основные по сравнению с оптимизационным экспериментом отсутствуют опции минимизировать, максимизировать, Количество итераций. Последнее определяется AnyLogic в зависимости от диапазонов и шагов изменения параметров.
doxDegCC1. Перейдите в таблице на рис. 5.23 на строку с этим параметром. Щелкните мышью в ячейке Тип. Выберите тип параметра, отличный от значения фиксированный. Параметр doxDegCC1 типа double, поэтому он может изменяться в диапазоне. Выберите Диапазон. В ячейку Мин введите минимальное значение 18, в ячейку Макс - максимальное значение 24, в ячейке Шаг укажите величину шага 0.5.
Репликации панели Свойства и установите флажок Использовать репликации. В поле Кол-во репликаций за итерацию, установите, как и в предыдущем эксперименте, 4.
Основные и щелкните кнопку Создать интерфейс.
Варьирование параметров в отличие от эксперимента Оптимизация интерфейс создает пользователь. Связано это с тем, что выходными результатами данного эксперимента могут быть любые показатели моделируемой системы.
График из палитры Статистика на диаграмму активного класса.
Добавить набор данных.
Набор данных. Заголовок: KoefPribil. Набор данных: dataset. Установите Не обновлять автоматически.
Дополнительные и установите: X: 260, Y: 100, Ширина: 510, Высота: 400, Цвет фона: Нет заливки, Цвет границы: Нет линии.
Внешний вид. Установите: Смещение по Х: 40, Смещение по Y: 20, Ширина: 450, Высота: 330.
Статистика перетащите элемент Набор данных. Установите опцию Не обновлять автоматически.
Основная перетащите элемент Простая переменная. На странице Основные панели Свойства в поле Имя: введите valueOfKoefPribil. Установите Уровень доступа: public. Тип: double.
Дополнительные панели Свойства и введите коды:Действие после прогона модели:
valueOfKoefPribil = root.degyrstvo.koefPribil;
Действие после итерации
dataset.add(getCurrentIteration(), valueOfKoefPribil);
ComSystem2/VarParComSystem.
(рис 5.24) Интерфейс эксперимента варьирования параметров
Запустить эксперимент. Начнет выполняться эксперимент. Во время эксперимента можно видеть на графике изменение значения коэффициента прибыли. Фрагмент результатов выполнения эксперимента Варьирование параметров приведен на рис. 5.25.
(рис 5.25) Фрагмент результатов выполнения эксперимента Варьирование параметров
doxDegCC1 = 21,5, doxDegCC2 = 20,5, doxDegCC3 = 28, doxDegCC4 = 19, doxDegCC5 = 23.
КССР_1… КССР_5 и Kol_master на Initial_data_PD, полученные в оптимизационном эксперименте (см. рис. 5.25), то значения коэффициентов прибыли в эксперименте варьирования параметрами близки к 0,949.В обоих экспериментах мы использовали опцию Фиксированное начальное число (воспроизводимые прогоны), поэтому генератор случайных чисел модели всегда инициализировался одним и тем же начальным числом 5672, заданным нами в поле Начальное число. Все запуски модели были идентичными и воспроизводимыми, что полезно при отладке модели.
Если выбрана опция Случайное начальное число (уникальные прогоны), то при каждом новом запуске модели генератор случайных чисел инициализируется другим числом и результаты оптимизации могут отличаться.
Создайте оптимизационный эксперимент OptComSystem1, который будет отличаться от OptComSystem лишь выбранной опцией Случайное начальное число (уникальные прогоны).
Запустите эксперимент. Вы получите следующие результаты. Наилучшее значение целевой функции - коэффициент прибыли - равно 0,957. Получено оно на 172 итерации при следующих оптимальных значениях параметров: КССР_1=1, КССР_2=2, КССР_3=1, КССР_4=1, КССР_5=2, Kol_master=5. Таким образом, получен другой коэффициент прибыли, при этом другое значение оптимального параметра КССР_5=2.
Оптимизационный эксперимент OptComSystem1 выполнялся 4839,2 сек (80,66 мин). Это при том, что эксперимент проводился на компьютере с четырёхядерным процессором и одновременно выполнялись четыре прогона модели.
Модели AnyLogic являются приложением Java, поэтому их можно запускать на большинстве современных платформ, а также помещать на веб-сайты в виде апплетов.
Наличие такой возможности позволяет удалённым пользователям запускать интерактивные модели в веб-браузере при отсутствии AnyLogic или какого-либо другого программного обеспечения. В этом случае на клиентской машине будут запускаться скопированные из сети файлы модели с такой же поддержкой интерактивной работы, что и при запуске из среды AnyLogic.
Экспортируйте модель ComSystem в виде Java апплета.
Экспорт/В Java апплет (запускается в веб браузере) из контекстного меню.
Экспорт модели (рис. 5.26). Щелчком мыши раскройте список Экспортировать эксперимент и выберите в нем Simulation. Настройки этого эксперимента будут применены к экспортируемой модели.
Каталог для создаваемых файлов укажите каталог, в который вы хотите поместить файлы экспортируемой модели. Можно также выбрать каталог с помощью диалогового окна навигации, которое становится доступным при нажатии кнопки Выбрать.
Язык: <системный по-умолчанию>). При необходимости можно выбрать для интерфейса апплета другой язык из выпадающего списка Язык: (на данный момент AnyLogic поддерживает русский, английский, китайский, немецкий и итальянский языки).
(рис 5.26) Диалоговое окно Экспорт модели
(рис 5.27) Набор файлов Java апплет
Открыть апплет модели в веб браузере.
Готово. Откроется диалоговое окно, в котором будет сообщение об успешном завершении экспортирования модели ComSystem: Модель ComSystem была экспортирована в G:\BOEV.
OK.Модель, экспортированная как Java апплет, представляет собой набор следующих файлов (рис. 5.28):
.html, используемый для запуска Java апплета;
com.xj.anylogic.engine.jar исполняющего модуля AnyLogic;
.jar файл модели (model.jar);
.jar файлы и классы, необходимые для построения модели.При публикации апплета модели в сети Интернет нужно предоставить доступ ко всем этим файлам из кода апплета. Это значит, что если вы добавляете ссылку на .html файл модели на веб страницу, то необходимо разместить все эти файлы в той же директории, где и этот .html файл. Для показа апплета на своей веб странице следует скопировать код апплета из .html файла модели в код своей страницы, и добавить все файлы, сгенерированные при экспорте модели, в тот же каталог, где находится ваша страница.
Запустите апплет модели, дважды щелкнув ComSystem.html. Результаты работы апплета модели показаны на рис. 5.28. Коэффициент прибыли равен 0,949 (см. п. 5.1.8.3).
(рис 5.28) Результаты работы апплета модели ComSystem
Как уже отмечалось, система связи представляет собой многофазную многоканальную систему массового обслуживания замкнутого типа с отказами и ожиданием.
Какие ограничения в системе?
Для моделирования двух первых ограничений целесообразно использовать МКУ, а для третьего и четвертого ограничений - транзакты.
Модель системы связи должна состоять из следующих сегментов:
Сегмент переопределения блоков модели необходим для изменения версий модели, т. е. изменения количества резервных СС и мастеров-ремонтников в ремонтном подразделении, а также номеров строк и столбцов матриц, в которые записываются результаты моделирования. Количество переопределений в сегменте соответствует числу версий модели минус один.
Предполагается, что количество типов СС в системе предоставления услуг связи может изменяться от одного до максимального значения n2_. Программа модели, как уже омечалось при разработке AnyLogic-модели, построена для n2_=5.
Для хранения результатов моделирования используются матрицы. В целях придания неизменности программы модели при варьировании количеством типов СС матрицы должны быть пронумерованы. Однако GPSS World при описании матриц командой MATRIX не позволяет вместо имени указывать число. Матрицы нужно вначале описать, дав им имена, а затем пронумеровать.
Результаты моделирования для одного типа СС хранятся в семи матрицах, например, для СС типа 1 (СС1) с идентификаторами:
Prib1 - матрица ожидаемой прибыли СС1;
KPr1 - матрица коэффициентов прибыли СС1;
KZen1 - матрица коэффициентов использования СС1;
DoxMax1 - матрица максимальных доходов от СС1;
DoxDeg1 - матрица доходов от дежурства СС1;
ZatrRem1 - матрица затрат на ремонт СС1;
ZatrResSS1 - матрица затрат на резервные СС1.Значит, аналогичных матриц будет тридцать пять. Да плюс еще матрица KRem коэффициентов использования мастеров - ремонтников. Именам этим тридцати шести матрицам даны номера.
Три матрицы для хранения суммарных результатов моделирования для СС всех типов не нумеровались:
Pribil - матрица суммарной прибыли;
SrKPrib - матрица средних коэффициентов прибыли СС всех типов;
SrKIsp - матрица коэффициентов использования СС всех типов.Именам пяти МКУ СС1_, СС2_, СС3_, СС4_ и СС5_, имитирующим по типам СС, находящиеся на дежурстве, даны номера 1 … 5. Это позволяет сократить число блоков в модели за счет того, что вместо пяти (в данном варианте модели) сегментов имитации постановки на дежурство СС используется один сегмент.
Для записи исходных данных: количества СС всех типов (в том числе и резервных), среднего времени наработки на отказ и среднего времени восстановления по типам СС, дохода по типам от одного СС, находящегося на дежурстве, убытка по типам при отсутствии одного СС на дежурстве, стоимости по типам одного резервного СС используются функции KolSS, KollSSRes, NarOtk, SrVrRem, S1_, S2_, S3_ соответственно. Этот способ по сравнению со способом использования матриц для записи этих же данных позволяет сократить программу модели на двадцать пять строк.
В начале работы модели генератор сразу вырабатывает количество транзактов, равное соответствующему количеству типов СС, и перестает быть активным.
Далее блоками SAVEVALUE и ASSIGN в параметр 1 каждого из транзактов последовательно заносятся коды 1…n1_ - признак типа СС.
Затем каждый из транзактов с помощью блока SPLIT расщепляется (копируется, размножается) по количеству СС (с учетом резервных СС) соответствующего типа.
После расщепления транзакты в соответствии с типом СС сразу занимают все каналы МКУ, имитирующие нахождение СС на дежурстве. Резервные СС остаются в списках задержки соответствующих МКУ.
Вышедшее из строя СС снимается с дежурства, поступает в ремонтное подразделение - транзакт либо занимает свободный канал МКУ Rem, если такой есть, либо при отсутствии свободного канала помещается в список задержки этого МКУ - список транзактов, ожидающих возможность занять освободившиеся каналы МКУ.
После ремонта СС отправляется либо сразу на дежурство, либо в резерв. В обоих случаях транзакт направляется на метку Met1. Здесь также транзакт либо занимает свободный канал, либо помещается в список задержки МКУ, соответствующего типу СС.
Ниже приводится программа только (в целях сокращения) для моделирования случая три мастера-ремонтника, а резервных СС2 - четыре, пять и шесть.
; Модель функционирования системы связи ; Задание номеров матрицам Prib1 EQU 1 ; Матрица ожидаемой прибыли СС1 KPr1 EQU 2 ; Матрица коэффициентов прибыли СС1 KZen1 EQU 3 ; Матрица коэффициентов использования СС1 DoxMax1 EQU 4 ; Матрица максимальных доходов СС1 DoxDeg1 EQU 5 ; Матрица доходов от дежурства СС1 ZatrRem1 EQU 6 ; Матрица затрат на ремонт СС1 ZatrResSS1 EQU 7 ; Матрица затрат на резервные СС1 Prib2 EQU 8 ; Матрица ожидаемой прибыли СС2 KPr2 EQU 9 ; Матрица коэффициентов прибыли СС2 KZen2 EQU 10 ; Матрица коэффициентов использования СС2 DoxMax2 EQU 11 ; Матрица максимальных доходов СС2 DoxDeg2 EQU 12 ; Матрица доходов от дежурства СС2 ZatrRem2 EQU 13 ; Матрица затрат на ремонт СС2 ZatrResSS2 EQU 14 ; Матрица затрат на резервные СС2 Prib3 EQU 15 ; Матрица ожидаемой прибыли СС3 KPr3 EQU 16 ; Матрица коэффициентов прибыли СС3 KZen3 EQU 17 ; Матрица коэффициентов использования СС3 DoxMax3 EQU 18 ; Матрица максимальных доходов СС3 DoxDeg3 EQU 19 ; Матрица доходов от дежурства СС3 ZatrRem3 EQU 20 ; Матрица затрат на ремонт СС3 ZatrResSS3 EQU 21 ; Матрица затрат на резервные СС3 Prib4 EQU 22 ; Матрица ожидаемой прибыли СС4 KPr4 EQU 23 ; Матрица коэффициентов прибыли СС4 KZen4 EQU 24 ; Матрица коэффициентов использования СС4 DoxMax4 EQU 25 ; Матрица максимальных доходов СС4 DoxDeg4 EQU 26 ; Матрица доходов от дежурства СС4 ZatrRem4 EQU 27 ; Матрица затрат на ремонт СС4 ZatrResSS4 EQU 28 ; Матрица затрат на резервные СС4 Prib5 EQU 29 ; Матрица ожидаемой прибыли СС5 KPr5 EQU 30 ; Матрица коэффициентов прибыли СС5 KZen5 EQU 31 ; Матрица коэффициентов использования СС5 DoxMax5 EQU 32 ; Матрица максимальных доходов СС5 DoxDeg5 EQU 33 ; Матрица доходов от дежурства СС5 ZatrRem5 EQU 34 ; Матрица затрат на ремонт СС5 ZatrResSS5 EQU 35 ; Матрица затрат на резервные СС5 KRem EQU 36 ; Матрица коэффициентов использования Rem ; Задание номеров МКУ, имитирующих дежурство СС CC1_ EQU 1 ; Задание номера МКУ СС1 CC2_ EQU 2 ; Задание номера МКУ СС2 CC3_ EQU 3 ; Задание номера МКУ СС3 CC4_ EQU 4 ; Задание номера МКУ СС4 CC5_ EQU 5 ; Задание номера МКУ СС5 ; Задание по типам количества СС, находящихся на дежурстве n2_ EQU 5 ; Количество типов СС VrMod EQU 1000 ; Время моделирования, 1 ед. мод. вр. = 1 час KolProg EQU 1000 Stroka EQU 1 ; Номер строки матрицы Stolbez EQU 1 ; Номер столбца матрицы Prib1 MATRIX ,3,3 ; Матрица ожидаемой прибыли СС1 KPr1 MATRIX ,3,3 ; Матрица коэффициентов прибыли СС1 KZen1 MATRIX ,3,3 ; Матрица коэффициентов загрузки СС1 DoxMax1 MATRIX ,3,3 ; Матрица максимальных доходов СС1 DoxDeg1 MATRIX ,3,3 ; Матрица доходов от дежурства СС1 ZatrRem1 MATRIX ,3,3 ; Матрица затрат на ремонт СС1 ZatrResSS1 MATRIX ,3,3 ; Матрица затрат на резервные СС1 Prib2 MATRIX ,3,3 ; Матрица ожидаемой прибыли СС2 KPr2 MATRIX ,3,3 ; Матрица коэффициентов прибыли СС2 KZen2 MATRIX ,3,3 ; Матрица коэффициентов загрузки СС2 DoxMax2 MATRIX ,3,3 ; Матрица максимальных доходов СС2 DoxDeg2 MATRIX ,3,3 ; Матрица доходов от дежурства СС2 ZatrRem2 MATRIX ,3,3 ; Матрица затрат на ремонт СС2 ZatrResSS2 MATRIX ,3,3 ; Матрица затрат на резервные СС2 Prib3 MATRIX ,3,3 ; Матрица ожидаемой прибыли СС3 KPr3 MATRIX ,3,3 ; Матрица коэффициентов прибыли СС3 KZen3 MATRIX ,3,3 ; Матрица коэффициентов загрузки СС3 DoxMax3 MATRIX ,3,3 ; Матрица максимальных доходов СС3 DoxDeg3 MATRIX ,3,3 ; Матрица доходов от дежурства СС3 ZatrRem3 MATRIX ,3,3 ; Матрица затрат на ремонт СС3 ZatrResSS3 MATRIX ,3,3 ; Матрица затрат на резервные СС3 Prib4 MATRIX ,3,3 ; Матрица ожидаемой прибыли СС4 KPr4 MATRIX ,3,3 ; Матрица коэффициентов прибыли СС4 KZen4 MATRIX ,3,3 ; Матрица коэффициентов загрузки СС4 DoxMax4 MATRIX ,3,3 ; Матрица максимальных доходов СС4 DoxDeg4 MATRIX ,3,3 ; Матрица доходов от дежурства СС4 ZatrRem4 MATRIX ,3,3 ; Матрица затрат на ремонт СС4 ZatrResSS4 MATRIX ,3,3 ; Матрица затрат на резервные СС4 Prib5 MATRIX ,3,3 ; Матрица ожидаемой прибыли СС5 KPr5 MATRIX ,3,3 ; Матрица коэффициентов прибыли СС5 KZen5 MATRIX ,3,3 ; Матрица коэффициентов загрузки СС5 DoxMax5 MATRIX ,3,3 ; Матрица максимальных доходов СС5 DoxDeg5 MATRIX ,3,3 ; Матрица доходов от дежурства СС5 ZatrRem5 MATRIX ,3,3 ; Матрица затрат на ремонт СС5 ZatrResSS5 MATRIX ,3,3 ; Матрица затрат на резервные СС5 KRem MATRIX ,3,3 ; Матрица коэффициентов загрузки Rem Pribil MATRIX ,3,3 ; Матрица суммарной прибыли SrKPrib MATRIX ,3,3 ; Матрица коэффициентов прибыли СС всех типов SrKIsp MATRIX ,3,3 ; Матрица коэффициентов загрузки СС всех типов ; Определение МКУ по количеству СС, находящихся на дежурстве CC1_ STORAGE 55 ; Емкость МКУ по количеству СС1 CC2_ STORAGE 100 ; Емкость МКУ по количеству СС2 CC3_ STORAGE 60 ; Емкость МКУ по количеству СС3 CC4_ STORAGE 45 ; Емкость МКУ по количеству СС4 CC5_ STORAGE 60 ; Емкость МКУ по количеству СС5 Rem STORAGE 3 ; Емкость МКУ по числу мастеров-ремонтников ; Описание арифметических выражений DoxMax VARIABLE VrMod#FN$S1_#FN$KolSS ; Максимальный доход от дежурства СС Ubitok VARIABLE VrMod#FN$KolSS#(1-(SR*1/1000))#FN$S2_;Убыток от отсутствия на дежурстве СС DoxDeg VARIABLE (AC1-P$Nach1)#FN$S1_ ; Полученный доход от дежурства СС StoRem VARIABLE (AC1-P$Nach)#FN$StoMast ; Стоимость ремонта неисправных СС ZatrResSS VARIABLE FN$S3_#FN$KolSSRes#VrMod; Затраты на содержание резервных СС SumPrib VARIABLE X$DoxDeg-(X$ZatrRem+MX*4(Stroka,Stolbez)+V$Ubitok) ; Прибыль KoefPr VARIABLE MX*6(Stroka,Stolbez)/X$DoxMax; Коэффициент прибыли StoMast FUNCTION P1,D5 ; Стоимость работы одного мастера 1,17/2,18/3,16/4,20/5,21 KolSS FUNCTION P1,D5 ; Количество по типам СС, находящихся на дежурстве 1,55/2,100/3,60/4,45/5,60 KolSSRes FUNCTION P1,D5 ; Количество по типам резервных СС 1,2/2,4/3,4/4,3/5,4 NarOtk FUNCTION P1,D5 ; Среднее время наработки до отказа по типам СС, час 1,373/2,301/3,482/4,325/5,470 SrVrRem FUNCTION P1,D5 ; Среднее время ремонта по типам СС, час 1,6.5/2,4.2/3,2.8/4,3/5,5.5 S1_ FUNCTION P1,D5 ; Доход по типам от одного СС, находящегося на дежурстве 1,20/2,24.2/3,32.8/4,23/5,25.5 S2_ FUNCTION P1,D5 ; Убыток по типам при отсутствии одного СС на дежурстве 1,32/2,34.2/3,37/4,31/5,32.5 S3_ FUNCTION P1,D5 ; Затраты по типам на содержание одного резервного СС 1,21/2,24.2/3,28/4,26/5,25.5 ; Сегмент постановки на дежурство СС GENERATE ,,,n2_ SAVEVALUE TipSS+,1 ; Код 1 ... n2_ - признак СС1 CCn2 в X$TipSS ASSIGN 1,X$TipSS ; Код 1 ... n2_ - признак СС1 CCn2_ в P1 SPLIT (FN$KolSS+FN$KolSSRes-1) ; Число СС + резервные СС ; Сегмент имитации дежурства СС Met1 ENTER P1 ; Встать на дежурство СС типа, номер которого в Р1 ASSIGN Nach1,AC1 ; Время начала дежурства ADVANCE (Exponential(5672,0,FN$NarOtk)) ; Имитация выхода СС из строя, номер которого в Р2 LEAVE P1 ; Снятие с дежурства из-за выхода из строя СС типа, номер которого в Р1 ASSIGN 3,0 Met3 ASSIGN 3+,1 ; Начало цикла изменения типов СС TEST E P1,P3,Met4 ; Р1=Р3? ASSIGN 4,(P1#7) ; Р4=Р1#7 ASSIGN 5,(P4-2) ; Номера матриц: 5,12,19,26,33 MSAVEVALUE *5+,Stroka,Stolbez,V$DoxDeg ; MSAVEVALUE Pribil+,Stroka,Stolbez,V$DoxDeg Met4 TEST GE P3,n2_,Met3 ; Все ли типы СС? ; Сегмент имитации работы ремонтного подразделения ENTER Rem ; Занять одного мастера ASSIGN Nach,AC1 ; Время начала дежурства ADVANCE (Exponential(5672,0,FN$SrVrRem)) ; Имитация ремонта LEAVE Rem ; Конец ремонта ASSIGN 3,0 Met5 ASSIGN 3+,1 ; Начало цикла изменения типов СС TEST E P1,P3,Met6 ; Р1=Р3? ASSIGN 4,(P1#7) ; Р4=Р1#7 ASSIGN 5,(P4-1) ; Номера матриц: 6,13,20,27,34 MSAVEVALUE *5+,Stroka,Stolbez,V$StoRem ; MSAVEVALUE Pribil+,Stroka,Stolbez,V$StoRem Met6 TEST GE P3,n2_,Met5 ; Все ли типы СС? TRANSFER ,Met1 ; Направить исправное СС на дежурство или в резерв ; Сегмент задания времени моделирования и расчета результатов GENERATE VrMod TEST E TG1,1,Met2 ASSIGN 1,0 Met7 ASSIGN 1+,1 ; Начало цикла изменения типов СС ASSIGN 2,(P1#7) ; Р2=Р1#7 ASSIGN 9,(P2-2) ; Номера матриц: 5,12,19,26,33 SAVEVALUEDoxDeg,((MX*9(Stroka,Stolbez))/KolProg);Доход от дежурства MSAVEVALUE *9,Stroka,Stolbez,X$DoxDeg ASSIGN 3,(P2-3) ; Номера матриц: 4,11,18,25,32 MSAVEVALUE *3,Stroka,Stolbez,V$DoxMax; Максимально возможный доход от дежурства СС SAVEVALUE DoxMax,MX*3(Stroka,Stolbez) ASSIGN 4,(P2-0) ; Номера матриц: 7,14,21,28,35 MSAVEVALUE *4,Stroka,Stolbez,V$ZatrResSS ; Затраты на резервные СС ASSIGN 5,(P2-1) ; Номера матриц: 6,13,20,27,34 SAVEVALUE ZatrRem,((MX*5(Stroka,Stolbez))/KolProg) MSAVEVALUE *5,Stroka,Stolbez,X$ZatrRem ASSIGN 6,(P2-6) ; Номера матриц: 1,8,15,22,29 MSAVEVALUE *6,Stroka,Stolbez,V$SumPrib ASSIGN 7,(P2-5) ; Номера матриц: 2,9,16,23,24 MSAVEVALUE *7,Stroka,Stolbez,V$KoefPr MSAVEVALUE Pribil+,Stroka,Stolbez, MX*6(Stroka,Stolbez) ; Суммарная прибыль по СС всех типов ASSIGN 8,(P2-4) MSAVEVALUE SrKPrib+,Stroka,Stolbez,(MX*7(Stroka,Stolbez)/n2_) ; Средний коэффициент прибыли по СС всех типов MSAVEVALUE *8,Stroka,Stolbez,(SR*1/1000) ; Коэффициент использования CC MSAVEVALUE SrKIsp+,Stroka,Stolbez,(SR*1/(1000#n2_)) ; Средний коэффициент использования CC всех типов TEST GE P1,n2_,Met7 ; Все ли типы СС? MSAVEVALUE 31,Stroka,Stolbez,(SR$Rem/1000); Коэффициент использования Rem SAVEVALUE TipSS,0 Met2 TERMINATE 1 START 1000,NP ; Вариант1: ССР2=4, мастеров=3 KolSSres FUNCTION P1,D5 1,2/2,5/3,4/4,4/5,4 Stolbez EQU 2 CLEAR OFF START 1000,NP ; Вариант2: ССР2=5, мастеров=3 KolSSres FUNCTION P1,D5 1,2/2,6/3,4/4,4/5,4 Stolbez EQU 3 CLEAR OFF START 1000,NP ; Вариант3: ССР2=6, мастеров=3 KolSSres FUNCTION P1,D5 1,2/2,4/3,4/4,4/5,4 Stroka EQU 2 Stolbez EQU 1 Rem STORAGE 4 ; Емкость МКУ по числу мастеров-ремонтников CLEAR OFF START 1000,NP ; Вариант4: ССР2=4, мастеров=4 KolSSres FUNCTION P1,D5 1,2/2,5/3,4/4,4/5,4 Stolbez EQU 2 CLEAR OFF START 1000,NP ; Вариант5: ССР2=5, мастеров=4 KolSSres FUNCTION P1,D5 1,2/2,6/3,4/4,4/5,4 Stolbez EQU 3 CLEAR OFF START 1000,NP ; Вариант6: ССР2=6, мастеров=4 KolSSres FUNCTION P1,D5 1,2/2,4/3,4/4,4/5,4 Stroka EQU 3 Stolbez EQU 1 Rem STORAGE 5 ; Емкость МКУ по числу мастеров-ремонтников CLEAR OFF START 1000,NP ; Вариант7: ССР2=4, мастеров=5 KolSSres FUNCTION P1,D5 1,2/2,5/3,4/4,4/5,4 Stolbez EQU 2 CLEAR OFF START 1000,NP ; Вариант8: ССР2=5, мастеров=5 KolSSres FUNCTION P1,D5 1,2/2,6/3,4/4,4/5,4 Stolbez EQU 3 CLEAR OFF START 1000 ; Вариант9: ССР2=6, мастеров=5
В программе, кроме методов применения матриц и функций, показывается метод изменения версий модели. Изменение версий модели производится переопределением соответствующих блоков. Переопределяться не могут только блоки GENERATE. Для переопределения блоков, описывающих ОКУ и МКУ, они должны иметь метки. В командах START, кроме последней, указывается операнд В - NP - не выводить отчёт. Однако одного переопределения блоков недостаточно. В GPSS World изменение версий модели достигается также за счет использования команды CLEAR.
В рассматриваемом примере в процессе моделирования необходимо собирать статистику по версиям модели. Нужная собранная статистика должна быть сохранена, а ненужная - сброшена.
Процесс моделирования в исходное состояние возвращает команда CLEAR. Формат записи команды:
CLEAR [A]
Операнд А может быть ON либо OFF. По умолчанию - ON.
Команда CLEAR сбрасывает всю накопленные статистические данные, удаляет все транзакты из процесса моделирования и заполняет все блоки GENERATE первым транзактом. ОКУ и МКУ становятся доступными, устанавливаются в незанятое состояние. Содержимое всех блоков становится нулевым. Генераторы случайных чисел не сбрасываются.
Если в команде CLEAR операнд А равен OFF, то сохраняемые ячейки, матрицы и логические ключи остаются без изменений. Поэтому в модели в команде CLEAR используется операнд А, равный OFF, так как нужно сохранить результаты моделирования предыдущей версии модели.
Однако при этом нужно иметь в виду те ячейки, начальные значения которых должны быть нулевыми в новой версии модели. Необходимо предусмотреть в программе блоки приведения таких ячеек в исходное состояние. В данной модели это показано на примере сохраняемой ячейки TipSS. Если эту ячейку не привести в нулевое состояние, процесс моделирования второй версии будет остановлен по ошибке "Обращение к несуществующей памяти".
Поскольку накопленные и сохраненные в матрицах результаты моделирования нет необходимости выводить после каждого варианта, то в команде START используется операнд В, равный ON. В последней команде START операнд В не используется. Поэтому стандартный отчет выдаётся после завершения моделирования. В рассматриваемом примере - после девяти наблюдений.
Ниже показан фрагмент журнала с информацией о ходе моделирования. В первом наблюдении (первой версии модели) модельное время изменяется от 0 до 1 000 000 единиц модельного времени (1000 прогонов # 1000 часов работы моделируемой системы).
После переопределения (формирования второй версии модели) выполняется команда CLEAR и абсолютное модельное время вновь изменяется от 0 до 1 000 000 единиц модельного времени.
07/11/11 16:56:06 Model Translation Begun. 07/11/11 16:56:06 Ready. 07/11/11 16:56:06 Simulation in Progress. 07/11/11 16:56:26 The Simulation has ended. Clock is 1000000.000000. 07/11/11 16:56:26 Simulation in Progress. 07/11/11 16:56:46 The Simulation has ended. Clock is 1000000.000000. 07/11/11 16:56:46 Simulation in Progress. 07/11/11 16:57:06 The Simulation has ended. Clock is 1000000.000000. 07/11/11 16:57:06 Simulation in Progress. 07/11/11 16:57:31 The Simulation has ended. Clock is 1000000.000000. 07/11/11 16:57:31 Simulation in Progress. 07/11/11 16:57:55 The Simulation has ended. Clock is 1000000.000000. 07/11/11 16:57:55 Simulation in Progress. 07/11/11 16:58:19 The Simulation has ended. Clock is 1000000.000000. 07/11/11 16:58:19 Simulation in Progress. 07/11/11 16:58:44 The Simulation has ended. Clock is 1000000.000000. 07/11/11 16:58:44 Simulation in Progress. 07/11/11 16:59:09 The Simulation has ended. Clock is 1000000.000000. 07/11/11 16:59:09 Simulation in Progress. 07/11/11 16:59:33 The Simulation has ended. Clock is 1000000.000000. 07/11/11 16:59:33 Reporting in Модель сеть связи 3.128.1-REPORT.
Для включения в формируемый стандартный отчет матриц необходимо при открытом объекте "Модель" выполнить команду:
Edit/Settings/Reports/Matrices/Применить/Ok
Результаты моделирования после 1000 прогонов приведены ниже. Но опять в целях сокращения приведены для СС1 первые три матрицы с абсолютной и относительной прибылью, а также с коэффициентами использования СС1.
MATRIX RETRY INDICES VALUE
PRIB1 0 1 1 411920.775
1 2 412047.879
1 3 395398.298
2 1 975100.990
2 2 973737.015
2 3 972026.043
3 1 1029846.786
3 2 1029847.984
3 3 1029916.195
KPR1 0
1 1 .374
1 2 .374
1 3 .359
2 1 .886
2 2 .885
2 3 .883
3 1 .936
3 2 .936
3 3 .936
KZEN1 0
1 1 .778
1 2 .778
1 3 .772
2 1 .976
2 2 .976
2 3 .975
3 1 .995
3 2 .995
3 3 .995
В соответствии с постановкой задачи нужно определить такое сочетание количества резервных СС и мастеров-ремонтников, при котором доход от предоставления услуг системой связи будет максимальным.
В GPSS World имеются средства для проведения оптимизационного эксперимента. Однако провести его так, чтобы он был аналогичен оптимизационному эксперименту в AnyLogic и, благодаря этому, можно было бы сравнивать результаты оптимизации, не представляется возможным. Во-первых, число факторов в GPSS World не может быть более пяти. Во-вторых, ремонтное подразделение имитируется МКУ, которое описывается командой STORAGE A. Операнд А этой команды, задающий ёмкость МКУ, должен быть только числом. Факторы же эксперимента обязательно должны быть переменными пользователя и не могут быть на месте операнда А. Отсюда нет возможности изменять в ходе эксперимента количество мастеров-ремонтников. Для изменения количества мастеров-ремонтников такая возможность есть.
Поэтому для достижения цели работы - установления адекватности результатов моделирования, эксперименты проводились в "ручном режиме". Причём, изменялось количество резервных СС только второго типа (ССР2) от 4 до 6 при изменениях количества мастеров-ремонтников от 3 до 5.
Таким образом, было проведено по 9 экспериментов в каждой системе моделирования. GPSS World позволяет проводить сразу все эти девять экспериментов, для чего должен быть написан соответствующий сегмент изменения версий модели. Что и было сделано. В AnyLogic вручную изменялись соответствующие данные, после чего запускалась модель.
Результаты экспериментов представлены в табл. 5.6. Из их сравнения следует, что они адекватны, поскольку отличия незначительны и составляют в основном 0…0,001, 0…0,002.
Что касается выбора оптимального сочетания количества резервных ССР2 и мастеров-ремонтников для условий данных экспериментов, то можно выбрать вариант 7: ССР2 = 4, мастеров-ремонтников = 5.
| Показатели | GPSS World | AnyLogic | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Типы средств связи | ||||||||||
| СС1 | СС2 | СС3 | СС4 | СС5 | СС1 | СС2 | СС3 | СС4 | СС5 | |
| Вариант 1: ССР2 = 4, мастеров-ремонтников = 3 | ||||||||||
| Коэффициент прибыли по типам СС | 0,374 | 0,327 | 0,627 | 0,4 | 0,573 | 0,38 | 0,332 | 0,633 | 0,405 | 0,576 |
| Суммарный коэффициент прибыли | 0,46 | 0,468 | ||||||||
| Коэффициент использования по типам СС | 0,779 | 0,741 | 0,853 | 0,78 | 0,846 | 0,781 | 0,743 | 0,856 | 0,781 | 0,847 |
| Суммарный коэффициент использования СС | 0,799 | 0,8 | ||||||||
| Вариант 2: ССР2 = 5, мастеров-ремонтников = 3 | ||||||||||
| Коэффициент прибыли по типам СС | 0,377 | 0,336 | 0,626 | 0,397 | 0,571 | 0,369 | 0,332 | 0,624 | 0,393 | 0,57 |
| Суммарный коэффициент прибыли | 0,462 | 0,462 | ||||||||
| Коэффициент использования по типам СС | 0,779 | 0,749 | 0,852 | 0,778 | 0,845 | 0,777 | 0,747 | 0,851 | 0,776 | 0,844 |
| Суммарный коэффициент использования СС | 0,801 | 0,8 | ||||||||
| Вариант 3: ССР2 = 6, мастеров-ремонтников = 3 | ||||||||||
| Коэффициент прибыли по типам СС | 0,364 | 0,33 | 0,619 | 0,385 | 0,564 | 0,361 | 0,331 | 0,62 | 0,39 | 0,563 |
| Суммарный коэффициент прибыли | 0,453 | 0,457 | ||||||||
| Коэффициент использования по типам СС | 0,774 | 0,751 | 0,849 | 0,773 | 0,842 | 0,774 | 0,751 | 0,85 | 0,775 | 0,841 |
| Суммарный коэффициент использования СС | 0,797 | 0,797 | ||||||||
| Вариант 4: ССР2 = 4, мастеров-ремонтников = 4 | ||||||||||
| Коэффициент прибыли по типам СС | 0,89 | 0,895 | 0,931 | 0,89 | 0,911 | 0,889 | 0,892 | 0,931 | 0,889 | 0,91 |
| Суммарный коэффициент прибыли | 0,903 | 0,905 | ||||||||
| Коэффициент использования по типам СС | 0,978 | 0,977 | 0,996 | 0,988 | 0,995 | 0,978 | 0,977 | 0,996 | 0,988 | 0,994 |
| Суммарный коэффициент использования СС | 0,987 | 0,987 | ||||||||
| Вариант 5: ССР2 = 5, мастеров-ремонтников = 4 | ||||||||||
| Коэффициент прибыли по типам СС | 0,887 | 0,892 | 0,93 | 0,887 | 0,909 | 0,885 | 0,89 | 0,93 | 0,886 | 0,909 |
| Суммарный коэффициент прибыли | 0,901 | 0,902 | ||||||||
| Коэффициент использования по типам СС | 0,977 | 0,981 | 0,996 | 0,988 | 0,994 | 0,976 | 0,98 | 0,995 | 0,987 | 0,994 |
| Суммарный коэффициент использования СС | 0,987 | 0,986 | ||||||||
| Вариант 6: ССР2 = 6, мастеров-ремонтников = 4 | ||||||||||
| Коэффициент прибыли по типам СС | 0,885 | 0,89 | 0,93 | 0,886 | 0,909 | 0,887 | 0,89 | 0,93 | 0,887 | 0,91 |
| Суммарный коэффициент прибыли | 0,9 | 0,903 | ||||||||
| Коэффициент использования по типам СС | 0,977 | 0,984 | 0,995 | 0,987 | 0,994 | 0,977 | 0,984 | 0,996 | 0,988 | 0,994 |
| Суммарный коэффициент использования СС | 0,987 | 0,987 | ||||||||
| Вариант 7: ССР2 = 4, мастеров-ремонтников = 5 | ||||||||||
| Коэффициент прибыли по типам СС | 0,935 | 0,944 | 0,939 | 0,914 | 0,922 | 0,936 | 0,945 | 0,94 | 0,915 | 0,923 |
| Суммарный коэффициент прибыли | 0,931 | 0,934 | ||||||||
| Коэффициент использования по типам СС | 0,996 | 0,998 | 1 | 0,999 | 1 | 0,996 | 0,998 | 1 | 0,999 | 1 |
| Суммарный коэффициент использования СС | 0,998 | 0,998 | ||||||||
| Вариант 8: ССР2 = 5, мастеров-ремонтников = 5 | ||||||||||
| Коэффициент прибыли по типам СС | 0,936 | 0,936 | 0,939 | 0,915 | 0,922 | 0,936 | 0,936 | 0,94 | 0,915 | 0,923 |
| Суммарный коэффициент прибыли | 0,93 | 0,932 | ||||||||
| Коэффициент использования по типам СС | 0,996 | 0,999 | 1 | 0,999 | 1 | 0,996 | 0,999 | 1 | 0,999 | 1 |
| Суммарный коэффициент использования СС | 0,998 | 0,998 | ||||||||
| Вариант 9: ССР2 = 6, мастеров-ремонтников = 5 | ||||||||||
| Коэффициент прибыли по типам СС | 0,936 | 0,927 | 0,939 | 0,915 | 0,922 | 0,936 | 0,928 | 0,94 | 0,915 | 0,923 |
| Суммарный коэффициент прибыли | 0,928 | 0,929 | ||||||||
| Коэффициент использования по типам СС | 0,996 | 0,999 | 1 | 0,999 | 1 | 0,996 | 0,999 | 1 | 0,999 | 1 |
| Суммарный коэффициент использования СС | 0,998 | 0,998 | ||||||||
На дежурстве находятся n1 средств связи (СС) n2 типов (n21 + n22 + … + n2n2 = n2) в течение n3 часов.
Каждое СС может в любой момент времени выйти из строя. Интервалы времени T21, T22, …, T2n2 между отказами СС, находящимися на дежурстве, случайные. В случае выхода из строя СС заменяют резервным, причем либо сразу, либо по мере появления исправного СС. Тем временем, вышедшее из строя СС ремонтируют, после чего содержат в качестве резервного или направляют его на дежурство. Всего количество резервных СС - n4.
Ремонт неисправных СС производят n5 мастеров. Время T1, T2, …, Tn2 ремонта случайное и зависит от типа СС, но не зависит от того, какой мастер это СС ремонтирует.
Прибыль от СС, находящихся на дежурстве, составляет S1 денежных единиц в час. Почасовой убыток при отсутствии на дежурстве одного СС - S2, …, S2n2 денежных единиц в час. Оплата мастера за ремонт неисправного СС - S31, S32, …, S3n2 денежных единиц в час соответственно.
Затраты на содержание одного резервного СС составляют S4 денежных единиц в час.
Разработать имитационную модель бизнес-процесса предоставления услуг по средствам связи в течение 1000 часов.
Исследовать влияние на ожидаемую прибыль различного количества резервных СС и мастеров.
Определить абсолютные величины и относительные коэффициенты ожидаемой прибыли.
Сделать выводы об использовании СС, мастеров и необходимых мерах по совершенствованию системы предоставления услуг связи.
Уясним задачу на разработку модели, предварительно представив структуру системы предоставления услуг связи (рис. 5.1) как систему СМО.
(рис 5.1) Система предоставления услуг связи как СМО
Система предоставления услуг связи (далее система связи) представляет собой многофазную многоканальную систему массового обслуживания замкнутого типа с отказами.
Таким образом, модель системы связи должна состоять из следующих сегментов (рис. 5.2):
(рис 5.2) Концептуальная схема модели системы связи
Заявки как средства связи, поступившие на дежурство, должны иметь следующие параметры (поля):
tipCC - код типа СС;
timeMeanOtkaz - среднее время между отказами СС;
timeMeanRem - среднее время ремонта одного СС;
nach - время начала ремонта в ремонтном подразделении;
nach1 - время начала дежурства.Возьмём, например, $$n_2=5$$. Код типа СС в виде чисел 1, 2, 3, 4, 5 определяется в самом начале моделирования и остаётся неизменным. Для его определения используются следующие исходные данные:
KCC1 … KCC5 - количество СС первого … пятого типов соответственно;
KCCР1 … KCCР5 - количество резервных СС первого … пятого типов соответственно.По этим же данным определяются количества всех СС по типам KolCC1 … KolCC5, а также общее количество СС всех типов KolCC.
В параметр timeMeanOtkaz заносится интенсивность выхода из строя соответствующего типа СС. Интенсивность рассчитывается по средним значениям интервалов выхода из строя СС первого … пятого типов timeOtkaz1 … timeOtkaz5.
В параметр timeMeanRem заносится интенсивность ремонта соответствующего типа СС. Интенсивность рассчитывается по средним значениям времени ремонта СС соответственно первого … пятого типов timeRem1 … timeRem5.
Рассчитанные интенсивности, например, timeMeanOtkaz = 1/timeOtkaz1 используются для обращения к генератору exponential(timeMeanOtkaz).
Параметры nach1 и nach изменяются при каждом поступлении СС на дежурство и в ремонтное подразделение соответственно. Они используются при расчётах дохода от дежурства и затрат на ремонт неисправного СС. В них заносится время начала дежурства и начала ремонта соответственно.
Кроме рассмотренных, СС имеют еще следующие параметры (не заносимые в дополнительные поля заявок, имитирующих СС):
doxDegCC1 … doxDegCC5 - доход от дежурства одного СС первого … пятого типов соответственно;
zatrResCC1 … zatrResCC5 - затраты на содержание резерва одного СС первого … пятого типов соответственно;
stoimRem1 … stoimRem5 - стоимость ремонта одного СС первого … пятого типов соответственно.В ходе моделирования, а также по завершении моделирования рассчитываются:
PribCC1 … PribCC5, SumPribil - абсолютные величины ожидаемой прибыли по каждому типу СС и в целом;
KoefPribCC1 … KoefPribCC5, KoefPribil -относительные коэффициенты ожидаемой прибыли по каждому типу СС и в целом.Рассмотрим вычисление этих показателей на примере PribCC1 и KoefPribCC1.
Предполагается, что максимальный доход DoxMaxCC1 от дежурства будет в случае, когда все СС первого типа будут постоянно находиться на дежурстве, то есть:
DoxMaxCC1 = KCC1*doxDegCC1*ВремяРабСист
где ВремяРабСист - время работы моделируемой системы.
Фактический доход DoxDegCC1 от дежурства СС первого типа составит:
DoxDegCC1+=(time()-entity.nach1)* get_Main().doxDegCC1;
где (time()-entity.nach1) - время нахождения СС первого типа на дежурстве.
При отсутствии на дежурстве СС первого типа убыток составит:
UbitokCC1=(1-degCC1.statsUtilization.mean())* get_Main().ubitokCC1*ВремяРабСист*KCC1;
где (1-degCC1.statsUtilization.mean()) - средний коэффициент отсутствия СС первого типа на дежурстве за всё время моделирования.
Затраты на ремонт неисправных СС и содержание резервных СС первого типа составят соответственно:
ZatrRemCC1+=(time()-entity.nach)*stoimRemCC1; ZatrResCC1= KCCP1*zatrResCC1* ВремяРабСист
Абсолютная величина ожидаемой прибыли составит:
PribCC1=DoxDegCC1-(ZatrRemCC1+ZatrRemCC1+UbitokCC1).
Относительный коэффициент прибыли равен:
KoefPribCC1=PribCC1/DoxMaxCC1.
Показатели в целом за систему связи:
SumPribil=SumDoxDeg-(SumZatrRes+SumZatrRem+SumUbitok), KoefPrib=SumPrib/SumDoxMax,
где SumDoxMax, SumDoxDeg, SumZatrRes, SumZatrRem, SumUbitok - соответствующие доходы и затраты за систему.
Сегмент предназначен для имитации поступления основных и резервных СС всех типов и постановки их на дежурство.
Файл/Создать/Модель на панели инструментов. Появится диалоговое окно Новая модель.
Имя модели введите ComSystem. Выберите каталог для сохранения файлов модели.
Далее. Откроется вторая страница Мастера создания модели. Выберите Начать создание модели "с нуля". Щелкните кнопку Далее.Используем три области просмотра. В первой области просмотра разместим объекты и элементы сегмента Постановка на дежурство, во второй - сегмента Имитация дежурства СС и сегмента имитации функционирования ремонтного подразделения, в третьей - сегмента Статистика.
Первую область просмотра поместим на диаграмму класса Main, а для второй и третьей областей просмотра создадим новый класс активного объекта Degurstvo.
Создайте область просмотра на диаграмме класса Main для размещения объектов сегмента Постановка на дежурство.
Палитре выделите Презентация. Перетащите элемент Область просмотра.
Основные панели Свойства.
Имя: введите Postanovka.
Выравнивать по: Верхн. левому углу.
Масштабирование: Подогнать под окно.
Дополнительные панели Свойства. Введите в поля X: 0, Y: 0, Ширина: 700, Высота: 970.
Скруглённый прямоугольник. Оставьте имя, предложенное системой. В нём мы разместим объекты сегмента Постановка на дежурство.
Дополнительные панели Свойства. Введите в поля X: 38, Y: 62, Ширина: 642, Высота: 268.Исходные данные, другие необходимые для работы модели параметры разделим и разместим в той области или в том сегменте модели, где они, по нашему мнению, нужны и их удобно использовать.
Организуйте ввод исходных данных для сегмента Постановка на дежурство.
Прямоугольник на элемент Область просмотра, если вы хотите видеть данные в ходе моделирования. Если нет, поместите этот элемент вне области просмотра.
Дополнительные панели Свойства. Введите в поля X: 20, Y: 350, Ширина: 390, Высота: 300.
text и на странице Основные панели Свойства в поле Текст: введите Initial_data_PD (здесь PD - постановка на дежурство).
Палитре выделите Основная. Перетащите элементы Параметр и Простая переменная на элемент с именем Initial_data_PD и разместите их так, как показано на рис. 5.3.
Простые переменные с именами KolCC1…KolCC5 - количество СС по типам, а KolCC - количество СС всех типов. Эти переменные мы будем вычислять по исходным значениям КСС1 … КСС5 и КССР1 … КССР5 и использовать при генерации равного значению КolСС заявок, имитирующих СС. Количество СС изменять можно только перед началом моделирования, так как заявки, имитирующие СС, генерируются только один раз.
(рис 5.3) Размещение элементов Параметр и Простая переменная
Область просмотра мы уже перетащили Скругленный прямоугольник. На нём мы будем размещать, как отмечалось ранее, объекты сегмента Постановка на дежурство.
text и на странице Основные панели Свойства в поле Текст: введите Постановка на дежурство. Поместите этот текст посредине в верхней части элемента Скругленный прямоугольник.
Прямоугольник на Область просмотра. Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 50, Y: 100, Ширина: 160, Высота: 140.
text на Прямоугольник и на странице Основные панели Свойства в поле Текст: введите Имитация поступления СС.
source на Прямоугольник. Для записи и хранения параметров СС в дополнительные поля заявок необходимо создать нестандартный класс заявки. Создайте класс заявки ComFacility.
| Имя | Тип | Значение по умолчанию | Отображать имя |
|---|---|---|---|
KolCC1 | int | 0 | Установить флажок во всех элементах |
KolCC2 | int | 0 | |
KolCC3 | int | 0 | |
KolCC4 | int | 0 | |
KolCC5 | int | 0 | |
KolCC | int | 0 | |
NumCC | int | 0 | |
doxdegCC1 | double | 20 | |
doxdegCC2 | double | 24,2 | |
doxdegCC3 | double | 32,8 | |
doxdegCC4 | double | 23 | |
doxdegCC5 | double | 25,5 | |
zatrResCC1 | double | 21 | |
zatrResCC2 | double | 24,2 | |
zatrResCC3 | double | 28 | |
zatrResCC4 | double | 26 | |
zatrResCC5 | double | 25,5 | |
ubitokCC1 | double | 32 | |
ubitokCC2 | double | 34,2 | |
ubitokCC3 | double | 37 | |
ubitokCC4 | double | 31 | |
ubitokCC5 | double | 32,5 | |
ВремяРабСист | double | 1000 |
Проект щелкните правой кнопкой мыши элемент модели верхнего уровня дерева и выберите Создать/Java класс.
Новый Java класс. В поле Имя: введите имя нового класса ComFacility.
Базовый класс: выберите из выпадающего списка Entity в качестве базового класса. Щелкните кнопку Далее.
Мастера создания Java класса. Добавьте следующие поля Java класса:
int tipCC; double timeMeanRem; double nach; double nach1; double timeMeanOtkaz;
Создать конструктор и Создать метод toString ().
Готово. Вы увидите редактор кода и в автоматически созданный код вашего Java класса. Закройте код.
source. На странице Основные панели Свойства уберите флажок Отображать имя. В полях Класс заявки: и Новая заявка Entity замените ComFacility.
Установите:
Интенсивности.
1
1
установите флажок
1В поле Действие при выходе введите Java код:
KolCC1=degyrstvo.KCC1+degyrstvo.KCCP1; degyrstvo.DoxMaxCC1= round((degyrstvo.KCC1*doxDegCC1)*ВремяРабСист*100); degyrstvo.DoxMaxCC1=degyrstvo.DoxMaxCC1/100; degyrstvo.ZatrResCC1= round((degyrstvo.KCCP1*zatrResCC1)*ВремяРабСист*100); degyrstvo.ZatrResCC1=degyrstvo.ZatrResCC1/100; KolCC2=degyrstvo.KCC2+degyrstvo.KCCP2; degyrstvo.DoxMaxCC2= round((degyrstvo.KCC2*doxDegCC2)*ВремяРабСист*100); degyrstvo.DoxMaxCC2=degyrstvo.DoxMaxCC2/100; degyrstvo.ZatrResCC2= round((degyrstvo.KCCP2*zatrResCC2)*ВремяРабСист*100); degyrstvo.ZatrResCC2=degyrstvo.ZatrResCC2/100; KolCC3=degyrstvo.KCC3+degyrstvo.KCCP3; degyrstvo.DoxMaxCC3= round((degyrstvo.KCC3*doxDegCC3)*ВремяРабСист*100); degyrstvo.DoxMaxCC3=degyrstvo.DoxMaxCC3/100; degyrstvo.ZatrResCC3= round((degyrstvo.KCCP3*zatrResCC3)*ВремяРабСист*100); degyrstvo.ZatrResCC3=degyrstvo.ZatrResCC3/100; KolCC4=degyrstvo.KCC4+degyrstvo.KCCP4; degyrstvo.DoxMaxCC4= round((degyrstvo.KCC4*doxDegCC4)*ВремяРабСист*100); degyrstvo.DoxMaxCC4=degyrstvo.DoxMaxCC4/100; degyrstvo.ZatrResCC4= round((degyrstvo.KCCP4*zatrResCC4)*ВремяРабСист*100); degyrstvo.ZatrResCC4=degyrstvo.ZatrResCC4/100; KolCC5=degyrstvo.KCC5+degyrstvo.KCCP5; degyrstvo.DoxMaxCC5= round((degyrstvo.KCC5*doxDegCC5)*ВремяРабСист*100); degyrstvo.DoxMaxCC5=degyrstvo.DoxMaxCC5/100; KolCC=KolCC1+KolCC2+KolCC3+KolCC4+KolCC5; degyrstvo.ZatrResCC5= round((degyrstvo.KCCP5*zatrResCC5)*ВремяРабСист*100); degyrstvo.ZatrResCC5=degyrstvo.ZatrResCC5/100; degyrstvo.SumDoxMax=degyrstvo.DoxMaxCC1+ degyrstvo.DoxMaxCC2+degyrstvo.DoxMaxCC3+ degyrstvo.DoxMaxCC4+degyrstvo.DoxMaxCC5; degyrstvo.SumZatrRes=degyrstvo.ZatrResCC1+ degyrstvo.ZatrResCC2+degyrstvo.ZatrResCC3+ degyrstvo.ZatrResCC4+degyrstvo.ZatrResCC5;
Введённым кодом определяется количество СС всех типов, включая и резервные средства связи. Эти данные необходимы в последующем в объекте split. Количества СС как исходные данные будут размещены на активном классе Degyrstvo, который мы создадим позже, поэтому в коде используется доступ к ним в виде, например, degyrstvo.KCC1.
Кодом рассчитываются также максимальный доход от каждого типа СС и суммарный максимальный доход, а также затраты на содержание резервных СС по типам и суммарные затраты на содержание резервных СС всех типов.
Такой подход к расчётам максимального дохода и затрат на содержание резервных СС принят для экономии машинного времени, поскольку эти показатели зависят только от продолжительности времени моделирования (ВремяРабСист), дохода от дежурства одного СС и затрат на содержание одного резервного СС. То есть данные для их расчёта не носят стохастический характер. Поэтому указанные показатели целесообразно рассчитать здесь, а затем использовать в конце моделирования при обработке накопленных статистических данных.
Для вывода результатов моделирования с двумя знаками после запятой использовался метод round(). Предварительно результат умножался на 100, а потом делился на эту же величину. Например:
degyrstvo.DoxMaxCC1= round((degyrstvo.KCC1*doxDegCC1)*ВремяРабСист*100); degyrstvo.DoxMaxCC1=degyrstvo.DoxMaxCC1/100;
split и sink (Рис. 5.4).
(рис 5.4) Добавлены объекты split и sink
split. Установите свойства как на рис. 5.5. Так как копии не унаследуют свойств от оригинала, поэтому в поле Действие при выходе копии введите Java код:
NumCC++; if (NumCC <= KolCC) entity.tipCC = 5; if (NumCC <= (KolCC1+KolCC2+KolCC3+KolCC4)) entity.tipCC = 4; if (NumCC <= (KolCC1+KolCC2+KolCC3)) entity.tipCC = 3; if (NumCC <= (KolCC1+KolCC2)) entity.tipCC = 2; if (NumCC <= KolCC1) entity.tipCC = 1;
В поле entity.tipCC запоминается соответствующий код типа СС, например, entity.tipCC = 5, который необходим для нормального функционирования модели, то есть отличия СС по типам.
sink уничтожает заявку-оригинал.
(рис 5.5) Элемент source с установленными свойствами
Блок Распределитель средств связи предназначен для распределения СС согласно их типам, т. е. общее количество поступивших СС он должен разделить по типам.
Данный блок реализуется четырьмя объектами selectOutput и одним объектом queue (Рис. 5.6). Возможна реализация этого блока и одним объектом selectOutput5 совместно также с объектом queue.
Объект queue предназначен для приема, хранения и отправки на дежурство исправных СС, поступающих из ремонта.
selectOutput и один объект queue из библиотеки Enterprise Library на диаграмму класса Main. Соедините их так, как показано на рис. 5.6.
Основные панели Свойства свойства объектов selectOutput согласно табл. 5.2(при использовании объекта selectOutput5 условия разделения СС по типам останутся такими же).
(рис 5.6) Добавлены объекты SelectOutput и queue
| Имя | Отображать имя | Класс заявки: | Выход true выбирается | Условие |
|---|---|---|---|---|
СС1 | Установите флажки | ComFacility | При выполнении условия | entity.tipCC==1 |
СС2 | ComFacility | entity.tipCC==2 | ||
СС3 | ComFacility | entity.tipCC==3 | ||
СС4 | ComFacility | entity.tipCC==4 |
false элемента СС4, поэтому пятый объект selectOutput не нужен.
queue и не устанавливайте флажок Отображать имя.
Вместимость 100 и флажок Включить сбор статистики.
Презентация три элемента text и в соответствующих полях Текст: введите текст, как на рис. 5.6.На рис. 5.7 показан в окончательном виде сегмент Постановка на дежурство после добавления блока На дежурство. Для добавления этого блока, который должен выполнить "связь" между сегментом Постановка на дежурство и сегментом Имитация дежурства, создадим новый класс активного объекта.
Проект щелкните правой кнопкой мыши Main, с которым вы работаете в данный момент, и выберите Создать/Класс активного объекта из контекстного меню.
Новый класс активного объекта.
Имя: имя нового класса Degurstvo.
Описание: введите описание сущности, моделируемой этим классом.
Готово.
Создайте область просмотра на диаграмме класса Degurstvo для размещения элементов сегмента Имитация дежурства и текущих результатов моделирования.
Палитре выделите Презентация. Перетащите элемент Область просмотра.
Основные панели Свойства.
Имя: введите degyr.
Дополнительные панели Свойства. Введите в поля X: 40, Y: 0, Ширина: 730, Высота: 730.
Выравнивать по: Верхн. левому углу.
Масштабирование: Подогнать под окно.
(рис 5.7) Сегмент Постановка на дежурство
Созданный новый класс активного объекта Degyrstvo является вложенным объектом. Как вы помните, нам нужно сделать так, чтобы СС передавались на дежурство в сегмент Имитация дежурства из сегмента Постановка на дежурство, а отремонтированные СС после ремонта из сегмента Имитация дежурства возвращались в сегмент Постановка на дежурство.
Прямоугольник. Установите только флажки На верхнем уровне и На презентации.
Дополнительные панели Свойства. Введите в поля X: 110, Y: 150, Ширина: 100, Высота: 140.
Основная и разместите так, как показано на рис. 5.8. Автоматически они будут объединены прямоугольником (с пунктирными линиями) и появится надпись Значок.
Main.
(рис 5.8) Добавлены на Degyrstvo шесть портов
Проект выделите Degyrstvo, перетащите элемент класса и соедините так, как на рис. 5.7. При этом следует иметь в виду, что положение портов на элементе класса Degyrstvo изменить нельзя. Это можно сделать лишь на самом классе.Области просмотра используются как для навигации по графическому редактору во время создания модели, так и для навигации по окну презентации во время выполнения модели.
Чтобы перейти к другой области просмотра в режиме создания модели:
Области просмотра и выберите из выпадающего списка, к какой именно области просмотра вы хотите перейти. Чтобы перейти к другой области просмотра в режиме выполнения модели:
Область и затем выберите из списка, к какой именно области просмотра вы хотите перейти.
Показать область... и выберите из выпадающего списка, к какой именно области просмотра вы хотите перейти (эта кнопка принадлежит секции панели инструментов Вид, и возможно, чтобы она стала видна, вам нужно будет вначале показать эту секцию панели инструментов).Вы можете также добавлять свои собственные элементы презентации, щелчком на которых будет производиться переход к той или иной области просмотра. Воспользуйтесь последним.
Палитре выделите Презентация. Перетащите элемент text, разместите и введите в поле Текст: Постановка на дежурство, как на рис. 5.7.
text, разместите и введите в поле Текст: Имитация дежурства. Текущие результаты.
Свойства выделите Динамические и в поле Действие по щелчку: введите следующий Java код: degyrstvo.degyr.navigateTo();
Статистика. Введите Java код: degyrstvo.statistika.navigateTo();
Организуйте ввод исходных данных для сегмента Имитация дежурства. Для ввода исходных данных используйте также элемент Параметр.
Прямоугольник. На нём мы разместим элементы для ввода исходных данных.
На презентации.
Дополнительные панели Свойства. Введите в поля X: 50, Y: 790, Ширина: 570, Высота: 190.
text и на странице Основные панели Свойства в поле Текст: введите Initial_data_D (здесь D -дежурство).
Палитре выделите Основная. Перетащите элементы Параметр на элемент с именем Initial_data_D и разместите их так, как показано на рис. 5.9.
Основные панели Свойства каждого элемента Параметр установите свойства согласно табл. 5.3.
(рис 5.9) Размещение элементов Параметр для ввода данных
| Имя | Тип | Значение по умолчанию | Отображать имя |
|---|---|---|---|
KCC1 | int | 55 | Установить флажок во всех элементах |
KCC2 | int | 100 | |
KCC3 | int | 60 | |
KCC4 | int | 45 | |
KCC5 | int | 60 | |
KCCР1 | int | 2 | |
KCCР2 | int | 4 | |
KCCР3 | int | 4 | |
KCCР4 | int | 3 | |
KCCР5 | int | 4 | |
stoimRemCC1 | double | 17 | |
stoimRemCC2 | double | 18 | |
stoimRemCC3 | double | 16 | |
stoimRemCC4 | double | 20 | |
stoimRemCC5 | double | 21 | |
timeRem1 | double | 6,5 | |
timeRem2 | double | 4,2 | |
timeRem3 | double | 2,8 | |
timeRem4 | double | 3 | |
timeRem5 | double | 5,5 | |
timeOtkaz1 | double | 373 | |
timeOtkaz2 | double | 301 | |
timeOtkaz3 | double | 482 | |
timeOtkaz4 | double | 325 | |
timeOtkaz5 | double | 470 | |
kol_master | int | 3 | |
КолПрогон | double | 1000 | |
ВремяРабСист | double | 1000 |
Здесь выводятся все результаты моделирования (Рис. 5.10). Однако с целью экономии машинного времени, выводятся они по-разному. Рассчитанные ранее максимальные доходы от дежурства СС и затраты на содержание резервных СС не выводятся в ходе моделирования. Выводятся только текущие доходы от дежурства СС и текущие затраты на ремонт неисправных СС. Все обработанные результаты выводятся по окончании моделирования. Для организации вывода используется способ Событие (см. п. 5.1.7).
(рис 5.10) Элементы Простая переменная для выводов результатов моделирования
Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 54, Y: 436, Ширина: 696, Высота: 278.
text и на странице Основные панели Свойства в поле Текст: введите Затраты и Доходы соответственно.
Палитре выделите Основная. Перетащите элементы Простая переменная. Разместите их, как показано на рис. 5.10.
Отображать имя и тип double.Реализация событийной части сегмента показана на рис. 5.11.
Скруглённый прямоугольник. На нём мы разместим все элементы сегмента Имитация дежурства.
Дополнительные панели Свойства. Введите в поля X: 60, Y: 60, Ширина: 600, Высота: 350.
Прямоугольник. На нём мы разместим элементы, непосредственно имитирующие дежурство СС.
Дополнительные панели Свойства. Введите в поля X: 250, Y: 70, Ширина: 170, Высота: 330.
Прямоугольник для размещения элементов, имитирующих ремонтное подразделение СС.
Дополнительные панели Свойства. Введите в поля X: 440, Y: 70, Ширина: 190, Высота: 330.
Degyrstvo последовательно: пять объектов queue, пять объектов delay, один объект queue, один объект delay и соедините их так, как показано на рис. 5.11.
text и введите названия в соответствующие поля Текст: согласно рис. 5.11.
Основные панели Свойства каждого объекта установите свойства согласно табл. 5.4.delay с именами degCC1 … degCC5 стоят объекты queue с именами rez1 … rez5 соответственно, то возникает желание поставить такие же объекты на выходах delay. Однако это приведёт к неправильной работе модели: некоторые СС не смогут поступать в ремонтное подразделение.
(рис 5.11) Сегмент Имитация дежурства
| queue | |||
|---|---|---|---|
| Имя | Вместимость | Действие при выходе | |
rez1 | KCCP1 | entity.timeOtkaz=1/timeOtkaz1 | |
rez2 | KCCP2 | entity.timeOtkaz=1/timeOtkaz2 | |
rez3 | KCCP3 | entity.timeOtkaz=1/timeOtkaz3 | |
rez4 | KCCP4 | entity.timeOtkaz=1/timeOtkaz4 | |
rez5 | KCCP5 | entity.timeOtkaz=1/timeOtkaz5 | |
| delay | |||
| Имя | Время задержки | Вместимость | |
degCC1 | exponential(entity.timeOtkaz) | KCC1 | |
degCC2 | exponential(entity.timeOtkaz) | KCC2 | |
degCC3 | exponential(entity.timeOtkaz) | KCC3 | |
degCC4 | exponential(entity.timeOtkaz) | KCC4 | |
degCC5 | exponential(entity.timeOtkaz) | KCC5 | |
remont | exponential(entity.timeMeanRem) | 3 | |
| Имя | Действие при выходе | ||
degCC1 | DoxDegCC1+=(time()-entity.nach1)*get_Main().doxDegCC1; | ||
entity.timeMeanRem=1/timeRem1; | |||
degCC2 | DoxDegCC2+=(time()-entity.nach1)*get_Main().doxDegCC2; | ||
entity.timeMeanRem=1/timeRem2; | |||
degCC3 | DoxDegCC3+=(time()-entity.nach1)*get_Main().doxDegCC3; | ||
entity.timeMeanRem=1/timeRem3; | |||
degCC4 | DoxDegCC4+=(time()-entity.nach1)*get_Main().doxDegCC4; | ||
entity.timeMeanRem=1/timeRem4; | |||
degCC5 | DoxDegCC5+=(time()-entity.nach1)*get_Main().doxDegCC5; | ||
entity.timeMeanRem=1/timeRem5; | |||
Кроме свойств, указанных в табл. 5.4, нужно также:
Класс заявки: Entity заменить ComFacility;
Включить сбор статистики;
delay degCC1 … degCC5 установить:entity.nach1=time();delay с именем remont также ввести Java коды в следующие свойства:entity.nach=time();
if (entity.tipCC == 1)
{ZatrRemCC1+=((time()-entity.nach)*stoimRemCC1);
SumZatrRem+=((time()-entity.nach)*stoimRemCC1);}
if (entity.tipCC == 2)
{ZatrRemCC2+=((time()-entity.nach)*stoimRemCC2);
SumZatrRem+=((time()-entity.nach)*stoimRemCC2);}
if (entity.tipCC == 3)
{ZatrRemCC3+=((time()-entity.nach)*stoimRemCC3);
SumZatrRem+=((time()-entity.nach)*stoimRemCC3);}
if (entity.tipCC == 4)
{ZatrRemCC4+=(time()-entity.nach)*stoimRemCC4;
SumZatrRem+=((time()-entity.nach)*stoimRemCC4);}
if (entity.tipCC == 5)
{ZatrRemCC5+=((time()-entity.nach)*stoimRemCC5);
SumZatrRem+=((time()-entity.nach)*stoimRemCC5);}Палитре выделите Презентация. Перетащите элемент text, разместите и введите в поле Текст: Постановка на дежурство, как на рис. 5.11.
Свойства выделите Динамические и в поле Действие по щелчку: введите следующий Java код: get_Main().Postanovka.navigateTo();
text, разместите и введите в поле Текст: Имитация дежурства.
Свойства выделите Динамические и в поле Действие по щелчку: введите следующий Java код: Degyr.navigateTo();
Статистика. Введите Java код: statistika.navigateTo();
Результаты моделирования выводятся в сегменте Имитация дежурства. Тем не менее, организуем вывод результатов моделирования, можно сказать, в более презентабельном виде. Для этого создадим сегмент Статистика (Рис. 5.12).
(рис 5.12) Сегмент Статистика
Статистика.
Палитре выделите Презентация. Перетащите элемент Область просмотра.
Основные панели Свойства.
Имя: введите statistika.
Дополнительные панели Свойства. Введите в поля X: 0, Y: 1036, Ширина: 960, Высота: 630.
Выравнивать по: Верхн. левому углу.
Масштабирование: Подогнать под окно.
Прямоугольник.
Дополнительные панели Свойства. Введите в поля X: 20, Y: 1076, Ширина: 920, Высота: 580.
text и в поле Текст: введите Результаты моделирования. На странице Дополнительные панели Свойства введите в поля X: 360, Y: 1096.
text, разместите и введите в соответствующие поля Текст: надписи, как на рис. 5.12. Например, при размещении надписи Максимальный доход по типам СС укажите в полях X: 48, Y: 1126, при размещении надписи Коэффициенты использования типов средств связи укажите в полях X: 468, Y: 1418, а при размещении надписи Затраты на содержание резервов по типам средств связи в полях X: 485, Y: 1385. Текстовое поле является простейшим текстовым элементом управления, позволяющим пользователю вводить небольшие объемы текста. Вы можете также связать этот элемент управления с переменной или параметром типа String, double или int.
Элементы управления и разместите согласно рис. 5.12.
Текстовое поле, переходите на страницу Основные панели Свойства и в поле Имя: давайте имя элементу согласно табл. 5.5.| 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|
| Максимальный доход по типам СС | |||||
| editbox1 | editbox2 | editbox3 | editbox4 | editbox5 | editbox |
| Доход от дежурства по типам СС и всего | |||||
| editbox11 | editbox12 | editbox13 | editbox14 | editbox15 | editbox16 |
| Стоимость ремонта по типам СС и всего | |||||
| editbox21 | editbox22 | editbox23 | editbox24 | editbox25 | editbox26 |
| Суммарная прибыль от использования СС и всего | |||||
| editbox31 | editbox32 | editbox33 | editbox34 | editbox35 | editbox36 |
| Коэффициенты прибыли по типам СС и всего | |||||
| editbox41 | editbox42 | editbox43 | editbox44 | editbox45 | editbox46 |
| Затраты на содержание резервов по типам СС и всего | |||||
| editbox6 | editbox7 | editbox8 | editbox9 | editbox10 | editbox17 |
С помощью диаграмм AnyLogic позволяет динамически визуализировать данные, собираемые в результате работы модели. Набор диаграмм схож с тем, что предлагается программой MS Excel. Библиотека обладает мощным и удобным интерфейсом, не требующим при создании диаграммы программирования.
Термин диаграмма используется для обозначения, как обычных диаграмм, так и гистограмм. Гистограммы отображают статистически обработанные данные в виде функции плотности вероятности (PDF) и интегральной функции распределения (CDF), учитывающие все когда-либо добавленные на гистограмму значения. Диаграммы отображают текущие значения элементов данных (а некоторые - также недавнюю историю изменения значений).
AnyLogic поддерживает несколько видов диаграмм.
Простые диаграммы:
Диаграммы с историей (временные диаграммы):
Используйте диаграмму с накоплением.
Диаграмма с накоплением показывает вклад нескольких элементов данных в суммирующий результат в виде столбцов, расположенных друг над другом. Высота каждого столбца пропорциональна значению соответствующего элемента данных.
Самый нижний столбец соответствует элементу данных, добавленному вами на диаграмму первым, затем добавленному вторым и т. д. Не допускается присутствие отрицательных значений - в этом случае возникнет ошибка. Вы можете изменить направление роста столбца и его ширину с помощью свойств Направление и Относительная ширина (они находятся на странице свойств Внешний вид).
Диаграмма с накоплением из палитры Статистика и разместите согласно рис. 5.12.
Диаграмма с накоплением, переходите на страницу Внешний вид панели Свойства и установите:40
20
92
138
52
вертикальноеЦвет текста, цвет фона и цвет границы установите по своему усмотрению.
Основные панели Свойства.
Добавить элемент данных.
Заголовок: введите СС1.
Значение: введите Java код
degCC1.statsUtilization.mean()
Масштаб: Фиксированный и Обновлять автоматически. Цвет столбика, который будет отображать коэффициент использования группы СС одного типа, установите по своему усмотрению.
Диаграмма с накоплением. При этом в поле Заголовок: вводите: СС2, СС3, СС4, СС5 соответственно.
Значение: вводите Java коды также для объектов 2…5 соответственно:
degCC2.statsUtilization.mean() degCC3.statsUtilization.mean() degCC4.statsUtilization.mean() degCC5.statsUtilization.mean()
На этом реализация сегмента Статистика завершена. Осталось только организовать переключение между областями просмотра.
Палитре выделите Презентация. Перетащите элемент text, разместите и введите в поле Текст: Постановка на дежурство, как на рис. 5.12.
Свойства выделите Динамические и в поле Действие по щелчку: введите следующий Java код: get_Main().Postanovka.navigateTo();
text, разместите и введите в поле Текст: Имитация дежурства.
Свойства выделите Динамические и в поле Действие по щелчку: введите следующий Java код: degyrstvo.degyr.navigateTo();
Статистика. Введите Java код: statistika.navigateTo();
Все три сегмента модели построены. Теперь вернемся к выводу результатов моделирования с использованием способа событие.
Есть три типа событий.
Событие, происходящее по истечении таймаута. Оно используется тогда, когда Вам нужно запланировать выполнение какого-то действия на определенный момент времени (отстоящий на заданное количество времени (таймаут) от текущего момента). Событие, происходящее по истечению таймаута, предоставляет дополнительные возможности: вы можете сделать событие циклическим, либо же вообще управлять этим событием "вручную".
Событие, происходящее при выполнении заданного условия. Оно используется тогда, когда Вам нужно отслеживать выполнение определенного условия и производить какое-то действие при его происхождении.
Событие, происходящее с заданной интенсивностью. Оно используется для моделирования потока независимых событий (пуассоновский поток). Это часто требуется при моделировании поступления, например, заявок в системах массового обслуживания.
AnyLogic поддерживает еще один тип события, задаваемый уже другим модельным элементом - динамическое событие. Динамические события используются для планирования сразу нескольких одновременных и независимых событий. Например, канал связи, параллельно передающий произвольное количество сообщений, может быть смоделирован с помощью динамических таймеров, создаваемых для каждого сообщения.
Для вывода результатов моделирования воспользуйтесь событием, происходящим по истечении таймаута.
Модель на диаграмму класса активного объекта. Измените его имя на ResulsModeling. Нажмите Enter.
Отображать имя.
Tип события: выберите По таймауту.
Режим: Срабатывает один раз.
Время срабатывания (абсолютное) 1000000.
Действие введите Java код, который будет выполняться при появлении этого события.
//Расчет результатов по СС1 DoxDegCC1=round((DoxDegCC1/КолПрогон)*100); DoxDegCC1=DoxDegCC1/100; ZatrRemCC1=round((ZatrRemCC1/КолПрогон)*100); ZatrRemCC1=ZatrRemCC1/100; UbitokCC1=round((1-degCC1.statsUtilization.mean())*get_Main().ubitokCC1*ВремяРабСист*KCC1*100); UbitokCC1=UbitokCC1/100; PribCC1=round((DoxDegCC1-(ZatrResCC1+ZatrRemCC1+UbitokCC1))*100); PribCC1=PribCC1/100; koefPribCC1=round((PribCC1/DoxMaxCC1)*1000); koefPribCC1=koefPribCC1/1000; //Расчет результатов по СС2 DoxDegCC2=round((DoxDegCC2/КолПрогон)*100); DoxDegCC2=DoxDegCC2/100; ZatrRemCC2=round((ZatrRemCC2/КолПрогон)*100); ZatrRemCC2=ZatrRemCC2/100; UbitokCC2=(1-degCC2.statsUtilization.mean())*get_Main().ubitokCC2*ВремяРабСист*KCC2; PribCC2=round((DoxDegCC2-(ZatrResCC2+ZatrRemCC2+UbitokCC2))*100); PribCC2=PribCC2/100; koefPribCC2=round((PribCC2/DoxMaxCC2)*1000); koefPribCC2=koefPribCC2/1000; //Расчет результатов по СС3 DoxDegCC3=round((DoxDegCC3/КолПрогон)*100); DoxDegCC3=DoxDegCC3/100; ZatrRemCC3=round((ZatrRemCC3/КолПрогон)*100); ZatrRemCC3=ZatrRemCC3/100; UbitokCC3=(1-degCC3.statsUtilization.mean())* get_Main().ubitokCC3*ВремяРабСист*KCC3; PribCC3=round((DoxDegCC3-(ZatrResCC3+ZatrRemCC3+UbitokCC3))*100); PribCC3=PribCC3/100; koefPribCC3=round((PribCC3/DoxMaxCC3)*1000); koefPribCC3=koefPribCC3/1000; //Расчет результатов по СС4 DoxDegCC4=round((DoxDegCC4/КолПрогон)*100); DoxDegCC4=DoxDegCC4/100; ZatrRemCC4=round((ZatrRemCC4/КолПрогон)*100); ZatrRemCC4=ZatrRemCC4/100; UbitokCC4=(1-degCC4.statsUtilization.mean())* get_Main().ubitokCC4*ВремяРабСист*KCC4; PribCC4=round((DoxDegCC4-(ZatrResCC4+ZatrRemCC4+UbitokCC4))*100); PribCC4=PribCC4/100; koefPribCC4=round((PribCC4/DoxMaxCC4)*1000); koefPribCC4=koefPribCC4/1000; //Расчет результатов по СС5 DoxDegCC5=round((DoxDegCC5/КолПрогон)*100); DoxDegCC5=DoxDegCC5/100; ZatrRemCC5=round((ZatrRemCC5/КолПрогон)*100); ZatrRemCC5=ZatrRemCC5/100; UbitokCC5=(1-degCC5.statsUtilization.mean())* get_Main().ubitokCC5*ВремяРабСист*KCC5; PribCC5=round((DoxDegCC5-(ZatrResCC5+ZatrRemCC5+UbitokCC5))*100); PribCC5=PribCC5/100; koefPribCC5=round((PribCC5/DoxMaxCC5)*1000); koefPribCC5=koefPribCC5/1000; //Расчет суммарных результатов SumDoxDeg=DoxDegCC1+DoxDegCC2+DoxDegCC3+ DoxDegCC4+DoxDegCC5; SumZatrRem=round((SumZatrRem)*100/КолПрогон); SumZatrRem=SumZatrRem/100; SumUbitok=UbitokCC1+UbitokCC2+UbitokCC3+ UbitokCC4+UbitokCC5; SumPribil=round((SumDoxDeg-(SumZatrRes+SumZatrRem+SumUbitok))*100); SumPribil=SumPribil/100; koefPribil=round((SumPribil/SumDoxMax)*1000); koefPribil=koefPribil/1000; //вывод максимального дохода, дохода от дежурства по типам СС и всего editbox1.setText(DoxMaxCC1); editbox11.setText(DoxDegCC1); editbox2.setText(DoxMaxCC2); editbox12.setText(DoxDegCC2); editbox3.setText(DoxMaxCC3); editbox13.setText(DoxDegCC3); editbox4.setText(DoxMaxCC4); editbox14.setText(DoxDegCC4); editbox5.setText(DoxMaxCC5); editbox15.setText(DoxDegCC5); editbox.setText(SumDoxMax); editbox16.setText(SumDoxDeg); //вывод стоимости ремонта по типам СС и всего editbox21.setText(ZatrRemCC1); editbox22.setText(ZatrRemCC2); editbox23.setText(ZatrRemCC3); editbox24.setText(ZatrRemCC4); editbox25.setText(ZatrRemCC5); editbox26.setText(SumZatrRem); //вывод чистой прибыли от использования по типам СС и всего editbox31.setText(PribCC1); editbox32.setText(PribCC2); editbox33.setText(PribCC3); editbox34.setText(PribCC4); editbox35.setText(PribCC5); editbox36.setText(SumPribil); //вывод коэфициентов прибыли по типам СС и всего editbox41.setText(koefPribCC1); editbox42.setText(koefPribCC2); editbox43.setText(koefPribCC3); editbox44.setText(koefPribCC4); editbox45.setText(koefPribCC5); editbox46.setText(koefPribil); //вывод затрат на содержание резервов по типам СС и всего editbox6.setText(ZatrResCC1); editbox7.setText(ZatrResCC2); editbox8.setText(ZatrResCC3); editbox9.setText(ZatrResCC4); editbox10.setText(ZatrResCC5); editbox17.setText(SumZatrRes);
Из кода следует, что по окончании моделирования, которое длится 1 000 000 единиц модельного времени, сработает метод событие, будут рассчитаны и выведены результаты моделирования.
Для округления результатов моделирования (коэффициентов прибыли до трех знаков после запятой, а абсолютных величин прибыли и затрат - до двух знаков) использован метод round(). Предварительно результат умножался на 1000 и 100, а потом делился на эти же величины.
Для вывода результатов моделирования в текстовые поля editbox используется функция setText(), в качестве аргумента которой указывается имя элемента Простая переменная, например, editbox1.setText(DoxMaxCC1);
Запустите модель. На рис. 5.13 и рис. 5.14 показаны результаты моделирования.
(рис 5.13) Результаты моделирования
(рис 5.14) Результаты сегмента Статистика
AnyLogic предоставляет пользователю возможность провести следующие эксперименты:
Последние пять экспериментов доступны только в AnyLogic Professional.
Простой эксперимент запускает модель с заданными значениями параметров, поддерживает режимы виртуального и реального времени, анимацию, отладку модели.
При создании модели автоматически создается один простой эксперимент, названный Simulation. Именно такой эксперимент мы с вами и рассматривали до сих пор.
Эксперимент этого типа используется в большинстве случаев. Другие эксперименты нужны тогда, когда важную роль играют значения параметров модели. То есть вам нужно проанализировать, как они влияют на поведение или эффективность моделируемой системы или если вам нужно найти оптимальные параметры вашей модели.
Далее в рамках данного пособия мы остановимся на доступных в версии AnyLogic University экспериментах оптимизации и варьирования переменных, овладев методиками проведения которых, вы самостоятельно сможете выполнять в AnyLogic Professional и другие эксперименты.
Начиная создавать модель в AnyLogic, мы ничего не говорили об экспериментах и особенностях их проведения. Поэтому все исходные данные разместили на Initial_data_PD (рис. 5.3) и Initial_data_D (рис. 5.9) так, как нам представлялось удобным для построения модели и управления ею в ходе проведения простого эксперимента.
Однако при проведении экспериментов и наличии в модели, как в нашем случае, вложенных объектов, необходимо связывать параметры, размещенные на корневом объекте и вложенных объектах. Связывание необходимо потому, что изменять в ходе эксперимента можно только параметры корневого объекта.
В результате связывания значение параметра любого уровня вложенного объекта будет равно значению параметра объекта самого верхнего уровня.
Но следует иметь в виду, что связываются только параметры одного типа и что передача значения параметра производится лишь параметру объекта, находящегося ниже уровнем в иерархическом дереве модели. То есть связываются параметры последовательно от одного уровня к другому, а не через уровень или уровни.
Разместите элементы, как показано на рис. 5.15. Внесите соответствующие изменения в модель. Обратите внимание на различие имён связываемых параметров, например, КССР_1.
Свяжите параметры корневого объекта Main с параметрами вложенного объекта класса Degyrstvo.
Main.
Параметры панели Свойства.
Параметры в поле Значение введите имя параметра класса объекта-владельца Main, значение которого нужно передавать этому параметру вложенного объекта. В результате у вас должно быть так, как на рис. 5.16.
(рис 5.15) Размещение элементов на Initial_data_ PD
(рис 5.16) Фрагмент страницы Параметры после связывания параметров
Эксперимент Оптимизация может проводиться в AnyLogic оптимизатором OptQuest для детерминированных и стохастических моделей.
Наша модель ComSystem стохастическая. Создайте оптимизационный эксперимент стохастической модели с целью определения максимального коэффициента прибыли в зависимости от количества резервных СС и мастеров-ремонтников.
Проект щелкните правой кнопкой мыши элемент модели ComSystem и из контекстного меню выберите Coздать/ Эксперимент.
Тип эксперимента: выберите Оптимизация (рис. 5.17).
(рис 5.17) Диалоговое окно Новый эксперимент
Имя введите имя эксперимента, например, OptComSystem. Имя эксперимента должно начинаться с заглавной буквы - таково правило названия классов в Java.
Корневой класс модели: выберите Main. Этим действием вы задали корневой (главный) класс эксперимента. Объект этого класса будет играть роль корня иерархического дерева объектов модели, запускаемой оптимизационным экспериментом.
Копировать установки модельного времени из: и выберите эксперимент из расположенного справа выпадающего списка. В данном случае оставьте, так как есть: Simulation.
Готово. Появится страница Основные панели Свойства (рис. 5.18).
максимизировать.
Фиксированное начальное число (воспроизводимые прогоны).
Начальное число введите 5672.
root.Поэтому в поле Целевая функция введите root.degyrstvo.koefPribil.
Количество итераций:. Под итерацией понимается один опыт (одно наблюдение). Количество итераций - это цель стратегического планирования эксперимента - определение количества наблюдений и уровней факторов в них для получения полной и достоверной информации о модели.
i-го фактора, $$i=\overline{1,m}$$.
КССР_1…КССР_5 и количество мастеров-ремонтников Kol_masterov, то есть всего m=6 факторов. Факторы имеют следующие уровни: $$k_1=3, k_2=k_3=k_4=6, k_5=k_6=5$$. Тогда число итераций
$$I=k_1 \cdot k_2 \cdot k_3 \cdot k_4 \cdot k_5 \cdot k_6=3 \cdot 6 \cdot 6 \cdot 6 \cdot 5 \cdot 5 =16200$$
(рис 5.18) Вкладка Основные оптимизационного эксперимента
Количество итераций:, так как данная версия AnyLogic ограничена этим количеством итераций.
Main.
КССР_1. Щелкните мышью в ячейке Тип. Выберите тип параметра, отличный от значения фиксированный. Так как параметр KCCР_1 целочисленный типа int, выберите дискретный.
Мин минимальное значение 1, в ячейку Макс максимальное значение, например, для КССР1, 3. Так как параметр дискретный, в ячейке Шаг укажите величину шага 1.
Репликации панели Свойства (рис. 5.19).
Использовать репликации.
Возможность переменного количества репликаций позволяет оптимизатору OptQust проверять на статистическую значимость разницу между средним значением целевой функции в текущей итерации (текущее среднее значение) и лучшим значением, найденным за предыдущие итерации (лучшее значение). Целью такой проверки является удаление худших решений без потери времени на их получение. Таким образом, процесс может быть значительно ускорен за счет прекращения поиска неподходящих решений вместо выполнения заданного максимального количества реализаций.
Фиксированное количество репликаций и в соответствующем поле установите 4.
(рис 5.19) Страница Репликации оптимизационного эксперимента
Основные и щелкните кнопку Создать интерфейс. Кнопка находится в правом верхнем углу страницы Основные. После щелчка удаляется содержимое презентации эксперимента и создается интерфейс эксперимента заново (рис. 5.20) согласно его текущим установкам (набору оптимизационных параметров и их свойствам и т. д.). Поэтому создавать интерфейс нужно только после окончания задания параметров эксперимента. На интерфейсе видны знаки вопросов напротив оптимизационных параметров.
ComSystem/OptComSystem.
Запустить оптимизацию. Начнет выполняться эксперимент. Во время эксперимента можно видеть на графике изменение значения целевой функции. После 500*4=2 000 прогонов (см. рис. 5.21) эксперимент остановится.
КССР_1=2, КССР_2= КССР_3= КССР_4=КССР_5=1, Kol_master=5.
КССР_1… КССР_5 и Kol_master на Initial_data_PD на значения, полученные в оптимизационном эксперименте.
(рис 5.20) Интерфейс оптимизационного эксперимента
(рис 5.21) Результаты оптимизационного эксперимента
Обратите внимание на интерфейс оптимизационного эксперимента (рис. 5.20): заготовка для графика относительного коэффициента прибыли расположена в первом квадранте, то есть коэффициент предполагается положительным. Однако при некоторых параметрах система предоставления услуг связи оказывается убыточной. Поэтому появляется четвёртый квадрант (рис. 5.21), в котором искомый коэффициент отрицательный.
Эксперимент Варьирование параметров также может проводиться для детерминированных и стохастических моделей.
Создайте эксперимент Варьирование параметров для стохастической модели ComSystem с целью наблюдения за изменением коэффициента прибыли в зависимости от дохода за дежурство средств связи.
Проект щелкните правой кнопкой мыши элемент модели ComSystem и из контекстного меню выберите Создать эксперимент.
Тип эксперимента: выберите Варьирование параметров (рис. 5.22).
Имя введите имя эксперимента, например, ParVarComSystem.
(рис 5.22) Окно Новый эксперимент с выбранным экспериментом
(рис 5.23) Страница Основные эксперимента варьирования параметров
Готово. Появится страница Основные панели Свойства (рис. 5.23).
Основные по сравнению с оптимизационным экспериментом отсутствуют опции минимизировать, максимизировать, Количество итераций. Последнее определяется AnyLogic в зависимости от диапазонов и шагов изменения параметров.
doxDegCC1. Перейдите в таблице на рис. 5.23 на строку с этим параметром. Щелкните мышью в ячейке Тип. Выберите тип параметра, отличный от значения фиксированный. Параметр doxDegCC1 типа double, поэтому он может изменяться в диапазоне. Выберите Диапазон. В ячейку Мин введите минимальное значение 18, в ячейку Макс - максимальное значение 24, в ячейке Шаг укажите величину шага 0.5.
Репликации панели Свойства и установите флажок Использовать репликации. В поле Кол-во репликаций за итерацию, установите, как и в предыдущем эксперименте, 4.
Основные и щелкните кнопку Создать интерфейс.
Варьирование параметров в отличие от эксперимента Оптимизация интерфейс создает пользователь. Связано это с тем, что выходными результатами данного эксперимента могут быть любые показатели моделируемой системы.
График из палитры Статистика на диаграмму активного класса.
Добавить набор данных.
Набор данных. Заголовок: KoefPribil. Набор данных: dataset. Установите Не обновлять автоматически.
Дополнительные и установите: X: 260, Y: 100, Ширина: 510, Высота: 400, Цвет фона: Нет заливки, Цвет границы: Нет линии.
Внешний вид. Установите: Смещение по Х: 40, Смещение по Y: 20, Ширина: 450, Высота: 330.
Статистика перетащите элемент Набор данных. Установите опцию Не обновлять автоматически.
Основная перетащите элемент Простая переменная. На странице Основные панели Свойства в поле Имя: введите valueOfKoefPribil. Установите Уровень доступа: public. Тип: double.
Дополнительные панели Свойства и введите коды:Действие после прогона модели:
valueOfKoefPribil = root.degyrstvo.koefPribil;
Действие после итерации
dataset.add(getCurrentIteration(), valueOfKoefPribil);
ComSystem2/VarParComSystem.
(рис 5.24) Интерфейс эксперимента варьирования параметров
Запустить эксперимент. Начнет выполняться эксперимент. Во время эксперимента можно видеть на графике изменение значения коэффициента прибыли. Фрагмент результатов выполнения эксперимента Варьирование параметров приведен на рис. 5.25.
(рис 5.25) Фрагмент результатов выполнения эксперимента Варьирование параметров
doxDegCC1 = 21,5, doxDegCC2 = 20,5, doxDegCC3 = 28, doxDegCC4 = 19, doxDegCC5 = 23.
КССР_1… КССР_5 и Kol_master на Initial_data_PD, полученные в оптимизационном эксперименте (см. рис. 5.25), то значения коэффициентов прибыли в эксперименте варьирования параметрами близки к 0,949.В обоих экспериментах мы использовали опцию Фиксированное начальное число (воспроизводимые прогоны), поэтому генератор случайных чисел модели всегда инициализировался одним и тем же начальным числом 5672, заданным нами в поле Начальное число. Все запуски модели были идентичными и воспроизводимыми, что полезно при отладке модели.
Если выбрана опция Случайное начальное число (уникальные прогоны), то при каждом новом запуске модели генератор случайных чисел инициализируется другим числом и результаты оптимизации могут отличаться.
Создайте оптимизационный эксперимент OptComSystem1, который будет отличаться от OptComSystem лишь выбранной опцией Случайное начальное число (уникальные прогоны).
Запустите эксперимент. Вы получите следующие результаты. Наилучшее значение целевой функции - коэффициент прибыли - равно 0,957. Получено оно на 172 итерации при следующих оптимальных значениях параметров: КССР_1=1, КССР_2=2, КССР_3=1, КССР_4=1, КССР_5=2, Kol_master=5. Таким образом, получен другой коэффициент прибыли, при этом другое значение оптимального параметра КССР_5=2.
Оптимизационный эксперимент OptComSystem1 выполнялся 4839,2 сек (80,66 мин). Это при том, что эксперимент проводился на компьютере с четырёхядерным процессором и одновременно выполнялись четыре прогона модели.
Модели AnyLogic являются приложением Java, поэтому их можно запускать на большинстве современных платформ, а также помещать на веб-сайты в виде апплетов.
Наличие такой возможности позволяет удалённым пользователям запускать интерактивные модели в веб-браузере при отсутствии AnyLogic или какого-либо другого программного обеспечения. В этом случае на клиентской машине будут запускаться скопированные из сети файлы модели с такой же поддержкой интерактивной работы, что и при запуске из среды AnyLogic.
Экспортируйте модель ComSystem в виде Java апплета.
Экспорт/В Java апплет (запускается в веб браузере) из контекстного меню.
Экспорт модели (рис. 5.26). Щелчком мыши раскройте список Экспортировать эксперимент и выберите в нем Simulation. Настройки этого эксперимента будут применены к экспортируемой модели.
Каталог для создаваемых файлов укажите каталог, в который вы хотите поместить файлы экспортируемой модели. Можно также выбрать каталог с помощью диалогового окна навигации, которое становится доступным при нажатии кнопки Выбрать.
Язык: <системный по-умолчанию>). При необходимости можно выбрать для интерфейса апплета другой язык из выпадающего списка Язык: (на данный момент AnyLogic поддерживает русский, английский, китайский, немецкий и итальянский языки).
(рис 5.26) Диалоговое окно Экспорт модели
(рис 5.27) Набор файлов Java апплет
Открыть апплет модели в веб браузере.
Готово. Откроется диалоговое окно, в котором будет сообщение об успешном завершении экспортирования модели ComSystem: Модель ComSystem была экспортирована в G:\BOEV.
OK.Модель, экспортированная как Java апплет, представляет собой набор следующих файлов (рис. 5.28):
.html, используемый для запуска Java апплета;
com.xj.anylogic.engine.jar исполняющего модуля AnyLogic;
.jar файл модели (model.jar);
.jar файлы и классы, необходимые для построения модели.При публикации апплета модели в сети Интернет нужно предоставить доступ ко всем этим файлам из кода апплета. Это значит, что если вы добавляете ссылку на .html файл модели на веб страницу, то необходимо разместить все эти файлы в той же директории, где и этот .html файл. Для показа апплета на своей веб странице следует скопировать код апплета из .html файла модели в код своей страницы, и добавить все файлы, сгенерированные при экспорте модели, в тот же каталог, где находится ваша страница.
Запустите апплет модели, дважды щелкнув ComSystem.html. Результаты работы апплета модели показаны на рис. 5.28. Коэффициент прибыли равен 0,949 (см. п. 5.1.8.3).
(рис 5.28) Результаты работы апплета модели ComSystem
Как уже отмечалось, система связи представляет собой многофазную многоканальную систему массового обслуживания замкнутого типа с отказами и ожиданием.
Какие ограничения в системе?
Для моделирования двух первых ограничений целесообразно использовать МКУ, а для третьего и четвертого ограничений - транзакты.
Модель системы связи должна состоять из следующих сегментов:
Сегмент переопределения блоков модели необходим для изменения версий модели, т. е. изменения количества резервных СС и мастеров-ремонтников в ремонтном подразделении, а также номеров строк и столбцов матриц, в которые записываются результаты моделирования. Количество переопределений в сегменте соответствует числу версий модели минус один.
Предполагается, что количество типов СС в системе предоставления услуг связи может изменяться от одного до максимального значения n2_. Программа модели, как уже омечалось при разработке AnyLogic-модели, построена для n2_=5.
Для хранения результатов моделирования используются матрицы. В целях придания неизменности программы модели при варьировании количеством типов СС матрицы должны быть пронумерованы. Однако GPSS World при описании матриц командой MATRIX не позволяет вместо имени указывать число. Матрицы нужно вначале описать, дав им имена, а затем пронумеровать.
Результаты моделирования для одного типа СС хранятся в семи матрицах, например, для СС типа 1 (СС1) с идентификаторами:
Prib1 - матрица ожидаемой прибыли СС1;
KPr1 - матрица коэффициентов прибыли СС1;
KZen1 - матрица коэффициентов использования СС1;
DoxMax1 - матрица максимальных доходов от СС1;
DoxDeg1 - матрица доходов от дежурства СС1;
ZatrRem1 - матрица затрат на ремонт СС1;
ZatrResSS1 - матрица затрат на резервные СС1.Значит, аналогичных матриц будет тридцать пять. Да плюс еще матрица KRem коэффициентов использования мастеров - ремонтников. Именам этим тридцати шести матрицам даны номера.
Три матрицы для хранения суммарных результатов моделирования для СС всех типов не нумеровались:
Pribil - матрица суммарной прибыли;
SrKPrib - матрица средних коэффициентов прибыли СС всех типов;
SrKIsp - матрица коэффициентов использования СС всех типов.Именам пяти МКУ СС1_, СС2_, СС3_, СС4_ и СС5_, имитирующим по типам СС, находящиеся на дежурстве, даны номера 1 … 5. Это позволяет сократить число блоков в модели за счет того, что вместо пяти (в данном варианте модели) сегментов имитации постановки на дежурство СС используется один сегмент.
Для записи исходных данных: количества СС всех типов (в том числе и резервных), среднего времени наработки на отказ и среднего времени восстановления по типам СС, дохода по типам от одного СС, находящегося на дежурстве, убытка по типам при отсутствии одного СС на дежурстве, стоимости по типам одного резервного СС используются функции KolSS, KollSSRes, NarOtk, SrVrRem, S1_, S2_, S3_ соответственно. Этот способ по сравнению со способом использования матриц для записи этих же данных позволяет сократить программу модели на двадцать пять строк.
В начале работы модели генератор сразу вырабатывает количество транзактов, равное соответствующему количеству типов СС, и перестает быть активным.
Далее блоками SAVEVALUE и ASSIGN в параметр 1 каждого из транзактов последовательно заносятся коды 1…n1_ - признак типа СС.
Затем каждый из транзактов с помощью блока SPLIT расщепляется (копируется, размножается) по количеству СС (с учетом резервных СС) соответствующего типа.
После расщепления транзакты в соответствии с типом СС сразу занимают все каналы МКУ, имитирующие нахождение СС на дежурстве. Резервные СС остаются в списках задержки соответствующих МКУ.
Вышедшее из строя СС снимается с дежурства, поступает в ремонтное подразделение - транзакт либо занимает свободный канал МКУ Rem, если такой есть, либо при отсутствии свободного канала помещается в список задержки этого МКУ - список транзактов, ожидающих возможность занять освободившиеся каналы МКУ.
После ремонта СС отправляется либо сразу на дежурство, либо в резерв. В обоих случаях транзакт направляется на метку Met1. Здесь также транзакт либо занимает свободный канал, либо помещается в список задержки МКУ, соответствующего типу СС.
Ниже приводится программа только (в целях сокращения) для моделирования случая три мастера-ремонтника, а резервных СС2 - четыре, пять и шесть.
; Модель функционирования системы связи ; Задание номеров матрицам Prib1 EQU 1 ; Матрица ожидаемой прибыли СС1 KPr1 EQU 2 ; Матрица коэффициентов прибыли СС1 KZen1 EQU 3 ; Матрица коэффициентов использования СС1 DoxMax1 EQU 4 ; Матрица максимальных доходов СС1 DoxDeg1 EQU 5 ; Матрица доходов от дежурства СС1 ZatrRem1 EQU 6 ; Матрица затрат на ремонт СС1 ZatrResSS1 EQU 7 ; Матрица затрат на резервные СС1 Prib2 EQU 8 ; Матрица ожидаемой прибыли СС2 KPr2 EQU 9 ; Матрица коэффициентов прибыли СС2 KZen2 EQU 10 ; Матрица коэффициентов использования СС2 DoxMax2 EQU 11 ; Матрица максимальных доходов СС2 DoxDeg2 EQU 12 ; Матрица доходов от дежурства СС2 ZatrRem2 EQU 13 ; Матрица затрат на ремонт СС2 ZatrResSS2 EQU 14 ; Матрица затрат на резервные СС2 Prib3 EQU 15 ; Матрица ожидаемой прибыли СС3 KPr3 EQU 16 ; Матрица коэффициентов прибыли СС3 KZen3 EQU 17 ; Матрица коэффициентов использования СС3 DoxMax3 EQU 18 ; Матрица максимальных доходов СС3 DoxDeg3 EQU 19 ; Матрица доходов от дежурства СС3 ZatrRem3 EQU 20 ; Матрица затрат на ремонт СС3 ZatrResSS3 EQU 21 ; Матрица затрат на резервные СС3 Prib4 EQU 22 ; Матрица ожидаемой прибыли СС4 KPr4 EQU 23 ; Матрица коэффициентов прибыли СС4 KZen4 EQU 24 ; Матрица коэффициентов использования СС4 DoxMax4 EQU 25 ; Матрица максимальных доходов СС4 DoxDeg4 EQU 26 ; Матрица доходов от дежурства СС4 ZatrRem4 EQU 27 ; Матрица затрат на ремонт СС4 ZatrResSS4 EQU 28 ; Матрица затрат на резервные СС4 Prib5 EQU 29 ; Матрица ожидаемой прибыли СС5 KPr5 EQU 30 ; Матрица коэффициентов прибыли СС5 KZen5 EQU 31 ; Матрица коэффициентов использования СС5 DoxMax5 EQU 32 ; Матрица максимальных доходов СС5 DoxDeg5 EQU 33 ; Матрица доходов от дежурства СС5 ZatrRem5 EQU 34 ; Матрица затрат на ремонт СС5 ZatrResSS5 EQU 35 ; Матрица затрат на резервные СС5 KRem EQU 36 ; Матрица коэффициентов использования Rem ; Задание номеров МКУ, имитирующих дежурство СС CC1_ EQU 1 ; Задание номера МКУ СС1 CC2_ EQU 2 ; Задание номера МКУ СС2 CC3_ EQU 3 ; Задание номера МКУ СС3 CC4_ EQU 4 ; Задание номера МКУ СС4 CC5_ EQU 5 ; Задание номера МКУ СС5 ; Задание по типам количества СС, находящихся на дежурстве n2_ EQU 5 ; Количество типов СС VrMod EQU 1000 ; Время моделирования, 1 ед. мод. вр. = 1 час KolProg EQU 1000 Stroka EQU 1 ; Номер строки матрицы Stolbez EQU 1 ; Номер столбца матрицы Prib1 MATRIX ,3,3 ; Матрица ожидаемой прибыли СС1 KPr1 MATRIX ,3,3 ; Матрица коэффициентов прибыли СС1 KZen1 MATRIX ,3,3 ; Матрица коэффициентов загрузки СС1 DoxMax1 MATRIX ,3,3 ; Матрица максимальных доходов СС1 DoxDeg1 MATRIX ,3,3 ; Матрица доходов от дежурства СС1 ZatrRem1 MATRIX ,3,3 ; Матрица затрат на ремонт СС1 ZatrResSS1 MATRIX ,3,3 ; Матрица затрат на резервные СС1 Prib2 MATRIX ,3,3 ; Матрица ожидаемой прибыли СС2 KPr2 MATRIX ,3,3 ; Матрица коэффициентов прибыли СС2 KZen2 MATRIX ,3,3 ; Матрица коэффициентов загрузки СС2 DoxMax2 MATRIX ,3,3 ; Матрица максимальных доходов СС2 DoxDeg2 MATRIX ,3,3 ; Матрица доходов от дежурства СС2 ZatrRem2 MATRIX ,3,3 ; Матрица затрат на ремонт СС2 ZatrResSS2 MATRIX ,3,3 ; Матрица затрат на резервные СС2 Prib3 MATRIX ,3,3 ; Матрица ожидаемой прибыли СС3 KPr3 MATRIX ,3,3 ; Матрица коэффициентов прибыли СС3 KZen3 MATRIX ,3,3 ; Матрица коэффициентов загрузки СС3 DoxMax3 MATRIX ,3,3 ; Матрица максимальных доходов СС3 DoxDeg3 MATRIX ,3,3 ; Матрица доходов от дежурства СС3 ZatrRem3 MATRIX ,3,3 ; Матрица затрат на ремонт СС3 ZatrResSS3 MATRIX ,3,3 ; Матрица затрат на резервные СС3 Prib4 MATRIX ,3,3 ; Матрица ожидаемой прибыли СС4 KPr4 MATRIX ,3,3 ; Матрица коэффициентов прибыли СС4 KZen4 MATRIX ,3,3 ; Матрица коэффициентов загрузки СС4 DoxMax4 MATRIX ,3,3 ; Матрица максимальных доходов СС4 DoxDeg4 MATRIX ,3,3 ; Матрица доходов от дежурства СС4 ZatrRem4 MATRIX ,3,3 ; Матрица затрат на ремонт СС4 ZatrResSS4 MATRIX ,3,3 ; Матрица затрат на резервные СС4 Prib5 MATRIX ,3,3 ; Матрица ожидаемой прибыли СС5 KPr5 MATRIX ,3,3 ; Матрица коэффициентов прибыли СС5 KZen5 MATRIX ,3,3 ; Матрица коэффициентов загрузки СС5 DoxMax5 MATRIX ,3,3 ; Матрица максимальных доходов СС5 DoxDeg5 MATRIX ,3,3 ; Матрица доходов от дежурства СС5 ZatrRem5 MATRIX ,3,3 ; Матрица затрат на ремонт СС5 ZatrResSS5 MATRIX ,3,3 ; Матрица затрат на резервные СС5 KRem MATRIX ,3,3 ; Матрица коэффициентов загрузки Rem Pribil MATRIX ,3,3 ; Матрица суммарной прибыли SrKPrib MATRIX ,3,3 ; Матрица коэффициентов прибыли СС всех типов SrKIsp MATRIX ,3,3 ; Матрица коэффициентов загрузки СС всех типов ; Определение МКУ по количеству СС, находящихся на дежурстве CC1_ STORAGE 55 ; Емкость МКУ по количеству СС1 CC2_ STORAGE 100 ; Емкость МКУ по количеству СС2 CC3_ STORAGE 60 ; Емкость МКУ по количеству СС3 CC4_ STORAGE 45 ; Емкость МКУ по количеству СС4 CC5_ STORAGE 60 ; Емкость МКУ по количеству СС5 Rem STORAGE 3 ; Емкость МКУ по числу мастеров-ремонтников ; Описание арифметических выражений DoxMax VARIABLE VrMod#FN$S1_#FN$KolSS ; Максимальный доход от дежурства СС Ubitok VARIABLE VrMod#FN$KolSS#(1-(SR*1/1000))#FN$S2_;Убыток от отсутствия на дежурстве СС DoxDeg VARIABLE (AC1-P$Nach1)#FN$S1_ ; Полученный доход от дежурства СС StoRem VARIABLE (AC1-P$Nach)#FN$StoMast ; Стоимость ремонта неисправных СС ZatrResSS VARIABLE FN$S3_#FN$KolSSRes#VrMod; Затраты на содержание резервных СС SumPrib VARIABLE X$DoxDeg-(X$ZatrRem+MX*4(Stroka,Stolbez)+V$Ubitok) ; Прибыль KoefPr VARIABLE MX*6(Stroka,Stolbez)/X$DoxMax; Коэффициент прибыли StoMast FUNCTION P1,D5 ; Стоимость работы одного мастера 1,17/2,18/3,16/4,20/5,21 KolSS FUNCTION P1,D5 ; Количество по типам СС, находящихся на дежурстве 1,55/2,100/3,60/4,45/5,60 KolSSRes FUNCTION P1,D5 ; Количество по типам резервных СС 1,2/2,4/3,4/4,3/5,4 NarOtk FUNCTION P1,D5 ; Среднее время наработки до отказа по типам СС, час 1,373/2,301/3,482/4,325/5,470 SrVrRem FUNCTION P1,D5 ; Среднее время ремонта по типам СС, час 1,6.5/2,4.2/3,2.8/4,3/5,5.5 S1_ FUNCTION P1,D5 ; Доход по типам от одного СС, находящегося на дежурстве 1,20/2,24.2/3,32.8/4,23/5,25.5 S2_ FUNCTION P1,D5 ; Убыток по типам при отсутствии одного СС на дежурстве 1,32/2,34.2/3,37/4,31/5,32.5 S3_ FUNCTION P1,D5 ; Затраты по типам на содержание одного резервного СС 1,21/2,24.2/3,28/4,26/5,25.5 ; Сегмент постановки на дежурство СС GENERATE ,,,n2_ SAVEVALUE TipSS+,1 ; Код 1 ... n2_ - признак СС1 CCn2 в X$TipSS ASSIGN 1,X$TipSS ; Код 1 ... n2_ - признак СС1 CCn2_ в P1 SPLIT (FN$KolSS+FN$KolSSRes-1) ; Число СС + резервные СС ; Сегмент имитации дежурства СС Met1 ENTER P1 ; Встать на дежурство СС типа, номер которого в Р1 ASSIGN Nach1,AC1 ; Время начала дежурства ADVANCE (Exponential(5672,0,FN$NarOtk)) ; Имитация выхода СС из строя, номер которого в Р2 LEAVE P1 ; Снятие с дежурства из-за выхода из строя СС типа, номер которого в Р1 ASSIGN 3,0 Met3 ASSIGN 3+,1 ; Начало цикла изменения типов СС TEST E P1,P3,Met4 ; Р1=Р3? ASSIGN 4,(P1#7) ; Р4=Р1#7 ASSIGN 5,(P4-2) ; Номера матриц: 5,12,19,26,33 MSAVEVALUE *5+,Stroka,Stolbez,V$DoxDeg ; MSAVEVALUE Pribil+,Stroka,Stolbez,V$DoxDeg Met4 TEST GE P3,n2_,Met3 ; Все ли типы СС? ; Сегмент имитации работы ремонтного подразделения ENTER Rem ; Занять одного мастера ASSIGN Nach,AC1 ; Время начала дежурства ADVANCE (Exponential(5672,0,FN$SrVrRem)) ; Имитация ремонта LEAVE Rem ; Конец ремонта ASSIGN 3,0 Met5 ASSIGN 3+,1 ; Начало цикла изменения типов СС TEST E P1,P3,Met6 ; Р1=Р3? ASSIGN 4,(P1#7) ; Р4=Р1#7 ASSIGN 5,(P4-1) ; Номера матриц: 6,13,20,27,34 MSAVEVALUE *5+,Stroka,Stolbez,V$StoRem ; MSAVEVALUE Pribil+,Stroka,Stolbez,V$StoRem Met6 TEST GE P3,n2_,Met5 ; Все ли типы СС? TRANSFER ,Met1 ; Направить исправное СС на дежурство или в резерв ; Сегмент задания времени моделирования и расчета результатов GENERATE VrMod TEST E TG1,1,Met2 ASSIGN 1,0 Met7 ASSIGN 1+,1 ; Начало цикла изменения типов СС ASSIGN 2,(P1#7) ; Р2=Р1#7 ASSIGN 9,(P2-2) ; Номера матриц: 5,12,19,26,33 SAVEVALUEDoxDeg,((MX*9(Stroka,Stolbez))/KolProg);Доход от дежурства MSAVEVALUE *9,Stroka,Stolbez,X$DoxDeg ASSIGN 3,(P2-3) ; Номера матриц: 4,11,18,25,32 MSAVEVALUE *3,Stroka,Stolbez,V$DoxMax; Максимально возможный доход от дежурства СС SAVEVALUE DoxMax,MX*3(Stroka,Stolbez) ASSIGN 4,(P2-0) ; Номера матриц: 7,14,21,28,35 MSAVEVALUE *4,Stroka,Stolbez,V$ZatrResSS ; Затраты на резервные СС ASSIGN 5,(P2-1) ; Номера матриц: 6,13,20,27,34 SAVEVALUE ZatrRem,((MX*5(Stroka,Stolbez))/KolProg) MSAVEVALUE *5,Stroka,Stolbez,X$ZatrRem ASSIGN 6,(P2-6) ; Номера матриц: 1,8,15,22,29 MSAVEVALUE *6,Stroka,Stolbez,V$SumPrib ASSIGN 7,(P2-5) ; Номера матриц: 2,9,16,23,24 MSAVEVALUE *7,Stroka,Stolbez,V$KoefPr MSAVEVALUE Pribil+,Stroka,Stolbez, MX*6(Stroka,Stolbez) ; Суммарная прибыль по СС всех типов ASSIGN 8,(P2-4) MSAVEVALUE SrKPrib+,Stroka,Stolbez,(MX*7(Stroka,Stolbez)/n2_) ; Средний коэффициент прибыли по СС всех типов MSAVEVALUE *8,Stroka,Stolbez,(SR*1/1000) ; Коэффициент использования CC MSAVEVALUE SrKIsp+,Stroka,Stolbez,(SR*1/(1000#n2_)) ; Средний коэффициент использования CC всех типов TEST GE P1,n2_,Met7 ; Все ли типы СС? MSAVEVALUE 31,Stroka,Stolbez,(SR$Rem/1000); Коэффициент использования Rem SAVEVALUE TipSS,0 Met2 TERMINATE 1 START 1000,NP ; Вариант1: ССР2=4, мастеров=3 KolSSres FUNCTION P1,D5 1,2/2,5/3,4/4,4/5,4 Stolbez EQU 2 CLEAR OFF START 1000,NP ; Вариант2: ССР2=5, мастеров=3 KolSSres FUNCTION P1,D5 1,2/2,6/3,4/4,4/5,4 Stolbez EQU 3 CLEAR OFF START 1000,NP ; Вариант3: ССР2=6, мастеров=3 KolSSres FUNCTION P1,D5 1,2/2,4/3,4/4,4/5,4 Stroka EQU 2 Stolbez EQU 1 Rem STORAGE 4 ; Емкость МКУ по числу мастеров-ремонтников CLEAR OFF START 1000,NP ; Вариант4: ССР2=4, мастеров=4 KolSSres FUNCTION P1,D5 1,2/2,5/3,4/4,4/5,4 Stolbez EQU 2 CLEAR OFF START 1000,NP ; Вариант5: ССР2=5, мастеров=4 KolSSres FUNCTION P1,D5 1,2/2,6/3,4/4,4/5,4 Stolbez EQU 3 CLEAR OFF START 1000,NP ; Вариант6: ССР2=6, мастеров=4 KolSSres FUNCTION P1,D5 1,2/2,4/3,4/4,4/5,4 Stroka EQU 3 Stolbez EQU 1 Rem STORAGE 5 ; Емкость МКУ по числу мастеров-ремонтников CLEAR OFF START 1000,NP ; Вариант7: ССР2=4, мастеров=5 KolSSres FUNCTION P1,D5 1,2/2,5/3,4/4,4/5,4 Stolbez EQU 2 CLEAR OFF START 1000,NP ; Вариант8: ССР2=5, мастеров=5 KolSSres FUNCTION P1,D5 1,2/2,6/3,4/4,4/5,4 Stolbez EQU 3 CLEAR OFF START 1000 ; Вариант9: ССР2=6, мастеров=5
В программе, кроме методов применения матриц и функций, показывается метод изменения версий модели. Изменение версий модели производится переопределением соответствующих блоков. Переопределяться не могут только блоки GENERATE. Для переопределения блоков, описывающих ОКУ и МКУ, они должны иметь метки. В командах START, кроме последней, указывается операнд В - NP - не выводить отчёт. Однако одного переопределения блоков недостаточно. В GPSS World изменение версий модели достигается также за счет использования команды CLEAR.
В рассматриваемом примере в процессе моделирования необходимо собирать статистику по версиям модели. Нужная собранная статистика должна быть сохранена, а ненужная - сброшена.
Процесс моделирования в исходное состояние возвращает команда CLEAR. Формат записи команды:
CLEAR [A]
Операнд А может быть ON либо OFF. По умолчанию - ON.
Команда CLEAR сбрасывает всю накопленные статистические данные, удаляет все транзакты из процесса моделирования и заполняет все блоки GENERATE первым транзактом. ОКУ и МКУ становятся доступными, устанавливаются в незанятое состояние. Содержимое всех блоков становится нулевым. Генераторы случайных чисел не сбрасываются.
Если в команде CLEAR операнд А равен OFF, то сохраняемые ячейки, матрицы и логические ключи остаются без изменений. Поэтому в модели в команде CLEAR используется операнд А, равный OFF, так как нужно сохранить результаты моделирования предыдущей версии модели.
Однако при этом нужно иметь в виду те ячейки, начальные значения которых должны быть нулевыми в новой версии модели. Необходимо предусмотреть в программе блоки приведения таких ячеек в исходное состояние. В данной модели это показано на примере сохраняемой ячейки TipSS. Если эту ячейку не привести в нулевое состояние, процесс моделирования второй версии будет остановлен по ошибке "Обращение к несуществующей памяти".
Поскольку накопленные и сохраненные в матрицах результаты моделирования нет необходимости выводить после каждого варианта, то в команде START используется операнд В, равный ON. В последней команде START операнд В не используется. Поэтому стандартный отчет выдаётся после завершения моделирования. В рассматриваемом примере - после девяти наблюдений.
Ниже показан фрагмент журнала с информацией о ходе моделирования. В первом наблюдении (первой версии модели) модельное время изменяется от 0 до 1 000 000 единиц модельного времени (1000 прогонов # 1000 часов работы моделируемой системы).
После переопределения (формирования второй версии модели) выполняется команда CLEAR и абсолютное модельное время вновь изменяется от 0 до 1 000 000 единиц модельного времени.
07/11/11 16:56:06 Model Translation Begun. 07/11/11 16:56:06 Ready. 07/11/11 16:56:06 Simulation in Progress. 07/11/11 16:56:26 The Simulation has ended. Clock is 1000000.000000. 07/11/11 16:56:26 Simulation in Progress. 07/11/11 16:56:46 The Simulation has ended. Clock is 1000000.000000. 07/11/11 16:56:46 Simulation in Progress. 07/11/11 16:57:06 The Simulation has ended. Clock is 1000000.000000. 07/11/11 16:57:06 Simulation in Progress. 07/11/11 16:57:31 The Simulation has ended. Clock is 1000000.000000. 07/11/11 16:57:31 Simulation in Progress. 07/11/11 16:57:55 The Simulation has ended. Clock is 1000000.000000. 07/11/11 16:57:55 Simulation in Progress. 07/11/11 16:58:19 The Simulation has ended. Clock is 1000000.000000. 07/11/11 16:58:19 Simulation in Progress. 07/11/11 16:58:44 The Simulation has ended. Clock is 1000000.000000. 07/11/11 16:58:44 Simulation in Progress. 07/11/11 16:59:09 The Simulation has ended. Clock is 1000000.000000. 07/11/11 16:59:09 Simulation in Progress. 07/11/11 16:59:33 The Simulation has ended. Clock is 1000000.000000. 07/11/11 16:59:33 Reporting in Модель сеть связи 3.128.1-REPORT.
Для включения в формируемый стандартный отчет матриц необходимо при открытом объекте "Модель" выполнить команду:
Edit/Settings/Reports/Matrices/Применить/Ok
Результаты моделирования после 1000 прогонов приведены ниже. Но опять в целях сокращения приведены для СС1 первые три матрицы с абсолютной и относительной прибылью, а также с коэффициентами использования СС1.
MATRIX RETRY INDICES VALUE
PRIB1 0 1 1 411920.775
1 2 412047.879
1 3 395398.298
2 1 975100.990
2 2 973737.015
2 3 972026.043
3 1 1029846.786
3 2 1029847.984
3 3 1029916.195
KPR1 0
1 1 .374
1 2 .374
1 3 .359
2 1 .886
2 2 .885
2 3 .883
3 1 .936
3 2 .936
3 3 .936
KZEN1 0
1 1 .778
1 2 .778
1 3 .772
2 1 .976
2 2 .976
2 3 .975
3 1 .995
3 2 .995
3 3 .995
В соответствии с постановкой задачи нужно определить такое сочетание количества резервных СС и мастеров-ремонтников, при котором доход от предоставления услуг системой связи будет максимальным.
В GPSS World имеются средства для проведения оптимизационного эксперимента. Однако провести его так, чтобы он был аналогичен оптимизационному эксперименту в AnyLogic и, благодаря этому, можно было бы сравнивать результаты оптимизации, не представляется возможным. Во-первых, число факторов в GPSS World не может быть более пяти. Во-вторых, ремонтное подразделение имитируется МКУ, которое описывается командой STORAGE A. Операнд А этой команды, задающий ёмкость МКУ, должен быть только числом. Факторы же эксперимента обязательно должны быть переменными пользователя и не могут быть на месте операнда А. Отсюда нет возможности изменять в ходе эксперимента количество мастеров-ремонтников. Для изменения количества мастеров-ремонтников такая возможность есть.
Поэтому для достижения цели работы - установления адекватности результатов моделирования, эксперименты проводились в "ручном режиме". Причём, изменялось количество резервных СС только второго типа (ССР2) от 4 до 6 при изменениях количества мастеров-ремонтников от 3 до 5.
Таким образом, было проведено по 9 экспериментов в каждой системе моделирования. GPSS World позволяет проводить сразу все эти девять экспериментов, для чего должен быть написан соответствующий сегмент изменения версий модели. Что и было сделано. В AnyLogic вручную изменялись соответствующие данные, после чего запускалась модель.
Результаты экспериментов представлены в табл. 5.6. Из их сравнения следует, что они адекватны, поскольку отличия незначительны и составляют в основном 0…0,001, 0…0,002.
Что касается выбора оптимального сочетания количества резервных ССР2 и мастеров-ремонтников для условий данных экспериментов, то можно выбрать вариант 7: ССР2 = 4, мастеров-ремонтников = 5.
| Показатели | GPSS World | AnyLogic | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Типы средств связи | ||||||||||
| СС1 | СС2 | СС3 | СС4 | СС5 | СС1 | СС2 | СС3 | СС4 | СС5 | |
| Вариант 1: ССР2 = 4, мастеров-ремонтников = 3 | ||||||||||
| Коэффициент прибыли по типам СС | 0,374 | 0,327 | 0,627 | 0,4 | 0,573 | 0,38 | 0,332 | 0,633 | 0,405 | 0,576 |
| Суммарный коэффициент прибыли | 0,46 | 0,468 | ||||||||
| Коэффициент использования по типам СС | 0,779 | 0,741 | 0,853 | 0,78 | 0,846 | 0,781 | 0,743 | 0,856 | 0,781 | 0,847 |
| Суммарный коэффициент использования СС | 0,799 | 0,8 | ||||||||
| Вариант 2: ССР2 = 5, мастеров-ремонтников = 3 | ||||||||||
| Коэффициент прибыли по типам СС | 0,377 | 0,336 | 0,626 | 0,397 | 0,571 | 0,369 | 0,332 | 0,624 | 0,393 | 0,57 |
| Суммарный коэффициент прибыли | 0,462 | 0,462 | ||||||||
| Коэффициент использования по типам СС | 0,779 | 0,749 | 0,852 | 0,778 | 0,845 | 0,777 | 0,747 | 0,851 | 0,776 | 0,844 |
| Суммарный коэффициент использования СС | 0,801 | 0,8 | ||||||||
| Вариант 3: ССР2 = 6, мастеров-ремонтников = 3 | ||||||||||
| Коэффициент прибыли по типам СС | 0,364 | 0,33 | 0,619 | 0,385 | 0,564 | 0,361 | 0,331 | 0,62 | 0,39 | 0,563 |
| Суммарный коэффициент прибыли | 0,453 | 0,457 | ||||||||
| Коэффициент использования по типам СС | 0,774 | 0,751 | 0,849 | 0,773 | 0,842 | 0,774 | 0,751 | 0,85 | 0,775 | 0,841 |
| Суммарный коэффициент использования СС | 0,797 | 0,797 | ||||||||
| Вариант 4: ССР2 = 4, мастеров-ремонтников = 4 | ||||||||||
| Коэффициент прибыли по типам СС | 0,89 | 0,895 | 0,931 | 0,89 | 0,911 | 0,889 | 0,892 | 0,931 | 0,889 | 0,91 |
| Суммарный коэффициент прибыли | 0,903 | 0,905 | ||||||||
| Коэффициент использования по типам СС | 0,978 | 0,977 | 0,996 | 0,988 | 0,995 | 0,978 | 0,977 | 0,996 | 0,988 | 0,994 |
| Суммарный коэффициент использования СС | 0,987 | 0,987 | ||||||||
| Вариант 5: ССР2 = 5, мастеров-ремонтников = 4 | ||||||||||
| Коэффициент прибыли по типам СС | 0,887 | 0,892 | 0,93 | 0,887 | 0,909 | 0,885 | 0,89 | 0,93 | 0,886 | 0,909 |
| Суммарный коэффициент прибыли | 0,901 | 0,902 | ||||||||
| Коэффициент использования по типам СС | 0,977 | 0,981 | 0,996 | 0,988 | 0,994 | 0,976 | 0,98 | 0,995 | 0,987 | 0,994 |
| Суммарный коэффициент использования СС | 0,987 | 0,986 | ||||||||
| Вариант 6: ССР2 = 6, мастеров-ремонтников = 4 | ||||||||||
| Коэффициент прибыли по типам СС | 0,885 | 0,89 | 0,93 | 0,886 | 0,909 | 0,887 | 0,89 | 0,93 | 0,887 | 0,91 |
| Суммарный коэффициент прибыли | 0,9 | 0,903 | ||||||||
| Коэффициент использования по типам СС | 0,977 | 0,984 | 0,995 | 0,987 | 0,994 | 0,977 | 0,984 | 0,996 | 0,988 | 0,994 |
| Суммарный коэффициент использования СС | 0,987 | 0,987 | ||||||||
| Вариант 7: ССР2 = 4, мастеров-ремонтников = 5 | ||||||||||
| Коэффициент прибыли по типам СС | 0,935 | 0,944 | 0,939 | 0,914 | 0,922 | 0,936 | 0,945 | 0,94 | 0,915 | 0,923 |
| Суммарный коэффициент прибыли | 0,931 | 0,934 | ||||||||
| Коэффициент использования по типам СС | 0,996 | 0,998 | 1 | 0,999 | 1 | 0,996 | 0,998 | 1 | 0,999 | 1 |
| Суммарный коэффициент использования СС | 0,998 | 0,998 | ||||||||
| Вариант 8: ССР2 = 5, мастеров-ремонтников = 5 | ||||||||||
| Коэффициент прибыли по типам СС | 0,936 | 0,936 | 0,939 | 0,915 | 0,922 | 0,936 | 0,936 | 0,94 | 0,915 | 0,923 |
| Суммарный коэффициент прибыли | 0,93 | 0,932 | ||||||||
| Коэффициент использования по типам СС | 0,996 | 0,999 | 1 | 0,999 | 1 | 0,996 | 0,999 | 1 | 0,999 | 1 |
| Суммарный коэффициент использования СС | 0,998 | 0,998 | ||||||||
| Вариант 9: ССР2 = 6, мастеров-ремонтников = 5 | ||||||||||
| Коэффициент прибыли по типам СС | 0,936 | 0,927 | 0,939 | 0,915 | 0,922 | 0,936 | 0,928 | 0,94 | 0,915 | 0,923 |
| Суммарный коэффициент прибыли | 0,928 | 0,929 | ||||||||
| Коэффициент использования по типам СС | 0,996 | 0,999 | 1 | 0,999 | 1 | 0,996 | 0,999 | 1 | 0,999 | 1 |
| Суммарный коэффициент использования СС | 0,998 | 0,998 | ||||||||
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.