Здравствуйте, прошел курс "Концептуальное проектирование систем в AnyLogic и GPSS World". Можно ли получить по нему сертификат? У нас в институте требуют сертификаты для создания портфолио. |
Модель предоставления ремонтных услуг
Модель в GPSS World
Состав модели в GPSS World
Как уже отмечалось, фирма предоставления ремонтных услуг представляет собой многофазную многоканальную систему массового обслуживания разомкнутого типа (см. рис. 8.1).
Модель предоставления ремонтных услуг должна состоять из следующих сегментов:
- ввод исходных данных;
- сегмент имитации поступления заявок;
- сегмент имитации работы диспетчеров;
- сегмент имитации работы мастеров 1 группы;
- сегмент имитации работы мастеров 2 группы;
- сегмент имитации работы мастеров 3 группы;
- сегмент имитации работы мастеров 4 группы;
- сегмент учёта выполненных заявок и ремонтов;
- сегмент задания времени моделирования и расчёта результатов моделирования.
Программа GPSS-модели
Ниже приводится программа.
; Модель предоставления ремонтных услуг ; Замена имен МКУ номерами Rem1 EQU 1 ; 1 группа мастеров Rem2 EQU 2 ; 2 группа мастеров Rem3 EQU 3 ; 3 группа мастеров Rem4 EQU 4 ; 4 группа мастеров ; Задание МКУ-групп мастеров Dis STORAGE 3 ; Количество диспетчеров Rem1 STORAGE 2 ; Количество мастеров 1 группы Rem2 STORAGE 2 ; Количество мастеров 2 группы Rem3 STORAGE 2 ; Количество мастеров 3 группы Rem4 STORAGE 1 ; Количество мастеров 4 группы ; Задание исходных данных VrMod EQU 1440 ; Время моделирования, 1 ед. мод. вр. = 1 мин n_ EQU 4 ; Количество типов заявок T1 EQU 15 ; Среднее время работы диспетчера с поступившей заявкой To1 EQU 2 ; Среднеквадратическое отклонение времени работы диспетчера с поступившей заявкой Tp_ EQU 20 ; Средний интервал времени поступления одного типа заявок q_ EQU 0.02 ; Доля не принятых заявок TipSS FUNCTION RN892,D4 ; Функция распределения поступающих типов заявок .2,1/.5,2/.75,3/1,4 VidRem FUNCTION RN892,D3 ; Функция распределения видов ремонтов поступающих заявок .5,1/.75,2/1,3 ; Среднее время ремонта по заявкам VrRemTip1 FUNCTION P2,D3 ; типа 1 1,30/2,40/3,50 VrRemTip2 FUNCTION P2,D3 ; типа 2 1,20/2,30/3,40 VrRemTip3 FUNCTION P2,D3 ; типа 3 1,15/2,25/3,35 VrRemTip4 FUNCTION P2,D3 ; типа 4 1,25/2,35/3,40 ; Сегмент имитации поступления заявок GENERATE (Exponential(892,0,(Tp_/n_))) ; Источники заявок ASSIGN 1,FN$TipSS ; Код типа заявки в Р1 ASSIGN 2,FN$VidRem ; Код вида ремонта в Р2 ASSIGN 5,P1 ; Код типа заявки также в Р5 ; Запись в Р3 среднего времени вида ремонта по заявкам Met0 TRANSFER ,(Met0+((P1#2)-1)) Met1_ ASSIGN 3,FN$VrRemTip1 ; типа 1 TRANSFER ,Met1 Met2_ ASSIGN 3,FN$VrRemTip2 ; типа 2 TRANSFER ,Met1 Met3_ ASSIGN 3,FN$VrRemTip3 ; типа 3 TRANSFER ,Met1 Met4_ ASSIGN 3,FN$VrRemTip4 ; типа 4 ; Сегмент имитации работы диспетчеров Met1 QUEUE OCH ; Занять очередь к диспетчеру ENTER DIS ; Занять свободного диспетчера DEPART OCH ; Покинуть очередь к диспетчеру ADVANCE (Normal(892,T1,To1)) ; Имитация работы LEAVE DIS ; Освободить диспетчера TRANSFER q_,,Met20 ; Отказать q заявкам Met2 TEST E P1,1,Met21 ; Мастерам 1 группы? Да, Met25 TRANSFER ,Met3 ; отправить мастерам 1 Met21 TEST E P1,2,Met22 ; Мастерам 2 группы Met26 GATE SF P1,Met4 ; Мастера 2 заняты? Если да, ASSIGN 4,1 ; запись в Р4 признака мастера 1 ASSIGN 1,1 ; запись в Р1 признака мастера 1 GATE SF P4,Met3 ; Свободны ли мастера 1? ASSIGN 1,2 ; Заняты, В Р1 признак мастера 2 TRANSFER ,Met4 ; и отправить мастерам 2 Met22 TEST E P1,3,Met23 ; Мастерам 3 группы Met27 GATE SF P1,Met5 ; Мастера 3 заняты? Если да, ASSIGN 4,1 ; запись в Р4 признака мастера 1 ASSIGN 1,1 ; запись в Р1 признака мастера 1 GATE SF P4,Met3 ; Свободны ли мастера 1? ASSIGN 4,2 ; запись в Р4 признака мастера 2 ASSIGN 1,2 ; запись в Р1 признака мастера 2 GATE SF P4,Met4 ; свободны ли мастера 3? ASSIGN 1,3 ; Заняты, В Р1 признак мастера 3 TRANSFER ,Met5 ; и отправить мастерам 3 Met23 TEST E P1,4 ; Мастерам 4 группы GATE SF P1,Met6 ; Мастера 4 заняты? Если да, ASSIGN 4,1 ; запись в Р4 признака мастера 1 ASSIGN 1,1 ; запись в Р1 признака мастера 1 GATE SF P4,Met3 ; Свободны ли мастера 1? ASSIGN 4,2 ; запись в Р4 признака мастера 2 ASSIGN 1,2 ; запись в Р1 признака мастера 2 GATE SF P4,Met4 ; Свободны ли мастера 2? ASSIGN 4,3 ; запись в Р4 признака мастера 3 ASSIGN 1,3 ; запись в Р1 признака мастера 3 GATE SF P4,Met5 ; Свободны ли мастера 3? ASSIGN 1,4 ; запись в Р1 признака мастера 4 TRANSFER ,Met6 ; и отправить мастерам 4 ; Сегмент имитации работы мастеров 1 группы MET3 ENTER P1 ; Занять свободного мастера 1 группы ADVANCE (Exponential(892,0,P3));Имитация ремонта LEAVE P1 ; Освободить свободного мастера 1 TRANSFER ,Met7 ; Отправить для учета ; Сегмент имитации работы мастеров 2 группы MET4 ENTER P1 ; Занять свободного мастера 2 группы ADVANCE (Exponential(892,0,P3));Имитация ремонта LEAVE P1 ; Освободить свободного мастера TRANSFER ,Met7 ; Отправить для учета ; Сегмент имитации работы мастеров 3 группы MET5 ENTER P1 ; Занять свободного мастера 3 ADVANCE (Exponential(892,0,P3));Имитация ремонта LEAVE P1 ; Освободить свободного мастера 3 TRANSFER ,Met7 ; Отправить для учета ; Сегмент имитации работы мастеров 4 группы MET6 ENTER P1 ; Занять свободного мастера 4 ADVANCE (Exponential(892,0,P3));Имитация ремонта LEAVE P1 ; Освободить свободного мастера 4 ; Сегмент учёта выполненных заявок и ремонтов за все прогоны модели MET7 TEST E P5,1,Met9_ ; заявок всего MET8 TRANSFER ,(Met8+P2) ; заявок типа 1 Met81 TERMINATE ; ремонтов вида 11 Met82 TERMINATE ; ремонтов вида 12 Met83 TERMINATE ; ремонтов вида 13 MET9_ TEST E P5,2,Met10_ Met9 TRANSFER ,(Met9+P2) ; заявок типа 2 Met91 TERMINATE ; ремонтов вида 21 Met92 TERMINATE ; ремонтов вида 22 Met93 TERMINATE ; ремонтов вида 23 MET10_ TEST E P5,3,Met11 Met10 TRANSFER ,(Met10+P2) ; заявок типа 3 Met101 TERMINATE ; ремонтов вида 31 Met102 TERMINATE ; ремонтов вида 32 Met103 TERMINATE ; ремонтов вида 33 MET11 TRANSFER ,(Met11+P2) ; заявок типа 4 Met111 TERMINATE ; ремонтов вида 41 Met112 TERMINATE ; ремонтов вида 42 Met113 TERMINATE ; ремонтов вида 43 MET20 TERMINATE ; Количество не принятых заявок ; Сегмент задания времени моделирования и расчета результатов моделирования GENERATE VrMod ; Время моделирования TEST L X$Prog,TG1,Met41 ; Если X$Prog<TG1, то SAVEVALUE Prog,TG1 ; запомнить в X$Prog количество прогонов модели Met41 TEST E TG1,1,Met42 ; Если TG1=1, то расчет результатов моделирования ; Количество выполненных заявок SAVEVALUE KolZajav1,(N$Met8/X$Prog) ; типа 1 SAVEVALUE KolZajav2,(N$Met9/X$Prog) ; типа 2 SAVEVALUE KolZajav3,(N$Met10/X$Prog) ; типа 3 SAVEVALUE KolZajav4,(N$Met11/X$Prog) ; типа 4 ; Вероятность выполнения заявок SAVEVALUE VerZajav1,(N$Met8/N$Met1_) ; типа 1 SAVEVALUE VerZajav2,(N$Met9/N$Met2_) ; типа 2 SAVEVALUE VerZajav3,(N$Met10/N$Met3_) ; типа 3 SAVEVALUE VerZajav4,(N$Met11/N$Met4_) ; типа 4 SAVEVALUE VerZajav,(N$Met7/N$Met0) ; всех типов ; Количество выполненных видов ремонтов SAVEVALUE 11,(N$Met81/X$Prog) ; вида 11 SAVEVALUE 12,(N$Met82/X$Prog) ; вида 12 SAVEVALUE 13,(N$Met83/X$Prog) ; вида 13 SAVEVALUE 21,(N$Met91/X$Prog) ; вида 21 SAVEVALUE 22,(N$Met92/X$Prog) ; вида 22 SAVEVALUE 23,(N$Met93/X$Prog) ; вида 23 SAVEVALUE 31,(N$Met101/X$Prog) ; вида 31 SAVEVALUE 32,(N$Met102/X$Prog) ; вида 32 SAVEVALUE 33,(N$Met103/X$Prog) ; вида 33 SAVEVALUE 41,(N$Met111/X$Prog) ; вида 41 SAVEVALUE 42,(N$Met112/X$Prog) ; вида 42 SAVEVALUE 43,(N$Met113/X$Prog) ; вида 43 Met42 TERMINATE 1 START 1000 ; Количество прогонов модели
Заявки имитируются транзактами, а диспетчеры и группы мастеров - многоканальными устройствами (МКУ).
Для упрощения построения модели МКУ даны имена Rem1 … Rem4, которые заменены номерами 1…4. Но в GPSS-программе порядок записи обратный.
Для ввода исходных данных, где это уместно, например, среднее время ремонта, использованы функции, что сокращает количество строк программы и также упрощает её построение.
В сегменте имитации поступления заявок разыгрываются тип заявки и вид ремонта, которые записываются в параметры транзакта 1 и 2 соответственно. Код типа заявки записывается также в параметр 5, так как в последующем в сегменте имитации работы диспетчеров код в параметре 1 может изменяться, а в параметре 5 нет, что необходимо для сегмента учёта выполненных заявок и ремонтов.
В этом же сегменте в параметр 3 транзакта-заявки заносится среднее время выполнения вида ремонта.
Сегмент имитации работы диспетчеров начинается заданием очереди по аналогии с AnyLogic-моделью, хотя можно было бы обойтись и без этого, так как МКУ имеет свою очередь.
Принято, что, как и в AnyLogic-модели, решение на распределение заявок в текущий момент времени принимает диспетчер.
Предположим, что поступила заявка типа 4. Диспетчер проверяет занятость мастеров 4 группы:
GATE SF P1,Met6 ; Мастера 4 заняты? Если да,
Если мастера 4 группы свободны, то заявка отправляется им, то есть на Met6. Если же они заняты, то проверяется занятость мастеров 1 группы:
ASSIGN 4,1 ; запись в Р4 признака мастера 1 ASSIGN 1,1 ; запись в Р1 признака мастера 1 GATE SF P4,Met3 ; Свободны ли мастера 1?
Но предварительно в Р4 и Р1 заносятся коды мастеров 1 группы. Если мастера 1 группы свободны, заявка отправляется им.
Если же мастера 1 группы заняты, то аналогично проверяется занятость мастеров 2 группы. Если они заняты - мастеров 3 группы. И если мастера 3 группы заняты, заявка отправляется мастерам 4 группы:
ASSIGN 1,4 ; запись в Р1 признака мастера 4 TRANSFER ,Met6 ; и отправить мастерам 4
Опять же предварительно в параметре 1 транзакта-заявки восстанавливается её первоначальный код.
Сегменты имитации работы мастеров 1…4 групп построены одинаково. Следует заметить, что можно было бы обойтись следующими строками:
MET3 ENTER P1 ; Занять свободного мастера 1 группы ADVANCE (Exponential(892,0,P3));Имитация ремонта LEAVE P1 ; Освободить свободного мастера 1 TRANSFER ,Met7 ; Отправить для учета
Заменив также в сегменте имитации работы диспетчеров Met4, Met5, Met6 на Met3.
В сегменте учёта выполненных заявок и ремонтов в блоки с метками Met8, Met9, Met10, Met11 входят заявки типов 1…4 соответственно за все прогоны модели, поэтому в сегменте задания времени моделирования и расчёта результатов моделирования для определения среднего количества выполненных заявок производится деление на количество выполненных прогонов. Тоже самое производится и при определении среднего количества выполненных видов ремонтов.
Количество выполненных заявок и вероятности их выполнения сохраняются в ячейках KolZajav1… KolZajav4 и VerZajav1 …VerZajav4 соответственно.
Вероятности выполнения видов ремонтов также сохраняются в ячейках, например, видов 1, 2, 3 по заявке типа 1 в ячейках 11, 12 и 13 соответственно.