Опубликован: 07.11.2014 | Доступ: свободный | Студентов: 441 / 37 | Длительность: 15:17:00
ISBN: 978-5-9556-0161-8
Тема: САПР
Лекция 8:

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

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

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

< Лекция 7 || Лекция 8: 12345 || Лекция 9 >
Игорь Маникин
Игорь Маникин

Коллеги, спасибо за очень информативный и полезный курс. Прошёл три лекции. Столкнулся с проблемой, что обе модели не могут закончить расчёт по причине ограничения бесплатной версии "создано максимально допустимое число динамически создаваемых агентов (50000)". По скриншотам Лекции 2 видно, что да, модель создает гораздо больше 50000 агентов. В принципе, мне то и диплом не особо нужен. Но хотелось бы выполнить практические работы. Нет ли возможности откорректировать эту проблему? Или может я чего не так делаю?

Еще раз спасибо за прекрасный курс!

Артём Нагайцев
Артём Нагайцев

Выдает ошибку "entity cannot be resolved to a variable" при попытке запуска. В чем может быть причина? Ошибка в строках

entity.time_vxod=time(); 

time_obrabotki.add(time()-entity.time_vxod);