Изготовление в цехе детали начинается через случайное время $$T_n$$. Выполнению операций предшествует подготовка. Длительность подготовки зависит от качества заготовки, из которой будет сделана деталь. Всего различных видов заготовок $$n_1$$. Время подготовки подчинено экспоненциальному закону. Частота появления различных заготовок и средние значения времени их подготовки заданы Табл. 2.1 дискретного распределения:
| Частота | 0,05 | 0,13 | 0,16 | 0,22 | 0,29 | 0,15 |
| Среднее время | 10 | 14 | 21 | 22 | 28 | 25 |
Для изготовления детали последовательно выполняются n операций со средними временами $$T_1, T_2,…,T_n$$ соответственно. После каждой операции в течение времени $$T_{k1}, T_{k2},…,T_{kn}$$ следует контроль. Время выполнения операций и контроля - случайное. Контроль не проходят $$q_1, q_2,…,q_n$$% деталей соответственно.
Забракованные детали поступают на пункт окончательного контроля и проходят на нем проверку в течение времени, распределённого по экспоненциальному закону со средним значением $$T_k$$. В результате из общего количества не прошедших контроль деталей $$q_{n+1}$$% идут в брак, а оставшиеся $$(1-q_{n+1})$$% деталей подлежат повторному выполнению операций, после которых они не прошли контроль. Если деталь во второй раз не проходит контроль, она окончательно бракуется.
Разработать имитационную модель для определения оценки математического ожидания количества деталей, изготовленных цехом в течение 8 часов.
Модель должна также позволять определять относительное количество готовых и забракованных деталей, среднее время изготовления одной детали.
Результаты моделирования необходимо получить с точностью $$\varepsilon = 0,01$$ и доверительной вероятностью $$\alpha = 0,99$$.
Процесс изготовления в цехе деталей представляет собой процесс, протекающий в многофазной разомкнутой системе массового обслуживания с ожиданием (Рис. 2.1). Есть также признаки замкнутой системы - потоки брака для повторной обработки.
(рис 2.1) Цех как система массового обслуживания
Представим, что подготовка заготовки и операции 1, 2 и 3 производятся на станках - одноканальных устройствах (ОКУ) 1, 2, 3 и 4 соответственно. Пункт окончательного контроля можно также представить ОКУ. Необходимые для их имитации средства GPSS приведены на Рис. 2.1.
Время подготовки заготовки и время выполнения операций даны в мин. Возьмём 1 ед. мод. вр. = 1мин.
Рассчитаем количество прогонов, которые нужно выполнить в каждом наблюдении. При этом примем относительное количество готовых деталей как ожидаемую вероятность. Поскольку она заранее не известна, то расчёт проведём для худшего случая:
$$N=t^2_\alpha \cdot \frac{\sigma ^2}{\varepsilon ^2}=2,58^2\cdot \frac{0,5(1-0,5)}{0,01^2}=6,656\frac{0,25}{0,0001}\approx 66641. $$Программа модели прямой задачи приведена ниже.
;Модель процесса изготовления деталей. Прямая задача ; Задание исходных данных TimeMod EQU 480; Время моделирования, 1 ед. мод. вр. = 1 мин ; Среднее время Tn_ EQU 35 ; между поступлениями заготовок T1 EQU 30 ; выполнения 1-й операции, мин T2 EQU 25 ; выполнения 2-й операции, мин T3 EQU 35 ; выполнения 3-й операции, мин Tk1 EQU 4 ; контроля после 1-й операции, мин Tk2 EQU 5 ; контроля после 2-й операции, мин Tk3 EQU 15 ; контроля после 3-й операции, мин Tk EQU 8 ; окончательного контроля, мин q1_ EQU .12 ; Доля брака после 1-й операции q2_ EQU .15 ; Доля брака после 2-й операции q3_ EQU .10 ; Доля брака после 3-й операции q4_ EQU .80 ; Доля окончательного брака ; Описание функции времени подготовки заготовок Pod FUNCTION RN10,D6 .05,10/.18,14/.34,21/.56,22/.85,28/1,25 ; Сегмент имитации изготовления деталей GENERATE (Exponential(23,0,Tn_)) ; Источник заготовок ; Подготовка заготовок для деталей QUEUE Pod ; Встать в очередь SEIZE Pod ; Начать подготовку заготовки DEPART Pod ; Покинуть очередь ADVANCE (Exponential(34,0,FN$Pod)); Подготовка RELEASE Pod ; Закончить подготовку заготовки ; Имитация выполнения 1-й операции DCount ASSIGN 1,1 ; Код 1 - проходит первый раз ASSIGN 2,1 ; Код 1 в Р2-признак 1-й операции Oper1 QUEUE P2 ; Встать в очередь SEIZE Konveer1 ; Начать 1-ю операцию DEPART P2 ; Покинуть очередь ADVANCE (Exponential(23,0,T1)); 1-я операция RELEASE Konveer1 ; Закончить 1-ю операцию ADVANCE (Exponential(23,0,Tk1)); Контроль 1-й операции TRANSFER q1_,,Sboi ; Брак на пункт контроля ; Имитация выполнения 2-й операции ASSIGN 2,2 ; Код 2 в Р2-признак 2-й операции Oper2 QUEUE P2 ; Встать в очередь SEIZE Konveer2 ; Начать вторую операцию DEPART P2 ; Покинуть очередь ADVANCE (Exponential(23,0,T2)) ; 2-я операция RELEASE Konveer2 ; Закончить 2-ю операцию ADVANCE (Exponential(23,0,Tk2)) ; Контроль 2-й операции TRANSFER q2_,,Sboi ; Брак на пункт контроля ; Имитация выполнения 3-й операции ASSIGN 2,3 ; Код 3 в Р2-признак 3-й операции Oper3 QUEUE P2 ; Встать в очередь SEIZE Konveer3 ; Начать третью операцию DEPART P2 ; Покинуть очередь ADVANCE (Exponential (23,0,T3)) ; 3-я операция RELEASE Konveer3 ; Закончить 3-ю операцию ADVANCE (Exponential(23,0,Tk3)); Контроль 3-й операции TRANSFER q3_,,Sboi ; Брак на пункт контроля EndOper1 TERMINATE ; Счёт готовых деталей ; Сегмент имитации работы пункта контроля Sboi TEST E P1,1,EndOper ; Если второй раз, то в окончательный брак QUEUE Kont ; В очередь на пункт контроля SEIZE Kontr ; Занять пункт контроля DEPART Kont ; Покинуть ADVANCE (Exponential(23,0,Tk)); Окончательный контроль RELEASE Kontr ; Освободить пункт контроля TRANSFER q4_,,EndOper ; В окончательный брак ASSIGN 1,2 ; Код 2 в Р1-деталь пойдёт второй раз Met1 TRANSFER ,(Met1+P2) TRANSFER ,Oper1 ; Повторно на 1-ю операцию TRANSFER ,Oper2 ; Повторно на 2-ю операцию TRANSFER ,Oper3 ; Повторно на 3-ю операцию EndOper TERMINATE ; Счет брака ; Cегмент задания времени моделирования и расчета результатов моделирования GENERATE TimeMod ; Время моделирования TEST L X$Prog,TG1,Met11 ; Если условие выполняется, то SAVEVALUE Prog,TG1 ; X$Prog=TG1 содержимому счетчика завершений Met11 TEST E TG1,1,Met12 ; Если содержимое счетчика равно 1, то расчет результатов моделирования SAVEVALUE NDet,(N$EndOper1/X$Prog) ; Количество готовых деталей, шт. SAVEVALUE Brak,(N$EndOper/X$Prog) ; Количество забракованных деталей, шт. SAVEVALUE DoljaBrak,(X$Brak/(X$Brak+X$NDet)) ; Общая доля брака SAVEVALUE DoljaDet,(X$NDet/(X$Brak+X$NDet)) ; Доля готовых деталей SAVEVALUE NDet,(INT(X$NDet)) ; Количество готовых деталей (целое), шт. SAVEVALUE Brak,(INT(X$Brak)) ; Количество забракованных деталей (целое), шт. SAVEVALUE SDet,((AC1-X$AC2)/N$EndOper1) ; Среднее время изготовления одной детали, мин SAVEVALUE AC2,AC1 Met12 TERMINATE 1 START 1000,NP ; Число предварительных прогонов RESET ; Сброс статистики START 16641 ; Число основных прогонов
Программа модели имеет достаточно подробный комментарий. Поэтому остановимся лишь на некоторых её особенностях.
Для задания исходных данных - времени подготовки заготовок - использована дискретная функция Pod. Это позволяет сократить программу по сравнению с тем, если применять команду EQU. Кроме того, упрощается событийная часть модели, так как в блоке имитации подготовки заготовок достаточно указать только ссылку FN$Pod на функцию.
ADVANCE (Exponential(23,0,FN$Pod)); Имитация подготовки заготовки
Коды 1 и 2, записываемые в параметр 1 транзакта, служат признаками не прохождения деталью контроля первый и второй раз соответственно. Признак 2 является основанием отправки детали в брак и исключения её из производства.
Начало сегмента задания времени моделирования и расчёта результатов моделирования построено аналогично этому же сегменту модели п. 1.1.
Для счёта количества готовых и забракованных деталей введены метки EndOper1 и EndOper соответственно. Поскольку эти количества накапливаются за все прогоны, то для получения средних значений они делятся на число прогонов X$Prog, округляются до целого процедурой INT и заносятся в сохраняемые ячейки NDet и Brak соответственно. Далее эти средние значения используются для вычисления относительных долей готовых DoljaDet и забракованных DoljaBrak деталей. Среднее время SDet изготовления одной детали определяется как отношение абсолютного модельного времени AC1 к количеству подготовленных деталей за все прогоны, т.е. к N$EndOper1.
Это было бы правильно, если бы не было предварительных прогонов модели. Модельное время этих прогонов не должно учитываться при определении среднего времени изготовления детали. Его нужно запомнить по завершении предварительных прогонов. Для этого введена команда
SAVEVALUE AC2,AC1 ; Время предварительных прогонов
После окончания основных прогонов производится расчёт:
SAVEVALUE SDet,((AC1-X$AC2)/N$EndOper1) ; Среднее время изготовления одной детали, мин
Полагаем, что вы ввели программу модели, исправили ошибки и выполнили указанное количество прогонов модели. Фрагмент отчёта приведен ниже.
SAVEVALUE RETRY VALUE PROG 0 16641.000 NDET 0 9.000 BRAK 0 3.000 DOLJABRAK 0 0.279 DOLJADET 0 0.721 SDET 0 48.559
В результате решения прямой задачи получим, что за 8 часов цехом будет изготовлено деталей, относительная доля готовых деталей составит DoljaDet = 0,721, а среднее время изготовления одной детали SDet = 48,559 мин. При этом будет забраковано Brak = 3 детали, относительная доля которых составит DoljaBrak = 0,2279.
Фрагмент отчёта, если не использовать процедуру INT, т.е. не округлять до целого количество изготовленных и количество забракованных деталей:
SAVEVALUE RETRY VALUE PROG 0 16641.000 NDET 0 9.885 BRAK 0 3.821 DOLJABRAK 0 0.279 DOLJADET 0 0.721 SDET 0 48.559
За 8 часов цехом будет изготовлено Ndet = 9,885 деталей, относительная доля готовых деталей DoljaDet = 0,721 и среднее время изготовления одной детали SDet = 48,559 мин останутся такими же. При этом будет забраковано Brak = 3,821 деталей, относительная доля которых от общего количества готовых и забракованных DoljaBrak = 0,279 также не изменится.
Целью обратной задачи является определение среднего времени на изготовление какого-то количества деталей. Для проверки работоспособности модели возьмём количество деталей, полученных в результате решения прямой задачи, т.е. Det = 9.
Модель для решения обратной задачи приведена ниже.
; Модель процесса изготовления деталей. Обратная задача … ; Имитация выполнения 3-й операции ASSIGN 2,3 ; Код 3 в Р2-признак 3-й операции Oper3 QUEUE P2 ; Встать в очередь SEIZE Konveer3 ; Начать третью операцию DEPART P2 ; Покинуть очередь ADVANCE (Exponential (23,0,T3)) ; 3-я операция RELEASE Konveer3 ; Закончить 3-ю операцию ADVANCE (Exponential (23,0,Tk3)); Контроль 3-й операции TRANSFER q3_,,Sboi ; Брак на пункт контроля TRANSFER ,Met2 ; Готовые детали ; Сегмент имитации работы пункта контроля Sboi QUEUE Kont ; В очередь на пункт контроля SEIZE Kontr ; Занять пункт контроля DEPART Kont ; Покинуть очередь на пункт контроля ADVANCE (Exponential(23,0,Tk)); Окончательный контроль RELEASE Kontr ; Освободить пункт контроля TRANSFER q4_,,EndOper ; В окончательный брак TEST E P1,1,EndOper ; Если второй раз, то в окончательный брак ASSIGN 1,2 ; Код 2 в Р1-деталь пойдёт второй раз Met1 TRANSFER ,(Met1+P2) TRANSFER ,Oper1 ; Повторно на 1-ю операцию TRANSFER ,Oper2 ; Повторно на 2-ю операцию TRANSFER ,Oper3 ; Повторно на 3-ю операцию EndOper TERMINATE ; Счет брака ; Сегмент завершения моделирования и расчета результатов Met2 TEST L X$Prog,TG1,Met3 ; Если условие выполняется, то SAVEVALUE Prog,TG1 ; X$Prog=TG1 счетчику завершений Met3 SAVEVALUE NDet+,1 ; Счет количества готовых деталей TEST E X$NDet,Det,Ter1 ; Если готово Det деталей, зафиксировать один прогон TEST E TG1,1,Met4 ; Если в счетчике завершений 1, то расчет результатов моделирования SAVEVALUE Brak,(N$EndOper/X$Prog) ; Количество забракованных деталей, шт. SAVEVALUE DoljaBrak,(X$Brak/(X$Brak+Det); Общая доля брака SAVEVALUE DoljaDet,(Det/(X$Brak+Det)) ; Доля готовых деталей SAVEVALUE Brak,(INT(X$Brak)) ; Количество забракованных деталей (целое), шт. SAVEVALUE TDet,(((AC1-X$AC2)/X$Prog)/60); Среднее время изготовления Det деталей, час SAVEVALUE SDet,((X$TDet/Det)#60); Среднее время изготовления одной детали, мин SAVEVALUE AC2,AC1 ; Время предварительных прогонов SAVEVALUE X$Prog,0 ; Обнуление ячейки X$Prog Met4 SAVEVALUE NDet,0 ; Обнуление X$NDet TERMINATE 1 ; Из счётчика завершений минус 1 Ter1 TERMINATE ; Вывод вспомогательных транзактов START 1000,NP ; Число предварительных прогонов модели RESET ; Сброс статистики START 16641 ; Число основных прогонов модели
В приведенной программе модели для решения обратной задачи в целях сокращения исключён текст до части, имитирующей выполнение 3-й операции, так как он такой же, как и в программе модели для решения прямой задачи. Единственное отличие состоит в том, что в исходные данные следует добавить команду для задания количества деталей, которые нужно изготовить:
Det EQU 9 ; Количество деталей, которые нужно изготовить
Округление до целого количества забракованных деталей производится после расчёта доли готовых и забракованных деталей. Если иначе, то расчёт долей будет некорректным.
В программе модели прямой задачи годные детали после выполнения 3-й операции подсчитывались. Имитирующие их транзакты уничтожались:
EndOper1 TERMINATE ; Счёт готовых деталей
В программе модели обратной задачи годные детали нужно отправить в сегмент организации завершения моделирования. Для этого приведенный только что блок счёта готовых деталей заменён следующим (в тексте программы выше он выделен жирным):
TRANSFER ,Met2 ; Готовые детали
Сегмент имитации работы пункта контроля остаётся неизменным. Остановимся на сегменте завершения моделирования и расчета результатов.
Сохраняемая ячейка NDet служит для счёта текущего количества изготовленных деталей. Как только выполняется условие X$NDet = Det, фиксируется один прогон модели. Det - переменная пользователя, которой задаётся количество деталей, время подготовки которых нужно определить.
Вам уже известно, что модельное время предварительных прогонов не должно учитываться при расчёте среднего времени изготовления 9 деталей. Поэтому оно запоминается в сохраняемой ячейке X$AC2, а при расчте вычитается из AC1:
SAVEVALUE TDet,(((AC1-X$AC2)/X$Prog)/60) ; Среднее время изготовления Det деталей, час
Фрагмент отчёта приведен ниже:
SAVEVALUE RETRY VALUE PROG 0 16641.000 BRAK 0 3.000 DOLJABRAK 0 0.279 DOLJADET 0 0.721 TDET 0 7.266 SDET 0 48.443
В результате решения обратной задачи получим, что деталей будут изготовлены цехом за TDet = 7,266 часа, относительная доля которых составит DoljaDet = 0,721, а среднее время изготовления одной детали SDet = 48,443 мин. При этом будет забраковано Brak = 3 детали, относительная доля которых составит DoljaBrak = 0,279.
SAVEVALUE RETRY VALUE PROG 0 16641.000 BRAK 0 3.000 DOLJABRAK 0 0.278 DOLJADET 0 0.722 TDET 0 7.256 SDET 0 48.374
Видно, что результаты моделирования изменились незначительно. Но если эти изменения для вас несущественны, можно оставить указанное число предварительных прогонов модели в дальнейших исследованиях.
В главе 1 был проведен дисперсионный анализ с имитационной моделью, предназначенной для решения прямой задачи. Здесь же мы проведём дисперсионный анализ с моделью, решающей обратную задачу.
Исследовать влияние качества$$q_1, q_2, q_3, q_4$$ выполнения операций на время изготовления D деталей. Значения уровней факторов приведены в Табл. 2.2.
| Уровни факторов | Факторы | |||
|---|---|---|---|---|
| $$q_1$$ | $$q_2$$ | $$q_3$$ | $$q_4$$ | |
| Нижний | 0,1 | 0,15 | 0,1 | 0,2 |
| Верхний | 0,25 | 0,35 | 0,2 | 0,9 |
Результаты моделирования необходимо получить с точностью $$\varepsilon = 1$$ мин и доверительной вероятностью $$\alpha = 0,99$$. Но поскольку остаётся условие определения относительного числа подготовленных деталей, то количество прогонов остаётся равным 16641, что и в модели для решения прямой задачи.
Некоторые особенности построения для такого случая модели были изложены в п. 2.1.2.1. Однако показатели, которые там определялись в дисперсионном анализе, не были временными. А это является существенным в построении сегмента организации завершения моделирования.
Поскольку результатом моделирования является оценка математического ожидания времени TDet изготовления Det деталей, то в ее вычислении используется абсолютное модельное время АС1 (системный числовой атрибут). При проведении дисперсионного анализа встроенный генератор эксперимента имеет две команды START, а между ними - команда RESET. Команда RESET не влияет на абсолютное модельное время. Поэтому АС1 будет суммой абсолютного модельного времени предварительных прогонов до установившегося режима, обозначим его АС2, и абсолютного модельного времени, пусть АС3, основных прогонов, в ходе которых собирается интересующая нас статистика. Нам для расчетов нужно АС3. Для его получения в программу введены строки:
После предварительных прогонов в ячейке X$Prog сохранится указанное в первой команде START количество прогонов. Эта ячейка используется в первой строке рассматриваемого сегмента и её содержимое должно быть равным нулю. В противном случае модель будет работать неверно. Для предотвращения ошибки введена строка:
Проведите эксперимент. Как проводится дисперсионный анализ, вы уже знаете. Теме не менее, установите необходимые данные эксперимента согласно Рис. 2.2. Укажите число предварительных прогонов 1000 вместо 100, установленных по умолчанию.
Результаты эксперимента показаны на Рис. 2.3. Видно, что все четыре фактора существенные. Наибольшее влияние на функцию отклика оказывает фактор В, что вполне логично, так как из первых трёх он имеет наибольший верхний уровень, т. е. наибольшую долю брака. Наименьшую значимость имеет фактор С, что также объясняется более низким значением доли брака.
Измените непосредственно в процедуре запуска сгенерированного Plus-эксперимента количество предварительных прогонов с 1000 на 100 и запустите модель. Вы получите практически те же самые результаты, например, Grand Mean = 9,006 вместо 9,017.
(рис 2.2) Диалоговое окно (заполненное) Screening Experiment Generator (Генератор отсеивающего эксперимента)
(рис 2.3) Результаты отсеивающего эксперимента
AnyLogic-модель процесса изготовления в цехе деталей будет включать согласно представлению как система массового обслуживания (Рис. 2.1) следующие сегменты:
Для ввода исходных данных используем элементы Параметр.
Файл/Создать/Модель на панели инструментов.
Имя модели диалогового окна Новая модель введите Изготовление_в_цехе_деталей. Выберите каталог, в котором будут сохранены файлы вашей модели.
Готово.
Цех.
Презентация перетащите элемент Область просмотра.
Свойства в поле Имя: введите цех.
Выравнивать по: Верхн. левому углу.
Масштабирование: Подогнать под окно.
Местоположение и размер введите в поля X: 0, Y: 0, Ширина: 780, Высота: 530.
Скруглённый прямоугольник. На странице Местоположение и размер установите: X: 280, Y: 300, Ширина: 250, в поле Высота: 220.
text и на странице Основные панели Свойства в поле Текст: введите Исходные данные.
Палитре выделите Основная. Перетащите элементы Параметр на элемент с именем Исходные данные. Разместите их так, как показано на Рис. 2.4. Значения свойств установите согласно Табл. 2.3. На Рис. 2.4, как вы, наверное, уже заметили, два элемента Параметр отличаются от остальных. Они используются для ввода данных Табл. 2.1 как одномерных массивов.
(рис 2.4) Размещение элементов Параметр для ввода исходных данных
| Элементы и их свойства | |||||
|---|---|---|---|---|---|
| Параметр | Параметр | ||||
| Имя | Тип | Значение по умолчанию | Имя | Тип | Значение по умолчанию |
| Tn | double | 35 | Tk1 | double | 4 |
| T1 | double | 30 | Tk2 | double | 5 |
| T2 | double | 25 | Tk3 | double | 15 |
| T3 | double | 35 | Tk | double | 8 |
| q1 | double | 0,12 | врМод | double | 480 |
| q2 | double | 0,15 | колПрог | double | 16641 |
| q3 | double | 0,1 | |||
| q4 | double | 0,8 | |||
Создайте размерности массивов. В данном случае они одинаковые. Элементов в одной строке Табл. 2.1 шесть. Предположим, что число видов заготовок может увеличиться до 10. Значит размерность одного массива 10 элементов.
Проекты и в контекстном меню выберите Создать/Размерность.
Размерность в поле Имя введите КолВарЗаг.
Тип размерности: Диапазон.
Диапазон: введите 1-10.
Готово.Теперь создайте непосредственно массивы. Начните с массива верВарЗаг для вероятностей появления видов заготовок.
Основные перетащите элемент Параметр.
Основные панели Свойства в поле Имя: введите верВарЗаг. Тип: double.
Массив. Откроется окно Размерности (Рис. 2.5). Щёлкните по расположенной справа от окна и подсвеченной зелёным кнопке.
(рис 2.5) Окно элемента Параметр - массива
Edit dimensions (Рис. 2.6). В окошке Возможные размерности: выделите КолВарЗаг.
. Размерность КолВарЗаг появится в окошке Выбранные размерности.
Свойства. В окошке Размерности вы увидите размерность КолВарЗаг.
Редактировать значения массива. Откроется одноимённое диалоговое окно (2.7 ).
(рис 2.6) Окно Выбор размерности
(рис 2.7) Окно Редактирование значений массива
[ВСЕ].
0.05,0.18,0.34,0.56,0.85,1,0,0,0,0
Обратите внимание, что данные из первой строки Табл. 2.1 введены в порядке возрастания, причём, второй элемент = первый элемент Табл. 2.1 + второй Табл. 2.1, третий = второй + третий Табл. 2.1 и т.д. Эта особенность будет учтена в последующем программном коде. Хотя можно было бы ввести и так, как в Табл. 2.1.
Свойства. В поле Значение по умолчанию: появятся введённые вами значения шести элементов массива. Остальные четыре элемента равны нулю. Обратите также внимание на то, что элементы массива заключены в {…}.
Значение по умолчанию: должно быть:
{10,14,21,22,28,25,0,0,0,0}В событийную (функциональную) часть модели включим указанные ранее сегменты. Поскольку построение модели это итерационный процесс, то размещение сегментов и объектов AnyLogic будем корректировать до тех пор, пока не посчитаем достаточным их взаимное расположение для корректной с нашей точки зрения работы модели и её презентации.
Начнём с сегмента имитации процесса подготовки заготовки.
Данный сегмент предназначен для имитации поступления заготовки, ожидания в очереди, имитации непосредственно подготовки заготовки и отправки на выполнение первой операции.
Палитре выделите Презентация. Перетащите элемент Прямоугольник. На странице Местоположение и размер установите: X: 20, Y: 300, Ширина: 240, в поле Высота: 150.
text и на странице Основные панели Свойства в поле Текст: введите Подготовка заготовки (Рис. 2.8).
Палитре выделите Библиотека моделирования процессов. Перетащите объект source на диаграмму т Main и разместите в прямоугольнике с именем Подготовка заготовки.
Detail.
(рис 2.8) Сегмент Подготовка заготовки
Проект Щёлкните правой кнопкой мыши элемент модели верхнего уровня дерева и выберите Создать Java класс.
Новый Java класс. В поле Имя: введите имя нового класса Detail.
Базовый класс: выберите из выпадающего списка Entity в качестве базового класса. Щёлкните кнопку Далее.
Мастера создания Java класса. Добавьте следующие поля Java класса, которые потребуются в дальнейшем при разработке модели:
double n; double a; double Tn1;
Поле n будет использоваться для занесения номера выполняемой с деталью операции. Эти номера необходимы для определения операций, на которые нужно повторно отправить детали с пункта окончательного контроля. Поле a предназначено для занесения кода первого или повторного выполнения операций.
Создать конструктор и Создать метод toString().
Готово. Появится редактор кода и автоматически созданный код вашего Java класса. Закройте код.
Проект только что созданный Java класс и в контекстном меню выберите Преобразовать Java класс в тип агента.
Detail.
Основная перетащите на сегмент Исходные данные элемент Переменная. На странице Основные панели Свойства дайте Имя: b, установите Тип: double.
source. На странице Основные панели Свойства установите свойства согласно Рис. 2.9.
В коде, приведенном ниже, который вы ввели в поле свойства Действия При выходе:, используются данные созданных ранее двух массивов.
entity.n=uniform_pos(); if (entity.n <= верВарЗаг.get(1)) entity.Tn1=срВрПодгЗаг.get(1); else if (entity.n > верВарЗаг.get(1) entity.n <= верВарЗаг.get(2)) entity.Tn1=срВрПодгЗаг.get(2); else if (entity.n > верВарЗаг.get(2) entity.n <= верВарЗаг.get(3)) entity.Tn1=срВрПодгЗаг.get(3); else if (entity.n > верВарЗаг.get(3) entity.n <= верВарЗаг.get(4)) entity.Tn1=срВрПодгЗаг.get(4); else if (entity.n > верВарЗаг.get(4) entity.n <= верВарЗаг.get(5)) entity.Tn1=срВрПодгЗаг.get(5); else if (entity.n > верВарЗаг.get(5) entity.n <=верВарЗаг.get(6)) entity.Tn1=срВрПодгЗаг.get(6);
(рис 2.9) Объект source с установленными свойствами
queue и на странице Основные панели Свойства установите свойства:Имя: очЗаг
Тип заявки: DetailМаксимальная вместимость: установить флажок.
delay и на странице Основные панели Свойства установите свойства:Имя: подЗаг
Тип заявки: Detail
Тип: Определённое время
Время задержки: exponential (1/entity.Tn1)
Вместимость: 1
Действия При выходе: entity.a = 1;Каждый из сегментов операций 1, 2 и 3 предназначен для имитации выполнения соответствующей операции, включающей ожидание в очереди, непосредственно выполнение операции, контроль её качества, отправку на пункт окончательного контроля в случае брака, приём на повторное выполнение операции и контроль.
Презентация Перетащите три элемента Прямоугольник так, как на Рис. 2.10. На странице Местоположение и размер панели Свойства введите: для первого прямоугольника X: 20, Y: 60; для второго - X: 280, Y: 60; для третьго - X: 530, Y: 60. Для всех Ширина: 240, Высота: 180.
text и на странице Основные панели Свойства в поле Текст: каждого из них введите Операция 1, Операция 2, Операция 3 соответственно (Рис. 2.10).
Библиотеки моделирования процессов перетащите для каждого сегмента два объекта queue, два объекта delay и один объект selectOutput, разместите и соедините как на Рис. 2.10.
queue сегмента Операция 1, и на странице Основные панели Свойства установите свойства согласно Рис. 2.10 и Табл. 2.4.На сегменте Операция 1 поясним принятые имена объектов: очОп1 - очередь на операцию 1; выпОп1 - имитация выполнения операции 1; очКонОп1 - очередь на контроль после операции 1; конОп11 - имитация контроля после операции 1; конОп12 - розыгрыш результата контроля.
(рис 2.10) Добавлены сегменты Операция 1, Операция 2, Операция 3
| Объект | Свойства | Значения |
|---|---|---|
| Сегмент Операция 1 | ||
| queue | Имя | очОп1 |
| Тип заявки | Detail | |
| Максимальная вместимость | Установите флажок | |
| delay | Имя | выпОп1 |
| Тип заявки | Detail | |
| Тип | Определённое время | |
| Время задержки | exponential (1/T1) | |
| Вместимость | 1 | |
| queue1 | Имя | очКонОп1 |
| Тип заявки | Detail | |
| Максимальная вместимость | Установите флажок | |
| delay1 | Имя | конОп11 |
| Тип заявки | Detail | |
| Тип | Определённое время | |
| Время задержки | exponential (1/Tk1) | |
| Вместимость | 1 | |
| Действия При выходе | entity.n = 1; | |
| selectOutput | Имя | конОп12 |
| Тип заявки | Detail | |
| Выход true выбирается | Заданной вероятностью | |
| Вероятность | 1-q1 | |
| Сегмент Операция 2 | ||
| queue | Имя | очОп2 |
| Тип заявки | Detail | |
| Максимальная вместимость | Установите флажок | |
| delay | Имя | выпОп2 |
| Тип заявки | Detail | |
| Тип | Определённое время | |
| Время задержки | exponential (1/T2) | |
| Вместимость | 1 | |
| queue1 | Имя | очКонОп2 |
| Тип заявки | Detail | |
| Максимальная вместимость | Установите флажок | |
| delay1 | Имя | конОп21 |
| Тип заявки | Detail | |
| Тип | Определённое время | |
| Время задержки | exponential (1/Tk2) | |
| Вместимость | 1 | |
| Действия При выходе | entity.n = 2 | |
| selectOutput | Имя | конОп22 |
| Тип заявки | Detail | |
| Выход true выбирается | Заданной вероятностью | |
| Вероятность | 1-q2 | |
| Сегмент Операция 3 | ||
| queue | Имя | очОп3 |
| Тип заявки | Detail | |
| Максимальная вместимость | Установите флажок | |
| delay | Имя | выпОп3 |
| Тип заявки | Detail | |
| Тип | Определённое время | |
| Время задержки | exponential (1/T3) | |
| Вместимость | 1 | |
| queue1 | Имя | очКонОп3 |
| Тип заявки | Detail | |
На Рис. 2.10 показаны четыре функциональных сегмента модели, которые построены с использованием 18 объектов AnyLogic. Если вы начнёте создавать очередной сегмент, то после перетаскивания второго объекта появится сообщение: Ограничение ознакомительной версии: нельзя создавать более 20 вложенных объектов. Поэтому остальные сегменты модели нам нужно разместить на втором активном объекте. Создайте этот объект.
Проекты Щёлкните правой кнопкой мыши Main, с которым вы работаете в данный момент, и выберите из контекстного меню Создать/Тип агента.
Шаг 1. Создание нового типа агента.
Не использовать шаблоны типов агентов.
Имя нового агента: Kontrol.
Описание: введите описание сущности, моделируемой этим типом агента.
Готово.Согласно логике процесса изготовления деталей надо после выполнения каждой из трёх операций в случае брака отправить забракованные детали на пункт окончательного контроля. С последнего получить и отправить детали на повторное выполнение тех операций, после которых они были забракованы. Кроме того, готовые детали необходимо передать на склад готовых деталей. Таким образом, для связи с активным объектом Main потребуются семь портов (3+3+1).
Создайте экземпляр нового типа агента Kontrol.
Основная перетащите элемент Порт и разместите сверху в левом ряду (Рис. 2.8).
Основные панели Свойства имя port замените именем наОп1.
Порт с именем наОп1.
Порт (см. Рис. 2.11). При вставке последовательно будут изменяться их имена: наОп2, наОп3.
(рис 2.11) Порты
Основная перетащите элемент Порт и разместите сверху в правом ряду (см. Рис. 2.11).
Основные панели Свойства имя port замените именем брОп1 (идентификатор означает, что через этот порт отправляются бракованные детали после операции 1 на пункт окончательного контроля).
Порт с именем брОп1.
Порт (см. Рис. 2.11).
Основная перетащите элемент Порт и разместите внизу в правом ряду (см. Рис. 2.11).
Основные панели Свойства имя port замените именем готДет.
Порт они автоматически будут объединяться прямоугольником (с пунктирными линиями) и появится надпись Значок.
Проект выделите Kontrol, перетащите на тип агента Main экземпляр типа агента Kontrol, разместите как на Рис. 2.12.
Основные панели Свойства уберите флажок Отображать имя и в поле Имя: введите на_контроль.
Палитре выделите Презентация. Перетащите элемент Прямоугольник и разместите как на Рис. 2.12. На странице Местоположение и размер панели Свойства введите: X: 570, Y: 270, Ширина: 140, Высота: 220.
text и на странице Основные панели Свойства в поле Текст введите На окончательный контроль.Теперь для движения заявок-деталей в модели необходимо надлежащим образом соединить входы и выходы объектов сегментов Операция 1, Операция 2 и Операция 3 с портами.
конОп12, конОп22, конОп32 с портами брОп1, брОп2, брОп3 соответственно.
наОп1, наОп2, наОп3 с входами объектов очОп1, очОп2, очОп3 соответственно.
конОп32 сегмента Операция 3 с портом готДет.На Рис. 2.12 вы видите ещё объекты. Перейдём к размещению их на агенте верхнего уровня Main.
(рис 2.12) Main с сегментами модели и экземпляром типа агента Kontrol
В случае сложных моделей, активные объекты которых содержат большое количество элементов, может возникнуть неудобство: все элементы активного объекта могут просто физически не поместиться в ту область диаграммы, которая будет отображена в окне презентации во время выполнения модели.
Версия 7 AnyLogic предоставляет в распоряжение пользователей специальный элемент для решения этой проблемы - область просмотра. С помощью этого элемента вы можете выделить на диаграмме активного объекта некоторые области, содержащие логически обособленные группы элементов или участки диаграммы. Задав такие области, вы сможете легко переключаться между ними во время выполнения модели с помощью специальных средств навигации, что позволит быстро переходить к тому или иному участку диаграммы активного объекта. При этом в окне презентации запущенной модели будут отображаться те элементы активного объекта, которые попали в заданную вами ранее и сделанную в текущий момент активной область просмотра.
Используем две области просмотра. В первой области просмотра разместим объекты первых пяти сегментов (см. Рис. 2.12), во второй - сегменты Пункт окончательного контроля, Склад готовых деталей и Склад бракованных деталей.
Создайте область просмотра на диаграмме типа агента Main для размещения объектов сегмента Постановка на дежурство.
Палитре выделите Презентация. Перетащите элемент Область просмотра.
. Чтобы в дальнейшем изменить свойства этой области, Вам нужно будет выделить этот значок мышью.
Основные панели Свойства.
Имя: введите zex.
Выравнивать по: Верхн. левому углу.
Масштабирование: Подогнать под окно.
Местоположение и размер установите: X: 0, Y: 0, Ширина: 780, Высота: 530.Области просмотра используются как для навигации по графическому редактору во время создания модели, так и для навигации по окну презентации во время выполнения модели.
Чтобы перейти к другой области просмотра в режиме создания модели:
Области просмотра и выберите из выпадающего списка, к какой именно области просмотра вы хотите перейти.Чтобы перейти к другой области просмотра в режиме выполнения модели:
Область и, затем выберите из списка, к какой именно области просмотра вы хотите перейти.
Показать область... и выберите из выпадающего списка, к какой именно области просмотра вы хотите перейти (эта кнопка принадлежит секции панели инструментов Вид, и возможно, чтобы она стала видна, вам нужно будет вначале показать эту секцию панели инструментов).Вы можете также добавлять свои собственные элементы презентации, щелчком на которых будет производиться переход к той или иной области просмотра. Воспользуйтесь последним.
Палитре выделите Презентация. Перетащите элемент text, разместите и введите в поле Текст: Цех, как на Рис. 2.12.
text, разместите и введите в поле Текст: Пункт окончательного контроля.
Свойства раскройте Специфические и в поле Действие по щелчку: введите следующий Java код: на_контроль.kontr.navigateTo();Во введённом коде на_контроль - имя экземпляра нового типа агента Kontrol, а kontr - имя области просмотра, которую мы создадим позднее на новом типе агента Kontrol.
На Рис. 2.13 показан тип агента Kontrol с размещёнными на нём тремя сегментами модели. Создадим эти сегменты.
(рис 2.13) Тип агента Kontrol с размещёнными на нём тремя сегментами
Презентации перетащите три элемента Прямоугольник и разместите так, как на Рис. 2.10. На странице Местоположение и размер панели Свойства для верхнего прямоугольника введите: X: 110, Y: 70, Ширина: 580, Высота: 240. Для нижних прямоугольников: X: 190, Y: 330, Ширина: 250, Высота: 140; X: 460, Y: 330, Ширина: 250, Высота: 140.
text и на странице Основные панели Свойства в поле Текст: каждого из них вместо имеющегося там слова text введите Пункт окончательного контроля, Склад готовых деталей, Склад бракованных деталей соответственно (Рис. 2.13).
Библиотеки моделирования процессов перетащите два объекта selectOutput, объект queue, объект delay и один объект selectOutput5, разместите в верхнем прямоугольникe и соедините так, как показано на Рис. 2.13. Порты брОп1, брОп2 и брОп3 соединяются с входом объекта selectOutput. Выход T (true) объекта окКон3 соединяется с входом объекта selectOutput5.
selectOutput, и на странице Основные панели Свойства установите свойства согласно Рис. 2.13 и Табл. 2.5. Во всех объектах должен быть установлен флажок Отображать имя и На презентации.| Объект | Свойства | Значения |
|---|---|---|
| selectOutput | Имя | окКон1 |
| Тип заявки | Detail | |
| Выход true выбирается | При выполнении условия | |
| Условие | entity.a<2 | |
| queue | Имя | очКон |
| Тип заявки | Detail | |
| Максимальная вместимость | Установите флажок | |
| delay | Имя | окКон2 |
| Тип заявки | Detail | |
| Тип | Определённое время | |
| Время задержки | exponential (1/main.Tk) | |
| Вместимость | 1 | |
| selectOutput | Имя | окКон3 |
| Тип заявки | Detail | |
| Выход true выбирается | Заданной вероятностью | |
| Вероятность | 1-main.q4 | |
| Действия При выходе(true) | entity.a=2 | |
| selectOutput5 | Имя | распределитель |
| Тип заявки | Detail | |
| Использовать: | Условия | |
| Условие 1 | entity.n==1 | |
| Условие 2 | entity.n==2 | |
| Условие 3 | entity.n==3 | |
| Максимальная вместимость | Установите флажок | |
| delay1 | Имя | конОп31 |
| Тип заявки | Detail | |
| Тип | Определённое время | |
| Время задержки | exponential (1/Tk3) | |
| Вместимость | 1 | |
| Действия При выходе | entity.n = 3 | |
| selectOutput | Имя | конОп32 |
| Тип заявки | Detail | |
| Выход true выбирается | Заданной вероятностью | |
| Вероятность | 1-q3 |
Основная перетащите на левый нижний прямоугольник три элемента Переменная. На странице Основные панели Свойства в поле Имя: каждого элемента введите соответствующие имена, показанные на Рис. 2.13. Установите Тип: double.
Библиотеки моделирования процессов перетащите объект sink.
Основные установите следующие свойства:
Имя: склГотДет
Отображать имя сбросьте флажок;
Тип заявки: Detail
Действия При входеготДетали = склГотДет.count()/main.колПрог; доляГотДет = готДетали/(готДетали + бракДетали); срВрПодгДет = (main.врМод*main.колПрог)/склГотДет.count();
Код предназначен для расчёта результатов моделирования: абсолютного готДетали и относительного доляГотДет количества готовых деталей, среднего времени срВрПодгДет подготовки одной детали.
Картинки перетащите картинку Склад и разместите как на Рис. 2.13.Основная перетащите на правый нижний прямоугольник два элемента Переменная. На странице Основные панели Свойства в поле Имя: каждого элемента введите соответствующие имена, показанные на Рис. 2.13. Тип: double.
Библиотеки моделирования процессов перетащите объект sink.
Основные панели Свойства установите следующие свойства:Имя: склБракДет
Отображать имя сбросьте флажок;
Тип заявки: Detail
Действия При входебракДетали = склБракДет.count()/main.колПрог; доляБрДет = бракДетали/(готДетали+бракДетали);
Код предназначен для расчёта результатов моделирования: абсолютного бракДетали и относительного доляБрДет количества бракованных деталей.
Картинки перетащите картинку Склад и разместите как на Рис. 2.13.Так как все исходные данные размещены на диаграмме типа агента Main, то ссылка на них из диаграммы Kontrol, производится, например, так: main.колПрог;
Презентация перетащите элемент Область просмотра.
Основные панели Свойства.
Имя: введите kontr.
Выравнивать по: Верхн. левому углу.
Масштабирование: Подогнать под окно.
Местоположение и размер панели Свойства введите: X: 30, Y: 10, Ширина: 670, Высота: 480.
Исключить, если он был установлен.
text, разместите и введите в поле Текст: Цех, как на Рис. 2.13.
Свойства раскройте Специфические и в поле Действие по щелчку: введите следующий Java код: main.zex.navigateTo();
text, разместите и введите в поле Текст: Пункт окончательного контроля.
Пункт окончательного контроля. При этом цвет названия Пункт окончательного контроля другой.Для удобства считывания статистических данных о коэффициентах использования (загрузки) пункта подготовки заготовок и пунктов выполнения операций 1…3 дополним модель элементами Переменная и необходимыми java-кодами.
Презентации перетащите элемент Скругленный прямоугольник на диаграмму Kontrol и разместите как на Рис. 2.14. Можно было бы всё это сделать на диаграмме Main, но тогда бы пришлось каждый раз после проведения эксперимента для считывания результатов переключаться между областями просмотра.
Текст: Коэффициенты использования.
Основная перетащите элемент Переменная. Разместите и дайте имя коэфИспПодЗаг, как на Рис. 2.14. Оставьте тип double.
Переменная и дайте ему имя коэфИспВыпОп1. Оставьте тип double.
коэфИспВыпОп1. Вставьте ещё два таких элемента, которым системой будут присвоены имена коэфИспВыпОп2 и коэфИспВыпОп3 (см. Рис. 2.14). Тип будет double.
Специфические установливать флажки Включить сбор статистики.
(рис 2.14) Добавлены элементы для вывода коэффициентов использования
подЗаг. В поле Действия При выходе добавьте код:
на_контроль.коэфИспПодЗаг= подЗаг.statsUtilization.mean();
выпОп1. В поле Действия При выходе введите код:
на_контроль.коэфИспВыпОп1= выпОп1.statsUtilization.mean()
выпОп2. В поле Действия При выходе введите код:
на_контроль.коэфИспВыпОп2= выпОп2.statsUtilization.mean()
выпОп3. В поле Действия При выходе введите код:
на_контроль.коэфИспВыпОп3= выпОп3.statsUtilization.mean()
Рассчитаем количество прогонов, которые нужно выполнить в каждом наблюдении. При этом примем относительное количество готовых деталей как ожидаемую вероятность. Поскольку она заранее не известна, то расчёт проведём для худшего случая:
$$N=t^2_\alpha \cdot \frac{\sigma ^2}{\varepsilon ^2}=2,58^2\cdot \frac{0,5(1-0,5)}{0,01^2}=6,656\frac{0,25}{0,0001}\approx 66641.$$Проекты выделите Simulation:Main.
Модельное время установите Виртуальное время (максимальная скорость). В поле Остановить: из выпадающего списка выберите В заданное время.
Конечное время введите 7987680 (480*16641 = 7987680).
Фиксированное начальное число (воспроизводимые прогоны). В поле Начальное число введите 23.Мы провели эксперименты, увеличив в AnyLogic модельное время в 16641 раз (в GPSS World в каждом эксперименте выполнено 16641 прогонов).
Всего выполнено 8 экспериментов, результаты которых сведены в Табл. 2.6. Первый эксперимент соответствует постановке задачи. Результаты первого эксперимента представлены на Рис. 2.15 и в Табл. 2.6.
В каждом следующем эксперименте параметры, установленные в предыдущем эксперименте, либо остаются неизменными, либо изменяются. Указываются только новые значения параметров в строке, предшествующей результатам следующего эксперимента. Например, во втором эксперименте уменьшено среднее время поступления заготовок с $$T_n = 35$$ до $$T_n = 30$$, а остальные параметры остались неизменными (Табл. 2.6).
В экспериментах изменялись значения шести параметров. Кроме того, в восьмом эксперименте были уменьшены средние времена подготовки вариантов заготовок (значения элементов одномерного массива).
Сравнительный анализ результатов экспериментов свидетельствует об адекватности GPSS World и AnyLogic7, так как их различия несущественны.
Например, относительная доля готовых изделий и относительная доля забракованных отличаются на 0 … 0,002, а среднее время изготовления одной детали - на 0,023 … 0,238.
Коэффиценты использования пункта подготовки заготовок и пунктов выполнения операций 1…3 в некоторых экспериментах или одинаковы, или различаются на 0,001 … 0,006.
По результатам экспериментов (Табл. 2.6) можно сделать выводы об эффективности работы цеха по изготовлению деталей и обнаружить "узкие" места.
Изменение параметров в каждом следующем эксперименте преследовало цель увеличения количества годных деталей и сокращения времени подготовки одной детали. Если в первом эксперименте готовых деталей было 9,916 (9,885), а среднее время изготовления одной детали 48,407 (48,559), то в последнем восьмом эксперименте цель была достигнута - 21,220 (21,161) и 22,620 (22,683) соответственно. При этом доля брака уменьшилась с 0,277 до 0,116.
(рис 2.15) Вариант результатов моделирования
| Показатели | GPSS World | AnyLogic6 | AnyLogic7 |
|---|---|---|---|
| 1) согласно постановке задачи | |||
| готДетали | 9,885 | 9,882 | 9,916 |
| доляГотДет | 0,721 | 0,723 | 0,723 |
| бракДетали | 3,821 | 3,778 | 3,804 |
| доляБрДет | 0,279 | 0,277 | 0,277 |
| срВрПодгДет | 48,559 | 48,573 | 48,407 |
| коэфИспПодЗаг | 0,639 | 0,638 | 0,64 |
| коэфИспВыпОп1 | 0,879 | 0,877 | 0,879 |
| коэфИспВыпОп2 | 0,662 | 0,658 | 0,664 |
| коэфИспВыпОп3 | 0,801 | 0,801 | 0,803 |
| $$\Delta_{11}$$ доляГотДет | 0,002 | ||
| $$\Delta_{12}$$ доляБрДет | 0,002 | ||
| $$\Delta_{13}$$ срВрПодгДет | 0,152 | ||
| 2) Tn = 30 | |||
| готДетали | 11,284 | 11,333 | 11,294 |
| доляГотДет | 0,722 | 0,723 | 0,724 |
| бракДетали | 4,338 | 4,343 | 4,312 |
| доляБрДет | 0,278 | 0,277 | 0,276 |
| срВрПодгДет | 42,538 | 42,353 | 42,5 |
| коэфИспПодЗаг | 0,749 | 0,746 | 0,746 |
| коэфИспВыпОп1 | 1 | 1 | 1 |
| коэфИспВыпОп2 | 0,752 | 0,762 | 0,755 |
| коэфИспВыпОп3 | 0,915 | 0,916 | 0,916 |
| $$\Delta_{21}$$ доляГотДет | 0,002 | ||
| $$\Delta_{22}$$ доляБрДет | 0,002 | ||
| $$\Delta_{23}$$ срВрПодгДет | 0,038 | ||
| 3) T1 = 25, T3 = 30 | |||
| готДетали | 11,552 | 11,555 | 11,558 |
| доляГотДет | 0,722 | 0,724 | 0,723 |
| бракДетали | 4,459 | 4,414 | 4,437 |
| доляБрДет | 0,278 | 0,276 | 0,277 |
| срВрПодгДет | 41,553 | 41,542 | 41,53 |
| коэфИспПодЗаг | 0,748 | 0,746 | 0,748 |
| коэфИспВыпОп1 | 0,852 | 0,852 | 0,852 |
| коэфИспВыпОп2 | 0,774 | 0,77 | 0,77 |
| коэфИспВыпОп3 | 0,802 | 0,801 | 0,802 |
| $$\Delta_{31}$$ доляГотДет | 0,001 | ||
| $$\Delta_{32}$$ доляБрДет | 0,001 | ||
| $$\Delta_{33}$$ срВрПодгДет | 0,023 | ||
| 4) Tn = 25, T1 = 20, T2 = 15, T3 = 25 | |||
| готДетали | 13,845 | 13,9 | 13,882 |
| доляГотДет | 0,723 | 0,724 | 0,724 |
| бракДетали | 5,314 | 5,305 | 5,303 |
| доляБрДет | 0,277 | 0,276 | 0,276 |
| срВрПодгДет | 34,669 | 34,532 | 34,577 |
| коэфИспПодЗаг | 0,895 | 0,899 | 0,897 |
| коэфИспВыпОп1 | 0,817 | 0,822 | 0,818 |
| коэфИспВыпОп2 | 0,555 | 0,558 | 0,557 |
| коэфИспВыпОп3 | 0,801 | 0,803 | 0,801 |
| $$\Delta_{41}$$ доляГотДет | 0,001 | ||
| $$\Delta_{42}$$ доляБрДет | 0,001 | ||
| $$\Delta_{43}$$ срВрПодгДет | 0,112 | ||
| 5) Tn = 20, T3 = 20 | |||
| готДетали | 15,453 | 15,499 | 15,572 |
| доляГотДет | 0,723 | 0,724 | 0,724 |
| бракДетали | 5,932 | 5,915 | 5,925 |
| доляБрДет | 0,277 | 0,276 | 0,276 |
| срВрПодгДет | 31,063 | 30,969 | 30,825 |
| коэфИспПодЗаг | 1 | 1 | 1 |
| коэфИспВыпОп1 | 0,911 | 0,913 | 0,918 |
| коэфИспВыпОп2 | 0,619 | 0,621 | 0,623 |
| коэфИспВыпОп3 | 0,716 | 0,718 | 0,72 |
| $$\Delta_{51}$$ доляГотДет | 0,001 | ||
| $$\Delta_{52}$$ доляБрДет | 0,001 | ||
| $$\Delta_{53}$$ срВрПодгДет | 0,238 | ||
| 6) q3 = 0,05 | |||
| готДетали | 16,2 | 16,206 | 16,219 |
| доляГотДет | 0,755 | 0,757 | 0,757 |
| бракДетали | 5,246 | 5,192 | 5,202 |
| доляБрДет | 0,245 | 0,243 | 0,243 |
| срВрПодгДет | 29,629 | 29,619 | 29,595 |
| коэфИспПодЗаг | 1 | 1 | 1 |
| коэфИспВыпОп1 | 0,916 | 0,911 | 0,913 |
| коэфИспВыпОп2 | 0,622 | 0,62 | 0,621 |
| коэфИспВыпОп3 | 0,71 | 0,711 | 0,711 |
| $$\Delta_{61}$$ доляБрДет | 0,002 | ||
| $$\Delta_{62}$$ доляГотДет | 0,002 | ||
| $$\Delta_{63}$$ срВрПодгДет | 0,034 | ||
| 7) q1= 0,05, q2 = 0,05 | |||
| готДетали | 18,903 | 18,856 | 18,991 |
| доляГотДет | 0,883 | 0,883 | 0,884 |
| бракДетали | 2,504 | 2,491 | 2,491 |
| доляБрДет | 0,117 | 0,117 | 0,116 |
| срВрПодгДет | 25,393 | 25,456 | 25,275 |
| коэфИспПодЗаг | 1 | 1 | 1 |
| коэфИспВыпОп1 | 0,901 | 0,896 | 0,907 |
| коэфИспВыпОп2 | 0,65 | 0,646 | 0,651 |
| коэфИспВыпОп3 | 0,828 | 0,829 | 0,833 |
| $$\Delta_{71}$$ доляГотДет | 0,001 | ||
| $$\Delta_{72}$$ доляБрДет | 0,001 | ||
| $$\Delta_{73}$$ срВрПодгДет | 0,018 | ||
| 8) T1=15, срВрПодгЗаг={7,11,18,19,23,22,0,0,0,0} | |||
| готДетали | 21,161 | 21,25 | 21,22 |
| доляГотДет | 0,883 | 0,884 | 0,884 |
| бракДетали | 2,801 | 2,785 | 2,795 |
| доляБрДет | 0,117 | 0,116 | 0,116 |
| срВрПодгДет | 22,683 | 22,588 | 22,62 |
| коэфИспПодЗаг | 0,939 | 0,94 | 0,938 |
| коэфИспВыпОп1 | 0,756 | 0,76 | 0,759 |
| коэфИспВыпОп2 | 0,725 | 0,729 | 0,728 |
| коэфИспВыпОп3 | 0,929 | 0,932 | 0,931 |
| $$\Delta_{81}$$ доляГотДет | 0,001 | ||
| $$\Delta_{82}$$ доляБрДет | 0,001 | ||
| $$\Delta_{83}$$ срВрПодгДет | 0,063 | ||
Но уже по второму эксперименту видно, что коэфИспВыпОп1=0,879, а коэфИспВыпОп3=0,803, то есть приближаются к 1. Поэтому изменение других параметров ничего не даст. Нужно уменьшить среднее время выполнения операций 1 и 3. Третий эксперимент это подтвердил.
В экспериментах 5…7 коэффициент загрузки пункта подготовки заготовок равен 1. Изменение доли брака лишь немного увеличил искомые показатели. Поэтому дальнейший рост годных деталей и среднего времени подготовки одной детали возможен был лишь при сокращении средних времён подготовки заготовок в зависимости от их типов.
Изготовление в цехе детали начинается через случайное время $$T_n$$. Выполнению операций предшествует подготовка. Длительность подготовки зависит от качества заготовки, из которой будет сделана деталь. Всего различных видов заготовок $$n_1$$. Время подготовки подчинено экспоненциальному закону. Частота появления различных заготовок и средние значения времени их подготовки заданы Табл. 2.1 дискретного распределения:
| Частота | 0,05 | 0,13 | 0,16 | 0,22 | 0,29 | 0,15 |
| Среднее время | 10 | 14 | 21 | 22 | 28 | 25 |
Для изготовления детали последовательно выполняются n операций со средними временами $$T_1, T_2,…,T_n$$ соответственно. После каждой операции в течение времени $$T_{k1}, T_{k2},…,T_{kn}$$ следует контроль. Время выполнения операций и контроля - случайное. Контроль не проходят $$q_1, q_2,…,q_n$$% деталей соответственно.
Забракованные детали поступают на пункт окончательного контроля и проходят на нем проверку в течение времени, распределённого по экспоненциальному закону со средним значением $$T_k$$. В результате из общего количества не прошедших контроль деталей $$q_{n+1}$$% идут в брак, а оставшиеся $$(1-q_{n+1})$$% деталей подлежат повторному выполнению операций, после которых они не прошли контроль. Если деталь во второй раз не проходит контроль, она окончательно бракуется.
Разработать имитационную модель для определения оценки математического ожидания количества деталей, изготовленных цехом в течение 8 часов.
Модель должна также позволять определять относительное количество готовых и забракованных деталей, среднее время изготовления одной детали.
Результаты моделирования необходимо получить с точностью $$\varepsilon = 0,01$$ и доверительной вероятностью $$\alpha = 0,99$$.
Процесс изготовления в цехе деталей представляет собой процесс, протекающий в многофазной разомкнутой системе массового обслуживания с ожиданием (Рис. 2.1). Есть также признаки замкнутой системы - потоки брака для повторной обработки.
(рис 2.1) Цех как система массового обслуживания
Представим, что подготовка заготовки и операции 1, 2 и 3 производятся на станках - одноканальных устройствах (ОКУ) 1, 2, 3 и 4 соответственно. Пункт окончательного контроля можно также представить ОКУ. Необходимые для их имитации средства GPSS приведены на Рис. 2.1.
Время подготовки заготовки и время выполнения операций даны в мин. Возьмём 1 ед. мод. вр. = 1мин.
Рассчитаем количество прогонов, которые нужно выполнить в каждом наблюдении. При этом примем относительное количество готовых деталей как ожидаемую вероятность. Поскольку она заранее не известна, то расчёт проведём для худшего случая:
$$N=t^2_\alpha \cdot \frac{\sigma ^2}{\varepsilon ^2}=2,58^2\cdot \frac{0,5(1-0,5)}{0,01^2}=6,656\frac{0,25}{0,0001}\approx 66641. $$Программа модели прямой задачи приведена ниже.
;Модель процесса изготовления деталей. Прямая задача ; Задание исходных данных TimeMod EQU 480; Время моделирования, 1 ед. мод. вр. = 1 мин ; Среднее время Tn_ EQU 35 ; между поступлениями заготовок T1 EQU 30 ; выполнения 1-й операции, мин T2 EQU 25 ; выполнения 2-й операции, мин T3 EQU 35 ; выполнения 3-й операции, мин Tk1 EQU 4 ; контроля после 1-й операции, мин Tk2 EQU 5 ; контроля после 2-й операции, мин Tk3 EQU 15 ; контроля после 3-й операции, мин Tk EQU 8 ; окончательного контроля, мин q1_ EQU .12 ; Доля брака после 1-й операции q2_ EQU .15 ; Доля брака после 2-й операции q3_ EQU .10 ; Доля брака после 3-й операции q4_ EQU .80 ; Доля окончательного брака ; Описание функции времени подготовки заготовок Pod FUNCTION RN10,D6 .05,10/.18,14/.34,21/.56,22/.85,28/1,25 ; Сегмент имитации изготовления деталей GENERATE (Exponential(23,0,Tn_)) ; Источник заготовок ; Подготовка заготовок для деталей QUEUE Pod ; Встать в очередь SEIZE Pod ; Начать подготовку заготовки DEPART Pod ; Покинуть очередь ADVANCE (Exponential(34,0,FN$Pod)); Подготовка RELEASE Pod ; Закончить подготовку заготовки ; Имитация выполнения 1-й операции DCount ASSIGN 1,1 ; Код 1 - проходит первый раз ASSIGN 2,1 ; Код 1 в Р2-признак 1-й операции Oper1 QUEUE P2 ; Встать в очередь SEIZE Konveer1 ; Начать 1-ю операцию DEPART P2 ; Покинуть очередь ADVANCE (Exponential(23,0,T1)); 1-я операция RELEASE Konveer1 ; Закончить 1-ю операцию ADVANCE (Exponential(23,0,Tk1)); Контроль 1-й операции TRANSFER q1_,,Sboi ; Брак на пункт контроля ; Имитация выполнения 2-й операции ASSIGN 2,2 ; Код 2 в Р2-признак 2-й операции Oper2 QUEUE P2 ; Встать в очередь SEIZE Konveer2 ; Начать вторую операцию DEPART P2 ; Покинуть очередь ADVANCE (Exponential(23,0,T2)) ; 2-я операция RELEASE Konveer2 ; Закончить 2-ю операцию ADVANCE (Exponential(23,0,Tk2)) ; Контроль 2-й операции TRANSFER q2_,,Sboi ; Брак на пункт контроля ; Имитация выполнения 3-й операции ASSIGN 2,3 ; Код 3 в Р2-признак 3-й операции Oper3 QUEUE P2 ; Встать в очередь SEIZE Konveer3 ; Начать третью операцию DEPART P2 ; Покинуть очередь ADVANCE (Exponential (23,0,T3)) ; 3-я операция RELEASE Konveer3 ; Закончить 3-ю операцию ADVANCE (Exponential(23,0,Tk3)); Контроль 3-й операции TRANSFER q3_,,Sboi ; Брак на пункт контроля EndOper1 TERMINATE ; Счёт готовых деталей ; Сегмент имитации работы пункта контроля Sboi TEST E P1,1,EndOper ; Если второй раз, то в окончательный брак QUEUE Kont ; В очередь на пункт контроля SEIZE Kontr ; Занять пункт контроля DEPART Kont ; Покинуть ADVANCE (Exponential(23,0,Tk)); Окончательный контроль RELEASE Kontr ; Освободить пункт контроля TRANSFER q4_,,EndOper ; В окончательный брак ASSIGN 1,2 ; Код 2 в Р1-деталь пойдёт второй раз Met1 TRANSFER ,(Met1+P2) TRANSFER ,Oper1 ; Повторно на 1-ю операцию TRANSFER ,Oper2 ; Повторно на 2-ю операцию TRANSFER ,Oper3 ; Повторно на 3-ю операцию EndOper TERMINATE ; Счет брака ; Cегмент задания времени моделирования и расчета результатов моделирования GENERATE TimeMod ; Время моделирования TEST L X$Prog,TG1,Met11 ; Если условие выполняется, то SAVEVALUE Prog,TG1 ; X$Prog=TG1 содержимому счетчика завершений Met11 TEST E TG1,1,Met12 ; Если содержимое счетчика равно 1, то расчет результатов моделирования SAVEVALUE NDet,(N$EndOper1/X$Prog) ; Количество готовых деталей, шт. SAVEVALUE Brak,(N$EndOper/X$Prog) ; Количество забракованных деталей, шт. SAVEVALUE DoljaBrak,(X$Brak/(X$Brak+X$NDet)) ; Общая доля брака SAVEVALUE DoljaDet,(X$NDet/(X$Brak+X$NDet)) ; Доля готовых деталей SAVEVALUE NDet,(INT(X$NDet)) ; Количество готовых деталей (целое), шт. SAVEVALUE Brak,(INT(X$Brak)) ; Количество забракованных деталей (целое), шт. SAVEVALUE SDet,((AC1-X$AC2)/N$EndOper1) ; Среднее время изготовления одной детали, мин SAVEVALUE AC2,AC1 Met12 TERMINATE 1 START 1000,NP ; Число предварительных прогонов RESET ; Сброс статистики START 16641 ; Число основных прогонов
Программа модели имеет достаточно подробный комментарий. Поэтому остановимся лишь на некоторых её особенностях.
Для задания исходных данных - времени подготовки заготовок - использована дискретная функция Pod. Это позволяет сократить программу по сравнению с тем, если применять команду EQU. Кроме того, упрощается событийная часть модели, так как в блоке имитации подготовки заготовок достаточно указать только ссылку FN$Pod на функцию.
ADVANCE (Exponential(23,0,FN$Pod)); Имитация подготовки заготовки
Коды 1 и 2, записываемые в параметр 1 транзакта, служат признаками не прохождения деталью контроля первый и второй раз соответственно. Признак 2 является основанием отправки детали в брак и исключения её из производства.
Начало сегмента задания времени моделирования и расчёта результатов моделирования построено аналогично этому же сегменту модели п. 1.1.
Для счёта количества готовых и забракованных деталей введены метки EndOper1 и EndOper соответственно. Поскольку эти количества накапливаются за все прогоны, то для получения средних значений они делятся на число прогонов X$Prog, округляются до целого процедурой INT и заносятся в сохраняемые ячейки NDet и Brak соответственно. Далее эти средние значения используются для вычисления относительных долей готовых DoljaDet и забракованных DoljaBrak деталей. Среднее время SDet изготовления одной детали определяется как отношение абсолютного модельного времени AC1 к количеству подготовленных деталей за все прогоны, т.е. к N$EndOper1.
Это было бы правильно, если бы не было предварительных прогонов модели. Модельное время этих прогонов не должно учитываться при определении среднего времени изготовления детали. Его нужно запомнить по завершении предварительных прогонов. Для этого введена команда
SAVEVALUE AC2,AC1 ; Время предварительных прогонов
После окончания основных прогонов производится расчёт:
SAVEVALUE SDet,((AC1-X$AC2)/N$EndOper1) ; Среднее время изготовления одной детали, мин
Полагаем, что вы ввели программу модели, исправили ошибки и выполнили указанное количество прогонов модели. Фрагмент отчёта приведен ниже.
SAVEVALUE RETRY VALUE PROG 0 16641.000 NDET 0 9.000 BRAK 0 3.000 DOLJABRAK 0 0.279 DOLJADET 0 0.721 SDET 0 48.559
В результате решения прямой задачи получим, что за 8 часов цехом будет изготовлено деталей, относительная доля готовых деталей составит DoljaDet = 0,721, а среднее время изготовления одной детали SDet = 48,559 мин. При этом будет забраковано Brak = 3 детали, относительная доля которых составит DoljaBrak = 0,2279.
Фрагмент отчёта, если не использовать процедуру INT, т.е. не округлять до целого количество изготовленных и количество забракованных деталей:
SAVEVALUE RETRY VALUE PROG 0 16641.000 NDET 0 9.885 BRAK 0 3.821 DOLJABRAK 0 0.279 DOLJADET 0 0.721 SDET 0 48.559
За 8 часов цехом будет изготовлено Ndet = 9,885 деталей, относительная доля готовых деталей DoljaDet = 0,721 и среднее время изготовления одной детали SDet = 48,559 мин останутся такими же. При этом будет забраковано Brak = 3,821 деталей, относительная доля которых от общего количества готовых и забракованных DoljaBrak = 0,279 также не изменится.
Целью обратной задачи является определение среднего времени на изготовление какого-то количества деталей. Для проверки работоспособности модели возьмём количество деталей, полученных в результате решения прямой задачи, т.е. Det = 9.
Модель для решения обратной задачи приведена ниже.
; Модель процесса изготовления деталей. Обратная задача … ; Имитация выполнения 3-й операции ASSIGN 2,3 ; Код 3 в Р2-признак 3-й операции Oper3 QUEUE P2 ; Встать в очередь SEIZE Konveer3 ; Начать третью операцию DEPART P2 ; Покинуть очередь ADVANCE (Exponential (23,0,T3)) ; 3-я операция RELEASE Konveer3 ; Закончить 3-ю операцию ADVANCE (Exponential (23,0,Tk3)); Контроль 3-й операции TRANSFER q3_,,Sboi ; Брак на пункт контроля TRANSFER ,Met2 ; Готовые детали ; Сегмент имитации работы пункта контроля Sboi QUEUE Kont ; В очередь на пункт контроля SEIZE Kontr ; Занять пункт контроля DEPART Kont ; Покинуть очередь на пункт контроля ADVANCE (Exponential(23,0,Tk)); Окончательный контроль RELEASE Kontr ; Освободить пункт контроля TRANSFER q4_,,EndOper ; В окончательный брак TEST E P1,1,EndOper ; Если второй раз, то в окончательный брак ASSIGN 1,2 ; Код 2 в Р1-деталь пойдёт второй раз Met1 TRANSFER ,(Met1+P2) TRANSFER ,Oper1 ; Повторно на 1-ю операцию TRANSFER ,Oper2 ; Повторно на 2-ю операцию TRANSFER ,Oper3 ; Повторно на 3-ю операцию EndOper TERMINATE ; Счет брака ; Сегмент завершения моделирования и расчета результатов Met2 TEST L X$Prog,TG1,Met3 ; Если условие выполняется, то SAVEVALUE Prog,TG1 ; X$Prog=TG1 счетчику завершений Met3 SAVEVALUE NDet+,1 ; Счет количества готовых деталей TEST E X$NDet,Det,Ter1 ; Если готово Det деталей, зафиксировать один прогон TEST E TG1,1,Met4 ; Если в счетчике завершений 1, то расчет результатов моделирования SAVEVALUE Brak,(N$EndOper/X$Prog) ; Количество забракованных деталей, шт. SAVEVALUE DoljaBrak,(X$Brak/(X$Brak+Det); Общая доля брака SAVEVALUE DoljaDet,(Det/(X$Brak+Det)) ; Доля готовых деталей SAVEVALUE Brak,(INT(X$Brak)) ; Количество забракованных деталей (целое), шт. SAVEVALUE TDet,(((AC1-X$AC2)/X$Prog)/60); Среднее время изготовления Det деталей, час SAVEVALUE SDet,((X$TDet/Det)#60); Среднее время изготовления одной детали, мин SAVEVALUE AC2,AC1 ; Время предварительных прогонов SAVEVALUE X$Prog,0 ; Обнуление ячейки X$Prog Met4 SAVEVALUE NDet,0 ; Обнуление X$NDet TERMINATE 1 ; Из счётчика завершений минус 1 Ter1 TERMINATE ; Вывод вспомогательных транзактов START 1000,NP ; Число предварительных прогонов модели RESET ; Сброс статистики START 16641 ; Число основных прогонов модели
В приведенной программе модели для решения обратной задачи в целях сокращения исключён текст до части, имитирующей выполнение 3-й операции, так как он такой же, как и в программе модели для решения прямой задачи. Единственное отличие состоит в том, что в исходные данные следует добавить команду для задания количества деталей, которые нужно изготовить:
Det EQU 9 ; Количество деталей, которые нужно изготовить
Округление до целого количества забракованных деталей производится после расчёта доли готовых и забракованных деталей. Если иначе, то расчёт долей будет некорректным.
В программе модели прямой задачи годные детали после выполнения 3-й операции подсчитывались. Имитирующие их транзакты уничтожались:
EndOper1 TERMINATE ; Счёт готовых деталей
В программе модели обратной задачи годные детали нужно отправить в сегмент организации завершения моделирования. Для этого приведенный только что блок счёта готовых деталей заменён следующим (в тексте программы выше он выделен жирным):
TRANSFER ,Met2 ; Готовые детали
Сегмент имитации работы пункта контроля остаётся неизменным. Остановимся на сегменте завершения моделирования и расчета результатов.
Сохраняемая ячейка NDet служит для счёта текущего количества изготовленных деталей. Как только выполняется условие X$NDet = Det, фиксируется один прогон модели. Det - переменная пользователя, которой задаётся количество деталей, время подготовки которых нужно определить.
Вам уже известно, что модельное время предварительных прогонов не должно учитываться при расчёте среднего времени изготовления 9 деталей. Поэтому оно запоминается в сохраняемой ячейке X$AC2, а при расчте вычитается из AC1:
SAVEVALUE TDet,(((AC1-X$AC2)/X$Prog)/60) ; Среднее время изготовления Det деталей, час
Фрагмент отчёта приведен ниже:
SAVEVALUE RETRY VALUE PROG 0 16641.000 BRAK 0 3.000 DOLJABRAK 0 0.279 DOLJADET 0 0.721 TDET 0 7.266 SDET 0 48.443
В результате решения обратной задачи получим, что деталей будут изготовлены цехом за TDet = 7,266 часа, относительная доля которых составит DoljaDet = 0,721, а среднее время изготовления одной детали SDet = 48,443 мин. При этом будет забраковано Brak = 3 детали, относительная доля которых составит DoljaBrak = 0,279.
SAVEVALUE RETRY VALUE PROG 0 16641.000 BRAK 0 3.000 DOLJABRAK 0 0.278 DOLJADET 0 0.722 TDET 0 7.256 SDET 0 48.374
Видно, что результаты моделирования изменились незначительно. Но если эти изменения для вас несущественны, можно оставить указанное число предварительных прогонов модели в дальнейших исследованиях.
В главе 1 был проведен дисперсионный анализ с имитационной моделью, предназначенной для решения прямой задачи. Здесь же мы проведём дисперсионный анализ с моделью, решающей обратную задачу.
Исследовать влияние качества$$q_1, q_2, q_3, q_4$$ выполнения операций на время изготовления D деталей. Значения уровней факторов приведены в Табл. 2.2.
| Уровни факторов | Факторы | |||
|---|---|---|---|---|
| $$q_1$$ | $$q_2$$ | $$q_3$$ | $$q_4$$ | |
| Нижний | 0,1 | 0,15 | 0,1 | 0,2 |
| Верхний | 0,25 | 0,35 | 0,2 | 0,9 |
Результаты моделирования необходимо получить с точностью $$\varepsilon = 1$$ мин и доверительной вероятностью $$\alpha = 0,99$$. Но поскольку остаётся условие определения относительного числа подготовленных деталей, то количество прогонов остаётся равным 16641, что и в модели для решения прямой задачи.
Некоторые особенности построения для такого случая модели были изложены в п. 2.1.2.1. Однако показатели, которые там определялись в дисперсионном анализе, не были временными. А это является существенным в построении сегмента организации завершения моделирования.
Поскольку результатом моделирования является оценка математического ожидания времени TDet изготовления Det деталей, то в ее вычислении используется абсолютное модельное время АС1 (системный числовой атрибут). При проведении дисперсионного анализа встроенный генератор эксперимента имеет две команды START, а между ними - команда RESET. Команда RESET не влияет на абсолютное модельное время. Поэтому АС1 будет суммой абсолютного модельного времени предварительных прогонов до установившегося режима, обозначим его АС2, и абсолютного модельного времени, пусть АС3, основных прогонов, в ходе которых собирается интересующая нас статистика. Нам для расчетов нужно АС3. Для его получения в программу введены строки:
После предварительных прогонов в ячейке X$Prog сохранится указанное в первой команде START количество прогонов. Эта ячейка используется в первой строке рассматриваемого сегмента и её содержимое должно быть равным нулю. В противном случае модель будет работать неверно. Для предотвращения ошибки введена строка:
Проведите эксперимент. Как проводится дисперсионный анализ, вы уже знаете. Теме не менее, установите необходимые данные эксперимента согласно Рис. 2.2. Укажите число предварительных прогонов 1000 вместо 100, установленных по умолчанию.
Результаты эксперимента показаны на Рис. 2.3. Видно, что все четыре фактора существенные. Наибольшее влияние на функцию отклика оказывает фактор В, что вполне логично, так как из первых трёх он имеет наибольший верхний уровень, т. е. наибольшую долю брака. Наименьшую значимость имеет фактор С, что также объясняется более низким значением доли брака.
Измените непосредственно в процедуре запуска сгенерированного Plus-эксперимента количество предварительных прогонов с 1000 на 100 и запустите модель. Вы получите практически те же самые результаты, например, Grand Mean = 9,006 вместо 9,017.
(рис 2.2) Диалоговое окно (заполненное) Screening Experiment Generator (Генератор отсеивающего эксперимента)
(рис 2.3) Результаты отсеивающего эксперимента
AnyLogic-модель процесса изготовления в цехе деталей будет включать согласно представлению как система массового обслуживания (Рис. 2.1) следующие сегменты:
Для ввода исходных данных используем элементы Параметр.
Файл/Создать/Модель на панели инструментов.
Имя модели диалогового окна Новая модель введите Изготовление_в_цехе_деталей. Выберите каталог, в котором будут сохранены файлы вашей модели.
Готово.
Цех.
Презентация перетащите элемент Область просмотра.
Свойства в поле Имя: введите цех.
Выравнивать по: Верхн. левому углу.
Масштабирование: Подогнать под окно.
Местоположение и размер введите в поля X: 0, Y: 0, Ширина: 780, Высота: 530.
Скруглённый прямоугольник. На странице Местоположение и размер установите: X: 280, Y: 300, Ширина: 250, в поле Высота: 220.
text и на странице Основные панели Свойства в поле Текст: введите Исходные данные.
Палитре выделите Основная. Перетащите элементы Параметр на элемент с именем Исходные данные. Разместите их так, как показано на Рис. 2.4. Значения свойств установите согласно Табл. 2.3. На Рис. 2.4, как вы, наверное, уже заметили, два элемента Параметр отличаются от остальных. Они используются для ввода данных Табл. 2.1 как одномерных массивов.
(рис 2.4) Размещение элементов Параметр для ввода исходных данных
| Элементы и их свойства | |||||
|---|---|---|---|---|---|
| Параметр | Параметр | ||||
| Имя | Тип | Значение по умолчанию | Имя | Тип | Значение по умолчанию |
| Tn | double | 35 | Tk1 | double | 4 |
| T1 | double | 30 | Tk2 | double | 5 |
| T2 | double | 25 | Tk3 | double | 15 |
| T3 | double | 35 | Tk | double | 8 |
| q1 | double | 0,12 | врМод | double | 480 |
| q2 | double | 0,15 | колПрог | double | 16641 |
| q3 | double | 0,1 | |||
| q4 | double | 0,8 | |||
Создайте размерности массивов. В данном случае они одинаковые. Элементов в одной строке Табл. 2.1 шесть. Предположим, что число видов заготовок может увеличиться до 10. Значит размерность одного массива 10 элементов.
Проекты и в контекстном меню выберите Создать/Размерность.
Размерность в поле Имя введите КолВарЗаг.
Тип размерности: Диапазон.
Диапазон: введите 1-10.
Готово.Теперь создайте непосредственно массивы. Начните с массива верВарЗаг для вероятностей появления видов заготовок.
Основные перетащите элемент Параметр.
Основные панели Свойства в поле Имя: введите верВарЗаг. Тип: double.
Массив. Откроется окно Размерности (Рис. 2.5). Щёлкните по расположенной справа от окна и подсвеченной зелёным кнопке.
(рис 2.5) Окно элемента Параметр - массива
Edit dimensions (Рис. 2.6). В окошке Возможные размерности: выделите КолВарЗаг.
. Размерность КолВарЗаг появится в окошке Выбранные размерности.
Свойства. В окошке Размерности вы увидите размерность КолВарЗаг.
Редактировать значения массива. Откроется одноимённое диалоговое окно (2.7 ).
(рис 2.6) Окно Выбор размерности
(рис 2.7) Окно Редактирование значений массива
[ВСЕ].
0.05,0.18,0.34,0.56,0.85,1,0,0,0,0
Обратите внимание, что данные из первой строки Табл. 2.1 введены в порядке возрастания, причём, второй элемент = первый элемент Табл. 2.1 + второй Табл. 2.1, третий = второй + третий Табл. 2.1 и т.д. Эта особенность будет учтена в последующем программном коде. Хотя можно было бы ввести и так, как в Табл. 2.1.
Свойства. В поле Значение по умолчанию: появятся введённые вами значения шести элементов массива. Остальные четыре элемента равны нулю. Обратите также внимание на то, что элементы массива заключены в {…}.
Значение по умолчанию: должно быть:
{10,14,21,22,28,25,0,0,0,0}В событийную (функциональную) часть модели включим указанные ранее сегменты. Поскольку построение модели это итерационный процесс, то размещение сегментов и объектов AnyLogic будем корректировать до тех пор, пока не посчитаем достаточным их взаимное расположение для корректной с нашей точки зрения работы модели и её презентации.
Начнём с сегмента имитации процесса подготовки заготовки.
Данный сегмент предназначен для имитации поступления заготовки, ожидания в очереди, имитации непосредственно подготовки заготовки и отправки на выполнение первой операции.
Палитре выделите Презентация. Перетащите элемент Прямоугольник. На странице Местоположение и размер установите: X: 20, Y: 300, Ширина: 240, в поле Высота: 150.
text и на странице Основные панели Свойства в поле Текст: введите Подготовка заготовки (Рис. 2.8).
Палитре выделите Библиотека моделирования процессов. Перетащите объект source на диаграмму т Main и разместите в прямоугольнике с именем Подготовка заготовки.
Detail.
(рис 2.8) Сегмент Подготовка заготовки
Проект Щёлкните правой кнопкой мыши элемент модели верхнего уровня дерева и выберите Создать Java класс.
Новый Java класс. В поле Имя: введите имя нового класса Detail.
Базовый класс: выберите из выпадающего списка Entity в качестве базового класса. Щёлкните кнопку Далее.
Мастера создания Java класса. Добавьте следующие поля Java класса, которые потребуются в дальнейшем при разработке модели:
double n; double a; double Tn1;
Поле n будет использоваться для занесения номера выполняемой с деталью операции. Эти номера необходимы для определения операций, на которые нужно повторно отправить детали с пункта окончательного контроля. Поле a предназначено для занесения кода первого или повторного выполнения операций.
Создать конструктор и Создать метод toString().
Готово. Появится редактор кода и автоматически созданный код вашего Java класса. Закройте код.
Проект только что созданный Java класс и в контекстном меню выберите Преобразовать Java класс в тип агента.
Detail.
Основная перетащите на сегмент Исходные данные элемент Переменная. На странице Основные панели Свойства дайте Имя: b, установите Тип: double.
source. На странице Основные панели Свойства установите свойства согласно Рис. 2.9.
В коде, приведенном ниже, который вы ввели в поле свойства Действия При выходе:, используются данные созданных ранее двух массивов.
entity.n=uniform_pos(); if (entity.n <= верВарЗаг.get(1)) entity.Tn1=срВрПодгЗаг.get(1); else if (entity.n > верВарЗаг.get(1) entity.n <= верВарЗаг.get(2)) entity.Tn1=срВрПодгЗаг.get(2); else if (entity.n > верВарЗаг.get(2) entity.n <= верВарЗаг.get(3)) entity.Tn1=срВрПодгЗаг.get(3); else if (entity.n > верВарЗаг.get(3) entity.n <= верВарЗаг.get(4)) entity.Tn1=срВрПодгЗаг.get(4); else if (entity.n > верВарЗаг.get(4) entity.n <= верВарЗаг.get(5)) entity.Tn1=срВрПодгЗаг.get(5); else if (entity.n > верВарЗаг.get(5) entity.n <=верВарЗаг.get(6)) entity.Tn1=срВрПодгЗаг.get(6);
(рис 2.9) Объект source с установленными свойствами
queue и на странице Основные панели Свойства установите свойства:Имя: очЗаг
Тип заявки: DetailМаксимальная вместимость: установить флажок.
delay и на странице Основные панели Свойства установите свойства:Имя: подЗаг
Тип заявки: Detail
Тип: Определённое время
Время задержки: exponential (1/entity.Tn1)
Вместимость: 1
Действия При выходе: entity.a = 1;Каждый из сегментов операций 1, 2 и 3 предназначен для имитации выполнения соответствующей операции, включающей ожидание в очереди, непосредственно выполнение операции, контроль её качества, отправку на пункт окончательного контроля в случае брака, приём на повторное выполнение операции и контроль.
Презентация Перетащите три элемента Прямоугольник так, как на Рис. 2.10. На странице Местоположение и размер панели Свойства введите: для первого прямоугольника X: 20, Y: 60; для второго - X: 280, Y: 60; для третьго - X: 530, Y: 60. Для всех Ширина: 240, Высота: 180.
text и на странице Основные панели Свойства в поле Текст: каждого из них введите Операция 1, Операция 2, Операция 3 соответственно (Рис. 2.10).
Библиотеки моделирования процессов перетащите для каждого сегмента два объекта queue, два объекта delay и один объект selectOutput, разместите и соедините как на Рис. 2.10.
queue сегмента Операция 1, и на странице Основные панели Свойства установите свойства согласно Рис. 2.10 и Табл. 2.4.На сегменте Операция 1 поясним принятые имена объектов: очОп1 - очередь на операцию 1; выпОп1 - имитация выполнения операции 1; очКонОп1 - очередь на контроль после операции 1; конОп11 - имитация контроля после операции 1; конОп12 - розыгрыш результата контроля.
(рис 2.10) Добавлены сегменты Операция 1, Операция 2, Операция 3
| Объект | Свойства | Значения |
|---|---|---|
| Сегмент Операция 1 | ||
| queue | Имя | очОп1 |
| Тип заявки | Detail | |
| Максимальная вместимость | Установите флажок | |
| delay | Имя | выпОп1 |
| Тип заявки | Detail | |
| Тип | Определённое время | |
| Время задержки | exponential (1/T1) | |
| Вместимость | 1 | |
| queue1 | Имя | очКонОп1 |
| Тип заявки | Detail | |
| Максимальная вместимость | Установите флажок | |
| delay1 | Имя | конОп11 |
| Тип заявки | Detail | |
| Тип | Определённое время | |
| Время задержки | exponential (1/Tk1) | |
| Вместимость | 1 | |
| Действия При выходе | entity.n = 1; | |
| selectOutput | Имя | конОп12 |
| Тип заявки | Detail | |
| Выход true выбирается | Заданной вероятностью | |
| Вероятность | 1-q1 | |
| Сегмент Операция 2 | ||
| queue | Имя | очОп2 |
| Тип заявки | Detail | |
| Максимальная вместимость | Установите флажок | |
| delay | Имя | выпОп2 |
| Тип заявки | Detail | |
| Тип | Определённое время | |
| Время задержки | exponential (1/T2) | |
| Вместимость | 1 | |
| queue1 | Имя | очКонОп2 |
| Тип заявки | Detail | |
| Максимальная вместимость | Установите флажок | |
| delay1 | Имя | конОп21 |
| Тип заявки | Detail | |
| Тип | Определённое время | |
| Время задержки | exponential (1/Tk2) | |
| Вместимость | 1 | |
| Действия При выходе | entity.n = 2 | |
| selectOutput | Имя | конОп22 |
| Тип заявки | Detail | |
| Выход true выбирается | Заданной вероятностью | |
| Вероятность | 1-q2 | |
| Сегмент Операция 3 | ||
| queue | Имя | очОп3 |
| Тип заявки | Detail | |
| Максимальная вместимость | Установите флажок | |
| delay | Имя | выпОп3 |
| Тип заявки | Detail | |
| Тип | Определённое время | |
| Время задержки | exponential (1/T3) | |
| Вместимость | 1 | |
| queue1 | Имя | очКонОп3 |
| Тип заявки | Detail | |
На Рис. 2.10 показаны четыре функциональных сегмента модели, которые построены с использованием 18 объектов AnyLogic. Если вы начнёте создавать очередной сегмент, то после перетаскивания второго объекта появится сообщение: Ограничение ознакомительной версии: нельзя создавать более 20 вложенных объектов. Поэтому остальные сегменты модели нам нужно разместить на втором активном объекте. Создайте этот объект.
Проекты Щёлкните правой кнопкой мыши Main, с которым вы работаете в данный момент, и выберите из контекстного меню Создать/Тип агента.
Шаг 1. Создание нового типа агента.
Не использовать шаблоны типов агентов.
Имя нового агента: Kontrol.
Описание: введите описание сущности, моделируемой этим типом агента.
Готово.Согласно логике процесса изготовления деталей надо после выполнения каждой из трёх операций в случае брака отправить забракованные детали на пункт окончательного контроля. С последнего получить и отправить детали на повторное выполнение тех операций, после которых они были забракованы. Кроме того, готовые детали необходимо передать на склад готовых деталей. Таким образом, для связи с активным объектом Main потребуются семь портов (3+3+1).
Создайте экземпляр нового типа агента Kontrol.
Основная перетащите элемент Порт и разместите сверху в левом ряду (Рис. 2.8).
Основные панели Свойства имя port замените именем наОп1.
Порт с именем наОп1.
Порт (см. Рис. 2.11). При вставке последовательно будут изменяться их имена: наОп2, наОп3.
(рис 2.11) Порты
Основная перетащите элемент Порт и разместите сверху в правом ряду (см. Рис. 2.11).
Основные панели Свойства имя port замените именем брОп1 (идентификатор означает, что через этот порт отправляются бракованные детали после операции 1 на пункт окончательного контроля).
Порт с именем брОп1.
Порт (см. Рис. 2.11).
Основная перетащите элемент Порт и разместите внизу в правом ряду (см. Рис. 2.11).
Основные панели Свойства имя port замените именем готДет.
Порт они автоматически будут объединяться прямоугольником (с пунктирными линиями) и появится надпись Значок.
Проект выделите Kontrol, перетащите на тип агента Main экземпляр типа агента Kontrol, разместите как на Рис. 2.12.
Основные панели Свойства уберите флажок Отображать имя и в поле Имя: введите на_контроль.
Палитре выделите Презентация. Перетащите элемент Прямоугольник и разместите как на Рис. 2.12. На странице Местоположение и размер панели Свойства введите: X: 570, Y: 270, Ширина: 140, Высота: 220.
text и на странице Основные панели Свойства в поле Текст введите На окончательный контроль.Теперь для движения заявок-деталей в модели необходимо надлежащим образом соединить входы и выходы объектов сегментов Операция 1, Операция 2 и Операция 3 с портами.
конОп12, конОп22, конОп32 с портами брОп1, брОп2, брОп3 соответственно.
наОп1, наОп2, наОп3 с входами объектов очОп1, очОп2, очОп3 соответственно.
конОп32 сегмента Операция 3 с портом готДет.На Рис. 2.12 вы видите ещё объекты. Перейдём к размещению их на агенте верхнего уровня Main.
(рис 2.12) Main с сегментами модели и экземпляром типа агента Kontrol
В случае сложных моделей, активные объекты которых содержат большое количество элементов, может возникнуть неудобство: все элементы активного объекта могут просто физически не поместиться в ту область диаграммы, которая будет отображена в окне презентации во время выполнения модели.
Версия 7 AnyLogic предоставляет в распоряжение пользователей специальный элемент для решения этой проблемы - область просмотра. С помощью этого элемента вы можете выделить на диаграмме активного объекта некоторые области, содержащие логически обособленные группы элементов или участки диаграммы. Задав такие области, вы сможете легко переключаться между ними во время выполнения модели с помощью специальных средств навигации, что позволит быстро переходить к тому или иному участку диаграммы активного объекта. При этом в окне презентации запущенной модели будут отображаться те элементы активного объекта, которые попали в заданную вами ранее и сделанную в текущий момент активной область просмотра.
Используем две области просмотра. В первой области просмотра разместим объекты первых пяти сегментов (см. Рис. 2.12), во второй - сегменты Пункт окончательного контроля, Склад готовых деталей и Склад бракованных деталей.
Создайте область просмотра на диаграмме типа агента Main для размещения объектов сегмента Постановка на дежурство.
Палитре выделите Презентация. Перетащите элемент Область просмотра.
. Чтобы в дальнейшем изменить свойства этой области, Вам нужно будет выделить этот значок мышью.
Основные панели Свойства.
Имя: введите zex.
Выравнивать по: Верхн. левому углу.
Масштабирование: Подогнать под окно.
Местоположение и размер установите: X: 0, Y: 0, Ширина: 780, Высота: 530.Области просмотра используются как для навигации по графическому редактору во время создания модели, так и для навигации по окну презентации во время выполнения модели.
Чтобы перейти к другой области просмотра в режиме создания модели:
Области просмотра и выберите из выпадающего списка, к какой именно области просмотра вы хотите перейти.Чтобы перейти к другой области просмотра в режиме выполнения модели:
Область и, затем выберите из списка, к какой именно области просмотра вы хотите перейти.
Показать область... и выберите из выпадающего списка, к какой именно области просмотра вы хотите перейти (эта кнопка принадлежит секции панели инструментов Вид, и возможно, чтобы она стала видна, вам нужно будет вначале показать эту секцию панели инструментов).Вы можете также добавлять свои собственные элементы презентации, щелчком на которых будет производиться переход к той или иной области просмотра. Воспользуйтесь последним.
Палитре выделите Презентация. Перетащите элемент text, разместите и введите в поле Текст: Цех, как на Рис. 2.12.
text, разместите и введите в поле Текст: Пункт окончательного контроля.
Свойства раскройте Специфические и в поле Действие по щелчку: введите следующий Java код: на_контроль.kontr.navigateTo();Во введённом коде на_контроль - имя экземпляра нового типа агента Kontrol, а kontr - имя области просмотра, которую мы создадим позднее на новом типе агента Kontrol.
На Рис. 2.13 показан тип агента Kontrol с размещёнными на нём тремя сегментами модели. Создадим эти сегменты.
(рис 2.13) Тип агента Kontrol с размещёнными на нём тремя сегментами
Презентации перетащите три элемента Прямоугольник и разместите так, как на Рис. 2.10. На странице Местоположение и размер панели Свойства для верхнего прямоугольника введите: X: 110, Y: 70, Ширина: 580, Высота: 240. Для нижних прямоугольников: X: 190, Y: 330, Ширина: 250, Высота: 140; X: 460, Y: 330, Ширина: 250, Высота: 140.
text и на странице Основные панели Свойства в поле Текст: каждого из них вместо имеющегося там слова text введите Пункт окончательного контроля, Склад готовых деталей, Склад бракованных деталей соответственно (Рис. 2.13).
Библиотеки моделирования процессов перетащите два объекта selectOutput, объект queue, объект delay и один объект selectOutput5, разместите в верхнем прямоугольникe и соедините так, как показано на Рис. 2.13. Порты брОп1, брОп2 и брОп3 соединяются с входом объекта selectOutput. Выход T (true) объекта окКон3 соединяется с входом объекта selectOutput5.
selectOutput, и на странице Основные панели Свойства установите свойства согласно Рис. 2.13 и Табл. 2.5. Во всех объектах должен быть установлен флажок Отображать имя и На презентации.| Объект | Свойства | Значения |
|---|---|---|
| selectOutput | Имя | окКон1 |
| Тип заявки | Detail | |
| Выход true выбирается | При выполнении условия | |
| Условие | entity.a<2 | |
| queue | Имя | очКон |
| Тип заявки | Detail | |
| Максимальная вместимость | Установите флажок | |
| delay | Имя | окКон2 |
| Тип заявки | Detail | |
| Тип | Определённое время | |
| Время задержки | exponential (1/main.Tk) | |
| Вместимость | 1 | |
| selectOutput | Имя | окКон3 |
| Тип заявки | Detail | |
| Выход true выбирается | Заданной вероятностью | |
| Вероятность | 1-main.q4 | |
| Действия При выходе(true) | entity.a=2 | |
| selectOutput5 | Имя | распределитель |
| Тип заявки | Detail | |
| Использовать: | Условия | |
| Условие 1 | entity.n==1 | |
| Условие 2 | entity.n==2 | |
| Условие 3 | entity.n==3 | |
| Максимальная вместимость | Установите флажок | |
| delay1 | Имя | конОп31 |
| Тип заявки | Detail | |
| Тип | Определённое время | |
| Время задержки | exponential (1/Tk3) | |
| Вместимость | 1 | |
| Действия При выходе | entity.n = 3 | |
| selectOutput | Имя | конОп32 |
| Тип заявки | Detail | |
| Выход true выбирается | Заданной вероятностью | |
| Вероятность | 1-q3 |
Основная перетащите на левый нижний прямоугольник три элемента Переменная. На странице Основные панели Свойства в поле Имя: каждого элемента введите соответствующие имена, показанные на Рис. 2.13. Установите Тип: double.
Библиотеки моделирования процессов перетащите объект sink.
Основные установите следующие свойства:
Имя: склГотДет
Отображать имя сбросьте флажок;
Тип заявки: Detail
Действия При входеготДетали = склГотДет.count()/main.колПрог; доляГотДет = готДетали/(готДетали + бракДетали); срВрПодгДет = (main.врМод*main.колПрог)/склГотДет.count();
Код предназначен для расчёта результатов моделирования: абсолютного готДетали и относительного доляГотДет количества готовых деталей, среднего времени срВрПодгДет подготовки одной детали.
Картинки перетащите картинку Склад и разместите как на Рис. 2.13.Основная перетащите на правый нижний прямоугольник два элемента Переменная. На странице Основные панели Свойства в поле Имя: каждого элемента введите соответствующие имена, показанные на Рис. 2.13. Тип: double.
Библиотеки моделирования процессов перетащите объект sink.
Основные панели Свойства установите следующие свойства:Имя: склБракДет
Отображать имя сбросьте флажок;
Тип заявки: Detail
Действия При входебракДетали = склБракДет.count()/main.колПрог; доляБрДет = бракДетали/(готДетали+бракДетали);
Код предназначен для расчёта результатов моделирования: абсолютного бракДетали и относительного доляБрДет количества бракованных деталей.
Картинки перетащите картинку Склад и разместите как на Рис. 2.13.Так как все исходные данные размещены на диаграмме типа агента Main, то ссылка на них из диаграммы Kontrol, производится, например, так: main.колПрог;
Презентация перетащите элемент Область просмотра.
Основные панели Свойства.
Имя: введите kontr.
Выравнивать по: Верхн. левому углу.
Масштабирование: Подогнать под окно.
Местоположение и размер панели Свойства введите: X: 30, Y: 10, Ширина: 670, Высота: 480.
Исключить, если он был установлен.
text, разместите и введите в поле Текст: Цех, как на Рис. 2.13.
Свойства раскройте Специфические и в поле Действие по щелчку: введите следующий Java код: main.zex.navigateTo();
text, разместите и введите в поле Текст: Пункт окончательного контроля.
Пункт окончательного контроля. При этом цвет названия Пункт окончательного контроля другой.Для удобства считывания статистических данных о коэффициентах использования (загрузки) пункта подготовки заготовок и пунктов выполнения операций 1…3 дополним модель элементами Переменная и необходимыми java-кодами.
Презентации перетащите элемент Скругленный прямоугольник на диаграмму Kontrol и разместите как на Рис. 2.14. Можно было бы всё это сделать на диаграмме Main, но тогда бы пришлось каждый раз после проведения эксперимента для считывания результатов переключаться между областями просмотра.
Текст: Коэффициенты использования.
Основная перетащите элемент Переменная. Разместите и дайте имя коэфИспПодЗаг, как на Рис. 2.14. Оставьте тип double.
Переменная и дайте ему имя коэфИспВыпОп1. Оставьте тип double.
коэфИспВыпОп1. Вставьте ещё два таких элемента, которым системой будут присвоены имена коэфИспВыпОп2 и коэфИспВыпОп3 (см. Рис. 2.14). Тип будет double.
Специфические установливать флажки Включить сбор статистики.
(рис 2.14) Добавлены элементы для вывода коэффициентов использования
подЗаг. В поле Действия При выходе добавьте код:
на_контроль.коэфИспПодЗаг= подЗаг.statsUtilization.mean();
выпОп1. В поле Действия При выходе введите код:
на_контроль.коэфИспВыпОп1= выпОп1.statsUtilization.mean()
выпОп2. В поле Действия При выходе введите код:
на_контроль.коэфИспВыпОп2= выпОп2.statsUtilization.mean()
выпОп3. В поле Действия При выходе введите код:
на_контроль.коэфИспВыпОп3= выпОп3.statsUtilization.mean()
Рассчитаем количество прогонов, которые нужно выполнить в каждом наблюдении. При этом примем относительное количество готовых деталей как ожидаемую вероятность. Поскольку она заранее не известна, то расчёт проведём для худшего случая:
$$N=t^2_\alpha \cdot \frac{\sigma ^2}{\varepsilon ^2}=2,58^2\cdot \frac{0,5(1-0,5)}{0,01^2}=6,656\frac{0,25}{0,0001}\approx 66641.$$Проекты выделите Simulation:Main.
Модельное время установите Виртуальное время (максимальная скорость). В поле Остановить: из выпадающего списка выберите В заданное время.
Конечное время введите 7987680 (480*16641 = 7987680).
Фиксированное начальное число (воспроизводимые прогоны). В поле Начальное число введите 23.Мы провели эксперименты, увеличив в AnyLogic модельное время в 16641 раз (в GPSS World в каждом эксперименте выполнено 16641 прогонов).
Всего выполнено 8 экспериментов, результаты которых сведены в Табл. 2.6. Первый эксперимент соответствует постановке задачи. Результаты первого эксперимента представлены на Рис. 2.15 и в Табл. 2.6.
В каждом следующем эксперименте параметры, установленные в предыдущем эксперименте, либо остаются неизменными, либо изменяются. Указываются только новые значения параметров в строке, предшествующей результатам следующего эксперимента. Например, во втором эксперименте уменьшено среднее время поступления заготовок с $$T_n = 35$$ до $$T_n = 30$$, а остальные параметры остались неизменными (Табл. 2.6).
В экспериментах изменялись значения шести параметров. Кроме того, в восьмом эксперименте были уменьшены средние времена подготовки вариантов заготовок (значения элементов одномерного массива).
Сравнительный анализ результатов экспериментов свидетельствует об адекватности GPSS World и AnyLogic7, так как их различия несущественны.
Например, относительная доля готовых изделий и относительная доля забракованных отличаются на 0 … 0,002, а среднее время изготовления одной детали - на 0,023 … 0,238.
Коэффиценты использования пункта подготовки заготовок и пунктов выполнения операций 1…3 в некоторых экспериментах или одинаковы, или различаются на 0,001 … 0,006.
По результатам экспериментов (Табл. 2.6) можно сделать выводы об эффективности работы цеха по изготовлению деталей и обнаружить "узкие" места.
Изменение параметров в каждом следующем эксперименте преследовало цель увеличения количества годных деталей и сокращения времени подготовки одной детали. Если в первом эксперименте готовых деталей было 9,916 (9,885), а среднее время изготовления одной детали 48,407 (48,559), то в последнем восьмом эксперименте цель была достигнута - 21,220 (21,161) и 22,620 (22,683) соответственно. При этом доля брака уменьшилась с 0,277 до 0,116.
(рис 2.15) Вариант результатов моделирования
| Показатели | GPSS World | AnyLogic6 | AnyLogic7 |
|---|---|---|---|
| 1) согласно постановке задачи | |||
| готДетали | 9,885 | 9,882 | 9,916 |
| доляГотДет | 0,721 | 0,723 | 0,723 |
| бракДетали | 3,821 | 3,778 | 3,804 |
| доляБрДет | 0,279 | 0,277 | 0,277 |
| срВрПодгДет | 48,559 | 48,573 | 48,407 |
| коэфИспПодЗаг | 0,639 | 0,638 | 0,64 |
| коэфИспВыпОп1 | 0,879 | 0,877 | 0,879 |
| коэфИспВыпОп2 | 0,662 | 0,658 | 0,664 |
| коэфИспВыпОп3 | 0,801 | 0,801 | 0,803 |
| $$\Delta_{11}$$ доляГотДет | 0,002 | ||
| $$\Delta_{12}$$ доляБрДет | 0,002 | ||
| $$\Delta_{13}$$ срВрПодгДет | 0,152 | ||
| 2) Tn = 30 | |||
| готДетали | 11,284 | 11,333 | 11,294 |
| доляГотДет | 0,722 | 0,723 | 0,724 |
| бракДетали | 4,338 | 4,343 | 4,312 |
| доляБрДет | 0,278 | 0,277 | 0,276 |
| срВрПодгДет | 42,538 | 42,353 | 42,5 |
| коэфИспПодЗаг | 0,749 | 0,746 | 0,746 |
| коэфИспВыпОп1 | 1 | 1 | 1 |
| коэфИспВыпОп2 | 0,752 | 0,762 | 0,755 |
| коэфИспВыпОп3 | 0,915 | 0,916 | 0,916 |
| $$\Delta_{21}$$ доляГотДет | 0,002 | ||
| $$\Delta_{22}$$ доляБрДет | 0,002 | ||
| $$\Delta_{23}$$ срВрПодгДет | 0,038 | ||
| 3) T1 = 25, T3 = 30 | |||
| готДетали | 11,552 | 11,555 | 11,558 |
| доляГотДет | 0,722 | 0,724 | 0,723 |
| бракДетали | 4,459 | 4,414 | 4,437 |
| доляБрДет | 0,278 | 0,276 | 0,277 |
| срВрПодгДет | 41,553 | 41,542 | 41,53 |
| коэфИспПодЗаг | 0,748 | 0,746 | 0,748 |
| коэфИспВыпОп1 | 0,852 | 0,852 | 0,852 |
| коэфИспВыпОп2 | 0,774 | 0,77 | 0,77 |
| коэфИспВыпОп3 | 0,802 | 0,801 | 0,802 |
| $$\Delta_{31}$$ доляГотДет | 0,001 | ||
| $$\Delta_{32}$$ доляБрДет | 0,001 | ||
| $$\Delta_{33}$$ срВрПодгДет | 0,023 | ||
| 4) Tn = 25, T1 = 20, T2 = 15, T3 = 25 | |||
| готДетали | 13,845 | 13,9 | 13,882 |
| доляГотДет | 0,723 | 0,724 | 0,724 |
| бракДетали | 5,314 | 5,305 | 5,303 |
| доляБрДет | 0,277 | 0,276 | 0,276 |
| срВрПодгДет | 34,669 | 34,532 | 34,577 |
| коэфИспПодЗаг | 0,895 | 0,899 | 0,897 |
| коэфИспВыпОп1 | 0,817 | 0,822 | 0,818 |
| коэфИспВыпОп2 | 0,555 | 0,558 | 0,557 |
| коэфИспВыпОп3 | 0,801 | 0,803 | 0,801 |
| $$\Delta_{41}$$ доляГотДет | 0,001 | ||
| $$\Delta_{42}$$ доляБрДет | 0,001 | ||
| $$\Delta_{43}$$ срВрПодгДет | 0,112 | ||
| 5) Tn = 20, T3 = 20 | |||
| готДетали | 15,453 | 15,499 | 15,572 |
| доляГотДет | 0,723 | 0,724 | 0,724 |
| бракДетали | 5,932 | 5,915 | 5,925 |
| доляБрДет | 0,277 | 0,276 | 0,276 |
| срВрПодгДет | 31,063 | 30,969 | 30,825 |
| коэфИспПодЗаг | 1 | 1 | 1 |
| коэфИспВыпОп1 | 0,911 | 0,913 | 0,918 |
| коэфИспВыпОп2 | 0,619 | 0,621 | 0,623 |
| коэфИспВыпОп3 | 0,716 | 0,718 | 0,72 |
| $$\Delta_{51}$$ доляГотДет | 0,001 | ||
| $$\Delta_{52}$$ доляБрДет | 0,001 | ||
| $$\Delta_{53}$$ срВрПодгДет | 0,238 | ||
| 6) q3 = 0,05 | |||
| готДетали | 16,2 | 16,206 | 16,219 |
| доляГотДет | 0,755 | 0,757 | 0,757 |
| бракДетали | 5,246 | 5,192 | 5,202 |
| доляБрДет | 0,245 | 0,243 | 0,243 |
| срВрПодгДет | 29,629 | 29,619 | 29,595 |
| коэфИспПодЗаг | 1 | 1 | 1 |
| коэфИспВыпОп1 | 0,916 | 0,911 | 0,913 |
| коэфИспВыпОп2 | 0,622 | 0,62 | 0,621 |
| коэфИспВыпОп3 | 0,71 | 0,711 | 0,711 |
| $$\Delta_{61}$$ доляБрДет | 0,002 | ||
| $$\Delta_{62}$$ доляГотДет | 0,002 | ||
| $$\Delta_{63}$$ срВрПодгДет | 0,034 | ||
| 7) q1= 0,05, q2 = 0,05 | |||
| готДетали | 18,903 | 18,856 | 18,991 |
| доляГотДет | 0,883 | 0,883 | 0,884 |
| бракДетали | 2,504 | 2,491 | 2,491 |
| доляБрДет | 0,117 | 0,117 | 0,116 |
| срВрПодгДет | 25,393 | 25,456 | 25,275 |
| коэфИспПодЗаг | 1 | 1 | 1 |
| коэфИспВыпОп1 | 0,901 | 0,896 | 0,907 |
| коэфИспВыпОп2 | 0,65 | 0,646 | 0,651 |
| коэфИспВыпОп3 | 0,828 | 0,829 | 0,833 |
| $$\Delta_{71}$$ доляГотДет | 0,001 | ||
| $$\Delta_{72}$$ доляБрДет | 0,001 | ||
| $$\Delta_{73}$$ срВрПодгДет | 0,018 | ||
| 8) T1=15, срВрПодгЗаг={7,11,18,19,23,22,0,0,0,0} | |||
| готДетали | 21,161 | 21,25 | 21,22 |
| доляГотДет | 0,883 | 0,884 | 0,884 |
| бракДетали | 2,801 | 2,785 | 2,795 |
| доляБрДет | 0,117 | 0,116 | 0,116 |
| срВрПодгДет | 22,683 | 22,588 | 22,62 |
| коэфИспПодЗаг | 0,939 | 0,94 | 0,938 |
| коэфИспВыпОп1 | 0,756 | 0,76 | 0,759 |
| коэфИспВыпОп2 | 0,725 | 0,729 | 0,728 |
| коэфИспВыпОп3 | 0,929 | 0,932 | 0,931 |
| $$\Delta_{81}$$ доляГотДет | 0,001 | ||
| $$\Delta_{82}$$ доляБрДет | 0,001 | ||
| $$\Delta_{83}$$ срВрПодгДет | 0,063 | ||
Но уже по второму эксперименту видно, что коэфИспВыпОп1=0,879, а коэфИспВыпОп3=0,803, то есть приближаются к 1. Поэтому изменение других параметров ничего не даст. Нужно уменьшить среднее время выполнения операций 1 и 3. Третий эксперимент это подтвердил.
В экспериментах 5…7 коэффициент загрузки пункта подготовки заготовок равен 1. Изменение доли брака лишь немного увеличил искомые показатели. Поэтому дальнейший рост годных деталей и среднего времени подготовки одной детали возможен был лишь при сокращении средних времён подготовки заготовок в зависимости от их типов.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.