Опубликован: 15.02.2013 | Доступ: свободный | Студентов: 235 / 0 | Длительность: 16:52:00
ISBN: 978-5-9556-0146-5
Лекция 9:

Модель предоставления ремонтных услуг

< Лекция 8 || Лекция 9: 12345 || Лекция 10 >

Модель в 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 соответственно.

< Лекция 8 || Лекция 9: 12345 || Лекция 10 >
Алексей Гроссман
Алексей Гроссман

Здравствуйте, прошел курс "Концептуальное проектирование систем в AnyLogic и GPSS World". Можно ли получить по нему сертификат? У нас в институте требуют сертификаты для создания портфолио.

Елена Блинаева
Елена Блинаева