Опубликован: 16.11.2010 | Уровень: специалист | Доступ: свободно
Лекция 7:

Моделирование в GPSS World

6.4.1.6. Программа модели

Программа модели построена в соответствии с блок-диаграммой (см. рис. 6.3). В ней, кроме, как уже отмечалось, раскрытия методов использования ОКУ, МКУ и списков пользователя демонстрируется применение номеров МКУ вместо их имен.

Этот метод дает возможность иметь в модели один сегмент имитации работы постов контроля блоков вместо подобного сегмента для каждого цеха, т. е. сократить число блоков в модели.

Обратите внимание, что в программе присвоение номеров именам МКУ указывается в самом начале и только потом, не обязательно следом, определение МКУ командой STORAGE. Если вы построите программу так, что поменяете порядок: вначале определение МКУ командой STORAGE, а потом - присвоение командой EQU номеров именам МКУ, то на этапе выполнения программы модели возникнет ошибка: "Обращение к несуществующей памяти". На этапе создания объекта "Процесс моделирования" ошибка изменение этого порядка не обнаруживается.

; Модель функционирования предприятия. Прямая задача
; Замена имен МКУ номерами
Kontr1	EQU	1
Kontr2	EQU	2
Kontr3	EQU	3
Kontr4	EQU	4
; Задание исходных данных
q11_	EQU	0.02	; Доля брака блоков на постах n11
q12_	EQU	0.03	; Доля брака блоков на постах n12
q13_	EQU	0.04	; Доля брака блоков на постах n13
q14_	EQU	0.06	; Доля брака блоков на постах n14
q2_	EQU	0.05	; Доля брака изделий на пункте вых. контроля
q4_	EQU	0.03	; Доля забракованных изделий приемкой
TipBl	EQU	4	; Максимальное количество типов блоков
VrMod	EQU	2400	; Время моделирования, 1 ед. мод. вр. = 1 мин
T1_	EQU	19	; Средний интервал выпуска блоков типа 1
T01_	EQU	6	; Стандартное отклонение времени выпуска блоков типа 1
T2_	EQU	11	; Средний интервал выпуска блоков типа 2
T3_	EQU	15	; Средний интервал выпуска блоков типа 3
T03_	EQU	8	; Стандартное отклонение времени выпуска блоков типа 3
T4_	EQU	18	; Средний интервал выпуска блоков типа 4
T11_	EQU	12	; Среднее время контроля на постах n11
T011_	EQU	6	; Стандартное отклонение времени контроля на постах n11
T12_	EQU	16	; Среднее время контроля на постах n12
T13_	EQU	21	; Среднее время контроля на постах n13
T14_	EQU	17	; Среднее время контроля на постах n14
Tc_	EQU	22	; Среднее время сборки изделия
T0c_	EQU	2	; Стандартное отклонение времени сборки изделия
Tp_	EQU	15	; Среднее время проверки изделия
Tpr_	EQU	18	; Среднее время приема изделия
T0pr_	EQU	2 ; Стандартное отклонение времени приема изделия
; Коэффициенты изменения параметров законов распределения
K1_	EQU	1	; Коэффициент изменения T1_ и T01_
K2_	EQU	1	; Коэффициент изменения T2_ и T02_
K3_	EQU	1	; Коэффициент изменения T3_ и T03_
K4_	EQU	1	; Коэффициент изменения T4_ и T04_
Kc_	EQU	1	; Коэффициент изменения Tс_ и T0с_
Kp_	EQU	1	; Коэффициент изменения Tp_ и T0p_
Kpr_	EQU	1	; Коэффициент изменения Tpr_ и T0pr_
; Задание количества пунктов сборки и постов контроля
Sbor	STORAGE	2	; Количество пунктов сборки
Kontr1	STORAGE	3	; Количество постов n11
Kontr2	STORAGE	2	; Количество постов n12
Kontr3	STORAGE	2	; Количество постов n13
Kontr4	STORAGE	2	; Количество постов n14
Kontsb	STORAGE	2	; Количество стендов выходного контроля
; Описание арифметических выражений
KolIzd	VARIABLE	INT(N$Term7/X$prog)	; Количество готовых изделий
KolGotBl	VARIABLE	(INT(CH*1/X$Prog))	; Количество готовых блоков всех типов, оставшихся на складах
KolBrBl	VARIABLE	(INT(X*1/X$Prog))	; Количество забракованных блоков всех типов
TIzd	VARIABLE	(AC1/X$Prog)/X$KolIzd	; Среднее время подготовки одного изделия
;Сегмент имитации работы цеха 1 без постов контроля
	GENERATE	(T1_#K1_),(T01_#K1_)
	ASSIGN	1,1	; Код 1 в параметре 1 транзакта - тип 1 блока
	ASSIGN	2,((T11_-T01_)+2#T011_#(RN27/1000)) ; Розыгрыш времени контроля и запись в Р2
	ASSIGN	9,q11_	; Запись в Р9 доли брака блоков после постов контроля
	TRANSFER	,Met1 ; Сегмент имитации работы цеха 2 без постов контроля
	GENERATE	(Exponential(32,0,(T2_#K2_)))
	ASSIGN	1,2	; Код 2 в параметре 1 транзакта - тип 2 блока
	ASSIGN	2,(Exponential(23,0,T12_))	; Розыгрыш времени контроля и запись в Р2
	ASSIGN	9,q12_	; Запись в Р9 доли брака блоков после постов контроля
	TRANSFER	,Met1 ; Сегмент имитации работы цеха 3 без постов контроля
	GENERATE	(T3_#K3_),(T03_#K3_)
	ASSIGN	1,3	; Код 3 в параметре 1 транзакта - тип 3 блока
	ASSIGN	2,(Exponential(22,0,T13_))	; Розыгрыш времени контроля и запись в Р2
	ASSIGN	9,q13_	; Запись в Р9 доли брака блоков после постов контроля
	TRANSFER	 ,Met1 ; Сегмент имитации работы цеха 4 без постов контроля
	GENERATE	(Exponential(32,0,(T4_#K4_)))
	ASSIGN	1,4	; Код 4 в параметре 1 транзакта - тип 4 блока
	ASSIGN	2,(Exponential(22,0,T14_))	; Розыгрыш времени контроля и запись в Р2
	ASSIGN	9,q14_	; Запись в Р9 доли брака блоков после постов контроля
; Сегмент имитации работы постов контроля блоков
Met1	QUEUE	P1	; Встать в очередь с номером в Р1
	ENTER	P1	; Занять МКУ с номером в Р1
	DEPART	P1	; Покинуть очередь с номером в Р1
	ADVANCE	P2	; Имитация контроля с временем в Р2
	LEAVE	P1	; Освободить МКУ с номером в Р1
	ASSIGN	10,0	; Подготовка к циклу
Met21	ASSIGN	10+,1	; Начало цикла по числу типов блоков
	TEST E	P10,P1,Met21 ; Какой тип блока подготовлен?
	TRANSFER	P9,,Met14	; Отправить брак блоков к Met14
	LINK	P1,FIFO	; Готовые блоки на склад с номером в Р1
; Сегмент имитации сборки изделий
	GENERATE	,,,1 Met3	ASSIGN	1,0	; Подготовка к циклу
Met13	ASSIGN	1+,1	; Начало цикла по числу типов блоков
	TEST L	P1,TipBl,Met4	; Все ли типы блоков?
	TEST NE	CH*1,0	; Есть на складе готовые блоки?
	UNLINK	P1,Term5,1	; Да
	TEST G	P1,TipBl,Met13 ; Блоки всех типов есть? Если да,
Met4	UNLINK	P1,Met5,1	; то, отправить блоки на сборку
	TRANSFER	,Met3	; Вернуться для проверки наличия всех типов блоков для следующего изделия
Met5	QUEUE	Sbor	; Занять очередь на пункты сборки
	ENTER	Sb	; Занять пункт сборки
	DEPART	Sbor	; Освободить очередь на пункт сборки
	ADVANCE	(Normal(15,(Tc_#Kc_),(T0c_#Kc_)))	; Имитация сборки
	LEAVE	Sb	; Освободить пункт сборки
; Сегмент имитации работы стендов выходного контроля
Met9	QUEUE	KSbor	; Занять очередь на стенд выходного контроля
	ENTER	KSb ; Занять стенд выходного контроля
	DEPART	KSbor	; Освободить очередь на стенд выходного контроля
	ADVANCE	(Exponential(11,0,(Tp_#Kp_)))	; Имитация работы стенда выходного контроля
	LEAVE	KSb ; Освободить стенд выходного контроля
	TRANSFER	q2_,,Met5 ; Направить в приемку, а брак - для замены на пункт сборки
; Сегмент имитации работы приемки
	QUEUE	Opr	; Занять очередь на пункт приемки
	SEIZE	KPr	; Занять пункт приемки
	DEPART	Opr	; Освободить очередь пункта приемки
	ADVANCE	(Normal(11,(Tpr_#Kpr_),(T0pr_#Kpr_))) ; Имитация работы приемки
	RELEASE	KPr ; Освободить пункт приемки
	TRANSFER	q4_,,Met9 ; Готовые изделия - на склад
; Сегмент счета блоков и изделий
Term7	TERMINATE	; Количество готовых изделий
Met14	SAVEVALUE	P1+,1	; Количество брака блоков всех типов
	TERMINATE
Term5	TERMINATE
; Задание времени моделирования и расчет результатов моделирования
	GENERATE	VrMod	; Задание времени моделирования
	TEST L	X$Prog,TG1,Met10	; Если X$Prog< содержимого счетчика завершений, то
	SAVEVALUE	Prog,TG1 ; записать в X$Prog содержимое счетчика завершений
Met10	TEST E	TG1,1,Met12 ; Если содержимое счетчика завершений равно 1, то расчет результатов моделирования
	SAVEVALUE	KolIzd,V$KolIzd ; Количество готовых изделий
	ASSIGN	1,0	; Подготовка к циклу
Met15	ASSIGN	1+,1	; Начало цикла по числу типов блоков
	SAVEVALUE	(10+P1),V$KolGotBl ; Количество готовых блоков всех типов, оставшихся на складах
	SAVEVALUE	P1,V$KolBrBl	; Количество забракованных блоков всех типов
	ASSIGN	11,(20+P1) ; Задание номера Х и запись его в Р11
	TEST GE	P1,TipBl,Met15	; Все ли типы блоков?
	SAVEVALUE	TIzd,V$TIzd	; Среднее время подготовки одного изделия
Met12	TERMINATE	1

Отладьте модель. Выполните моделирование, указав в команде START 1000 прогонов. В отчете, фрагмент которого приведен ниже,

SAVEVALUE		RETRY		VALUE
KOLIZD			0			122.000
TIZD			0			19.512

найдите, что за 40 часов подготовлено 122 изделия, а среднее время подготовки одного изделия ? 20 мин (19,51 мин).

После изучения материала главы 7 вернитесь к данной задаче и проведите два отсеивающих эксперимента (дисперсионных анализа). Для первого эксперимента используйте данные, приведенные в табл. 6.2, а для второго - в табл. 6.3.

При необходимости внесите в эти данные свои изменения. По результатам экспериментов сделайте выводы.

6.4.2. Модель процесса изготовления изделий на предприятии. Обратная задача

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

Постановка задачи аналогична постановке задачи п. 6.4.1.1 при тех же исходных данных (п. 6.4.1.2).

Отличие состоит в том, что нужно построить имитационную модель для определения оценки математического ожидания времени, за которое будет изготовлено предприятием N изделий, и оценки математического ожидания времени изготовления одного изделия. Поэтому в исходных данных нет времени моделирования, а вводится переменная пользователя N_ - количество изделий, время изготовления которых нужно оценить.

6.4.2.2. Программа модели

В программе модели те же сегменты (п. 6.4.1.6), только вместо сегмента задания времени моделирования и расчета результатов включен сегмент организации завершения моделирования и расчета результатов моделирования.

Один прогон наблюдения завершается подготовкой N_ изделий, т. е. поступлением их на склад. Поэтому соответствующие этим изделиям транзакты не выводятся сразу из модели, как в прямой задаче, а поступают в сегмент организации завершения моделирования и расчета результатов моделирования.

В блоке

Met10	SAVEVALUE	NIzd+,1

подсчитывается количество подготовленных изделий. Если это количество равно N_, т. е. выполняется условие

TEST E         X$NIzd,N_,Term5

фиксируется один прогон.

С целью сокращения машинного времени расчет результатов моделирования производится один раз по накопленной статистике за все прогоны. Программа, как и в п. 6.3.2.2, построена так, чтобы расчет результатов моделирования не требовал ее изменения при различном числе прогонов, задаваемом пользователем.

Ниже приведена программа обратной задачи.

; Модель функционирования предприятия. Обратная задача ; Замена имен МКУ номерами
Kontr1	EQU	1	; Замена имени МКУ Kontr1 номером
Kontr2	EQU	2	; Замена имени МКУ Kontr2 номером
Kontr3	EQU	3	; Замена имени МКУ Kontr3 номером
Kontr4	EQU	4	; Замена имени МКУ Kontr4 номером
; Задание исходных данных
q11_	EQU	0.02	; Доля забракованных блоков на постах n11
q12_	EQU	0.03	; Доля забракованных блоков на постах n12
q13_	EQU	0.04	; Доля забракованных блоков на постах n13
q14_	EQU	0.06	; Доля забракованных блоков на постах n14
q2_	EQU	0.05	; Доля брака изделий на пункте выходного контроля
q4_	EQU	0.03	; Доля забракованных изделий приемкой
TipBl	EQU	4	; Максимальное количество типов блоков, изготавливаемых цехами
T1_	EQU	19	; Средний интервал выпуска блоков типа 1
T01_	EQU	6	; Стандартное отклонение времени выпуска блоков типа 1
T2_	EQU	11	; Средний интервал выпуска блоков типа 2
T3_	EQU	15	; Средний интервал выпуска блоков типа 3
T03_	EQU	8	; Стандартное отклонение времени выпуска блоков типа 3
T4_	EQU	18	; Средний интервал выпуска блоков типа 4
T11_	EQU	12	; Среднее время контроля на постах n11
T011_	EQU	6	; Стандартное отклонение времени контроля на постах n11
T12_ EQU 16 ; Среднее время контроля на постах n12 T13_ EQU 21 ;
  Среднее время контроля на постах n13 T14_ EQU 17 ;
  Среднее время контроля на постах n14 Tc_	EQU	22	; Среднее время сборки изделия
T0c_	EQU	2	; Стандартное отклонение времени сборки изделия
Tp_	EQU	15	; Среднее время проверки изделия
Tpr_	EQU	18	; Среднее время приема изделия
T0pr_	EQU	2	; Стандартное отклонение времени приема изделия
N_	EQU	122	; Количество изделий, которое необходимо подготовить
; Задание количества пунктов сборки и контроля
Sbor	STORAGE	2	; Количество пунктов сборки
Kontr1	STORAGE	3 ; Количество постов n11
Kontr2	STORAGE	2 ; Количество постов n12
Kontr3	STORAGE	2 ; Количество постов n13
Kontr4	STORAGE	2 ; Количество постов n14
Kontsb	STORAGE	2	; Количество пунктов сборки
; Сегмент имитации работы цеха 1 без постов контроля
	GENERATE T1_,T01_; Источник блоков типа 1
	ASSIGN	1,1	; Код 1 в параметре 1 транзакта - тип 1 блока
	ASSIGN	2,((T11_-T011_)+2#T011_#(RN27/1000))
; Розыгрыш времени контроля и запись в Р2
	ASSIGN	9,q11_	; Запись в Р9 доли брака блоков после постов контроля
	TRANSFER ,Met1
; Сегмент имитации работы цеха 2 без постов контроля
	GENERATE (Exponential(32,0,T2_)); Источник блоков типа 2
	ASSIGN	1,2	; Код 2 в параметре 1 транзакта - тип 2 блока
	ASSIGN	2,(Exponential(23,0,T12_))	; Розыгрыш времени контроля и запись в Р2
	ASSIGN	9,q12_	; Запись в Р9 доли брака блоков после постов контроля
	TRANSFER ,Met1
; Сегмент имитации работы цеха 3 без постов контроля
	GENERATE T3_,T03_ ; Источник блоков типа 3
	ASSIGN	1,3	; Код 3 в параметре 1 транзакта - тип 3 блока
	ASSIGN	2,(Exponential(22,0,T13_))	; Розыгрыш времени контроля и запись в Р2
	ASSIGN	9,q13_	; Запись в Р9 доли брака блоков после постов контроля
	TRANSFER ,Met1
; Сегмент имитации работы цеха 4 без постов контроля
	GENERATE (Exponential(32,0,T4_)) ; Источник блоков типа 4
	ASSIGN 1,4 ; Код 4 в параметре 1 транзакта - тип 4 блока
	ASSIGN	2,(Exponential(22,0,T14_))	; Розыгрыш времени контроля блока и запись в Р2
	ASSIGN	9,q14_	; Запись в Р9 доли брака блоков после постов контроля
; Сегмент имитации работы постов контроля блоков
Met1	QUEUE	P1	; Встать в очередь с номером в Р1
	ENTER	P1	; Занять МКУ с номером в Р1
	DEPART	P1	; Покинуть очередь с номером в Р1
	ADVANCE	P2	; Имитация контроля качества блока с временем контроля в Р2
	LEAVE	P1	; Освободить МКУ с номером в Р1
	ASSIGN	10,0	; Подготовка к циклу
Met21	ASSIGN	10+,1	; Начало цикла по числу типов блоков
	TEST E	P10,P1,Met21	; Какой тип блока подготовлен?
	TRANSFER P9,,Met14	; Отправить брак блоков к Met14
	LINK	P1,FIFO	; Готовые блоки на склад с номером в Р1
; Сегмент имитации сборки изделий
	GENERATE ,,,1
Met3	ASSIGN	1,0	; Подготовка к циклу
Met13	ASSIGN	1+,1 ; Начало цикла по числу типов блоков
	TEST L	P1,TipBl,Met4	; Все ли типы блоков?
	TEST NE	CH*1,0	; Есть на складе готовые блоки?
	UNLINK	P1,Term5,1	; Да
	TEST G	P1,TipBl,Met13 ; Блоки всех типов есть? Если да,
Met4	UNLINK	P1,Met5,1 ; то отправить блоки на сборку
	TRANSFER ,Met3	; Вернуться для проверки наличия всех типов блоков для следующего изделия
Met5	QUEUE	Sbor	; Занять очередь на пункты сборки
	ENTER	Sb	; Занять пункт сборки
	DEPART	Sbor	; Освободить очередь на пункт сборки
	ADVANCE	(Normal(15,Tc_,T0c_))	; Имитация сборки
	LEAVE	Sb	; Освободить пункт сборки
; Cегмент имитации работы стендов выходного контроля
Met9	QUEUE	KSbor	; Занять очередь на стенд выходного контроля
	ENTER	KSb	; Занять стенд выходного контроля
	DEPART	KSbor	; Освободить очередь на стенд выходного контроля
	ADVANCE	(Exponential(11,0,Tp_))	; Имитация работы стенда выходного контроля
	LEAVE	KSb	; Освободить стенд выходного контроля
	TRANSFER q2_,,Met5 ; Направить изделие в приемку, а брак -на замену на пункт сборки
; Сегмент имитации работы приемки
	QUEUE	Opr	; Занять очередь на пункт приемки
	SEIZE	KPr	; Занять пункт приемки
	DEPART	Opr	;Освободить очередь пункта приемки
	ADVANCE	(Normal(11,Tpr_,T0pr_))	; Имитация работы приемки
	RELEASE	KPr	; Освободить пункт приемки
	TRANSFER q4_,,Met9 ; Готовые изделия - на склад
; Сегмент организации завершения моделирования и расчета результатов моделирования
	TEST L	X$Prog,TG1,Met10	; Если X$Prog< содержимого счетчика завершений, то
	SAVEVALUE	Prog,TG1	; записать в X$Prog содержимое счетчика завершений - количество прогонов из TG1
	SAVEVALUE	NIzd,0 Met10	SAVEVALUE	NIzd+,1	;
   Счет и сохранение в ячейке NIzd количества принятых приемкой изделий
	TEST E	X$NIzd,N_,Term5	; Если принято N_изделий, зафиксировать один прогон
	TEST E	TG1,1,Met12 ; Если содержимое счетчика завершений равно 1, то расчет результатов моделирования
	ASSIGN	1,0	; Подготовка к циклу
	Met15	ASSIGN	1+,1	; Начало цикла по числу типов блоков
	SAVEVALUE	(10+P1),(INT(CH*1/X$Prog))	; Количество готовых блоков всех типов, оставшихся на складах
	SAVEVALUE	P1,(INT(X*1/X$Prog))	; Количество забракованных блоков всех типов
	ASSIGN	11,(20+P1) ; Задание номера сохраняемой ячейки и запись его в Р11
	TEST GE	P1,TipBl,Met15	; Все ли типы блоков для подготовки изделия имеются на складах цехов?
	SAVEVALUE	TIzd,((AC1/X$Prog)/60) ; Расчет и сохранение в ячейке TIzd времени подготовки N_изделий, час
	SAVEVALUE	STIzd,((X$TIzd/N_)#60) ; Расчет и сохранение в ячейке STIzd среднего времени подготовки одного изделия, мин
Met12	SAVEVALUE	NIzd,0	; Обнуление X$NIzd - подготовка к очередному прогону
	TERMINATE	1
Met14	SAVEVALUE	P1+,1 ; Количество брака блоков всех типов
	TERMINATE Term5
	TERMINATE	; Вывод вспомогательных транзактов

Отладьте модель. Запустите модель, указав в команде START 1000 прогонов. По окончании моделирования в отчете, фрагмент которого приведен ниже,

SAVEVALUE		RETRY		VALUE
TIZD			0			39.438
STIZD			0			19.396

получите, что среднее время подготовки N_=122 изделий составляет 40 ч (39,438) при среднем времени подготовки одного изделия 20 мин (19,396). Как видно, эти результаты согласуются с исходными данными и результатами решения прямой задачи.

Результаты решения обратной задачи можно проверить. Найдите в самом начале отчета

START TIME		END TIME		BLOCKS	FACILITIES		STORAGES
0.000			2366280.440		74		1				6

Разделите END TIME (абсолютное модельное время АС1) на количество прогонов и минут в одном часе, т. е. на 60 000, получите ?40 ч.

Теперь в программе модели укажите командой EQU количество изделий N_=244:

N_          EQU   244

Выполните моделирование, указав, как и в предыдущем случае, в команде START 1000 прогонов. Из отчета

SAVEVALUE RETRY VALUE
TIZD 0 78.863
STIZD 0 19.393

видно, что время подготовки, как и число изделий, увеличивается в два раза при неизменном времени изготовления одного изделия.

Сделайте выводы: влияет ли стохастичность, как и при решении прямой задачи, на результаты моделирования.

Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!

Лариса Парфенова
Лариса Парфенова

1) Можно ли экстерном получить второе высшее образование "Программная инженерия" ?

2) Трудоустраиваете ли Вы выпускников?

3) Можно ли с Вашим дипломом поступить в аспирантуру?