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

Модель функционирования предприятия

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

Модель в GPSS World

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

Предприятие имеет n_1 цехов, производящих n_1 типов блоков, т. е. каждый цех производит блоки одного типа. Себестоимости комплектующих блоков C_{к1}, C_{к2}, ..., C_{кn1}. Стоимости изготовления блоков C_{изг1}, C_{изг2}, ..., C_{изгn1}. Интервалы выпуска блоков T_{1}, T_{2}, ..., T_{n_{1}} - случайные. Из n_1 блоков собирается одно изделие.

Перед сборкой каждый тип блоков проверяется на n_{11}, n_{12}, ..., n_{1n} соответствующих постах контроля. Длительности контроля одного блока T_{11}, T_{12}, ..., T_{1n} случайные. Стоимости проверки блоков C_{пр1}, C_{пр2}, ..., C_{прn1}. На каждом посту бракуется q_{11}, q_{12}, ..., q_{1n} \% блоков соответственно. Забракованные блоки в дальнейшем процессе сборки не участвуют, и удаляются с постов контроля в брак.

Прошедшие контроль, т. е. не забракованные блоки поступают на один из n_2 пунктов сборки. На пункте сборки одновременно собирается только одно изделие. Сборка начинается только тогда, когда имеются все необходимые n_1 блоков различных типов. Время сборки T_c случайное. Стоимость сборки одного изделия C_{сб}.

После сборки изделие поступает на один из n_3 стендов выходного контроля. На одном стенде одновременно проверяется только одно изделие. Время проверки T_п случайное. Стоимость проверки одного изделия С_к. По результатам проверки бракуется q_2 % изделий. В таком изделии с вероятностью q_3 % могут быть забракованы m блоков. Вероятности порядковых номеров из 1 ... n_1 P_{бл1}…P_{блn1} соответственно.

Забракованное изделие направляется в цех сборки, где неработоспособные блоки заменяются новыми. Время замены T_{замi} случайное. Стоимость замены i-го блока C_{замi}. После замены блоков изделие вновь поступает на один из стендов выходного контроля.

Прошедшее стенд выходного контроля изделие поступает в отдел приёмки. Время приемки T_{пр} одного изделия случайное. Стоимость приемки одного изделия C_п. По результатам приёмки бракуется q_4 % изделий, которые направляются вновь на стенд выходного контроля. Принятые приёмкой изделия направляются на склад предприятия.

Исходные данные

n_1=4; T_1=19; T_2=11; T_3=15;  T_4=18;
C_{k1}=35; C_{k2}=32; C_{k3}=43; C_{k4}=48;
C_{изг1}=35; C_{изг2}=27; C_{изг3}=36; C_{изг4}=37;
n_{11}=2; n_{12}=2; n_{13}=2; n_{14}=2; T_{11}=12; T_{12}=16; T_{13}=21; T_{14}=17;
C_{пр1}=12; C_{пр2}=23; C_{пр3}=32; C_{пр4}=28;
q_{11}=0,02; q_{12}=0,03; q_{13}=0,04; q_{14}=0,06;
n_2=2; T_с=22; С_{сб}=67; n_3=2;  T_{п}=26; C_k=74; q_2=0,05;
m=1; P_{k1}=1,0; P_{бл1}=0,52; P_{бл2}=0,52; P_{бл3}=0,52; P_{бл4}=0,52;
T_{зам1}=12; T_{зам2}=15; T_{зам3}=12; T_{зам4}=21;
C_{зам1}=34; C_{зам2}=46; C_{зам3}=38; C_{зам4}=54;
n_4=2; T_{пр}=18; C_{п}=53; q_{4}=0,15.

Интервалы времени между выпусками блоков, время контроля блоков и изделий, сборки и приема изделий подчинены экспоненциальному закону.

Задание на исследование

Разработать имитационную модель функционирования предприятия при изготовлении изделий из блоков.

Исследовать влияние качества изготовления блоков и других параметров (интервалов выпуска блоков из цехов, себестоимости комплектующих, стоимости изготовления блоков, проверки, сборки и др.) на себестоимость изделий.

Сделать выводы о загруженности подразделений предприятия и необходимых мерах по снижению себестоимости продукции.

Уяснение задачи на исследование

Предприятие при изготовлении блоков и сборки из них изделий может быть представлено как многофазная многоканальная разомкнутая система массового обслуживания с ожиданием, так как оно имеет все ее элементы (Рис. 6.1):

  • поток изготовленных цехами блоков;
  • очереди блоков на посты контроля и пункты сборки;
  • очереди изделий на стенды контроля и пункт приемки;
  • многоканальные устройства обслуживания (посты контроля, стенды выходного контроля, пункты сборки, пункты приёмки);
  • потоки забракованных блоков;
  • выходные потоки готовых изделий.
Предприятие как система массового обслуживания

увеличить изображение
Рис. 6.1. Предприятие как система массового обслуживания

Для имитации МКУ следует использовать блоки ENTER и LEAVE.

Для исходных данных в программе модели возьмем те же идентификаторы, что и в постановке задачи, но для предотвращения случаев совпадения с зарезервированными символами GPSS World добавим символ подчеркивания.

Например, q11_, n1_. Сделаем это для отличия от зарезервированных символов GPSS World: q - системный числовой атрибут, означающий очередь, n - используется в качестве ссылки при определении количества транзактов, вошедших в какой-либо блок программы. Добавление символа подчеркивания предотвратит ошибку, которая в противном случае будет выявлена на этапе создания объекта "Процесс моделирования". Другие идентификаторы будем вводить по мере уяснения задачи, а также в ходе разработки программы модели.

Для моделирования необходимо привести в соответствие время протекания реального процесса изготовления блоков и сборки изделий на предприятии и в модели. Это осуществляется введением масштабного коэффициента, например, если для условий рассматриваемой задачи его взять равным 1, а в реальном процессе измерять время в минутах, то 1 мин будет соответствовать 1 ед. мод. вр. Тогда время моделирования VrMod = 60 # 40 = 2400 ед. мод. вр. Временные параметры изготовления и контроля блоков, сборки, контроля и приёмки изделий даны в минутах, поэтому при выбранном масштабном коэффициенте 1 они не изменятся.

В модели, как процесса, протекающего в СМО (см. Рис. 6.1), необходимо иметь:

  • задание исходных данных;
  • сегмент имитации работы цехов без постов контроля;
  • сегмент имитации работы постов контроля блоков;
  • сегмент имитации сборки изделий;
  • сегмент имитации работы стендов выходного контроля;
  • сегмент имитации работы приемки;
  • сегмент задания времени моделирования и расчета результатов моделирования.

Для ввода исходных данных целесообразно использовать команды EQU и FUNCTION. Вторая команда позволит сократить число строк в программе за счёт ввода одномерного массива данных двумя строками.

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

При разработке программы модели следует исходить из того, что отдельные элементы модели и модель в целом имеют достаточно различимое подобие со структурой предприятия (Рис. 6.1).

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

Однако возможно и другое. В данном примере можно было бы иметь сегменты имитации работы цехов по их количеству, т. е. четыре сегмента. С целью придания универсальности в модели имеется один сегмент имитации работы цехов. При увеличении (уменьшении) количества цехов необходимо только изменить значение переменной пользователя TipBl - число типов блоков (по числу цехов).

Также в примере в каждом цехе имеются свои посты контроля блоков. Поэтому, казалось, в модели должны были бы быть сегменты, имитирующие работу цеха и его постов контроля. По предложенному же составу модели видно, что в неё входит сегмент, имитирующий работу каждого из цехов без постов контроля, и сегмент имитации работы всех постов контроля. Т. е. как бы все посты контроля блоков объединены в отдельное подразделение предприятия, но функциональное предназначение соответствующих постов контроля осталось прежним.

Объединение сделано также в интересах универсальности модели. Предположим, количество цехов увеличилось. Нужно было бы добавлять сегменты имитации работы цехов и постов контроля, т. е. количество блоков в модели увеличилось бы. В предлагаемом варианте сегмент имитации функционирования постов контроля блоков остаётся неизменным. Необходимо только командами STORAGE задать ёмкости добавляемых пунктов контроля, заменить их имена номерами и добавить данные: среднее время контроля блоков, доля браков и стоимость контроля блоков в функции TKontr, BrBl и CProv соответственно.

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

Для розыгрыша выхода в брак блоков и изделий используется блок TRANSFER в статистическом режиме.

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

Замечание. Не путайте блоки изделий с блоками GPSS World в программе модели.

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

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

Ниже приводится программа модели.

; Модель функционирования предприятия
; Замена имен МКУ номерами
Kontr1	EQU	1
Kontr2	EQU	2
Kontr3	EQU	3
Kontr4	EQU	4
; Задание исходных данных
TShop	FUNCTION	P1,D4	; Средние интервалы времени изготовления блоков
1,19/2,11/3,15/4,18
CKom	FUNCTION	P1,D4	; Стоимости комплектующих блоков
1,35/2,32/3,43/4,48
CIzg	FUNCTION	P1,D4	; Стоимости изготовления блоков
1,35/2,27/3,36/4,37
TKont	FUNCTION	P1,D4	; Среднее время контроля на постах
1,12/2,16/3,21/4,17
BrBl	FUNCTION	P1,D4	; Доли брака блоков на постах контроля
1,.02/2,.03/3,.04/4,.06
CProv	FUNCTION	P1,D4	; Стоимости контроля блоков
1,12/2,23/3,32/4,28
TZam	FUNCTION	P1,D4	; Среднее время замены блоков
1,12/2,15/3,12/4,21
CZam	FUNCTION	P1,D4	; Стоимости замены блоков
1,34/2,46/3,38/4,54
VerBl	FUNCTION	RN339,D2 ; Вероятности брака одного или двух блоков в собранном изделии
.0,2/1,1
VerBlNum	FUNCTION	RN339,D4; Вероятность брака блока номер ...
.25,1/.5,2/.75,3/1,4
CCb	EQU	67	; Стоимость сборки изделия 
q2_	EQU	0.05	; Доля забракованных изделий на пункте выходного контроля
q4_	EQU	0.15	; Доля забракованных изделий приемкой
TipBl	EQU	4	; Мах количество типов блоков
VrMod 	EQU	2400	; Время моделирования, 1 ед. мод. вр. = 1 мин
Tc_	EQU	22	; Среднее время сборки изделия
Tp	EQU	26	; Среднее время проверки изделия
Tpr	EQU	18	; Среднее время приема изделия
CPr	EQU	53	; Стоимость приёмки изделия
CK	EQU	74	; Стоимость контроля изделия
;Задание количества пунктов сборки и постов контроля
Sb	STORAGE	2	; Количество пунктов сборки
Kontr1	STORAGE	2	; Количество постов n11
Kontr2	STORAGE	2	; Количество постов n12
Kontr3	STORAGE	2	; Количество постов n13
Kontr4	STORAGE	2	; Количество постов n14
KSb	STORAGE	3	; Количество стендов выходного контроля
KPr	STORAGE	2	; Количество пунктов приёмки

; Описание арифметических выражений
KolIzd	VARIABLE	(N$Term7/X$prog)	; Количество готовых изделий
KolGotBl	VARIABLE	((CH*1/X$Prog))	; Количество готовых блоков всех типов, оставшихся на складах
KolBrBl	VARIABLE	((X*1/X$Prog))	; Количество забракованных блоков всех типов
TIzd	VARIABLE	(AC1/X$Prog)/X$KolIzd; Среднее время подготовки одного изделия
;Сегмент имитации работы цехов без постов контроля
	GENERATE	,,,TipBl ; Число транзактов по числу типов блоков
	SAVEVALUE	Tip+,1	; Пронумеровать типы блоков
	ASSIGN	1,X$Tip	; Код в параметре транзакта - тип блока
Met20	ADVANCE	(Exponential(27,0,FN$TShop)); Розыгрыш интервала поступления блока
	SPLIT	1,Met20	; Расщепление на два 
	ASSIGN	2,(Exponential(339,0,FN$TKont))	
; Розыгрыш времени контроля и запись в Р2
	ASSIGN	9,FN$BrBl ; Запись в Р9 доли брака блоков после постов контроля
	ASSIGN	Sbor,(Exponential(339,0,Tc_)); Запись времени сборки изделия
	ASSIGN	Cost,(FN$CKom+FN$CIzg); Стоимость комплектующих+стоимость изготовления в P$Cost
; Сегмент имитации работы постов контроля блоков
Met1	QUEUE	P1 ; Встать в очередь с номером в Р1
	ENTER	P1	; Занять МКУ с номером в Р1
	DEPART	P1 ; Покинуть очередь с номером в Р1
	ADVANCE 	P2;Имитация контроля с временем в Р2
	LEAVE	P1	; Освободить МКУ с номером в Р1
	ASSIGN	Cost+,FN$CProv ; Добавить стоимость проверки
	TRANSFER	P9,,Met14 ; Отправить брак блоков к Met14
	LINK 	P1,FIFO ; Готовые блоки на склад с номером в Р1
; Сегмент имитации сборки изделий
	GENERATE	,,,1
Met3 	ASSIGN	1,TipBl	; Подготовка к циклу
	SAVEVALUE	Cost,0	; Обнуление ячейки Cost
Met13 	TEST NE	CH*1,0	; Есть ли на складе готовые блоки?
	TEST NE	P1,1,Met4  ; Если последний блок, то на Met4
	UNLINK	P1,Met32,1 ; Нет
	TRANSFER	,Met31
Met4 	UNLINK	P1,Met22,1 ; Отправить блоки на сборку
Met31	LOOP	1,Met13
	TRANSFER	,Met3	; Вернуться для проверки наличия всех типов блоков для следующего изделия
Met32	SAVEVALUE	Cost+,P$Cost	; Суммарная стоимость 2-го, 3-го и 4-го блоков
	SAVEVALUE	Cost1,X$Cost	; Суммарная стоимость 2-го, 3-го и 4-го блоков
	TRANSFER	,Term5	; Отправить 
Met22	ASSIGN	Cost+,X$Cost1	; Суммарная стоимость 1-го...4-го блоков
	SAVEVALUE	Cost2,P$Cost	; Суммарная стоимость 1-го...4-го блоков
	ASSIGN	Zam,0
Met5 	QUEUE	Sbor	; Занять очередь на пункты сборки
	ENTER	Sb	; Занять пункт сборки
	DEPART	Sbor	; Освободить очередь на пункт сборки
	ADVANCE	P$Sbor	; Имитация сборки
	LEAVE	Sb	; Освободить пункт сборки
	TEST E	P$Zam,0,Met9
	ASSIGN	Cost+,CCb	; Добавить стоимость сборки изделия	
; Сегмент имитации работы стендов выходного контроля
Met9 	QUEUE	 KSbor	; Занять очередь на стенд выходного контроля
	ENTER	KSb		; Занять стенд выходного контроля
	DEPART	KSbor	; Освободить очередь на стенд выходного контроля
	ADVANCE	(Exponential(339,0,Tp)); Имитация работы стенда выходного контроля
	LEAVE	KSb	; Освободить стенд выходного контроля
	ASSIGN	Cost+,CK	; Добавить стоимость контроля изделия
	TRANSFER	q2_,Met34,Met33	; Направить в приёмку, а брак-на подготовку к замене
; Подготовка к замене блоков
Met33	ASSIGN	KolBl,FN$VerBl	; Розыгрыш количества забракованных в изделии блоков
	ASSIGN	Sbor,0	; Обнуление параметра Sbor
Met21	ASSIGN	1,FN$VerBlNum	; Розыгрыш номера блока
	TEST NE	CH*1,0	; Есть на складе готовые блоки?
	UNLINK	P1,Met14,1	; Да. Тогда блок на замену
	ASSIGN	Sbor,(Exponential(339,0,FN$TZam)); Розыгрыш времени замены блоков
	ASSIGN	Zam,1
	ASSIGN	Cost+,FN$CZam	; Добавить стоимость замены блока
	TRANSFER	,Met5	; Отправить на пункты сборки
; Сегмент имитации работы приёмки
Met34	QUEUE	Opr	; Занять очередь в приёмку
	ENTER	KPr	; Занять приемку
	DEPART	Opr	; Освободить очередь в приёмку
	ADVANCE	(Exponential(339,0,Tpr)) ; Имитация работы приемки
	LEAVE	KPr	; Освободить приемку
	ASSIGN	Cost+,CPr	; Добавить стоимость приёмки изделия
	TRANSFER	q4_,,Met9 ; Готовые изделия - на склад
; Сегмент счёта блоков и изделий
	SAVEVALUE	CostIzd+,P$Cost
Term7	TERMINATE 	; Количество готовых изделий за все прогоны модели
Met14 	SAVEVALUE P1+,1  ; Количество забракованных блоков по типам за все прогоны модели
	ASSIGN	5,(TipBl+P1)
	SAVEVALUE	*5+,P$Cost; Стоимости забракованных блоков по типам за все прогоны модели
	SAVEVALUE	CostBr+,P$Cost	; Стоимость забракованных блоков за все прогоны модели
	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	2,(TipBl+P1)
	SAVEVALUE	P2,((X*2)/X$Prog); Стоимости забракованных блоков по типам
	SAVEVALUE	StBl+,(FN$CKom+FN$CIzg+FN$CProv); Стоимость блоков в собранном изделии
	TEST GE	P1,TipBl,Met15	; Все ли типы блоков?
	SAVEVALUE	Cmin,(X$StBl+CCb+CK+CPr) ; Минимальная стоимость одного изделия
	SAVEVALUE	MinCGotIzd,(X$Cmin#X$KolIzd) ; Минимальная стоимость всех готовых изделий
	SAVEVALUE	CostIzd,(X$CostIzd/X$Prog)	; Стоимость готовых изделий
	SAVEVALUE TIzd,V$TIzd	; Среднее время подготовки одного изделия
	SAVEVALUE	CostBr,(X$CostBr/X$Prog)	; Стоимость забракованных блоков
	SAVEVALUE	Koef,((X$CostIzd+X$CostBr)/X$MinCGotIzd); Коэффициент увеличения стоимости одного изделия
Met12	TERMINATE 1
	START	 1000

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

SAVEVALUE    RETRY       VALUE
 KOLIZD        0        121.628
 TIZD          0         19.732
 COSTBR        0       3091.787
 COSTIZD       0      74410.065
 CMIN          0        582.000
 MINCGOTIZD    0      70787.496
 KOEF          0          1.095

найдите, что за 40 часов подготовлено 121,628 изделия, а среднее время подготовки одного изделия \approx 20 мин (19,732 мин). Минимальная стоимость готовых изделий 70787,496, стоимость брака 3091,787, стоимость готовых изделий 74410,065. Минимальная стоимость одного изделия - 582. Коэффициент увеличения стоимости одного изделия составил 1,095.

Другие эксперименты будут проведены в п. 6.3. Данные этого же эксперимента внесены в Табл. 6.10.

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

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

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

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

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

entity.time_vxod=time(); 

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