Предприятие имеет $$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$$ % изделий, которые направляются вновь на стенд выходного контроля. Принятые приёмкой изделия направляются на склад предприятия.
Интервалы времени между выпусками блоков, время контроля блоков и изделий, сборки и приема изделий подчинены экспоненциальному закону.
Разработать имитационную модель функционирования предприятия при изготовлении изделий из блоков.
Исследовать влияние качества изготовления блоков и других параметров (интервалов выпуска блоков из цехов, себестоимости комплектующих, стоимости изготовления блоков, проверки, сборки и др.) на себестоимость изделий.
Сделать выводы о загруженности подразделений предприятия и необходимых мерах по снижению себестоимости продукции.
Предприятие при изготовлении блоков и сборки из них изделий может быть представлено как многофазная многоканальная разомкнутая система массового обслуживания с ожиданием, так как оно имеет все ее элементы (Рис. 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 используется в режиме, который рекомендуется избегать вследствие того, что проверяемое условие может не выполниться. Однако здесь этого не должно быть, так как в противном случае будут отсутствовать готовые блоки для сборки изделий. По мере готовности блоков условие обязательно выполняется и блоки - транзакты направляются на сборку. Первые три транзакта уничтожаются, а четвертый транзакт имитирует собранное из четырех блоков изделие. Он направляется для проверки работоспособности на пункт приема изделий.
В программе использование МКУ и списков пользователя демонстрируется применением номеров МКУ вместо их имен. Этот метод дает возможность иметь в модели один сегмент имитации работы постов контроля блоков вместо подобного сегмента для каждого цеха, т. е. сократить число блоков в модели.
Обратите внимание, что в программе присвоение номеров именам МКУ указывается в самом начале и только потом, не обязательно следом, определение МКУ командой 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.1), должна состоять из следующих сегментов:
Блоки и изделия в модели следует имитировать заявками со следующими полями (параметрами):
block - номер цеха (коды 1…4 соответственно), выпустившего блок;
sign1 - признак брака на постах контроля блоков, стендах контроля изделий и на пунктах приема изделий;
numBlBrak1 … numBlBrak4 - признаки забракованных блоков 1…4 соответственно;
timeSbor - время сборки изделия (замены блоков);
cost - стоимость готового изделия.Указанные поля предназначены для отслеживания технического состояния блоков и изделий и в зависимости от этого прохождения их по фазам изготовления изделия.
Поле timSbor введено для удобства построения модели. В это поле заносится либо время сборки изделия из четырех блоков, либо время замены каких-либо забракованных блоков в уже собранном изделии.
Стоимость изготовления изделия может возрасти по сравнению с минимальной стоимостью (CMIN) за счёт выявления брака и замены блоков. Для фиксации этой стоимости введено поле cost.
Для обеспечения работы модели вводятся следующие параметры процесса изготовления изделий из блоков:
aveTimeShop1…aveTimeShop4 - средние интервалы времени выпуска блоков 1…4 цехами 1…4;
stKomplBlock1…stKomplBlock4 - стоимости комплектующих блоков 1…4;
stIzgBlock1…stIzgBlock4 - стоимость изготовления блоков 1…4;
postKontr1…postKontr4 - количество постов контроля блоков 1…4;
procBrakBlock1…procBrakBlock4 - проценты брака блоков 1…4 на постах контроля блоков;
stTestBlock1…stTestBlock4 - стоимости тестирования (одного блока) блоков 1…4;
kolPunSborki - количество пунктов сборки изделий;
timeSborki - среднее время сборки одного изделия;
stSborki - стоимость сборки одного изделия;
kolStendKontr - количество стендов контроля собранных изделий;
timeKontrIzd - среднее время контроля на стенде одного собранного изделия;
procBrakIzd - процент брака собранных изделий на стендах контроля;
stKontrIzd - стоимость контроля на стенде одного собранного изделия;
verBlock1 - вероятность того, что забракованным в уже собранном изделии окажется один блок;
verBlock2 - вероятность того, что забракованными в уже собранном изделии окажутся два блока;
verBlNum1…verBlNum4 - вероятности брака на стенде контроля блоков 1…4;
timeZamBlock1… timeZamBlock4 - среднее время замены (одного блока) блоков 1…4;
stZamBlock1…stZamBlock4 - стоимость замены (одного блока) блоков 1…4;
kolPunPriem - количество пунктов приема изделий, прошедших пункты контроля;
timePriemIzd - среднее время приема одного изделия;
procBrakPriem - процент брака изделий на пунктах приема изделий;
stPriemIzd - стоимость приема одного изделия.В ходе моделирования на основе приведенных исходных данных формируется и выводится на текущее модельное время следующая информация:
kolIzBlock1…kolIzBlock4 - количество изготовленных блоков 1…4;
kolTestBlock1…kolTestBlock4 - количество протестированных блоков 1…4 (как исправных, так и забракованных);
brakBlock1…brakBlock4 - количество забракованных на постах контроля блоков 1…4;
gotBlock1…gotBlock4 - количество изготовленных всего готовых блоков 1…4;
ostGotBlock1…ostGotBlock4 - количество оставшихся готовых блоков 1…4;
kolSobrIzd, testSobrIzd, brakSobrIzd - количество собранных на пунктах сборки изделий, проверенных и забракованных на стендах контроля;
kolPriemIzd, brakPriemIzd - количество принятых и забракованных приемкой изделий соответственно;
zamBlock1…zamBlock4 - количество замененных блоков 1…4, забракованных на стендах контроля и пунктах приема изделий;
allBrakBlock1…allBrakBlock4 - всего забракованных блоков 1…4;
minCostIzd - минимальная стоимость одного изделия;
минСтоимГотИзд - минимальная стоимость готовых изделий;
колГотИзд - количество готовых изделий, отправленных на склад.На текущее модельное время собирается статистика по следующим стоимостным показателям функционирования предприятия:
costKomplBlock1…costKomplBlock4,costKomplBlock - стоимости комплектующих блоков 1…4 и суммарная стоимость комплектующих всех блоков;
costIzgBlock1…costIzgBlock4,costIzgBlock - стоимости изготовления блоков 1…4 и суммарная стоимость изготовления всех блоков (без учета стоимости тестирования блоков);
CostBlock1…CostBlock4 - стоимости изготовления блоков 1…4 с учётом тестирования;
sumCostBlock1…sumCostBlock4, sumCostBlock - суммарные стоимости изготовления блоков 1…4 с учётом тестирования и суммарная стоимость изготовления всех блоков;
costTestBlock1…costTestBlock4,costTestBlock - стоимости тестирования блоков 1…4 на постах контроля и суммарная стоимость тестирования всех блоков;
costSborIzd, costTestIzd, costPriemIzd - стоимости сборки, проверки и приемки изделий;
стоимБракБл - суммарные затраты на все забракованные блоки;
стоимГотИзд - затраты на выпуск готовых изделий;
costBlockIzd - стоимость блоков одного изделия;
costIzd - стоимость одного изделия;
времяИзгИзд - среднее время изготовления одного изделия;
коэфУвелСтоимИзд - коэффициент увеличения себестоимости изделия.Минимальная стоимость изделий будет тогда, когда не будет бракованных блоков и изделий. В терминах постановки задачи это условие имеет вид:
$$C_{min}=C_{minизд} \cdot N_{изд},$$где N_{изд} - количество готовых изделий (поступивших на склад);
$$C_{minизд}$$ - минимальная себестоимость производства одного изделия, вычисляется по формуле:
$$C_{изд}=\sum_{i=1}^{n1}(C_{кi}+C_{изгi}+C_{прi})+C_{сб}+C_{к}+C_{п}.$$Собирается также статистика о коэффициентах загрузки подразделений предприятия.
В случае наличия брака себестоимость производимой продукции увеличится и составит $$C_{max}$$. То есть коэффициент увеличения себестоимости будет равен
$$K_c=C_{max}/C_{min}.$$Запишем в идентификаторах исходных данных и результатов моделирования то же самое:
$$costBlock1=stKomplBlock1+stIzqBlock1+stTestBlock1;$$ $$costBlock2=stKomplBlock2+stIzqBlock2+stTestBlock2;$$ $$costBlock3=stKomplBlock3+stIzqBlock3+stTestBlock3;$$ $$costBlock4=stKomplBlock4+stIzqBlock4+stTestBlock4;$$ $$costBlockIzd=costBlock1+costBlock2+costBlock3+costBlock4;$$ $$C_{min изд}=costBlockIzd+stSborki+stKontrIzd+stPriemIzd;$$ $$C_{min}=C_{min изд} \cdot колГотИзд; C_{max}= стоимГотИзд + стоимБракБл.$$ $$K_c = коэфУвелСтоимИзд = \frac{C_{max}}{C_{min}}.$$Для ввода исходных данных используем элемент Параметр.
Файл/Создать/Модель на панели инструментов.
Имя модели диалогового окна Новая модель введите Предприятие.
Готово.
Палитре выделите Презентация. Создайте область просмотра Данные для размещения элементов исходных данных.
Область просмотра. В поле Имя: введите Данные.
Местоположение и размер панели Свойства введите в поля X: 0, Y: 1700, Ширина: 760, Высота: 330.
Прямоугольник. Оставьте имя, предложенное системой.
Местоположение и размер панели Свойства введите в поля X: 10, Y: 1750, Ширина: 740, Высота: 270.
text и на странице Основные панели Свойства в поле Текст: вместо слова text введите Исходные данные.
Палитре выделите Основная. Перетащите элементы Параметр на элемент с именем Исходные данные. Разместите их так, как показано на Рис. 6.2. Значения свойств установите согласно Табл. 6.1.| Элементы и их свойства | |||||
|---|---|---|---|---|---|
| Параметр | Параметр | ||||
| Имя | Тип | Значение по умолчанию | Имя | Тип | Значение по умолчанию |
| aveTimeShop1 | double | 19 | stKomplBlock1 | double | 35 |
| aveTimeShop2 | double | 11 | stKomplBlock2 | double | 32 |
| aveTimeShop3 | double | 15 | stKomplBlock3 | double | 43 |
| aveTimeShop4 | double | 18 | stKomplBlock4 | double | 48 |
| stIzgBlock1 | double | 35 | timeTestBlock1 | double | 12 |
| stIzgBlock2 | double | 27 | timeTestBlock2 | double | 16 |
| stIzgBlock3 | double | 36 | timeTestBlock3 | double | 21 |
| stIzgBlock4 | double | 37 | timeTestBlock4 | double | 17 |
| postKontr1 | int | 2 | procBrakBlock1 | double | 0,02 |
| postKontr2 | int | 2 | procBrakBlock2 | double | 0,03 |
| postKontr3 | int | 2 | procBrakBlock3 | double | 0,04 |
| postKontr4 | int | 2 | procBrakBlock4 | double | 0,06 |
| stTestBlock1 | double | 12 | kolStendKontrIzd | int | 2 |
| stTestBlock2 | double | 23 | timeKontrIzd | double | 26 |
| stTestBlock3 | double | 32 | procBrakIzd | double | 0,05 |
| stTestBlock4 | double | 28 | stKontrIzd | double | 74 |
| kolPunSborki | int | 2 | verBlock1 | double | 0,9999 |
| timeSborki | double | 22 | verBlock2 | double | 0,999999 |
| stSborki | double | 67 | |||
| verBlockNum1 | double | 0,25 | timeZamBlock1 | double | 12 |
| verBlockNum2 | double | 0,25 | timeZamBlock2 | double | 15 |
| verBlockNum3 | double | 0,25 | timeZamBlock3 | double | 12 |
| verBlockNum4 | double | 0,25 | timeZamBlock4 | double | 21 |
| stZamBlock1 | double | 34 | kolPunPriem | int | 2 |
| stZamBlock2 | double | 46 | timePriemIzd | double | 18 |
| stZamBlock3 | double | 38 | procBrakPriem | double | 0,15 |
| stZamBlock4 | double | 54 | stPriemIzd | double | 53 |
(рис 6.2) Размещение элементов Параметр для ввода исходных данных
Для вывода результатов моделирования используем элемент Переменная. Для удобства обозрения и анализа результатов моделирования разделим их на две группы. В первую группу включим данные о количестве подготовленных и забракованных блоков и изделий, во вторую группу - стоимостные показатели функционирования предприятия.
Результаты для размещения элементов Переменная.
Область просмотра. В поле Имя: введите Результаты.
Местоположение и размер панели Свойства введите в поля X: 0, Y: 700, Ширина: 700, Высота: 520.
Скруглённый прямоугольник. Оставьте имя, предложенное системой.
Местоположение и размер панели Свойства введите в поля X: 10, Y: 750, Ширина: 690, Высота: 450.
text и на панели Свойства в поле Текст: введите Данные о количестве подготовленных и забракованных блоков и изделий.
text и введите Стоимостные показатели функционирования предприятия.
text и в поле Текст: введите Показатели использования пунктов предприятия.
Палитре выделите Основная. Перетащите элементы Переменная. Используйте копирование. Разместите их и дайте им имена так, как показано на Рис. 6.3. Тип всех переменных, используемых для вывода количества подготовленных и забракованных блоков и изделий на текущее модельное время - int. Тип переменных для вывода стоимостных показателей работы предприятия и показателей использования его пунктов - double.
Выравнивание. Не поддерживается выравнивание элементов диаграмм состояний и диаграмм действий, потому что при выравнивании таких элементов может нарушиться логика модели.
(рис 6.3) Размещение элементов Переменная для вывода результатов моделирования
В событийную часть модели включим указанные ранее сегменты согласно представлению предприятия как системы массового обслуживания (см. Рис. 6.1).
Модель будет содержать три активных объекта, элементы которых не могут физически вместиться в область диаграммы в окне презентации при выполнении модели, поэтому используем для каждого активного объекта элемент область просмотра. В дальнейщем после построения всех сегментов событийной части модели организуем переключение между областями просмотра.
Создайте область просмотра для размещения сегментов событийной части модели на диаграмме класса Main.
Палитре выделите Презентация. Перетащите элемент Область просмотра.
Основные панели Свойства.
Имя: введите Mainview.
Местоположение и размер панели Свойства введите в поля X: 0, Y: 0, Ширина: 990, Высота: 390.
Скруглённый прямоугольник. В нём мы разместим все сегменты модели. Оставьте имя, предложенное системой.
Местоположение и размер панели Свойства введите в поля X: 10, Y: 60, Ширина: 970, Высота: 320.
Скруглённый прямоугольник, укажите имена сегментов и свойства согласно Табл. 6.2. Шрифт, цвет и т.д. выберите по своему усмотрению.| Сегмент | Свойства | |||
|---|---|---|---|---|
| Х: | Y: | Ширина: | Высота: | |
| Цеха | 20 | 80 | 140 | 270 |
| Посты контроля блоков | 170 | 80 | 160 | 270 |
| Пункты сборки изделий | 340 | 80 | 120 | 270 |
| Стенды контроля изделий | 470 | 80 | 150 | 270 |
| Пункты приёма изделий | 630 | 80 | 170 | 270 |
| Склад готовых изделий | 810 | 80 | 160 | 130 |
| Склад бракованных изделий | 810 | 220 | 160 | 130 |
(рис 6.4) Размещение сегментов модели
Данный сегмент предназначен для имитации работы цехов, то есть изготовления и выпуска блоков через случайные интервалы времени, счёта количества изготовленных блоков, стоимости комплектующих изготовленных блоков по типам и за предприятие, стоимости изготовления блоков по типам и суммарной стоимости за предприятие.
Библиотеки моделирования процессов перетащите объект sourсe на агент Main и разместите в скругленном прямоугольнике с именем Цеха.
Product.
Проект щёлкните правой кнопкой мыши элемент модели верхнего уровня дерева и выберите в меню Создать Java класс.
Новый Java класс. В поле Имя: введите имя нового класса Product.
Базовый класс: выберите из выпадающего списка Entity в качестве базового класса. Щёлкните кнопку Далее.
Мастера создания Java класса. Добавьте следующие поля Java класса, которые потребуются в дальнейшем при разработке модели:
int numBlock; int sign1; int numBlBrak1; int numBlBrak2; int numBlBrak3; int numBlBrak4; double timeSbor; double cost;
Создать конструктор и Создать метод toString().
Готово. Появится редактор кода и автоматически созданный код вашего Java класса. Закройте код.
Проект только что созданный Java класс и в контекстном меню выберите Преобразовать Java класс в тип агента.
source. На странице Основные панели Свойства установите свойства согласно Табл. 6.3.
| Имя | Свойства | Значения |
|---|---|---|
| Цех1 | Отображать имя | Установите флажок |
| Тип заявки | Product | |
| Прибывают согласно | Времени между прибытиями | |
| Время между прибытиями | exponential(1/aveTimeShop1) | |
| Новая заявка | Product | |
| Действия При выходе: | if (a==0){costBlock1=stKomplBlock1+stIzgBlock1+stTestBlock1; | |
| costBlock2=stKomplBlock2+stIzgBlock2+stTestBlock2; | ||
| costBlock3=stKomplBlock3+stIzgBlock3+stTestBlock3; | ||
| costBlock4=stKomplBlock4+stIzgBlock4+stTestBlock4; | ||
| costBlockIzd=costBlock1+costBlock2+costBlock3+costBlock4; | ||
| minCostIzd=costBlockIzd+stSborki+ | ||
| stKontrIzd+stPriemIzd; | ||
| a=1;} | ||
| kolIzgBlock1++; | ||
| entity.numBlock = 1; | ||
| entity.timeSbor = exponential(1/timeSborki); | ||
| costKomplBlock1 += stKomplBlock1; | ||
| costKomplBlock += stKomplBlock1; | ||
| costIzgBlock1 += stIzgBlock1; | ||
| sumCostBlock1 += (stKomplBlock1+stIzgBlock1); | ||
| costIzgBlock += stIzgBlock1; | ||
| sumCostBlock += stKomplBlock1+stIzgBlock1); | ||
| цех2 | Отображать имя | Установите флажок |
| Тип заявки | Product | |
| Прибывают согласно | Времени между прибытиями | |
| Время между прибытиями | exponential(1/aveTimeShop2) | |
| Новая заявка | Product | |
| Действия При выходе: | kolIzgBlock2++; | |
| entity.numBlock = 2; | ||
| costKomplBlock2 += stKomplBlock2; | ||
| costKomplBlock += stKomplBlock2; | ||
| costIzgBlock2 += stIzgBlock2; | ||
| sumCostBlock2 += (stKomplBlock2+stIzgBlock2); | ||
| costIzgBlock += stIzgBlock2; | ||
| sumCostBlock += (stKomplBlock2+stIzgBlock2); | ||
| цех3 | Отображать имя | Установите флажок |
| Тип заявки | Product | |
| Прибывают согласно | Времени между прибытиями | |
| Время между прибытиями | exponential(1/aveTimeShop3) | |
| Новая заявка | Product | |
| Действия При выходе: | kolIzgBlock3++; | |
| entity.numBlock = 3; | ||
| costKomplBlock3 += stKomplBlock3; | ||
| costKomplBlock += stKomplBlock3; | ||
| costIzgBlock3 += stIzgBlock3; | ||
| sumCostBlock3 += (stKomplBlock3+stIzgBlock3); | ||
| costIzgBlock += stIzgBlock3; | ||
| sumCostBlock += (stKomplBlock3+stIzgBlock3); | ||
| цех4 | Отображать имя | Установите флажок |
| Тип заявки | Product | |
| Прибывают согласно | Времени между прибытиями | |
| Время между прибытиями | exponential(1/aveTimeShop4) | |
| Новая заявка | Product | |
| Действия При выходе: | kolIzgBlock4++; | |
| entity.numBlock = 4; | ||
| costKomplBlock4 += stKomplBlock4; | ||
| costKomplBlock += stKomplBlock4; | ||
| costIzgBlock4 += stIzgBlock4; | ||
| sumCostBlock4 += (stKomplBlock4+stIzgBlock4); | ||
| costIzgBlock += stIzgBlock4; | ||
| sumCostBlock += (stKomplBlock4+stIzgBlock4); |
source правой кнопкой мыши и в контекстном меню выберите Копировать.
Цеха еще три объекта source. Разместите их вертикально один под другим. Во время вставки имена объектов будут изменяться: цех2, цех3, цех4. Однако остальные свойства останутся такими же, как и у объекта цех1.
source, скорректируйте их свойства также согласно Табл. 6.3.Каждый цех имеет посты контроля блоков одного типа. Посты контроля предназначены для приема блоков из цеха, тестирования их, отправки исправных блоков на пункты сборки изделий, а брака - на склад забракованных блоков.
Для размещения объектов, имитирующих работу постов контроля блоков, создайте новый тип агента Тест.
Проект щёлкните Main правой кнопкой мыши и выберите из контекстного меню Создать/Тип агента. Откроется окно Шаг 1. Создание нового типа агента.
Имя: задайте имя нового типа агента Тест.
Готово.Создайте область просмотра на диаграмме агента Тест для размещения объектов сегмента Посты контроля блоков.
Палитре выделите Презентация. Перетащите элемент Область просмотра.
Основные панели Свойства.
Имя: введите Kontr1.
Местоположение и размер панели Свойства введите в поля X: 0, Y: 0, Ширина: 590, Высота: 390.Согласно указанному ранее назначению постов контроля блоков нужно сделать так, чтобы четыре типа блоков передавались из цехов на свои посты контроля, четыре типа тестированных и исправных блоков поступали на пункты сборки изделий, а четыре типа забракованных блоков - на склад забракованных блоков.
Создайте экземпляр нового типа агента Тест.
Основная перетащите элемент Порт и разместите сверху в крайнем левом ряду (Рис. 6.5).
(рис 6.5) Размещение элементов Порт на экземпляре агента Тест
Основные панели Свойства имя port замените именем Блок1.
Порт с именем Блок1.
Порт (см. Рис. 6.5). При вставке последовательно будут изменяться их имена: Блок2, Блок3, Блок4.
Основная перетащите элемент Порт и разместите сверху в среднем ряду (см. Рис. 6.5).
Основные панели Свойства имя port замените именем БракБл1.
Порт с именем БракБл1.
Порт (см. Рис. 6.5). При вставке последовательно будут изменяться их имена: БракБл2, БракБл3, БракБл4.
Основная перетащите элемент Порт и разместите сверху в крайнем правом ряду (см. Рис. 6.5).
Основные панели Свойства имя port замените именем ГотБл1.
Порт с именем ГотБл1.
Порт (см. Рис. 6.5). При вставке последовательно будут изменяться их имена: ГотБл2, ГотБл3, ГотБл4.
Порт они автоматически будут объединяться прямоугольником (с пунктирными линиями) и появится надпись Значок.
Проект выделите Тест, перетащите на диаграмму Main экземпляр агента Тест, разместите и соедините так, как на Рис. 6.6. Порты БракБл1…БракБл4 соедините с объектом sink сегмента Склад бракованных блоков, предварительно разместив его там.
Тест создан. Возвратитесь на диаграмму агента Тест.Для имитации работы постов контроля блоков одного типа (одного цеха) нам потребуются объекты:
queue - имитация склада изготовленных цехом блоков;
delay - имитация времени тестирования блока;
selectOutPut - имитация процесса браковки блоков.
(рис 6.6) Добавлен элемент диаграммы класса TestСкруглённый прямоугольник. В нём мы разместим все объекты сегмента имитации работы постов контроля блоков. Оставьте имя, предложенное системой.
Местоположение и размер панели Свойства введите в поля X: 10, Y: 50, Ширина: 570, Высота: 330.Добавьте на диаграмму агента Тест объекты класса Queue.
Библиотеки моделирования процессов перетащите объект queue и разместите слева сверху, как на Рис. 6.7.
Основные панели Свойства замените имя queue именем склИзгБл1 (склад изготовленных блоков цеха 1).
Тип заявки: Entity замените Product.
Вместимость: Максимальная.
склИзгБл1.
Добавьте на диаграмму класса Test объекты класса Delay.
delay и поместите справа рядом с объектом склИзгБл1, как на Рис. 6.7.
(рис 6.7) Размещение элементов на диаграмме агента Тест
Основные панели Свойства замените имя delay именем постКонтрБлок1 (посты контроля блоков цеха 1).
Тип заявки: Agent замените Product.
Время задержки: exponential (1/main.timeTestBlock1).
main.postKontr1 в поле Вместимость:.
Действия При выходе:
main.kolTestBlock1++; main.sumCostBlock1 += main.stTestBlock1; main.costTestBlock1 += main.stTestBlock1; main.costTestBlock += main.stTestBlock1; main.sumCostBlock += main.stTestBlock1;
постКонтрБлок1.
delay (см. Рис. 6.7).
Действия При выходе.| Имя | Время задержки | Вместимость |
|---|---|---|
| постКонтрБлок2 | exponential(1/main.timeTestBlock2) | main.postKontr2 |
| постКонтрБлок3 | exponential(1/main.timeTestBlock3) | main.postKontr3 |
| постКонтрБлок4 | exponential(1/main.timeTestBlock4) | main.postKontr4 |
Добавьте на диаграмму Тест объекты класса SelectOutput.
selectOutput и разместите справа рядом с объектом постКонтрБлок1, как на Рис. 6.7.
Основные панели Свойства замените имя selectOutPut именем ОтбракБлок1 (отбраковка блоков цеха 1).
ОтбракБлок1.
SelectOutput (см. Рис. 6.7).
Тест согласно Рис. 6.7.
Код в свойство Действия При выходе (true) введен для учёта, например, для цеха 1:
gotBlock1 - количества готовых блоков цеха 1.Код в свойстве Действия При выходе (false) обеспечивает счёт количества brakBlock1 забракованных блоков цеха 1.
| Свойства | Значение |
|---|---|
| Имя | ОтбракБлок1 |
| Тип заявки | Product |
| Выход true выбирается | Заданной вероятностью |
| Вероятность: | 1-main.procBrakBlock1 |
| Действия При выходе (true) | main.gotBlock1++; |
| main.brakBlock1++; | |
| Действия При выходе (false) | entity.sign1 = 1; |
| entity.numBlBrak1 = 1; | |
| Имя | ОтбракБлок2 |
| Тип заявки | Product |
| Выход true выбирается | Заданной вероятностью |
| Вероятность: | 1-main.procBrakBlock2 |
| Действия При выходе (true) | main.gotBlock2++; |
| main.brakBlock2++; | |
| Действия При выходе (false) | entity.sign1 = 1; |
| entity.numBlBrak2 = 1; | |
| Имя | ОтбракБлок3 |
| Тип заявки | Product |
| Выход true выбирается | Заданной вероятностью |
| Вероятность: | 1-main.procBrakBlock3 |
| Действия При выходе (true) | main.gotBlock3++; |
| main.brakBlock3++; | |
| Действия При выходе (false) | entity.sign1 = 1; |
| entity.numBlBrak3 = 1; | |
| Имя | ОтбракБлок4 |
| Тип заявки | Product |
| Выход true выбирается | Заданной вероятностью |
| Вероятность: | 1-main.procBrakBlock4 |
| Действия При выходе (true) | main.gotBlock4++; |
| main.brakBlock4++; | |
| Действия При выходе (false) | entity.sign1 = 1; |
| entity.numBlBrak4 = 1; |
В поле entity.sign1 записывается 1 - признак брака на постах контроля, а также единица записывается в поле entity.numBlock1 … entity.numBlock4. Это нужно для раздельного счёта забракованных блоков.
Перейдите на агента Main.
Пункты сборки изделий предназначены для приема прошедших тестирование блоков с постов контроля, сборки изделий из блоков, замены забракованных блоков и отправки их на склад забракованных блоков.
Для размещения объектов имитации работы пунктов сборки изделий создайте новый тип агента Сборка.
Проект щёлкните Main правой кнопкой мыши и выберите из контекстного меню Создать/Тип агента.
Шаг 1. Создание нового типа агента.
Имя: задайте имя Сборка.
Готово.Создайте область просмотра на диаграмме агента Сборка для размещения объектов сегмента Пункты сборки изделий.
Палитре выделите Презентация. Перетащите элемент Область просмотра.
Основные панели Свойства.
Имя: введите Sbor.
Местоположение и размер панели Свойства введите в поля X: 0, Y: 0, Ширина: 820, Высота: 550.
Скруглённый прямоугольник. В нём мы разместим все элементы сегмента. Оставьте имя, предложенное системой.
Местоположение и размер панели Свойства введите в поля X: 10, Y: 60, Ширина: 800, Высота: 480.Согласно назначению пунктов сборки изделий для связи их с другими сегментами модели необходимо иметь:
Основная перетащите элемент Порт и разместите сверху в крайнем левом ряду (Рис. 6.8).
Основные панели Свойства имя port замените именем ГотБлок1.
Порт с именем ГотБлок1.
Порт (см. Рис. 6.8). При вставке последовательно будут изменяться их имена: ГотБлок2, ГотБлок3, ГотБлок4.
Основная перетащите еще три элемента Порт, разместите их и дайте имена как на Рис. 6.8.
Проект выделите Сборка, перетащите на диаграмму агента Main экземпляр сборка, разместите и соедините так, как на Рис. 6.9. Порт БракБл соедините с объектом sink сегмента Склад бракованных блоков.
Сборка создан. Возвратитесь на диаграмму агента Сборка.Для реализации сегмента имитации работы пунктов сборки изделий нам потребуются объекты, но прежде мы рассмотрим вариант построения этого сегмента.
(рис 6.8) Размещение элементов Порт на диагрпмме агента Сборка
(рис 6.9) Добавлен экземпляр агента Сборка
Сборка изделия начинается тогда, когда будут готовы четыре блока (по одному каждого из четырех типов). Полагаем, что время готовности блоков различное. Значит, нужно использовать такие объекты AnyLogic, которые предназначены для синхронизации движения заявок (блоков). Объекты класса Match предназначены именно для синхронизации движения двух заявок.
После готовности четырех блоков для дальнейщей имитации процесса сборки нужно эти четыре заявки объединить в одну, и интерпретировать её как изделие. В AnyLogic имеются объекты некоторых классов, которые позволяют осуществить нужное нам объединение. Применим объекты класса Combine, позволяющие из двух заявок получить одну.
Процесс объединения будет происходить по мере готовности блоков, значит, на пункте сборки будет создаваться очередь, для имитации которой нужно использовать объект queue.
Для имитации непосредственно процесса сборки следует взять объект delay, а для разделения потока изделий на собранные первично и на изделия с заменными блоками после браковки - объект selectOutPut.
Реализуйте часть сегмента имитации работы пунктов сборки.
Прямоугольник. Оставьте имя, предложенное системой.
Местоположение и размер панели Свойства введите в поля X: 320, Y: 80, Ширина: 340, Высота: 230.
Библиотеки моделирования процессов перетащите четыре объекта match и три объекта combine. Расположите и соедините их так, как на Рис. 6.10.
queue, delay, selectOutPut, разместите, соедините и дайте им имена также согласно Рис. 6.10.Поочередно выделите каждый из этих объектов и на страницах Основные панели Свойства установите для:
match…match3:Типы заявок: Вход1, Вход2: Product, Product
Условия соответствия true
Максимальная вместимость 1
Максимальная вместимость 2combine…combine2:Типы заявок: Вход1, Вход2, Выход: Product, Product, Product
Объединенная заявка entity1queue:Тип заявки: Product
Максимальная вместимостьselectOutPut:Тип заявки: Product
Выход true выбирается При выполнении условия
Условие entity.sign1 == 0Объекты match и match1 обеспечивают синхронизацию движения блоков 1 и 2, 3 и 4 соответственно. А объекты match2 и match3 - блоков 1 и 3, 2 и 4 соответственно. Таким образом, обеспечивается синхронизация движения четырех блоков.
Указание свойства entity1 в объектах combine…combine2 позволяет получить на выходе сначала combine, а потом combine2 заявку, имитирующую изначально блок 1. Но теперь эта заявка будет имитировать изделие. Поэтому только для неё ранее было определено значение поля entity.timeSbor (см. Табл. 6.3).
Изделия после элемента пунктСборки разделяются на два потока: собранные изделия первично (entity.sign1=0) и изделия с заменёнными блоками (entity.sign1=2).
(рис 6.10) Фрагмент сегмента имитации работы пункта сборки
Разделение, осуществляемое объектом selectOutPut по условию entity.sign1==0, нужно для учёта количества изделий с заменёнными блоками и количества заменённых блоков.
Свойства объекта delay установите согласно Табл. 6.6.
| Имя | Свойства | Значения |
|---|---|---|
| пунктборки | Отображать имя | Установите флажок |
| Тип заявки | Product | |
| Задержка задаётся | Определённое время | |
| Время задержки | entity.timeSbor | |
| Вместимость | main.kolPunSborki | |
| Действия При выходе | if (entity.sign1 == 0) | |
| {main.kolSobrIzd++; | ||
| main.costSborIzd += main.stSborki; | ||
| entity.cost += main.stSborki;} | ||
| if (entity.sign1 == 2) | ||
| {if (entity.numBlBrak1== 1) | ||
| {main.zamBlock1++; | ||
| entity.cost += main.stZamBlock1; | ||
| main.costSborIzd += main.stZamBlock1;} | ||
| if (entity.numBlBrak2 == 1) | ||
| {main.zamBlock2++; | ||
| entity.cost += main.stZamBlock2; | ||
| main.costSborIzd += main.stZamBlock2;} | ||
| if (entity.numBlBrak3 == 1) | ||
| {main.zamBlock3++; | ||
| entity.cost += main.stZamBlock3; | ||
| main.costSborIzd += main.stZamBlock3;} | ||
| if (entity.numBlBrak4 == 1) | ||
| {main.zamBlock4++; | ||
| entity.cost += main.stZamBlock4; | ||
| main.costSborIzd += main.stZamBlock4;} | ||
| main.kolZamIzd++;} |
Продолжим построение сегмента имитации работы пунктов сборки изделий (Рис. 6.11).
(рис 6.11) Сегмент имитации работы пунктов сборки изделий
Бракованные изделия поступают через порт БракИзд. В заявке, имитирующей такое изделие, поле etity.sign1 = 2. В одном из полей etity.numBlBrak1 … etity.numBlBrak4 этой же заявки также записана единица. Запись произведена при отбраковке на стендах контроля или пунктах приёма изделий. Это мы сделаем (запишем) позже при построении этих сегментов. Для определения, какой из блоков 1 … 4 забракован в изделии, нужно использовать объект selectOutput5. Этот объект в отличие от объекта selectOutput позволяет проверять четыре условия и в зависимости от результата проверки направляет заявку на один из пяти выходов (можно создать объект selectOutput(N) на один вход и N выходов, использовав один объект exit и N объектов enter).
Готовые блоки поступают через порты ГотБл1 … ГотБл4. Поэтому их надо было бы соединить с соответствующими входами объектов match … match1. Но в забракованном изделии нужно заменить какой-то из блоков. Значит, в случае наличия забракованного изделия надо направить из поступающих блоков соответствующий блок на замену. Сделать это можно с использованием объектов selectOutPut. Каждый порт ГотБл1 … ГотБл4 соединить с входом соответствующего объекта selectOutPut. Выходы true этих объектов соединить с соответсвующими входами объектов match … match1. Таким образом, с выходов true готовые блоки будут направляться для первичной сборки изделий, а с выходов false - для замены бракованных блоков. В качестве условия разделения потоков можно использовать простые переменные БрИздБл1 … БрИздБл4. Например, если БрИздБл2 $$\neq$$ 0, то имеется забракованное изделие с блоком 2.
Для дальнейшей реализации процесса замены блока нужно объединить две заявки - имитирующую забракованное изделие и имитирующую блок для замены - в одну заявку. Для объединения двух заявок в одну воспользуйтесь уже известными вам объектами combine. Выходы объекта selectOutput5 соединить с входами delay, а выход каждого из них - с первыми входами объектов combine.
С выходов объектов combine заявки, имитирующие изделия для замены блоков, направляются в очередь очерСбИзд на входе непосредственно пунктов сборки изделий пунктСборки.
Как уже отмечалось ранее, изделия после пунктов сборки разделяются на два потока.
Собранные первично изделия с выхода true объекта selectOutPut направляются на стенды контроля, поэтому этот выход нужно соединить с портом СобрИзд.
Изделие с заменённым блоком нужно вновь направить на стенды контроля. В тоже время его нужно учесть, как забракованный блок и отправить на склад забракованных блоков. Значит, необходимо из одной заявки сделать две. Для этого используйте объект split. Один выход этого объекта соедините с портом БракБл, а другой - с портом СобрИзд.
Выполните изложенные рекомендации практически. Перетащите четыре объекта класса SelectOutPut (или перетащите один объект, а остальные три скопируйте), один объект класса SelectOutPut5, четыре объекта классов Queue и Combine, один объект класса Split и четыре простых переменных. Разместите, дайте им имена и соедините так, как на Рис. 6.11.
Поочередно выделите новые объекты и установите их свойства согласно Табл. 6.7.
| Свойства | Значение |
|---|---|
| selectOutPut … selectOutPut3 | |
| Имя | ГотБлок1 |
| Выход true выбирается | При выполнении условия |
| Условие | БракИздБл1 == 0 |
| Имя | ГотБлок2 |
| Выход true выбирается | При выполнении условия |
| Условие | БракИздБл2 == 0 |
| Имя | ГотБлок3 |
| Выход true выбирается | При выполнении условия |
| Условие | БракИздБл3 == 0 |
| Имя | ГотБлок4 |
| Выход true выбирается | При выполнении условия |
| Условие | БракИздБл4 == 0 |
| selectOutput5 | |
| Имя | БракИзделия |
| Использовать | Условия |
| Условие 0 | entity.numBlBrak1 == 1 |
| Условие 1 | entity.numBlBrak2 == 1 |
| Условие 2 | entity.numBlBrak3 == 1 |
| Условие 3 | entity.numBlBrak4 == 1 |
| match | |
| Имя | синхрБлок_1_2 |
| Типы заявок: Вход1, Вход2: | Product, Product |
| Условие соответствия | true |
| Максимальная вместимость 1 | Установить флажок |
| Максимальная вместимость 2 | Установить флажок |
| Имя | синхрБлок_3_4 |
| Типы заявок: Вход1, Вход2: | Product, Product |
| Условие соответствия | true |
| Максимальная вместимость 1 | Установить флажок |
| Максимальная вместимость 2 | Установить флажок |
| Имя | синхрБлок_1_3 |
| Типы заявок: Вход1, Вход2: | Product, Product |
| Условие соответствия | true |
| Максимальная вместимость 1 | Установить флажок |
| Максимальная вместимость 2 | Установить флажок |
| Имя | синхрБлок_2_4 |
| Типы заявок: Вход1, Вход2: | Product, Product |
| Условие соответствия | true |
| Максимальная вместимость 1 | Установить флажок |
| Максимальная вместимость 2 | Установить флажок |
| combine | |
| Имя | издБлок1 |
| Типы заявок: Вход1, Вход2, Выход | Product, Product, Product |
| Действие при входе 1 | if (entity.numBlBrak1 == 1) |
| БрИздБл1 ++; | |
| Объединенная заявка | entity1 |
| Действия При выходе | if (entity.numBlBrak1 == 1) |
| БрИздБл1 --; | |
| entity.cost += main.stZamBlock1; | |
| entity.timeSbor = | |
| exponential(1/main. | |
| timeZamBlock1); | |
| Имя | издБлок2 |
| Типы заявок: Вход1, Вход2, Выход | Product, Product, Product |
| Действие при входе 1 | if (entity.numBlBrak2 == 1) |
| БрИздБл2 ++; | |
| Объединенная заявка | entity1 |
| Действия При выходе | if (entity.numBlBrak2 == 1) |
| БрИздБл2 --; | |
| entity.cost += main.stZamBlock2; | |
| entity.timeSbor = | |
| exponential(1/main. | |
| timeZamBlock2); | |
| Имя | издБлок3 |
| Типы заявок: Вход1, Вход2, Выход | Product, Product, Product |
| Действие при входе 1 | if (entity.numBlBrak3 == 1) |
| БрИздБл3 ++; | |
| Объединенная заявка | entity1 |
| Действия При выходе | if (entity.numBlBrak3 == 1) |
| БрИздБл3 --; | |
| entity.cost += main.stZamBlock3; | |
| entity.timeSbor = | |
| exponential(1/main. | |
| timeZamBlock3); | |
| Имя | издБлок4 |
| Типы заявок: Вход1, Вход2, Выход | Product, Product, Product |
| Действие при входе 1 | if (entity.numBlBrak4 == 1) |
| БрИздБл4 ++; | |
| Объединенная заявка | entity1 |
| Действия При выходе | if (entity.numBlBrak4 == 1) |
| БрИздБл4 --; | |
| entity.cost += main.stZamBlock4; | |
| entity.timeSbor = | |
| exponential(1/main. | |
| timeZamBlock4); | |
| split | |
| Типы заявок: | Product, Product |
| Количество копий | 1 |
| Новая заявка (копия) | Product |
| Действия При выходе копии | entity.sign1 = 0; |
| entity.cost = original.cost; | |
Стенды контроля изделий предназначены для приёма первично собранных изделий и изделий после замены забракованных блоков, непосредственно процесса контроля изделий, отправки прошедших контроль изделий на пункты приёма, забракованных изделий - на пункты сборки, а также для приёма забракованных изделий с пунктов приёма изделий.
На стендах контроля изделий, вследствие недостатка ресурсов, будет создаваться очередь, для имитации которой используйте объект queue.
Для имитации непосредственно процесса контроля изделий, то есть затрат времени на его проведение, используйте объект delay.
По результатам контроля некоторые изделия будут признаны браком. Для отбраковки изделий нужно применить объект selectOutput.
queue, delay и selectOutput на прямоугольник с именем Стенды контроля изделий диаграммы Main.
queue и установите на странице Основные панели Свойства:Имя: очерСтенКонтр
Тип заявки: Product
Максимальная вместимость Установите флажокdelay и установите его свойства:Тип заявки: Product
Тип Определённое время
Время задержки exponential( 1/timeKontrIzd )
Вместимость kolStendKontr
Действия При выходе:
testSobrIzd++; entity.cost += stKontrIzd; entity.numBlBrak1 = 0; entity.numBlBrak2 = 0; entity.numBlBrak3 = 0; entity.numBlBrak4 = 0;
delay2 с нулевым временем задержки. Если его не включить, объект БракИзделия на диаграмме агента Сборка работать согласно замыслу разработчика не будет.
(рис 6.12) Диаграмма агента Main с элементами всех сегментов
selectOutput и установите его свойства:Имя: БрСтендКон
Тип заявки: Product
Выход true выбирается С заданной вероятностью
Вероятность[0..1] 1-procBrakIzd
Действия При выходе (true) costTestIzd += stKontrIzd;
Действия При выходе (false)
double a = 0;
int numBlock = 0;
entity.sign1 = 2;
a = uniform();
if (a < 1) numBlock = 4;
if (a <= (verBlNum1 + verBlNum2 + verBlNum3)) numBlock=3;
if (a <= (verBlNum1 + verBlNum2)) numBlock = 2;
if (a <= verBlNum1) numBlock = 1;
if (numBlock == 1) {entity.numBlBrak1 = 1;
entity.timeSbor = exponential(1/timeZamBlock1);}
if (numBlock == 2) {entity.numBlBrak2 = 1;
entity.timeSbor = exponential(1/timeZamBlock2);}
if (numBlock == 3) {entity.numBlBrak3 = 1;
entity.timeSbor = exponential(1/timeZamBlock3);}
if (numBlock == 4) {entity.numBlBrak4 = 1;
entity.timeSbor = exponential(1/timeZamBlock4);}
brakSobrIzd ++;Код в свойство Действия При выходе (false) объекта selectOutput введен для розыгрыша номера забракованного в изделии блока. В результате розыгрыша в одно из полей entity.numBlBrak1… entity.numBlBrak4 заносится 1 - признак брака. В поле entity.timeSbor - время замены соответствующего блока на пункте сборки. Полю entity.sign1 присваивается значение 2 - признак брака в изделии.
Пункты приёма изделий предназначены для приёма прошедших стенды контроля изделий, непосредственно приёма изделий, отправки прошедших приём изделий на склад готовых изделий, а забракованных изделий - на стенды контроля.
На пунктах приёма будет создаваться очередь, для имитации которой используйте объект queue.
Для имитации непосредственно процесса приёма изделий используйте элемент delay.
По результатам контроля некоторые изделия будут признаны браком. Для отбраковки воспользуйтесь объектом selectOutput.
queue, delay и selectOutput на прямоугольник с Пункты приема изделий диаграммы класса Main.
queue и установите на странице Основные панели Свойства:Имя: очерПрием
Тип заявки: Product
Максимальная вместимость Установите флажокdelay и установите его свойства:Тип заявки: Product
Тип Определённое время
Время задержки exponential( 1/timePriemIzd )
Вместимость kolPunPriem
Действия При выходе
kolPriemIzd++; costPriemkiIzd += stPriemIzd; entity.cost += stPriemIzd;
selectOutput и установите его свойства:Тип заявки: Product
Выход true выбирается С заданной вероятностью
Вероятность[0..1] 1-procBrakPriem
Действия При выходе (false)
entity.sign1 = 2; brakPriemIzd++;
Код свойства Действия При выходе объекта delay введен для счета количества kolPriemIzd принятых всего изделий.
Код свойства Действия При выходе (false) объекта selectOutput считает количество brakPriemIzd забракованных изделий и полю entity.sign1 присваивает 2 - признак брака в изделии.
Для имитации склада готовых изделий используйте объект sink со следующими свойствами:
Имя: ГотИзделия
Тип заявки: Product
Действия При выходе:
колГотИзд ++; времяИзгИзд = time()/колГотИзд; стоимГотИзд += entity.cost; минСтоимГотИзд +=minCostIzd; коэфУвелСтоимИзд = (стоимГотИзд+стоимБракБл)/минСтоимГотИзд; ostGotBlock1 = gotBlock1 - колГотИзд - zamBlock1; ostGotBlock2 = gotBlock2 - колГотИзд - zamBlock2; ostGotBlock3 = gotBlock3 - колГотИзд - zamBlock3; ostGotBlock4 = gotBlock4 - колГотИзд - zamBlock4;
Код свойства Действия При выходе введен для счёта количества kolGotIzd готовых изделий, их стоимости costGotIzd и коэффициента koefIncrCostIzd увеличения себестоимости изделия вследствие наличия брака.
Кроме того, ведется счёт готовых для сборки блоков, то есть изготовленных цехами и проверенных на постах контроля, но не использованных для сборки изделий блоков по типам ostGotBlock1… ostGotBlock4 на текущее модельное время.
Ранее (см. п. 6.2.4.2) для имитации склада бракованных блоков было рекомендовано использовать один объект sink.
Предположим, что требуется вести раздельный учёт забракованных блоков на постах контроля цехов и забракованных на стендах контроля и пунктах приёма изделий. Для разделения потока брака дополнительному полю entity.sign1 присваивались признаки 1 или 2.
selectOutput и sink на прямоугольник с именем Склад бракованных блоков диаграммы агента Main.
selectOutput, и установите свойства согласно Табл. 6.8.
Коды в свойстве Действия При выходе: обоих объектов sink одинаковые. Они предназначены для счёта:
costzbrakBlock забракованных блоков не по типам, а в целом всех блоков;
allBrakBlock1… allBrakBlock4.Картинки перетащите на сегменты имитации складов готовых изделий и бракованных блоков картинки Склад.| Свойства | Значение |
|---|---|
| selectOutput | |
| Тип заявки: | Product |
| Выход true выбирается | При выполнении условия |
| Условие | entity.sign1 == 1 |
| sink | |
| Имя | БрПостКонтр |
| Тип заявки: | Product |
| Действия При выходе: | if (entity.numBlBrak1 == 1) |
| { стоимБракБл += costBlock1; | |
| allBrakBlock1++;} | |
| if (entity.numBlBrak2 == 1) | |
| { стоимБракБл += costBlock2 ; | |
| allBrakBlock2++;} | |
| if (entity.numBlBrak3 == 1) | |
| { стоимБракБл += costBlock3; | |
| allBrakBlock3++;} | |
| if (entity.numBlBrak4 == 1) | |
| { стоимБракБл += costBlock4; | |
| allBrakBlock4++;} | |
| Имя | БрБлЗам |
| Тип заявки: | Product |
| Действия При выходе: | if (entity.numBlBrak1 == 1) |
| { стоимБракБл += costBlock1; | |
| allBrakBlock1++;} | |
| if (entity.numBlBrak2 == 1) | |
| { стоимБракБл += costBlock2; | |
| allBrakBlock2++;} | |
| if (entity.numBlBrak3 == 1) | |
| { стоимБракБл += costBlock3; | |
| allBrakBlock3++;} | |
| if (entity.numBlBrak4 == 1) | |
| { стоимБракБл += costBlock4; | |
| allBrakBlock4++;} | |
Добавьте свои собственные элементы презентации на ранее созданные области просмотра Mainview, Data, Result, Kont1 и Sbor, щелчком на которых будет производиться переход к той или иной области просмотра. Сделайте так, чтобы из любой области можно было переходить в любую другую область.
Для этого разместите на каждой области просмотра элементы презентации, показанные на Рис. 6.13.
(рис 6.13) Элементы презентации для переключения
Начните с области просмотра Mainview.
Палитре выделите Презентация. Перетащите элемент text на область просмотра Mainview, разместите и введите в поле Текст: Предприятие (Рис. 6.13). На панели Свойства установите в поле Цвет: black, выберите выравнивание текста и шрифт.
text, разместите и введите в поле Текст: Посты контроля блоков. На панели Свойства установите в поле Цвет: blue, выберите выравнивание текста и шрифт. Раскройте Специфические и в поле Действие по щелчку: введите код: тест.Kontr1.navigateTo();
text, разместите и введите в поле Текст: Пункты сборки изделий. Раскройте Специфические. В поле Действие по щелчку: введите: сборка.Sbor.navigateTo();
text. Разместите и введите в поле Текст: Исходные данные. В поле Действие по щелчку: на странице Специфические введите: Данные.navigateTo();
text, разместите и введите в поле Текст: Результаты моделирования. На панели Свойства выделите Специфические и в поле Действие по щелчку: введите: Результаты.navigateTo();Таким образом, с области просмотра Mainview можно будет переходить на любую из четырех областей просмотра. При этом элемент презентации открытой области высвечивается черным цветом, а остальные элементы презентации - голубым цветом.
| Элемент презентации | Действие по щелчку |
|---|---|
| Data | |
| Предприятие | Mainview.navigateTo(); |
| Посты контроля блоков | тест.Kontr1.navigateTo(); |
| Пункты сборки изделий | сборка.Sbor.navigateTo(); |
| Исходные данные | |
| Результаты моделирования | Результаты.navigateTo(); |
| Result | |
| Предприятие | Mainview.navigateTo(); |
| Посты контроля блоков | тест.Kontr1.navigateTo(); |
| Пункты сборки изделий | сборка.Sbor.navigateTo(); |
| Исходные данные | Данные.navigateTo(); |
| Результаты моделирования | |
| Kontrol | |
| Предприятие | main.Mainview.navigateTo(); |
| Посты контроля блоков | |
| Пункты сборки изделий | main.сборка.Sbor.navigateTo(); |
| Исходные данные | main.Данные.navigateTo(); |
| Результаты моделирования | main.Результаты.navigateTo(); |
| Sbor | |
| Предприятие | main.Mainview.navigateTo(); |
| Посты контроля блоков | main.тест.Kontr1.navigateTo(); |
| Пункты сборки изделий | |
| Исходные данные | main.Данные.navigateTo(); |
| Результаты моделирования | main.Результаты.navigateTo(); |
Построение модели для проведения простого эксперимента завершено. Теперь отладьте модель, используя возможности AnyLogic по обнаружению ошибок. Если вы всё выполнили корректно, то получите результаты, показанные на Рис. 6.14.
(рис 6.14) Результаты моделирования согласно постановке задачи
Мы провели эксперименты с моделями, выполнив в GPSS World 1000 прогонов, а в AnyLogic увеличив модельное время в 1000 раз. При этом начальное значение генераторов случайных чисел установили 82874.
Эксперименты проводились при времени работы предприятия 40 часов (2400 единиц модельного времени).
Результаты экспериментов приведены в виде различных показателей функционирования предприятия в Табл. 6.10. В ней приняты те же обозначения (идентификаторы) показателей, что и в модели AnyLogic.
Расшифруем некоторые составные части идентификаторов:
Сравнительная оценка, напоминаем, также проводилась между результатами, полученными в GPSS World и AnyLogic 7. Она свидетельствует о том, что результаты моделирования, полученные в различных средах, адекватны.
Различие мало, например, для коэффициента увеличения стоимости изделия оно составляет 0,004…0,005. Коэффициенты увеличения стоимости изделий, полученные в AnyLogic 7 и AnyLogic 6, практически во всех экспериментах совпадают.
Коэффициенты использования различных подразделений предприятия по производству изделий также отличаются на тысячные доли 0,003…0,007 или они одинаковые. Например, наибольшее отличие коэффициента использования ПК3 (коэфИспПК3) составляет 0,007 в первом эксперименте. Во втором и третьем экспериментах он равен 1. Увеличение числа ПК3 в четвёртом эксперименте уменьшает коэфИспПК3, но при этом коэффициент использования пунктов сборки (коэфИспПС) равен 1. Следовательно необходимо увеличить число пунктов сборки для увеличения производства изделий.
В целях уменьшения затрат на производство изделий целесообразно уменьшить число ПК1, поскольку они загружены примерно на треть (0,315…0,398) в первых трёх экспериментах и на две третьих (0,598) в последнем четвёртом эксперименте. Также можно уменьшить число ПК4.
| Показатели | GPSS World | AnyLogic6 | AnyLogic7 |
|---|---|---|---|
| 1) Согласно постановке задачи | |||
| колГотИзд | 121,628 | 122,337 | 121,721 |
| $$\Delta_{11} = \left | 121,628-121,721 \right | = 0,093$$ | |||
| стоимГотИзд | 74410 | 75151 | 74763 |
| минСтоимГотИзд | 70787 | 71200 | 70841 |
| $$\Delta_{12} = \left | 70787-70841 \right | = 54$$ | |||
| стоимБракБл | 3099 | 3122 | 3079 |
| коэфУвелСтоимИзд | 1,095 | 1,099 | 1,099 |
| $$\Delta_{13} = \left | 1,095-1,099 \right | = 0,004$$ | |||
| времяИзгИзд | 19,732 | 19,618 | 19,717 |
| коэфИспПК1 | 0,315 | 0,316 | 0,315 |
| коэфИспПК2 | 0,726 | 0,728 | 0,729 |
| коэфИспПК3 | 0,696 | 0,699 | 0,703 |
| коэфИспПК4 | 0,472 | 0,474 | 0,475 |
| коэфИспПС | 0,581 | 0,586 | 0,583 |
| коэфИспСВК | 0,545 | 0,548 | 0,545 |
| коэфИспПП | 0,539 | 0,539 | 0,536 |
| 2) aveTimeShop1=15, aveTimeShop2=10, aveTimeShop3=10, aveTimeShop4=15 | |||
| колГотИзд | 147,909 | 147,954 | 148,039 |
| $$\Delta_{21} = \left | 147,909-148,039 \right | = 0,130$$ | |||
| стоимГотИзд | 90487 | 90902 | 90941 |
| минСтоимГотИзд | 86083 | 86109 | 86158 |
| $$\Delta_{22} = \left | 86083-86158 \right | = 75$$ | |||
| стоимБракБл | 3848 | 3824 | 3844 |
| коэфУвелСтоимИзд | 1,096 | 1,1 | 1,1 |
| $$\Delta_{23} = \left | 1,096-1,100 \right | = 0,004$$ | |||
| времяИзгИзд | 16,226 | 16,221 | 16,212 |
| коэфИспПК1 | 0,398 | 0,4 | 0,401 |
| коэфИспПК2 | 0,8 | 0,804 | 0,801 |
| коэфИспПК3 | 1 | 1 | 1 |
| коэфИспПК4 | 0,566 | 0,563 | 0,566 |
| коэфИспПС | 0,705 | 0,705 | 0,704 |
| коэфИспСВК | 0,66 | 0,662 | 0,665 |
| коэфИспПП | 0,654 | 0,654 | 0,655 |
| 3) aveTimeShop4=10 | |||
| колГотИзд | 153,743 | 154,327 | 154,004 |
| $$\Delta_{31} = \left | 153,743-154,004 \right | = 0,261$$ | |||
| стоимГотИзд | 94050 | 94815 | 94614 |
| минСтоимГотИзд | 89478 | 89818 | 89630 |
| $$\Delta_{32} = \left | 89478-89630 \right | = 152$$ | |||
| стоимБракБл | 4412 | 4450 | 4432 |
| коэфУвелСтоимИзд | 1,1 | 1,105 | 1,105 |
| $$\Delta_{33} = \left | 1,100-1,105 \right | = 0,005$$ | |||
| времяИзгИзд | 15,61 | 15,551 | 15,584 |
| коэфИспПК1 | 0,398 | 0,399 | 0,398 |
| коэфИспПК2 | 0,8 | 0,797 | 0,803 |
| коэфИспПК3 | 1 | 1 | 1 |
| коэфИспПК4 | 0,85 | 0,852 | 0,851 |
| коэфИспПС | 0,733 | 0,737 | 0,737 |
| коэфИспСВК | 0,691 | 0,691 | 0,688 |
| коэфИспПП | 0,678 | 0,681 | 0,682 |
| 4) aveTimeShop1=10, postKontr3=3 | |||
| колГотИзд | 209,234 | 209,086 | 209,596 |
| $$\Delta_{41} = \left | 209,234-209,596 \right | = 0,362$$ | |||
| стоимГотИзд | 127880 | 128328 | 128659 |
| минСтоимГотИзд | 121774 | 121688 | 121984 |
| $$\Delta_{42} = \left | 121744-121984 \right | = 240$$ | |||
| стоимБракБл | 4952 | 4848 | 4880 |
| коэфУвелСтоимИзд | 1,091 | 1,094 | 1,095 |
| $$\Delta_{43} = \left | 1,091-1,095 \right | = 0,004$$ | |||
| времяИзгИзд | 11,47 | 11,478 | 11,451 |
| коэфИспПК1 | 0,6 | 0,599 | 0,598 |
| коэфИспПК2 | 0,799 | 0,801 | 0,799 |
| коэфИспПК3 | 0,701 | 0,7 | 0,698 |
| коэфИспПК4 | 0,845 | 0,853 | 0,847 |
| коэфИспПС | 1 | 1 | 1 |
| коэфИспСВК | 0,936 | 0,936 | 0,937 |
| коэфИспПП | 0,923 | 0,923 | 0,927 |
Предприятие имеет $$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$$ % изделий, которые направляются вновь на стенд выходного контроля. Принятые приёмкой изделия направляются на склад предприятия.
Интервалы времени между выпусками блоков, время контроля блоков и изделий, сборки и приема изделий подчинены экспоненциальному закону.
Разработать имитационную модель функционирования предприятия при изготовлении изделий из блоков.
Исследовать влияние качества изготовления блоков и других параметров (интервалов выпуска блоков из цехов, себестоимости комплектующих, стоимости изготовления блоков, проверки, сборки и др.) на себестоимость изделий.
Сделать выводы о загруженности подразделений предприятия и необходимых мерах по снижению себестоимости продукции.
Предприятие при изготовлении блоков и сборки из них изделий может быть представлено как многофазная многоканальная разомкнутая система массового обслуживания с ожиданием, так как оно имеет все ее элементы (Рис. 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 используется в режиме, который рекомендуется избегать вследствие того, что проверяемое условие может не выполниться. Однако здесь этого не должно быть, так как в противном случае будут отсутствовать готовые блоки для сборки изделий. По мере готовности блоков условие обязательно выполняется и блоки - транзакты направляются на сборку. Первые три транзакта уничтожаются, а четвертый транзакт имитирует собранное из четырех блоков изделие. Он направляется для проверки работоспособности на пункт приема изделий.
В программе использование МКУ и списков пользователя демонстрируется применением номеров МКУ вместо их имен. Этот метод дает возможность иметь в модели один сегмент имитации работы постов контроля блоков вместо подобного сегмента для каждого цеха, т. е. сократить число блоков в модели.
Обратите внимание, что в программе присвоение номеров именам МКУ указывается в самом начале и только потом, не обязательно следом, определение МКУ командой 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.1), должна состоять из следующих сегментов:
Блоки и изделия в модели следует имитировать заявками со следующими полями (параметрами):
block - номер цеха (коды 1…4 соответственно), выпустившего блок;
sign1 - признак брака на постах контроля блоков, стендах контроля изделий и на пунктах приема изделий;
numBlBrak1 … numBlBrak4 - признаки забракованных блоков 1…4 соответственно;
timeSbor - время сборки изделия (замены блоков);
cost - стоимость готового изделия.Указанные поля предназначены для отслеживания технического состояния блоков и изделий и в зависимости от этого прохождения их по фазам изготовления изделия.
Поле timSbor введено для удобства построения модели. В это поле заносится либо время сборки изделия из четырех блоков, либо время замены каких-либо забракованных блоков в уже собранном изделии.
Стоимость изготовления изделия может возрасти по сравнению с минимальной стоимостью (CMIN) за счёт выявления брака и замены блоков. Для фиксации этой стоимости введено поле cost.
Для обеспечения работы модели вводятся следующие параметры процесса изготовления изделий из блоков:
aveTimeShop1…aveTimeShop4 - средние интервалы времени выпуска блоков 1…4 цехами 1…4;
stKomplBlock1…stKomplBlock4 - стоимости комплектующих блоков 1…4;
stIzgBlock1…stIzgBlock4 - стоимость изготовления блоков 1…4;
postKontr1…postKontr4 - количество постов контроля блоков 1…4;
procBrakBlock1…procBrakBlock4 - проценты брака блоков 1…4 на постах контроля блоков;
stTestBlock1…stTestBlock4 - стоимости тестирования (одного блока) блоков 1…4;
kolPunSborki - количество пунктов сборки изделий;
timeSborki - среднее время сборки одного изделия;
stSborki - стоимость сборки одного изделия;
kolStendKontr - количество стендов контроля собранных изделий;
timeKontrIzd - среднее время контроля на стенде одного собранного изделия;
procBrakIzd - процент брака собранных изделий на стендах контроля;
stKontrIzd - стоимость контроля на стенде одного собранного изделия;
verBlock1 - вероятность того, что забракованным в уже собранном изделии окажется один блок;
verBlock2 - вероятность того, что забракованными в уже собранном изделии окажутся два блока;
verBlNum1…verBlNum4 - вероятности брака на стенде контроля блоков 1…4;
timeZamBlock1… timeZamBlock4 - среднее время замены (одного блока) блоков 1…4;
stZamBlock1…stZamBlock4 - стоимость замены (одного блока) блоков 1…4;
kolPunPriem - количество пунктов приема изделий, прошедших пункты контроля;
timePriemIzd - среднее время приема одного изделия;
procBrakPriem - процент брака изделий на пунктах приема изделий;
stPriemIzd - стоимость приема одного изделия.В ходе моделирования на основе приведенных исходных данных формируется и выводится на текущее модельное время следующая информация:
kolIzBlock1…kolIzBlock4 - количество изготовленных блоков 1…4;
kolTestBlock1…kolTestBlock4 - количество протестированных блоков 1…4 (как исправных, так и забракованных);
brakBlock1…brakBlock4 - количество забракованных на постах контроля блоков 1…4;
gotBlock1…gotBlock4 - количество изготовленных всего готовых блоков 1…4;
ostGotBlock1…ostGotBlock4 - количество оставшихся готовых блоков 1…4;
kolSobrIzd, testSobrIzd, brakSobrIzd - количество собранных на пунктах сборки изделий, проверенных и забракованных на стендах контроля;
kolPriemIzd, brakPriemIzd - количество принятых и забракованных приемкой изделий соответственно;
zamBlock1…zamBlock4 - количество замененных блоков 1…4, забракованных на стендах контроля и пунктах приема изделий;
allBrakBlock1…allBrakBlock4 - всего забракованных блоков 1…4;
minCostIzd - минимальная стоимость одного изделия;
минСтоимГотИзд - минимальная стоимость готовых изделий;
колГотИзд - количество готовых изделий, отправленных на склад.На текущее модельное время собирается статистика по следующим стоимостным показателям функционирования предприятия:
costKomplBlock1…costKomplBlock4,costKomplBlock - стоимости комплектующих блоков 1…4 и суммарная стоимость комплектующих всех блоков;
costIzgBlock1…costIzgBlock4,costIzgBlock - стоимости изготовления блоков 1…4 и суммарная стоимость изготовления всех блоков (без учета стоимости тестирования блоков);
CostBlock1…CostBlock4 - стоимости изготовления блоков 1…4 с учётом тестирования;
sumCostBlock1…sumCostBlock4, sumCostBlock - суммарные стоимости изготовления блоков 1…4 с учётом тестирования и суммарная стоимость изготовления всех блоков;
costTestBlock1…costTestBlock4,costTestBlock - стоимости тестирования блоков 1…4 на постах контроля и суммарная стоимость тестирования всех блоков;
costSborIzd, costTestIzd, costPriemIzd - стоимости сборки, проверки и приемки изделий;
стоимБракБл - суммарные затраты на все забракованные блоки;
стоимГотИзд - затраты на выпуск готовых изделий;
costBlockIzd - стоимость блоков одного изделия;
costIzd - стоимость одного изделия;
времяИзгИзд - среднее время изготовления одного изделия;
коэфУвелСтоимИзд - коэффициент увеличения себестоимости изделия.Минимальная стоимость изделий будет тогда, когда не будет бракованных блоков и изделий. В терминах постановки задачи это условие имеет вид:
$$C_{min}=C_{minизд} \cdot N_{изд},$$где N_{изд} - количество готовых изделий (поступивших на склад);
$$C_{minизд}$$ - минимальная себестоимость производства одного изделия, вычисляется по формуле:
$$C_{изд}=\sum_{i=1}^{n1}(C_{кi}+C_{изгi}+C_{прi})+C_{сб}+C_{к}+C_{п}.$$Собирается также статистика о коэффициентах загрузки подразделений предприятия.
В случае наличия брака себестоимость производимой продукции увеличится и составит $$C_{max}$$. То есть коэффициент увеличения себестоимости будет равен
$$K_c=C_{max}/C_{min}.$$Запишем в идентификаторах исходных данных и результатов моделирования то же самое:
$$costBlock1=stKomplBlock1+stIzqBlock1+stTestBlock1;$$ $$costBlock2=stKomplBlock2+stIzqBlock2+stTestBlock2;$$ $$costBlock3=stKomplBlock3+stIzqBlock3+stTestBlock3;$$ $$costBlock4=stKomplBlock4+stIzqBlock4+stTestBlock4;$$ $$costBlockIzd=costBlock1+costBlock2+costBlock3+costBlock4;$$ $$C_{min изд}=costBlockIzd+stSborki+stKontrIzd+stPriemIzd;$$ $$C_{min}=C_{min изд} \cdot колГотИзд; C_{max}= стоимГотИзд + стоимБракБл.$$ $$K_c = коэфУвелСтоимИзд = \frac{C_{max}}{C_{min}}.$$Для ввода исходных данных используем элемент Параметр.
Файл/Создать/Модель на панели инструментов.
Имя модели диалогового окна Новая модель введите Предприятие.
Готово.
Палитре выделите Презентация. Создайте область просмотра Данные для размещения элементов исходных данных.
Область просмотра. В поле Имя: введите Данные.
Местоположение и размер панели Свойства введите в поля X: 0, Y: 1700, Ширина: 760, Высота: 330.
Прямоугольник. Оставьте имя, предложенное системой.
Местоположение и размер панели Свойства введите в поля X: 10, Y: 1750, Ширина: 740, Высота: 270.
text и на странице Основные панели Свойства в поле Текст: вместо слова text введите Исходные данные.
Палитре выделите Основная. Перетащите элементы Параметр на элемент с именем Исходные данные. Разместите их так, как показано на Рис. 6.2. Значения свойств установите согласно Табл. 6.1.| Элементы и их свойства | |||||
|---|---|---|---|---|---|
| Параметр | Параметр | ||||
| Имя | Тип | Значение по умолчанию | Имя | Тип | Значение по умолчанию |
| aveTimeShop1 | double | 19 | stKomplBlock1 | double | 35 |
| aveTimeShop2 | double | 11 | stKomplBlock2 | double | 32 |
| aveTimeShop3 | double | 15 | stKomplBlock3 | double | 43 |
| aveTimeShop4 | double | 18 | stKomplBlock4 | double | 48 |
| stIzgBlock1 | double | 35 | timeTestBlock1 | double | 12 |
| stIzgBlock2 | double | 27 | timeTestBlock2 | double | 16 |
| stIzgBlock3 | double | 36 | timeTestBlock3 | double | 21 |
| stIzgBlock4 | double | 37 | timeTestBlock4 | double | 17 |
| postKontr1 | int | 2 | procBrakBlock1 | double | 0,02 |
| postKontr2 | int | 2 | procBrakBlock2 | double | 0,03 |
| postKontr3 | int | 2 | procBrakBlock3 | double | 0,04 |
| postKontr4 | int | 2 | procBrakBlock4 | double | 0,06 |
| stTestBlock1 | double | 12 | kolStendKontrIzd | int | 2 |
| stTestBlock2 | double | 23 | timeKontrIzd | double | 26 |
| stTestBlock3 | double | 32 | procBrakIzd | double | 0,05 |
| stTestBlock4 | double | 28 | stKontrIzd | double | 74 |
| kolPunSborki | int | 2 | verBlock1 | double | 0,9999 |
| timeSborki | double | 22 | verBlock2 | double | 0,999999 |
| stSborki | double | 67 | |||
| verBlockNum1 | double | 0,25 | timeZamBlock1 | double | 12 |
| verBlockNum2 | double | 0,25 | timeZamBlock2 | double | 15 |
| verBlockNum3 | double | 0,25 | timeZamBlock3 | double | 12 |
| verBlockNum4 | double | 0,25 | timeZamBlock4 | double | 21 |
| stZamBlock1 | double | 34 | kolPunPriem | int | 2 |
| stZamBlock2 | double | 46 | timePriemIzd | double | 18 |
| stZamBlock3 | double | 38 | procBrakPriem | double | 0,15 |
| stZamBlock4 | double | 54 | stPriemIzd | double | 53 |
(рис 6.2) Размещение элементов Параметр для ввода исходных данных
Для вывода результатов моделирования используем элемент Переменная. Для удобства обозрения и анализа результатов моделирования разделим их на две группы. В первую группу включим данные о количестве подготовленных и забракованных блоков и изделий, во вторую группу - стоимостные показатели функционирования предприятия.
Результаты для размещения элементов Переменная.
Область просмотра. В поле Имя: введите Результаты.
Местоположение и размер панели Свойства введите в поля X: 0, Y: 700, Ширина: 700, Высота: 520.
Скруглённый прямоугольник. Оставьте имя, предложенное системой.
Местоположение и размер панели Свойства введите в поля X: 10, Y: 750, Ширина: 690, Высота: 450.
text и на панели Свойства в поле Текст: введите Данные о количестве подготовленных и забракованных блоков и изделий.
text и введите Стоимостные показатели функционирования предприятия.
text и в поле Текст: введите Показатели использования пунктов предприятия.
Палитре выделите Основная. Перетащите элементы Переменная. Используйте копирование. Разместите их и дайте им имена так, как показано на Рис. 6.3. Тип всех переменных, используемых для вывода количества подготовленных и забракованных блоков и изделий на текущее модельное время - int. Тип переменных для вывода стоимостных показателей работы предприятия и показателей использования его пунктов - double.
Выравнивание. Не поддерживается выравнивание элементов диаграмм состояний и диаграмм действий, потому что при выравнивании таких элементов может нарушиться логика модели.
(рис 6.3) Размещение элементов Переменная для вывода результатов моделирования
В событийную часть модели включим указанные ранее сегменты согласно представлению предприятия как системы массового обслуживания (см. Рис. 6.1).
Модель будет содержать три активных объекта, элементы которых не могут физически вместиться в область диаграммы в окне презентации при выполнении модели, поэтому используем для каждого активного объекта элемент область просмотра. В дальнейщем после построения всех сегментов событийной части модели организуем переключение между областями просмотра.
Создайте область просмотра для размещения сегментов событийной части модели на диаграмме класса Main.
Палитре выделите Презентация. Перетащите элемент Область просмотра.
Основные панели Свойства.
Имя: введите Mainview.
Местоположение и размер панели Свойства введите в поля X: 0, Y: 0, Ширина: 990, Высота: 390.
Скруглённый прямоугольник. В нём мы разместим все сегменты модели. Оставьте имя, предложенное системой.
Местоположение и размер панели Свойства введите в поля X: 10, Y: 60, Ширина: 970, Высота: 320.
Скруглённый прямоугольник, укажите имена сегментов и свойства согласно Табл. 6.2. Шрифт, цвет и т.д. выберите по своему усмотрению.| Сегмент | Свойства | |||
|---|---|---|---|---|
| Х: | Y: | Ширина: | Высота: | |
| Цеха | 20 | 80 | 140 | 270 |
| Посты контроля блоков | 170 | 80 | 160 | 270 |
| Пункты сборки изделий | 340 | 80 | 120 | 270 |
| Стенды контроля изделий | 470 | 80 | 150 | 270 |
| Пункты приёма изделий | 630 | 80 | 170 | 270 |
| Склад готовых изделий | 810 | 80 | 160 | 130 |
| Склад бракованных изделий | 810 | 220 | 160 | 130 |
(рис 6.4) Размещение сегментов модели
Данный сегмент предназначен для имитации работы цехов, то есть изготовления и выпуска блоков через случайные интервалы времени, счёта количества изготовленных блоков, стоимости комплектующих изготовленных блоков по типам и за предприятие, стоимости изготовления блоков по типам и суммарной стоимости за предприятие.
Библиотеки моделирования процессов перетащите объект sourсe на агент Main и разместите в скругленном прямоугольнике с именем Цеха.
Product.
Проект щёлкните правой кнопкой мыши элемент модели верхнего уровня дерева и выберите в меню Создать Java класс.
Новый Java класс. В поле Имя: введите имя нового класса Product.
Базовый класс: выберите из выпадающего списка Entity в качестве базового класса. Щёлкните кнопку Далее.
Мастера создания Java класса. Добавьте следующие поля Java класса, которые потребуются в дальнейшем при разработке модели:
int numBlock; int sign1; int numBlBrak1; int numBlBrak2; int numBlBrak3; int numBlBrak4; double timeSbor; double cost;
Создать конструктор и Создать метод toString().
Готово. Появится редактор кода и автоматически созданный код вашего Java класса. Закройте код.
Проект только что созданный Java класс и в контекстном меню выберите Преобразовать Java класс в тип агента.
source. На странице Основные панели Свойства установите свойства согласно Табл. 6.3.
| Имя | Свойства | Значения |
|---|---|---|
| Цех1 | Отображать имя | Установите флажок |
| Тип заявки | Product | |
| Прибывают согласно | Времени между прибытиями | |
| Время между прибытиями | exponential(1/aveTimeShop1) | |
| Новая заявка | Product | |
| Действия При выходе: | if (a==0){costBlock1=stKomplBlock1+stIzgBlock1+stTestBlock1; | |
| costBlock2=stKomplBlock2+stIzgBlock2+stTestBlock2; | ||
| costBlock3=stKomplBlock3+stIzgBlock3+stTestBlock3; | ||
| costBlock4=stKomplBlock4+stIzgBlock4+stTestBlock4; | ||
| costBlockIzd=costBlock1+costBlock2+costBlock3+costBlock4; | ||
| minCostIzd=costBlockIzd+stSborki+ | ||
| stKontrIzd+stPriemIzd; | ||
| a=1;} | ||
| kolIzgBlock1++; | ||
| entity.numBlock = 1; | ||
| entity.timeSbor = exponential(1/timeSborki); | ||
| costKomplBlock1 += stKomplBlock1; | ||
| costKomplBlock += stKomplBlock1; | ||
| costIzgBlock1 += stIzgBlock1; | ||
| sumCostBlock1 += (stKomplBlock1+stIzgBlock1); | ||
| costIzgBlock += stIzgBlock1; | ||
| sumCostBlock += stKomplBlock1+stIzgBlock1); | ||
| цех2 | Отображать имя | Установите флажок |
| Тип заявки | Product | |
| Прибывают согласно | Времени между прибытиями | |
| Время между прибытиями | exponential(1/aveTimeShop2) | |
| Новая заявка | Product | |
| Действия При выходе: | kolIzgBlock2++; | |
| entity.numBlock = 2; | ||
| costKomplBlock2 += stKomplBlock2; | ||
| costKomplBlock += stKomplBlock2; | ||
| costIzgBlock2 += stIzgBlock2; | ||
| sumCostBlock2 += (stKomplBlock2+stIzgBlock2); | ||
| costIzgBlock += stIzgBlock2; | ||
| sumCostBlock += (stKomplBlock2+stIzgBlock2); | ||
| цех3 | Отображать имя | Установите флажок |
| Тип заявки | Product | |
| Прибывают согласно | Времени между прибытиями | |
| Время между прибытиями | exponential(1/aveTimeShop3) | |
| Новая заявка | Product | |
| Действия При выходе: | kolIzgBlock3++; | |
| entity.numBlock = 3; | ||
| costKomplBlock3 += stKomplBlock3; | ||
| costKomplBlock += stKomplBlock3; | ||
| costIzgBlock3 += stIzgBlock3; | ||
| sumCostBlock3 += (stKomplBlock3+stIzgBlock3); | ||
| costIzgBlock += stIzgBlock3; | ||
| sumCostBlock += (stKomplBlock3+stIzgBlock3); | ||
| цех4 | Отображать имя | Установите флажок |
| Тип заявки | Product | |
| Прибывают согласно | Времени между прибытиями | |
| Время между прибытиями | exponential(1/aveTimeShop4) | |
| Новая заявка | Product | |
| Действия При выходе: | kolIzgBlock4++; | |
| entity.numBlock = 4; | ||
| costKomplBlock4 += stKomplBlock4; | ||
| costKomplBlock += stKomplBlock4; | ||
| costIzgBlock4 += stIzgBlock4; | ||
| sumCostBlock4 += (stKomplBlock4+stIzgBlock4); | ||
| costIzgBlock += stIzgBlock4; | ||
| sumCostBlock += (stKomplBlock4+stIzgBlock4); |
source правой кнопкой мыши и в контекстном меню выберите Копировать.
Цеха еще три объекта source. Разместите их вертикально один под другим. Во время вставки имена объектов будут изменяться: цех2, цех3, цех4. Однако остальные свойства останутся такими же, как и у объекта цех1.
source, скорректируйте их свойства также согласно Табл. 6.3.Каждый цех имеет посты контроля блоков одного типа. Посты контроля предназначены для приема блоков из цеха, тестирования их, отправки исправных блоков на пункты сборки изделий, а брака - на склад забракованных блоков.
Для размещения объектов, имитирующих работу постов контроля блоков, создайте новый тип агента Тест.
Проект щёлкните Main правой кнопкой мыши и выберите из контекстного меню Создать/Тип агента. Откроется окно Шаг 1. Создание нового типа агента.
Имя: задайте имя нового типа агента Тест.
Готово.Создайте область просмотра на диаграмме агента Тест для размещения объектов сегмента Посты контроля блоков.
Палитре выделите Презентация. Перетащите элемент Область просмотра.
Основные панели Свойства.
Имя: введите Kontr1.
Местоположение и размер панели Свойства введите в поля X: 0, Y: 0, Ширина: 590, Высота: 390.Согласно указанному ранее назначению постов контроля блоков нужно сделать так, чтобы четыре типа блоков передавались из цехов на свои посты контроля, четыре типа тестированных и исправных блоков поступали на пункты сборки изделий, а четыре типа забракованных блоков - на склад забракованных блоков.
Создайте экземпляр нового типа агента Тест.
Основная перетащите элемент Порт и разместите сверху в крайнем левом ряду (Рис. 6.5).
(рис 6.5) Размещение элементов Порт на экземпляре агента Тест
Основные панели Свойства имя port замените именем Блок1.
Порт с именем Блок1.
Порт (см. Рис. 6.5). При вставке последовательно будут изменяться их имена: Блок2, Блок3, Блок4.
Основная перетащите элемент Порт и разместите сверху в среднем ряду (см. Рис. 6.5).
Основные панели Свойства имя port замените именем БракБл1.
Порт с именем БракБл1.
Порт (см. Рис. 6.5). При вставке последовательно будут изменяться их имена: БракБл2, БракБл3, БракБл4.
Основная перетащите элемент Порт и разместите сверху в крайнем правом ряду (см. Рис. 6.5).
Основные панели Свойства имя port замените именем ГотБл1.
Порт с именем ГотБл1.
Порт (см. Рис. 6.5). При вставке последовательно будут изменяться их имена: ГотБл2, ГотБл3, ГотБл4.
Порт они автоматически будут объединяться прямоугольником (с пунктирными линиями) и появится надпись Значок.
Проект выделите Тест, перетащите на диаграмму Main экземпляр агента Тест, разместите и соедините так, как на Рис. 6.6. Порты БракБл1…БракБл4 соедините с объектом sink сегмента Склад бракованных блоков, предварительно разместив его там.
Тест создан. Возвратитесь на диаграмму агента Тест.Для имитации работы постов контроля блоков одного типа (одного цеха) нам потребуются объекты:
queue - имитация склада изготовленных цехом блоков;
delay - имитация времени тестирования блока;
selectOutPut - имитация процесса браковки блоков.
(рис 6.6) Добавлен элемент диаграммы класса TestСкруглённый прямоугольник. В нём мы разместим все объекты сегмента имитации работы постов контроля блоков. Оставьте имя, предложенное системой.
Местоположение и размер панели Свойства введите в поля X: 10, Y: 50, Ширина: 570, Высота: 330.Добавьте на диаграмму агента Тест объекты класса Queue.
Библиотеки моделирования процессов перетащите объект queue и разместите слева сверху, как на Рис. 6.7.
Основные панели Свойства замените имя queue именем склИзгБл1 (склад изготовленных блоков цеха 1).
Тип заявки: Entity замените Product.
Вместимость: Максимальная.
склИзгБл1.
Добавьте на диаграмму класса Test объекты класса Delay.
delay и поместите справа рядом с объектом склИзгБл1, как на Рис. 6.7.
(рис 6.7) Размещение элементов на диаграмме агента Тест
Основные панели Свойства замените имя delay именем постКонтрБлок1 (посты контроля блоков цеха 1).
Тип заявки: Agent замените Product.
Время задержки: exponential (1/main.timeTestBlock1).
main.postKontr1 в поле Вместимость:.
Действия При выходе:
main.kolTestBlock1++; main.sumCostBlock1 += main.stTestBlock1; main.costTestBlock1 += main.stTestBlock1; main.costTestBlock += main.stTestBlock1; main.sumCostBlock += main.stTestBlock1;
постКонтрБлок1.
delay (см. Рис. 6.7).
Действия При выходе.| Имя | Время задержки | Вместимость |
|---|---|---|
| постКонтрБлок2 | exponential(1/main.timeTestBlock2) | main.postKontr2 |
| постКонтрБлок3 | exponential(1/main.timeTestBlock3) | main.postKontr3 |
| постКонтрБлок4 | exponential(1/main.timeTestBlock4) | main.postKontr4 |
Добавьте на диаграмму Тест объекты класса SelectOutput.
selectOutput и разместите справа рядом с объектом постКонтрБлок1, как на Рис. 6.7.
Основные панели Свойства замените имя selectOutPut именем ОтбракБлок1 (отбраковка блоков цеха 1).
ОтбракБлок1.
SelectOutput (см. Рис. 6.7).
Тест согласно Рис. 6.7.
Код в свойство Действия При выходе (true) введен для учёта, например, для цеха 1:
gotBlock1 - количества готовых блоков цеха 1.Код в свойстве Действия При выходе (false) обеспечивает счёт количества brakBlock1 забракованных блоков цеха 1.
| Свойства | Значение |
|---|---|
| Имя | ОтбракБлок1 |
| Тип заявки | Product |
| Выход true выбирается | Заданной вероятностью |
| Вероятность: | 1-main.procBrakBlock1 |
| Действия При выходе (true) | main.gotBlock1++; |
| main.brakBlock1++; | |
| Действия При выходе (false) | entity.sign1 = 1; |
| entity.numBlBrak1 = 1; | |
| Имя | ОтбракБлок2 |
| Тип заявки | Product |
| Выход true выбирается | Заданной вероятностью |
| Вероятность: | 1-main.procBrakBlock2 |
| Действия При выходе (true) | main.gotBlock2++; |
| main.brakBlock2++; | |
| Действия При выходе (false) | entity.sign1 = 1; |
| entity.numBlBrak2 = 1; | |
| Имя | ОтбракБлок3 |
| Тип заявки | Product |
| Выход true выбирается | Заданной вероятностью |
| Вероятность: | 1-main.procBrakBlock3 |
| Действия При выходе (true) | main.gotBlock3++; |
| main.brakBlock3++; | |
| Действия При выходе (false) | entity.sign1 = 1; |
| entity.numBlBrak3 = 1; | |
| Имя | ОтбракБлок4 |
| Тип заявки | Product |
| Выход true выбирается | Заданной вероятностью |
| Вероятность: | 1-main.procBrakBlock4 |
| Действия При выходе (true) | main.gotBlock4++; |
| main.brakBlock4++; | |
| Действия При выходе (false) | entity.sign1 = 1; |
| entity.numBlBrak4 = 1; |
В поле entity.sign1 записывается 1 - признак брака на постах контроля, а также единица записывается в поле entity.numBlock1 … entity.numBlock4. Это нужно для раздельного счёта забракованных блоков.
Перейдите на агента Main.
Пункты сборки изделий предназначены для приема прошедших тестирование блоков с постов контроля, сборки изделий из блоков, замены забракованных блоков и отправки их на склад забракованных блоков.
Для размещения объектов имитации работы пунктов сборки изделий создайте новый тип агента Сборка.
Проект щёлкните Main правой кнопкой мыши и выберите из контекстного меню Создать/Тип агента.
Шаг 1. Создание нового типа агента.
Имя: задайте имя Сборка.
Готово.Создайте область просмотра на диаграмме агента Сборка для размещения объектов сегмента Пункты сборки изделий.
Палитре выделите Презентация. Перетащите элемент Область просмотра.
Основные панели Свойства.
Имя: введите Sbor.
Местоположение и размер панели Свойства введите в поля X: 0, Y: 0, Ширина: 820, Высота: 550.
Скруглённый прямоугольник. В нём мы разместим все элементы сегмента. Оставьте имя, предложенное системой.
Местоположение и размер панели Свойства введите в поля X: 10, Y: 60, Ширина: 800, Высота: 480.Согласно назначению пунктов сборки изделий для связи их с другими сегментами модели необходимо иметь:
Основная перетащите элемент Порт и разместите сверху в крайнем левом ряду (Рис. 6.8).
Основные панели Свойства имя port замените именем ГотБлок1.
Порт с именем ГотБлок1.
Порт (см. Рис. 6.8). При вставке последовательно будут изменяться их имена: ГотБлок2, ГотБлок3, ГотБлок4.
Основная перетащите еще три элемента Порт, разместите их и дайте имена как на Рис. 6.8.
Проект выделите Сборка, перетащите на диаграмму агента Main экземпляр сборка, разместите и соедините так, как на Рис. 6.9. Порт БракБл соедините с объектом sink сегмента Склад бракованных блоков.
Сборка создан. Возвратитесь на диаграмму агента Сборка.Для реализации сегмента имитации работы пунктов сборки изделий нам потребуются объекты, но прежде мы рассмотрим вариант построения этого сегмента.
(рис 6.8) Размещение элементов Порт на диагрпмме агента Сборка
(рис 6.9) Добавлен экземпляр агента Сборка
Сборка изделия начинается тогда, когда будут готовы четыре блока (по одному каждого из четырех типов). Полагаем, что время готовности блоков различное. Значит, нужно использовать такие объекты AnyLogic, которые предназначены для синхронизации движения заявок (блоков). Объекты класса Match предназначены именно для синхронизации движения двух заявок.
После готовности четырех блоков для дальнейщей имитации процесса сборки нужно эти четыре заявки объединить в одну, и интерпретировать её как изделие. В AnyLogic имеются объекты некоторых классов, которые позволяют осуществить нужное нам объединение. Применим объекты класса Combine, позволяющие из двух заявок получить одну.
Процесс объединения будет происходить по мере готовности блоков, значит, на пункте сборки будет создаваться очередь, для имитации которой нужно использовать объект queue.
Для имитации непосредственно процесса сборки следует взять объект delay, а для разделения потока изделий на собранные первично и на изделия с заменными блоками после браковки - объект selectOutPut.
Реализуйте часть сегмента имитации работы пунктов сборки.
Прямоугольник. Оставьте имя, предложенное системой.
Местоположение и размер панели Свойства введите в поля X: 320, Y: 80, Ширина: 340, Высота: 230.
Библиотеки моделирования процессов перетащите четыре объекта match и три объекта combine. Расположите и соедините их так, как на Рис. 6.10.
queue, delay, selectOutPut, разместите, соедините и дайте им имена также согласно Рис. 6.10.Поочередно выделите каждый из этих объектов и на страницах Основные панели Свойства установите для:
match…match3:Типы заявок: Вход1, Вход2: Product, Product
Условия соответствия true
Максимальная вместимость 1
Максимальная вместимость 2combine…combine2:Типы заявок: Вход1, Вход2, Выход: Product, Product, Product
Объединенная заявка entity1queue:Тип заявки: Product
Максимальная вместимостьselectOutPut:Тип заявки: Product
Выход true выбирается При выполнении условия
Условие entity.sign1 == 0Объекты match и match1 обеспечивают синхронизацию движения блоков 1 и 2, 3 и 4 соответственно. А объекты match2 и match3 - блоков 1 и 3, 2 и 4 соответственно. Таким образом, обеспечивается синхронизация движения четырех блоков.
Указание свойства entity1 в объектах combine…combine2 позволяет получить на выходе сначала combine, а потом combine2 заявку, имитирующую изначально блок 1. Но теперь эта заявка будет имитировать изделие. Поэтому только для неё ранее было определено значение поля entity.timeSbor (см. Табл. 6.3).
Изделия после элемента пунктСборки разделяются на два потока: собранные изделия первично (entity.sign1=0) и изделия с заменёнными блоками (entity.sign1=2).
(рис 6.10) Фрагмент сегмента имитации работы пункта сборки
Разделение, осуществляемое объектом selectOutPut по условию entity.sign1==0, нужно для учёта количества изделий с заменёнными блоками и количества заменённых блоков.
Свойства объекта delay установите согласно Табл. 6.6.
| Имя | Свойства | Значения |
|---|---|---|
| пунктборки | Отображать имя | Установите флажок |
| Тип заявки | Product | |
| Задержка задаётся | Определённое время | |
| Время задержки | entity.timeSbor | |
| Вместимость | main.kolPunSborki | |
| Действия При выходе | if (entity.sign1 == 0) | |
| {main.kolSobrIzd++; | ||
| main.costSborIzd += main.stSborki; | ||
| entity.cost += main.stSborki;} | ||
| if (entity.sign1 == 2) | ||
| {if (entity.numBlBrak1== 1) | ||
| {main.zamBlock1++; | ||
| entity.cost += main.stZamBlock1; | ||
| main.costSborIzd += main.stZamBlock1;} | ||
| if (entity.numBlBrak2 == 1) | ||
| {main.zamBlock2++; | ||
| entity.cost += main.stZamBlock2; | ||
| main.costSborIzd += main.stZamBlock2;} | ||
| if (entity.numBlBrak3 == 1) | ||
| {main.zamBlock3++; | ||
| entity.cost += main.stZamBlock3; | ||
| main.costSborIzd += main.stZamBlock3;} | ||
| if (entity.numBlBrak4 == 1) | ||
| {main.zamBlock4++; | ||
| entity.cost += main.stZamBlock4; | ||
| main.costSborIzd += main.stZamBlock4;} | ||
| main.kolZamIzd++;} |
Продолжим построение сегмента имитации работы пунктов сборки изделий (Рис. 6.11).
(рис 6.11) Сегмент имитации работы пунктов сборки изделий
Бракованные изделия поступают через порт БракИзд. В заявке, имитирующей такое изделие, поле etity.sign1 = 2. В одном из полей etity.numBlBrak1 … etity.numBlBrak4 этой же заявки также записана единица. Запись произведена при отбраковке на стендах контроля или пунктах приёма изделий. Это мы сделаем (запишем) позже при построении этих сегментов. Для определения, какой из блоков 1 … 4 забракован в изделии, нужно использовать объект selectOutput5. Этот объект в отличие от объекта selectOutput позволяет проверять четыре условия и в зависимости от результата проверки направляет заявку на один из пяти выходов (можно создать объект selectOutput(N) на один вход и N выходов, использовав один объект exit и N объектов enter).
Готовые блоки поступают через порты ГотБл1 … ГотБл4. Поэтому их надо было бы соединить с соответствующими входами объектов match … match1. Но в забракованном изделии нужно заменить какой-то из блоков. Значит, в случае наличия забракованного изделия надо направить из поступающих блоков соответствующий блок на замену. Сделать это можно с использованием объектов selectOutPut. Каждый порт ГотБл1 … ГотБл4 соединить с входом соответствующего объекта selectOutPut. Выходы true этих объектов соединить с соответсвующими входами объектов match … match1. Таким образом, с выходов true готовые блоки будут направляться для первичной сборки изделий, а с выходов false - для замены бракованных блоков. В качестве условия разделения потоков можно использовать простые переменные БрИздБл1 … БрИздБл4. Например, если БрИздБл2 $$\neq$$ 0, то имеется забракованное изделие с блоком 2.
Для дальнейшей реализации процесса замены блока нужно объединить две заявки - имитирующую забракованное изделие и имитирующую блок для замены - в одну заявку. Для объединения двух заявок в одну воспользуйтесь уже известными вам объектами combine. Выходы объекта selectOutput5 соединить с входами delay, а выход каждого из них - с первыми входами объектов combine.
С выходов объектов combine заявки, имитирующие изделия для замены блоков, направляются в очередь очерСбИзд на входе непосредственно пунктов сборки изделий пунктСборки.
Как уже отмечалось ранее, изделия после пунктов сборки разделяются на два потока.
Собранные первично изделия с выхода true объекта selectOutPut направляются на стенды контроля, поэтому этот выход нужно соединить с портом СобрИзд.
Изделие с заменённым блоком нужно вновь направить на стенды контроля. В тоже время его нужно учесть, как забракованный блок и отправить на склад забракованных блоков. Значит, необходимо из одной заявки сделать две. Для этого используйте объект split. Один выход этого объекта соедините с портом БракБл, а другой - с портом СобрИзд.
Выполните изложенные рекомендации практически. Перетащите четыре объекта класса SelectOutPut (или перетащите один объект, а остальные три скопируйте), один объект класса SelectOutPut5, четыре объекта классов Queue и Combine, один объект класса Split и четыре простых переменных. Разместите, дайте им имена и соедините так, как на Рис. 6.11.
Поочередно выделите новые объекты и установите их свойства согласно Табл. 6.7.
| Свойства | Значение |
|---|---|
| selectOutPut … selectOutPut3 | |
| Имя | ГотБлок1 |
| Выход true выбирается | При выполнении условия |
| Условие | БракИздБл1 == 0 |
| Имя | ГотБлок2 |
| Выход true выбирается | При выполнении условия |
| Условие | БракИздБл2 == 0 |
| Имя | ГотБлок3 |
| Выход true выбирается | При выполнении условия |
| Условие | БракИздБл3 == 0 |
| Имя | ГотБлок4 |
| Выход true выбирается | При выполнении условия |
| Условие | БракИздБл4 == 0 |
| selectOutput5 | |
| Имя | БракИзделия |
| Использовать | Условия |
| Условие 0 | entity.numBlBrak1 == 1 |
| Условие 1 | entity.numBlBrak2 == 1 |
| Условие 2 | entity.numBlBrak3 == 1 |
| Условие 3 | entity.numBlBrak4 == 1 |
| match | |
| Имя | синхрБлок_1_2 |
| Типы заявок: Вход1, Вход2: | Product, Product |
| Условие соответствия | true |
| Максимальная вместимость 1 | Установить флажок |
| Максимальная вместимость 2 | Установить флажок |
| Имя | синхрБлок_3_4 |
| Типы заявок: Вход1, Вход2: | Product, Product |
| Условие соответствия | true |
| Максимальная вместимость 1 | Установить флажок |
| Максимальная вместимость 2 | Установить флажок |
| Имя | синхрБлок_1_3 |
| Типы заявок: Вход1, Вход2: | Product, Product |
| Условие соответствия | true |
| Максимальная вместимость 1 | Установить флажок |
| Максимальная вместимость 2 | Установить флажок |
| Имя | синхрБлок_2_4 |
| Типы заявок: Вход1, Вход2: | Product, Product |
| Условие соответствия | true |
| Максимальная вместимость 1 | Установить флажок |
| Максимальная вместимость 2 | Установить флажок |
| combine | |
| Имя | издБлок1 |
| Типы заявок: Вход1, Вход2, Выход | Product, Product, Product |
| Действие при входе 1 | if (entity.numBlBrak1 == 1) |
| БрИздБл1 ++; | |
| Объединенная заявка | entity1 |
| Действия При выходе | if (entity.numBlBrak1 == 1) |
| БрИздБл1 --; | |
| entity.cost += main.stZamBlock1; | |
| entity.timeSbor = | |
| exponential(1/main. | |
| timeZamBlock1); | |
| Имя | издБлок2 |
| Типы заявок: Вход1, Вход2, Выход | Product, Product, Product |
| Действие при входе 1 | if (entity.numBlBrak2 == 1) |
| БрИздБл2 ++; | |
| Объединенная заявка | entity1 |
| Действия При выходе | if (entity.numBlBrak2 == 1) |
| БрИздБл2 --; | |
| entity.cost += main.stZamBlock2; | |
| entity.timeSbor = | |
| exponential(1/main. | |
| timeZamBlock2); | |
| Имя | издБлок3 |
| Типы заявок: Вход1, Вход2, Выход | Product, Product, Product |
| Действие при входе 1 | if (entity.numBlBrak3 == 1) |
| БрИздБл3 ++; | |
| Объединенная заявка | entity1 |
| Действия При выходе | if (entity.numBlBrak3 == 1) |
| БрИздБл3 --; | |
| entity.cost += main.stZamBlock3; | |
| entity.timeSbor = | |
| exponential(1/main. | |
| timeZamBlock3); | |
| Имя | издБлок4 |
| Типы заявок: Вход1, Вход2, Выход | Product, Product, Product |
| Действие при входе 1 | if (entity.numBlBrak4 == 1) |
| БрИздБл4 ++; | |
| Объединенная заявка | entity1 |
| Действия При выходе | if (entity.numBlBrak4 == 1) |
| БрИздБл4 --; | |
| entity.cost += main.stZamBlock4; | |
| entity.timeSbor = | |
| exponential(1/main. | |
| timeZamBlock4); | |
| split | |
| Типы заявок: | Product, Product |
| Количество копий | 1 |
| Новая заявка (копия) | Product |
| Действия При выходе копии | entity.sign1 = 0; |
| entity.cost = original.cost; | |
Стенды контроля изделий предназначены для приёма первично собранных изделий и изделий после замены забракованных блоков, непосредственно процесса контроля изделий, отправки прошедших контроль изделий на пункты приёма, забракованных изделий - на пункты сборки, а также для приёма забракованных изделий с пунктов приёма изделий.
На стендах контроля изделий, вследствие недостатка ресурсов, будет создаваться очередь, для имитации которой используйте объект queue.
Для имитации непосредственно процесса контроля изделий, то есть затрат времени на его проведение, используйте объект delay.
По результатам контроля некоторые изделия будут признаны браком. Для отбраковки изделий нужно применить объект selectOutput.
queue, delay и selectOutput на прямоугольник с именем Стенды контроля изделий диаграммы Main.
queue и установите на странице Основные панели Свойства:Имя: очерСтенКонтр
Тип заявки: Product
Максимальная вместимость Установите флажокdelay и установите его свойства:Тип заявки: Product
Тип Определённое время
Время задержки exponential( 1/timeKontrIzd )
Вместимость kolStendKontr
Действия При выходе:
testSobrIzd++; entity.cost += stKontrIzd; entity.numBlBrak1 = 0; entity.numBlBrak2 = 0; entity.numBlBrak3 = 0; entity.numBlBrak4 = 0;
delay2 с нулевым временем задержки. Если его не включить, объект БракИзделия на диаграмме агента Сборка работать согласно замыслу разработчика не будет.
(рис 6.12) Диаграмма агента Main с элементами всех сегментов
selectOutput и установите его свойства:Имя: БрСтендКон
Тип заявки: Product
Выход true выбирается С заданной вероятностью
Вероятность[0..1] 1-procBrakIzd
Действия При выходе (true) costTestIzd += stKontrIzd;
Действия При выходе (false)
double a = 0;
int numBlock = 0;
entity.sign1 = 2;
a = uniform();
if (a < 1) numBlock = 4;
if (a <= (verBlNum1 + verBlNum2 + verBlNum3)) numBlock=3;
if (a <= (verBlNum1 + verBlNum2)) numBlock = 2;
if (a <= verBlNum1) numBlock = 1;
if (numBlock == 1) {entity.numBlBrak1 = 1;
entity.timeSbor = exponential(1/timeZamBlock1);}
if (numBlock == 2) {entity.numBlBrak2 = 1;
entity.timeSbor = exponential(1/timeZamBlock2);}
if (numBlock == 3) {entity.numBlBrak3 = 1;
entity.timeSbor = exponential(1/timeZamBlock3);}
if (numBlock == 4) {entity.numBlBrak4 = 1;
entity.timeSbor = exponential(1/timeZamBlock4);}
brakSobrIzd ++;Код в свойство Действия При выходе (false) объекта selectOutput введен для розыгрыша номера забракованного в изделии блока. В результате розыгрыша в одно из полей entity.numBlBrak1… entity.numBlBrak4 заносится 1 - признак брака. В поле entity.timeSbor - время замены соответствующего блока на пункте сборки. Полю entity.sign1 присваивается значение 2 - признак брака в изделии.
Пункты приёма изделий предназначены для приёма прошедших стенды контроля изделий, непосредственно приёма изделий, отправки прошедших приём изделий на склад готовых изделий, а забракованных изделий - на стенды контроля.
На пунктах приёма будет создаваться очередь, для имитации которой используйте объект queue.
Для имитации непосредственно процесса приёма изделий используйте элемент delay.
По результатам контроля некоторые изделия будут признаны браком. Для отбраковки воспользуйтесь объектом selectOutput.
queue, delay и selectOutput на прямоугольник с Пункты приема изделий диаграммы класса Main.
queue и установите на странице Основные панели Свойства:Имя: очерПрием
Тип заявки: Product
Максимальная вместимость Установите флажокdelay и установите его свойства:Тип заявки: Product
Тип Определённое время
Время задержки exponential( 1/timePriemIzd )
Вместимость kolPunPriem
Действия При выходе
kolPriemIzd++; costPriemkiIzd += stPriemIzd; entity.cost += stPriemIzd;
selectOutput и установите его свойства:Тип заявки: Product
Выход true выбирается С заданной вероятностью
Вероятность[0..1] 1-procBrakPriem
Действия При выходе (false)
entity.sign1 = 2; brakPriemIzd++;
Код свойства Действия При выходе объекта delay введен для счета количества kolPriemIzd принятых всего изделий.
Код свойства Действия При выходе (false) объекта selectOutput считает количество brakPriemIzd забракованных изделий и полю entity.sign1 присваивает 2 - признак брака в изделии.
Для имитации склада готовых изделий используйте объект sink со следующими свойствами:
Имя: ГотИзделия
Тип заявки: Product
Действия При выходе:
колГотИзд ++; времяИзгИзд = time()/колГотИзд; стоимГотИзд += entity.cost; минСтоимГотИзд +=minCostIzd; коэфУвелСтоимИзд = (стоимГотИзд+стоимБракБл)/минСтоимГотИзд; ostGotBlock1 = gotBlock1 - колГотИзд - zamBlock1; ostGotBlock2 = gotBlock2 - колГотИзд - zamBlock2; ostGotBlock3 = gotBlock3 - колГотИзд - zamBlock3; ostGotBlock4 = gotBlock4 - колГотИзд - zamBlock4;
Код свойства Действия При выходе введен для счёта количества kolGotIzd готовых изделий, их стоимости costGotIzd и коэффициента koefIncrCostIzd увеличения себестоимости изделия вследствие наличия брака.
Кроме того, ведется счёт готовых для сборки блоков, то есть изготовленных цехами и проверенных на постах контроля, но не использованных для сборки изделий блоков по типам ostGotBlock1… ostGotBlock4 на текущее модельное время.
Ранее (см. п. 6.2.4.2) для имитации склада бракованных блоков было рекомендовано использовать один объект sink.
Предположим, что требуется вести раздельный учёт забракованных блоков на постах контроля цехов и забракованных на стендах контроля и пунктах приёма изделий. Для разделения потока брака дополнительному полю entity.sign1 присваивались признаки 1 или 2.
selectOutput и sink на прямоугольник с именем Склад бракованных блоков диаграммы агента Main.
selectOutput, и установите свойства согласно Табл. 6.8.
Коды в свойстве Действия При выходе: обоих объектов sink одинаковые. Они предназначены для счёта:
costzbrakBlock забракованных блоков не по типам, а в целом всех блоков;
allBrakBlock1… allBrakBlock4.Картинки перетащите на сегменты имитации складов готовых изделий и бракованных блоков картинки Склад.| Свойства | Значение |
|---|---|
| selectOutput | |
| Тип заявки: | Product |
| Выход true выбирается | При выполнении условия |
| Условие | entity.sign1 == 1 |
| sink | |
| Имя | БрПостКонтр |
| Тип заявки: | Product |
| Действия При выходе: | if (entity.numBlBrak1 == 1) |
| { стоимБракБл += costBlock1; | |
| allBrakBlock1++;} | |
| if (entity.numBlBrak2 == 1) | |
| { стоимБракБл += costBlock2 ; | |
| allBrakBlock2++;} | |
| if (entity.numBlBrak3 == 1) | |
| { стоимБракБл += costBlock3; | |
| allBrakBlock3++;} | |
| if (entity.numBlBrak4 == 1) | |
| { стоимБракБл += costBlock4; | |
| allBrakBlock4++;} | |
| Имя | БрБлЗам |
| Тип заявки: | Product |
| Действия При выходе: | if (entity.numBlBrak1 == 1) |
| { стоимБракБл += costBlock1; | |
| allBrakBlock1++;} | |
| if (entity.numBlBrak2 == 1) | |
| { стоимБракБл += costBlock2; | |
| allBrakBlock2++;} | |
| if (entity.numBlBrak3 == 1) | |
| { стоимБракБл += costBlock3; | |
| allBrakBlock3++;} | |
| if (entity.numBlBrak4 == 1) | |
| { стоимБракБл += costBlock4; | |
| allBrakBlock4++;} | |
Добавьте свои собственные элементы презентации на ранее созданные области просмотра Mainview, Data, Result, Kont1 и Sbor, щелчком на которых будет производиться переход к той или иной области просмотра. Сделайте так, чтобы из любой области можно было переходить в любую другую область.
Для этого разместите на каждой области просмотра элементы презентации, показанные на Рис. 6.13.
(рис 6.13) Элементы презентации для переключения
Начните с области просмотра Mainview.
Палитре выделите Презентация. Перетащите элемент text на область просмотра Mainview, разместите и введите в поле Текст: Предприятие (Рис. 6.13). На панели Свойства установите в поле Цвет: black, выберите выравнивание текста и шрифт.
text, разместите и введите в поле Текст: Посты контроля блоков. На панели Свойства установите в поле Цвет: blue, выберите выравнивание текста и шрифт. Раскройте Специфические и в поле Действие по щелчку: введите код: тест.Kontr1.navigateTo();
text, разместите и введите в поле Текст: Пункты сборки изделий. Раскройте Специфические. В поле Действие по щелчку: введите: сборка.Sbor.navigateTo();
text. Разместите и введите в поле Текст: Исходные данные. В поле Действие по щелчку: на странице Специфические введите: Данные.navigateTo();
text, разместите и введите в поле Текст: Результаты моделирования. На панели Свойства выделите Специфические и в поле Действие по щелчку: введите: Результаты.navigateTo();Таким образом, с области просмотра Mainview можно будет переходить на любую из четырех областей просмотра. При этом элемент презентации открытой области высвечивается черным цветом, а остальные элементы презентации - голубым цветом.
| Элемент презентации | Действие по щелчку |
|---|---|
| Data | |
| Предприятие | Mainview.navigateTo(); |
| Посты контроля блоков | тест.Kontr1.navigateTo(); |
| Пункты сборки изделий | сборка.Sbor.navigateTo(); |
| Исходные данные | |
| Результаты моделирования | Результаты.navigateTo(); |
| Result | |
| Предприятие | Mainview.navigateTo(); |
| Посты контроля блоков | тест.Kontr1.navigateTo(); |
| Пункты сборки изделий | сборка.Sbor.navigateTo(); |
| Исходные данные | Данные.navigateTo(); |
| Результаты моделирования | |
| Kontrol | |
| Предприятие | main.Mainview.navigateTo(); |
| Посты контроля блоков | |
| Пункты сборки изделий | main.сборка.Sbor.navigateTo(); |
| Исходные данные | main.Данные.navigateTo(); |
| Результаты моделирования | main.Результаты.navigateTo(); |
| Sbor | |
| Предприятие | main.Mainview.navigateTo(); |
| Посты контроля блоков | main.тест.Kontr1.navigateTo(); |
| Пункты сборки изделий | |
| Исходные данные | main.Данные.navigateTo(); |
| Результаты моделирования | main.Результаты.navigateTo(); |
Построение модели для проведения простого эксперимента завершено. Теперь отладьте модель, используя возможности AnyLogic по обнаружению ошибок. Если вы всё выполнили корректно, то получите результаты, показанные на Рис. 6.14.
(рис 6.14) Результаты моделирования согласно постановке задачи
Мы провели эксперименты с моделями, выполнив в GPSS World 1000 прогонов, а в AnyLogic увеличив модельное время в 1000 раз. При этом начальное значение генераторов случайных чисел установили 82874.
Эксперименты проводились при времени работы предприятия 40 часов (2400 единиц модельного времени).
Результаты экспериментов приведены в виде различных показателей функционирования предприятия в Табл. 6.10. В ней приняты те же обозначения (идентификаторы) показателей, что и в модели AnyLogic.
Расшифруем некоторые составные части идентификаторов:
Сравнительная оценка, напоминаем, также проводилась между результатами, полученными в GPSS World и AnyLogic 7. Она свидетельствует о том, что результаты моделирования, полученные в различных средах, адекватны.
Различие мало, например, для коэффициента увеличения стоимости изделия оно составляет 0,004…0,005. Коэффициенты увеличения стоимости изделий, полученные в AnyLogic 7 и AnyLogic 6, практически во всех экспериментах совпадают.
Коэффициенты использования различных подразделений предприятия по производству изделий также отличаются на тысячные доли 0,003…0,007 или они одинаковые. Например, наибольшее отличие коэффициента использования ПК3 (коэфИспПК3) составляет 0,007 в первом эксперименте. Во втором и третьем экспериментах он равен 1. Увеличение числа ПК3 в четвёртом эксперименте уменьшает коэфИспПК3, но при этом коэффициент использования пунктов сборки (коэфИспПС) равен 1. Следовательно необходимо увеличить число пунктов сборки для увеличения производства изделий.
В целях уменьшения затрат на производство изделий целесообразно уменьшить число ПК1, поскольку они загружены примерно на треть (0,315…0,398) в первых трёх экспериментах и на две третьих (0,598) в последнем четвёртом эксперименте. Также можно уменьшить число ПК4.
| Показатели | GPSS World | AnyLogic6 | AnyLogic7 |
|---|---|---|---|
| 1) Согласно постановке задачи | |||
| колГотИзд | 121,628 | 122,337 | 121,721 |
| $$\Delta_{11} = \left | 121,628-121,721 \right | = 0,093$$ | |||
| стоимГотИзд | 74410 | 75151 | 74763 |
| минСтоимГотИзд | 70787 | 71200 | 70841 |
| $$\Delta_{12} = \left | 70787-70841 \right | = 54$$ | |||
| стоимБракБл | 3099 | 3122 | 3079 |
| коэфУвелСтоимИзд | 1,095 | 1,099 | 1,099 |
| $$\Delta_{13} = \left | 1,095-1,099 \right | = 0,004$$ | |||
| времяИзгИзд | 19,732 | 19,618 | 19,717 |
| коэфИспПК1 | 0,315 | 0,316 | 0,315 |
| коэфИспПК2 | 0,726 | 0,728 | 0,729 |
| коэфИспПК3 | 0,696 | 0,699 | 0,703 |
| коэфИспПК4 | 0,472 | 0,474 | 0,475 |
| коэфИспПС | 0,581 | 0,586 | 0,583 |
| коэфИспСВК | 0,545 | 0,548 | 0,545 |
| коэфИспПП | 0,539 | 0,539 | 0,536 |
| 2) aveTimeShop1=15, aveTimeShop2=10, aveTimeShop3=10, aveTimeShop4=15 | |||
| колГотИзд | 147,909 | 147,954 | 148,039 |
| $$\Delta_{21} = \left | 147,909-148,039 \right | = 0,130$$ | |||
| стоимГотИзд | 90487 | 90902 | 90941 |
| минСтоимГотИзд | 86083 | 86109 | 86158 |
| $$\Delta_{22} = \left | 86083-86158 \right | = 75$$ | |||
| стоимБракБл | 3848 | 3824 | 3844 |
| коэфУвелСтоимИзд | 1,096 | 1,1 | 1,1 |
| $$\Delta_{23} = \left | 1,096-1,100 \right | = 0,004$$ | |||
| времяИзгИзд | 16,226 | 16,221 | 16,212 |
| коэфИспПК1 | 0,398 | 0,4 | 0,401 |
| коэфИспПК2 | 0,8 | 0,804 | 0,801 |
| коэфИспПК3 | 1 | 1 | 1 |
| коэфИспПК4 | 0,566 | 0,563 | 0,566 |
| коэфИспПС | 0,705 | 0,705 | 0,704 |
| коэфИспСВК | 0,66 | 0,662 | 0,665 |
| коэфИспПП | 0,654 | 0,654 | 0,655 |
| 3) aveTimeShop4=10 | |||
| колГотИзд | 153,743 | 154,327 | 154,004 |
| $$\Delta_{31} = \left | 153,743-154,004 \right | = 0,261$$ | |||
| стоимГотИзд | 94050 | 94815 | 94614 |
| минСтоимГотИзд | 89478 | 89818 | 89630 |
| $$\Delta_{32} = \left | 89478-89630 \right | = 152$$ | |||
| стоимБракБл | 4412 | 4450 | 4432 |
| коэфУвелСтоимИзд | 1,1 | 1,105 | 1,105 |
| $$\Delta_{33} = \left | 1,100-1,105 \right | = 0,005$$ | |||
| времяИзгИзд | 15,61 | 15,551 | 15,584 |
| коэфИспПК1 | 0,398 | 0,399 | 0,398 |
| коэфИспПК2 | 0,8 | 0,797 | 0,803 |
| коэфИспПК3 | 1 | 1 | 1 |
| коэфИспПК4 | 0,85 | 0,852 | 0,851 |
| коэфИспПС | 0,733 | 0,737 | 0,737 |
| коэфИспСВК | 0,691 | 0,691 | 0,688 |
| коэфИспПП | 0,678 | 0,681 | 0,682 |
| 4) aveTimeShop1=10, postKontr3=3 | |||
| колГотИзд | 209,234 | 209,086 | 209,596 |
| $$\Delta_{41} = \left | 209,234-209,596 \right | = 0,362$$ | |||
| стоимГотИзд | 127880 | 128328 | 128659 |
| минСтоимГотИзд | 121774 | 121688 | 121984 |
| $$\Delta_{42} = \left | 121744-121984 \right | = 240$$ | |||
| стоимБракБл | 4952 | 4848 | 4880 |
| коэфУвелСтоимИзд | 1,091 | 1,094 | 1,095 |
| $$\Delta_{43} = \left | 1,091-1,095 \right | = 0,004$$ | |||
| времяИзгИзд | 11,47 | 11,478 | 11,451 |
| коэфИспПК1 | 0,6 | 0,599 | 0,598 |
| коэфИспПК2 | 0,799 | 0,801 | 0,799 |
| коэфИспПК3 | 0,701 | 0,7 | 0,698 |
| коэфИспПК4 | 0,845 | 0,853 | 0,847 |
| коэфИспПС | 1 | 1 | 1 |
| коэфИспСВК | 0,936 | 0,936 | 0,937 |
| коэфИспПП | 0,923 | 0,923 | 0,927 |
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.