Концептуальное проектирование систем в AnyLogic и GPSS World

Модель процесса изготовления в цехе деталей

Разбить на страницы
Показывать лекцию целиком

Модель в GPSS World

Решение прямой задачи

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

Изготовление в цехе детали начинается через случайное время $$T_п$$. Выполнению операций предшествует подготовка. Длительность подготовки зависит от качества заготовки, из которой будет сделана деталь. Всего различных видов заготовок $$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_{x1}, T_{x2},…, T_{xn}$$ следует контроль. Время выполнения операций и контроля - случайное. Контроль не проходят $$q_1, q_2,…, q_n \;\%$$ деталей соответственно.

Забракованные детали поступают на пункт окончательного контроля и проходят на нем проверку в течение времени, распределённого по экспоненциальному закону со средним значением$$T_x$$. В результате из общего количества не прошедших контроль деталей $$q_n+1\;\% $$ идут в брак, а оставшиеся $$(1-q_{n+1})\%$$ деталей подлежат повторному выполнению операций, после которых они не прошли контроль. Если деталь во второй раз не проходит контроль, она окончательно бракуется.

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

$$n_1=6; Exponential(T_n)=Exponential(30); q_1=12\;\%, q_2=15\;\%;$$ $$n=3; Exponential(T_1)=Exponential(30); q_3=10\;\%, q_4=80\;\%;$$ $$Exponential(T_2)=Exponential(25); Exponential(T_3)=Exponential(35);$$ $$Exponential(T_{k1})=Exponential(4); Exponential(T_{k2})=Exponential(5);$$ $$Exponential(T_{k3})=Exponential(15); Exponential(T_k)=Exponential(8).$$

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

Разработать имитационную модель для определения оценки математического ожидания количества деталей, изготовленных цехом в течение 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\cdot(1-0,5)}{0,01^2}=6,656\cdot\frac{0,25}{0,0001}=16641$$

Программа модели прямой задачи приведена ниже.

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

;Модель процесса изготовления деталей. Прямая задача
;  Задание исходных данных
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    ; Число основных прогонов
Замечание. В программе при обращении несколько раз к встроенному генератору экспоненциально распределённых случайных чисел взято одно и тоже начальное число 23, хотя рекомендуется брать различные начальные числа. Сделано это для чистоты эксперимента - сравнения в последующем результатов моделирования GPSS World с результатами AnyLogic.

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

Для задания исходных данных - времени подготовки заготовок - использована дискретная функция Pod. Это позволяет сократить программу по сравнению с тем, если применять команду EQU. Кроме того, упрощается событийная часть модели, так как в блоке имитации подготовки заготовок

ADVANCE    (Exponential(23,0,FN$Pod)); Имитация подготовки заготовки

достаточно указать только ссылку 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 часов цехом будет изготовлено NDet = 9 деталей, относительная доля готовых деталей составит 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 также не изменится.

Замечание. Если вы вместо 1000 укажите 100 предварительных прогонов и запустите модель, то получите тот же результат.

Решение обратной задачи

Целью обратной задачи является определение среднего времени на изготовление какого-то количества деталей. Для проверки работоспособности модели возьмём количество деталей, полученных в результате решения прямой задачи, т.е. 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

В результате решения обратной задачи получим, что Det = 9 деталей будут изготовлены цехом за TDet = 7,266 часа, относительная доля которых составит DoljaDet = 0,721, а среднее время изготовления одной детали SDet = 48,443 мин. При этом будет забраковано Brak = 3 детали, относительная доля которых составит DoljaBrak = 0,279.

Замечание. Если вы замените 1000 предварительных прогонов на 100 и запустите модель, то получите:
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. Для его получения в программу введены строки:

SAVEVALUE    AC3,(AC1-X$AC2)
SAVEVALUE    AC2,AC1

После предварительных прогонов в ячейке X$Prog сохранится указанное в первой команде START количество прогонов. Эта ячейка используется в первой строке рассматриваемого сегмента и её содержимое должно быть равным нулю. В противном случае модель будет работать неверно. Для предотвращения ошибки введена строка:

SAVEVALUE    X$Prog,0
Замечание. Если предварительное число прогонов модели меньше числа основных прогонов, то можно обойтись и без этой команды.

Проведите эксперимент. Как проводится дисперсионный анализ, вы уже знаете. Теме не менее, установите необходимые данные эксперимента согласно рис. 2.2. Укажите число предварительных прогонов 1000 вместо 100, установленных по умолчанию.

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

Измените непосредственно в процедуре запуска сгенерированного Plus-эксперимента количество предварительных прогонов с 1000 на 100 и запустите модель. Вы получите практически те же самые результаты, например, Grand Mean = 9,006 вместо 9,017.

(рис 2.2) Диалоговое окно (заполненное) Screening Experiment Generator (Генератор отсеивающего эксперимента) (рис 2.3) Результаты отсеивающего эксперимента

Модель в AnyLogic

AnyLogic-модель процесса изготовления в цехе деталей будет включать согласно представлению как система массового обслуживания (Рис. 2.1) следующие сегменты:

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

    Для ввода исходных данных используем элементы Параметр. Идентификаторы возьмём те же (кроме времени моделирования и количества прогонов модели), что и в GPSS-модели, только без знака подчёркивания.

  • Выполните команду Файл/Создать/Модель на панели инструментов.
  • В поле Имя модели диалогового окна Новая модель введите Изготовление_в_цехе_деталей. Выберите каталог, в котором будут сохранены файлы вашей модели. Щелкните кнопку Далее.
  • На открывшейся второй странице Мастера создания модели выберите Начать создание модели "с нуля". Щелкните кнопку Далее.
  • В Палитре выделите Презентация.
  • Перетащите элемент Скруглённый прямоугольник в нужное место.
  • Перетащите элемент 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.10
    q4 double 0.80

    Создайте размерности массивов. В данном случае они одинаковые. Элементов в одной строке табл. 2.1 шесть. Предположим, что число видов заготовок может увеличиться до 10. Значит размерность одного массива 10 элементов.

  • Щёлкните правой кнопкой мышки в панели Проекты и в контекстном меню выберите Создать/Размерность.
  • В открывшемся окне Размерность в поле Имя введите КолВарЗаг.
  • Установите Тип размерности: Диапазон.
  • В открывшееся поле Диапазон: введите 1-10.
  • Щёлкните Готово.
  • Теперь создайте непосредственно массивы. Начните с массива верВарЗаг для вероятностей появления видов заготовок.

  • Из Палитры Основные перетащите элемент Параметр.
  • На странице Основные панели Свойства в поле Имя: введите верВарЗаг.
  • Установите флажок Массив. Рядом появится значок {…}. Щёлкните по нему.
  • Откроется страница свойств Массив. В окошке Возможные размерности: выделите КолВарЗаг.
  • Щелкните по кнопке . Размерность КолВарЗаг появится в окошке Выбранные размерности.
  • Вернитесь на страницу Основные панели Свойства.
  • В поле Значение по умолчанию: введите:
    {0.05,0.18,0.34,0.56,0.85,1.0,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 будем корректировать до тех пор, пока не посчитаем достаточным их взаимное расположение для корректной с нашей точки зрения работы модели и её презентации.

    Начнём с сегмента имитации процесса подготовки заготовки.

    Подготовка заготовки

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

  • В Палитре выделите Презентация. Перетащите элемент Прямоугольник и разместите, где считаете нужным. На странице Дополнительные панели Свойства введите в поле Ширина: 240, в поле Высота: 150.
  • Перетащите элемент text и на странице Основные панели Свойства в поле Текст: введите Подготовка заготовки (Рис. 2.5).
  • В Палитре выделите Enterprise Library. Перетащите объект source на диаграмму класса Main и разместите в прямоугольнике с именем Подготовка заготовки.
  • Для записи и хранения параметров детали в дополнительные поля заявок нужно создать нестандартный класс заявки. Создайте класс заявки Detail.
  • В панели Проект щелкните правой кнопкой мыши элемент модели верхнего уровня дерева и выберите Создать Java класс.
  • Появится диалоговое окно Новый Java класс. В поле Имя: введите имя нового класса Detail.
  • В поле Базовый класс: выберите из выпадающего списка Entity в качестве базового класса. Щелкните кнопку Далее. (рис 2.5) Сегмент Подготовка заготовки
  • Появится вторая страница Мастера создания Java класса. Добавьте следующие поля Java класса, которые потребуются в дальнейшем при разработке модели:
    double n;
    double a;
    double Tn1;

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

  • Оставьте выбранными флажки Создать конструктор и Создать метод toString().
  • Щелкните кнопку Готово. Появится редактор кода и автоматически созданный код вашего Java класса. Закройте код.
  • Из Палитры Основная перетащите на сегмент Исходные данные элемент Простая переменная. На странице Основные панели Свойства дайте Имя: b, установите Тип: double.
  • Выделите объект source. На странице Основные панели Свойства установите свойства согласно рис. 2.6.

    В коде, приведенном ниже, который вы ввели в поле свойства Действие при выходе, используются данные созданных ранее двух массивов.

    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);
  • Из библиотеки Enterprise Library перетащите объекты queue и delay на диаграмму класса Main, разместите в прямоугольнике с именем Подготовка заготовки и соедините как на рис. 2.5. (рис 2.6) Элемент source с установленными свойствами
  • Выделите объект queue и на странице Основные панели Свойства установите свойства:
  • Имя: очЗаг
  • Класс заявки: Detail
  • Максимальная вместимость установить флажок.
  • Выделите объект delay и на странице Основные панели Свойства установите свойства:
  • Имя: подЗаг
  • Класс заявки: Detail
  • Задержка задаётся Явно
  • Время задержки exponential (1/entity.Tn1)
  • Вместимость 1
  • Действие при выходе entity.a = 1;
  • Сегменты Операция 1, Операция 2, Операция 3

    Каждый из сегментов операций 1, 2 и 3 предназначен для имитации выполнения соответствующей операции, включающей ожидание в очереди, непосредственно выполнение операции, контроль её качества, отправку на пункт окончательного контроля в случае брака, приём на повторное выполнение операции и контроль.

  • В Палитре выделите Презентация. Перетащите три элемента Прямоугольник и разместите так, как на рис. 2.7. На странице Дополнительные панели Свойства для каждого прямоугольника введите в поле Ширина: 240, в поле Высота: 180.
  • Перетащите три элемента text и на странице Основные панели Свойства в поле Текст: каждого из них введите Операция 1, Операция 2, Операция 3 соответственно (Рис. 2.7).
  • В Палитре выделите Enterprise Library. Перетащите для каждого сегмента два объекта queue, два объекта delay и один объект selectOutput на диаграмму класса Main, разместите в прямоугольниках и соедините так, как показано на рис. 2.7.
  • Выделите поочередно объекты, начиная с объекта queue сегмента 1, и на странице Основные панели Свойства установите свойства согласно рис. 2.7 и табл. 2.4
  • На сегменте Операция 1 поясним принятые имена объектов: очОп1 - очередь на операцию 1; выпОп1 - имитация выполнения операции 1; очКонОп1 - очередь на контроль после операции 1; конОп11 - имитация контроля после операции 1; конОп12 - розыгрыш результата контроля.

    (рис 2.7) Добавлены сегменты Операция 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 выбирается С заданной вероятностью
    Вероятность [0..1] 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 выбирается С заданной вероятностью
    Вероятность [0..1] 1-q2
    Сегмент Операция 3
    queue имяочОп3
    Класс заявкиDetail
    Максимальная вместимость Установите флажок
    delay имявыпОп3
    Класс заявкиDetail
    Задержка задаётся Явно
    Время задержкиexponential (1/T3)
    Вместимость1
    queue1 имяочКонОп3
    Класс заявкиDetail
    Максимальная вместимость Установите флажок
    delay1 имяконОп31
    Класс заявкиDetail
    Задержка задаётся Явно
    Время задержкиexponential (1/Tk3)
    Вместимость1
    Действие при выходеentity.n = 3
    selectOutput имяконОп32
    Класс заявкиDetail
    Выход true выбирается С заданной вероятностью
    Вероятность [0..1] 1-q3

    Создание нового класса активного объекта

    На рис. 2.7 показаны четыре функциональных сегмента модели, которые построены с использованием 18 объектов AnyLogic. Если вы начнёте создавать очередной сегмент, то после перетаскивания второго объекта появится сообщение: Ограничение ознакомительной версии: нельзя создавать более 20 вложенных объектов. Поэтому остальные сегменты модели нам нужно разместить на втором активном объекте. Создайте этот объект.

  • На панели Проект щелкните Main правой кнопкой мыши и выберите из контекстного меню Создать/Класс активного объекта.
  • Откроется окно Новый класс активного объекта.
  • В поле Имя: задайте имя нового класса Kontrol.
  • Если нужно, в поле Описание: введите описание сущности, моделируемой этим классом.
  • Щелкните кнопку Готово.
  • Создание элемента нового класса активного объекта

    Согласно логике процесса изготовления деталей надо после выполнения каждой из трёх операций в случае брака отправить забракованные детали на пункт окончательного контроля. С последнего получить и отправить детали на повторное выполнение тех операций, после которых они были забракованы. Кроме того, готовые детали необходимо передать на склад готовых деталей. Таким образом, для связи с активным объектом Main потребуются семь портов (3+3+1).

    Создайте элемент нового класса активного объекта Kontrol.

  • Из Палитры Основная перетащите элемент Порт и разместите сверху в левом ряду (рис. 2.8).
  • На странице Основные панели Свойства имя port замените именем наОп1.
  • Скопируйте элемент Порт с именем наОп1.
  • Вставьте два элемента Порт (см. рис. 2.8). При вставке последовательно будут изменяться их имена: наОп2, наОп3.
  • Из Палитры Основная перетащите элемент Порт и разместите сверху в правом ряду (см. рис. 2.8). (рис 2.8) Порты
  • На странице Основные панели Свойства имя port замените именем брОп1 (идентификатор означает, что через этот порт отправляются бракованные детали после операции 1 на пункт окончательного контроля).
  • Скопируйте элемент Порт с именем брОп1.
  • Вставьте два элемента Порт (см. рис. 2.8). При вставке последовательно будут изменяться их имена: брОп2, брОп3.
  • Из Палитры Основная перетащите элемент Порт и разместите внизу в правом ряду (см. рис. 2.8).
  • На странице Основные панели Свойства имя port замените именем готДет.
  • По мере размещения элементов Порт они автоматически будут объединяться прямоугольником (с пунктирными линиями) и появится надпись Значок.
  • Возвратитесь на диаграмму класса Main.
  • На панели Проект выделите Kontrol, перетащите на диаграмму класса Main объект класса Kontrol, разместите как на рис. 2.9.
  • Объект активного класса Kontrol создан. На странице Основные панели Свойства уберите флажок Отображать имя и в поле Имя: введите на_контроль.
  • В Палитре выделите Презентация. Перетащите элемент Прямоугольник и разместите так, как на рис. 2.9. На странице Дополнительные панели Свойства введите в поле Ширина: 140, в поле Высота: 220.
  • Перетащите элемент text и на странице Основные панели Свойства в поле Текст введите На окончательный контроль.
  • Теперь для движения заявок-деталей в модели необходимо надлежащим образом соединить входы и выходы объектов сегментов Операция 1, Операция 2 и Операция 3 с портами.

  • Соедините выходы F (false) объектов конОп12, конОп22, конОп32 с портами брОп1, брОп2, брОп3 соответственно.
  • Соедините порты наОп1, наОп2, наОп3 с входами объектов очОп1, очОп2, очОп3 соответственно.
  • Соедините выход Т (true) объекта конОп32 сегмента Операция 3 с портом готДет.
  • На рис. 2.9 вы видите ещё объекты. Перейдём к размещению их на диаграмме класса Main.

    (рис 2.9) Объект Main с сегментами модели и элементом объекта Kontrol

    Создание области просмотра

    В случае сложных моделей, активные объекты которых содержат большое количество элементов, может возникнуть неудобство: все элементы активного объекта могут просто физически не поместиться в ту область диаграммы, которая будет отображена в окне презентации во время выполнения модели.

    Версия 6 AnyLogic предоставляет в распоряжение пользователей специальный элемент для решения этой проблемы - область просмотра. С помощью этого элемента вы можете выделить на диаграмме активного объекта некоторые области, содержащие логически обособленные группы элементов или участки диаграммы. Задав такие области, вы сможете легко переключаться между ними во время выполнения модели с помощью специальных средств навигации, что позволит быстро переходить к тому или иному участку диаграммы активного объекта. При этом в окне презентации запущенной модели будут отображаться те элементы активного объекта, которые попали в заданную вами ранее и сделанную в текущий момент активной область просмотра.

    Используем две области просмотра. В первой области просмотра разместим объекты первых пяти сегментов (см. рис. 2.9), во второй - сегменты Пункт окончательного контроля, Склад готовых деталей и Склад бракованных деталей.

    Первая область просмотра будет на диаграмме класса Main, а вторая - на новом классе активного объекта Kontrol.

    Создайте область просмотра на диаграмме класса Main для размещения объектов сегмента Постановка на дежурство.

  • В Палитре выделите Презентация. Перетащите элемент Область просмотра в нужное место.
  • Вы увидите на диаграмме значок якоря этой области просмотра . Чтобы в дальнейшем изменить свойства этой области, Вам нужно будет выделить этот значок мышью.
  • Перейдите на страницу Основные панели Свойства.
  • В поле Имя: введите zex.
  • Задайте, как будет располагаться область просмотра относительно ее якоря, с помощью элемента управления Выравнивать по: Верхн. левому углу.
  • Выберите режим масштабирования из выпадающего списка Масштабирование: Подогнать под окно.
  • Сбросьте флажок исключить, если он был установлен.
  • Переключение между областями просмотра

    Области просмотра используются как для навигации по графическому редактору во время создания модели, так и для навигации по окну презентации во время выполнения модели.

    Чтобы перейти к другой области просмотра в режиме создания модели:

  • Щелкните мышью в графическом редакторе, чтобы сделать его активным.
  • Щелкните по кнопке панели инструментов Области просмотра и выберите из выпадающего списка, к какой именно области просмотра вы хотите перейти.
  • Чтобы перейти к другой области просмотра в режиме выполнения модели:

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

  • В Палитре выделите Презентация. Перетащите элемент text, разместите и введите в поле Текст: Цех, как на рис. 2.9.
  • Перетащите второй элемент text, разместите и введите в поле Текст: Пункт окончательного контроля.
  • На панели Свойства выделите Динамические и в поле Действие по щелчку: введите следующий Java код:
    на_контроль.kontr.navigateTo();
  • Во введённом коде на_контроль - имя элемента нового класса активного объекта Kontrol, а kontr - имя области просмотра, которую мы создадим позднее на новом активном объекте Kontrol.

    На рис. 2.10 показан активный объект Kontrol с размещёнными на нём тремя сегментами модели. Создадим эти сегменты.

    (рис 2.10) Объект Kontrol с размещёнными на нём тремя сегментами

    Пункт окончательного контроля

  • Из Презентации перетащите три элемента Прямоугольник и разместите так, как на рис. 2.10. На странице Дополнительные панели Свойства для верхнего прямоугольника введите в поле Ширина: 580, в поле Высота: 240. Для нижних прямоугольников: Ширина: 250, Высота: 140.
  • Перетащите три элемента text и на странице Основные панели Свойства в поле Текст: каждого из них вместо имеющегося там слова text введите Пункт окончательного контроля, Склад готовых деталей, Склад бракованных деталей соответственно (рис. 2.10).
  • Из Основной библиотеки (Enterprise Library) перетащите два объекта selectOutput, объект queue, объект delay и один объект selectOutput5 на диаграмму класса Kontrol, разместите в верхнем прямоугольникe и соедините так, как показано на рис. 2.10. Порты брОп1, брОп2 и брОп3 соединяются с входом объекта selectOutput. Выход T (true) объекта окКон3 соединяется с входом объекта selectOutput.
  • Выделите поочередно объекты, начиная с левого объекта selectOutput, и на странице Основные панели Свойства установите свойства согласно рис. 2.10 и табл. 2.5. Во всех объектах должен быть установлен флажок Отображать имя и На презентации.
  • Объект Свойства Значения
    selectOutput имяокКон1
    Класс заявкиDetail
    Выход true выбирается При выполнении условия
    Условиеentity.a<2
    queue имяочКон
    Класс заявкиDetail
    Максимальная вместимость Установите флажок
    delay имяокКон2
    Класс заявкиDetail
    Задержка задаётсяЯвно
    Время задержкиexponential (1/get_Main().Tk)
    Вместимость 1
    selectOutput имяокКон3
    Класс заявкиDetail
    Выход true выбирается С заданной вероятностью
    Вероятность [0..1]1-get_Main().q4
    Действие при выходе(true) entity.a=2
    selectOutput5 имяраспределитель
    Класс заявкиDetail
    Использовать:Условия
    Условие 0entity.n==1
    Условие 1entity.n==2
    Условие 2 entity.n==3

    Склад готовых деталей. Вывод результатов моделирования

  • Из библиотеки Основная перетащите на левый нижний прямоугольник три элемента Простая переменная. На странице Основные панели Свойства в поле Имя: каждого элемента введите соответствующие имена, показанные на рис. 2.10. Установите Тип: double.
  • Из Основной библиотеки перетащите объект sink.
  • На странице Основные панели Свойства установите следующие свойства:
  • Имя: склГотДет
  • Отображать имя сбросьте флажок;
  • Класс заявки: Detail
  • Действие при входе
    готДетали = склГотДет.count()/get_Main().колПрог;
    доляГотДет = готДетали/(готДетали + бракДетали);
    срВрПодгДет = (get_Main().врМод*get_Main().колПрог)/склГотДет.count();
  • Код предназначен для расчёта результатов моделирования: абсолютного готДетали и относительного доляГотДет количества готовых деталей, среднего времени срВрПодгДет подготовки одной детали.

  • Из библиотеки Картинки перетащите картинку Склад и разместите как на рис. 2.10.
  • Склад бракованных деталей. Вывод результатов моделирования

  • Из библиотеки Основная перетащите на правый нижний прямоугольник два элемента Простая переменная. На странице Основные панели Свойства в поле Имя: каждого элемента введите соответствующие имена, показанные на рис. 2.10. Установите Тип: double.
  • Из Enterprise Library перетащите объект sink.
  • На странице Основные панели Свойства установите следующие свойства:
  • Имя: склБракДет
  • Отображать имя сбросьте флажок;
  • Класс заявки: Detail
  • Действие при входе
    бракДетали = склБракДет.count()/get_Main().колПрог;
    доляБрДет = бракДетали/(готДетали+бракДетали);
  • Код предназначен для расчёта результатов моделирования: абсолютного бракДетали и относительного доляБрДет количества бракованных деталей.

  • Из библиотеки Картинки перетащите картинку Склад и разместите как на рис. 2.10.

    Так как все исходные данные размещены на диаграмме класса Main, то ссылка на них из диаграммы класса Kontrol, производится, например, так: get_Main().колПрог;

  • Создание областей просмотра и переключение между ними

  • Из библиотеки Презентация перетащите элемент Область просмотра.
  • Перейдите на страницу Основные панели Свойства.
  • В поле Имя: введите kontr.
  • Задайте, как будет располагаться область просмотра относительно ее якоря, с помощью элемента управления Выравнивать по: Верхн. левому углу.
  • Выберите режим масштабирования из выпадающего списка Масштабирование: Подогнать под окно.
  • На странице Дополнительные панели Свойства введите в поля X: 30, Y: 10, Ширина: 670, в поле Высота: 480.
  • Сбросьте флажок Исключить, если он был установлен.
  • Перетащите элемент text, разместите и введите в поле Текст: Цех, как на рис. 2.10.
  • На панели Свойства выделите Динамические и в поле Действие по щелчку: введите следующий Java код:
    get_Main().zex.navigateTo();
  • Перетащите второй элемент text, разместите и введите в поле Текст: Пункт окончательного контроля.
  • Теперь в ходе моделирования вы можете перемещаться между двумя областями просмотра. Чёрный цвет, например, Цех, означает, что открыта область просмотра, на которой размещен Пункт окончательного контроля. При этом цвет названия Пункт окончательного контроля другой.
  • Проведение исследований в AnyLogic

    Для удобства считывания статистических данных о коэффициентах использования (загрузки) пункта подготовки заготовок и пунктов выполнения операций 1…3 дополним модель элементами Простая переменная и необходимыми java-кодами.

  • Из Презентации перетащите элемент Скругленный прямоугольник на диаграмму класса Kontrol и разместите как на рис. 2.11. Можно было бы всё это сделать на диаграмме класса Main, но тогда бы пришлось каждый раз после проведения эксперимента для считывания результатов переключаться между областями просмотра.
  • Перетащите элемент text, разместите и введите в поле Текст: Коэффициенты использования.
  • Из библиотеки Основная перетащите элемент Простая переменная. Разместите и дайте имя коэфИспПодЗаг, как на рис. 2.11. Оставьте тип double.
  • Перетащите ещё один элемент Простая переменная и дайте ему имя коэфИспВыпОп1. Оставьте тип double.
  • Скопируйте элемент с именем коэфИспВыпОп1. Вставьте ещё два таких элемента, которым системой будут присвоены имена коэфИспВыпОп2 и коэфИспВыпОп3 (см. рис. 2.11).
  • Выделите объект подЗаг. В поле Действие при выходе добавьте код:
    на_контроль.коэфИспПодЗаг=
    подЗаг.statsUtilization.mean();
  • Выделите объект выпОп1. В поле Действие при выходе введите код:
    на_контроль.коэфИспВыпОп1=
    выпОп1.statsUtilization.mean()
  • Выделите объект выпОп2. В поле Действие при выходе введите код:
    на_контроль.коэфИспВыпОп2=
    выпОп2.statsUtilization.mean()
  • Выделите объект выпОп3. В поле Действие при выходе введите код:
    на_контроль.коэфИспВыпОп3=
    выпОп3.statsUtilization.mean()
  • Перейдите на диаграмму класса Main. В панели Проекты выделите Simulation:Main.

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

    Нужно в панели Проект щёлкнуть Эксперимент. На странице Основные установить Фиксированное начальное число (воспроизводимые прогоны). В соответствующее поле ввести начальное число.

    В GPSS World при обращении к датчикам случайных чисел (в нашей модели распределенных по экспоненциальному закону) можно указывать различные начальные числа, или те же, что и в GPSS World.

    Чтобы не связывать разработчиков моделей выполнением условия одинаковости начальных чисел датчиков случайных чисел, в AnyLogic используем опцию Случайное начальное число (уникальные прогоны), а в GPSS-модели произвольным образом будем устанавливать различные начальные числа во всех обращениях к генераторам случайных чисел в каждом эксперименте. Это вполне корректно, так как в [1, 2, 3, 4] показано, что и при условии неодинаковости начальных чисел генераторов тенденция изменения количественных показателей, а значит и величины различия результатов моделирования в GPSS World и AnyLogic практически одни и те же.

  • На странице Модельное время в поле Остановить: введите 7987 680.0 (480*16 641 = 7 987 680.0).
  • Интерпретация результатов моделирования

    Мы провели эксперименты с моделями прямых задач, выполнив в каждом эксперименте в GPSS World 16 641 прогонов, а в AnyLogic увеличив модельное время в 16 641 раз.

    Всего выполнено 8 экспериментов, результаты которых сведены в табл. 2.6. Первый эксперимент соответствует постановке задачи. Результаты первого эксперимента представлены на рис. 2.11 и в табл. 2.6.

    В каждом следующем эксперименте параметры, установленные в предыдущем эксперименте, либо остаются неизменными, либо изменяются. Указываются только новые значения параметров в строке, предшествующей результатам следующего эксперимента. Например, во втором эксперименте уменьшено среднее время поступления заготовок с Tn = 35 до Tn = 30, а остальные параметры остались неизменными (табл. 2.6).

    Всего изменялись значения шести параметров. Кроме того, в восьмом эксперименте были уменьшены средние времена подготовки вариантов заготовок (значения элементов одномерного массива).

    Сравнительный анализ результатов экспериментов свидетельствует об адекватности GPSS World и AnyLogic, так как их различия несущественны.

    Например, относительная доля готовых изделий и относительная доля забракованных отличаются на 0 … 0,002, а среднее время изготовления одной детали - на 0,010 … 0,185.

    Коэффиценты использования пункта подготовки заготовок и пунктов выполнения операций 1…3 в некоторых экспериментах или одинаковы, или различаются на 0,001 … 0,006.

    По результатам экспериментов (табл. 2.6) можно сделать выводы об эффективности работы цеха по производству деталей и обнаружить "узкие" места.

    Изменение параметров в каждом следующем эксперименте преследовало цель увеличения количества годных деталей и сокращения времени подготовки одной детали. Если в первом эксперименте готовых деталей было 9,885 (9,882), а среднее время изготовления одной детали 48,559 (48,573), то в последнем восьмом эксперименте цель была достигнута - 21,161 (21,250) и 22,683 (22,588) соответственно.

    (рис 2.11) Вариант результатов моделирования
    Показатели функционирования цеха
    Показатели GPSS World AnyLogic
    1) согласно постановке задачи
    готДетали 9,885 9,882
    доляГотДет 0,721 0,723
    бракДетали 3,821 3,778
    доляБрДет 0,279 0,277
    срВрПодгДет 48,559 48,573
    коэфИспПодЗаг 0,639 0,638
    коэфИспВыпОп1 0,879 0,877
    коэфИспВыпОп2 0,662 0,658
    коэфИспВыпОп3 0,801 0,801
    Δ доляГотДет 0,002
    Δ доляБрДет 0,002
    Δ срВрПодгДет 0,014
    2) Tn = 30
    готДетали 11,284 11,333
    доляГотДет 0,722 0,723
    бракДетали 4,338 4,343
    доляБрДет 0,278 0,277
    срВрПодгДет 42,538 42,353
    коэфИспПодЗаг 0,749 0,746
    коэфИспВыпОп1 1,000 1,000
    коэфИспВыпОп2 0,752 0,762
    коэфИспВыпОп3 0,915 0,916
    Δ доляГотДет 0,001
    Δ доляБрДет 0,001
    Δ срВрПодгДет 0,185
    3) T1 = 25, T3 = 30
    готДетали 11,552 11,555
    доляГотДет 0,722 0,724
    бракДетали 4,459 4,414
    доляБрДет 0,278 0,276
    срВрПодгДет 41,553 41,542
    коэфИспПодЗаг 0,748 0,746
    коэфИспВыпОп1 0,852 0,852
    коэфИспВыпОп2 0,774 0,770
    коэфИспВыпОп3 0,802 0,801
    Δ доляГотДет 0,002
    Δ доляБрДет 0,002
    Δ срВрПодгДет 0,011
    4) Tn = 25, T1 = 20, T2 = 15, T3 = 25
    готДетали 13,845 13,900
    доляГотДет 0,723 0,724
    бракДетали 5,314 5,305
    доляБрДет 0,277 0,276
    срВрПодгДет 34,669 34,532
    коэфИспПодЗаг 0,895 0,899
    коэфИспВыпОп1 0,817 0,822
    коэфИспВыпОп2 0,555 0,558
    коэфИспВыпОп3 0,801 0,803
    Δ доляГотДет 0,001
    Δ доляБрДет 0,001
    Δ срВрПодгДет 0,037
    5) Tn = 20, T3 = 20
    готДетали 15,453 15,499
    доляГотДет 0,723 0,724
    бракДетали 5,932 5,915
    доляБрДет 0,277 0,276
    срВрПодгДет 31,063 30,969
    коэфИспПодЗаг 1,000 1,000
    коэфИспВыпОп1 0,911 0,913
    коэфИспВыпОп2 0,619 0,621
    коэфИспВыпОп3 0,716 0,718
    Δ доляГотДет 0,001
    Δ доляБрДет 0,001
    Δ срВрПодгДет 0,094
    6) q3 = 0,05
    готДетали 16,200 16,206
    доляГотДет 0,755 0,757
    бракДетали 5,246 5,1921
    доляБрДет 0,245 0,243
    срВрПодгДет 29,629 29,619
    коэфИспПодЗаг 1,000 1,000
    коэфИспВыпОп1 0,916 0,911
    коэфИспВыпОп2 0,622 0,620
    коэфИспВыпОп3 0,710 0,711
    Δ доляБрДет 0,002
    Δ доляГотДет 0,002
    Δ срВрПодгДет 0,010
    7) q1= 0,05, q2 = 0,05
    готДетали 18,903 18,856
    доляГотДет 0,883 0,883
    бракДетали 2,504 2,491
    доляБрДет 0,117 0,117
    срВрПодгДет 25,393 25,456
    коэфИспПодЗаг 1,000 1,000
    коэфИспВыпОп1 0,901 0,896
    коэфИспВыпОп2 0,650 0,646
    коэфИспВыпОп3 0,828 0,829
    Δ доляГотДет 0
    Δ доляБрДет 0
    Δ срВрПодгДет 0,059
    8) T1=15, срВрПодгЗаг={7,11,18,19,23,22,0,0,0,0}
    готДетали 21,161 21,250
    доляГотДет 0,883 0,884
    бракДетали 2,801 2,785
    доляБрДет 0,117 0,116
    срВрПодгДет 22,683 22,588
    коэфИспПодЗаг 0,939 0,940
    коэфИспВыпОп1 0,756 0,760
    коэфИспВыпОп2 0,725 0,729
    коэфИспВыпОп3 0,929 0,932
    Δ доляГотДет 0,001
    Δ доляБрДет 0,001
    Δ срВрПодгДет 0,095

    Но уже по второму эксперименту видно, что коэфИспВыпОп1=1, а коэфИспВыпОп3=0,916, то есть приближается к 1. Поэтому изменение других параметров ничего не даст. Нужно уменьшить среднее время выполнения операций 1 и 3. Третий эксперимент это подтвердил.

    В экспериментах 5…7 коэффициент загрузки пункта подготовки заготовок равен 1. Изменение доли брака лишь немного увеличил искомые показатели. Поэтому дальнейший рост годных деталей и среднего времени подготовки одной детали возможен был лишь при сокращении средних времён подготовки заготовок в зависимости от их типов.

    Страницы:

    Модель в GPSS World

    Решение прямой задачи

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

    Изготовление в цехе детали начинается через случайное время $$T_п$$. Выполнению операций предшествует подготовка. Длительность подготовки зависит от качества заготовки, из которой будет сделана деталь. Всего различных видов заготовок $$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_{x1}, T_{x2},…, T_{xn}$$ следует контроль. Время выполнения операций и контроля - случайное. Контроль не проходят $$q_1, q_2,…, q_n \;\%$$ деталей соответственно.

    Забракованные детали поступают на пункт окончательного контроля и проходят на нем проверку в течение времени, распределённого по экспоненциальному закону со средним значением$$T_x$$. В результате из общего количества не прошедших контроль деталей $$q_n+1\;\% $$ идут в брак, а оставшиеся $$(1-q_{n+1})\%$$ деталей подлежат повторному выполнению операций, после которых они не прошли контроль. Если деталь во второй раз не проходит контроль, она окончательно бракуется.

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

    $$n_1=6; Exponential(T_n)=Exponential(30); q_1=12\;\%, q_2=15\;\%;$$ $$n=3; Exponential(T_1)=Exponential(30); q_3=10\;\%, q_4=80\;\%;$$ $$Exponential(T_2)=Exponential(25); Exponential(T_3)=Exponential(35);$$ $$Exponential(T_{k1})=Exponential(4); Exponential(T_{k2})=Exponential(5);$$ $$Exponential(T_{k3})=Exponential(15); Exponential(T_k)=Exponential(8).$$

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

    Разработать имитационную модель для определения оценки математического ожидания количества деталей, изготовленных цехом в течение 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\cdot(1-0,5)}{0,01^2}=6,656\cdot\frac{0,25}{0,0001}=16641$$

    Программа модели прямой задачи приведена ниже.

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

    ;Модель процесса изготовления деталей. Прямая задача
    ;  Задание исходных данных
    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    ; Число основных прогонов
    Замечание. В программе при обращении несколько раз к встроенному генератору экспоненциально распределённых случайных чисел взято одно и тоже начальное число 23, хотя рекомендуется брать различные начальные числа. Сделано это для чистоты эксперимента - сравнения в последующем результатов моделирования GPSS World с результатами AnyLogic.

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

    Для задания исходных данных - времени подготовки заготовок - использована дискретная функция Pod. Это позволяет сократить программу по сравнению с тем, если применять команду EQU. Кроме того, упрощается событийная часть модели, так как в блоке имитации подготовки заготовок

    ADVANCE    (Exponential(23,0,FN$Pod)); Имитация подготовки заготовки

    достаточно указать только ссылку 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 часов цехом будет изготовлено NDet = 9 деталей, относительная доля готовых деталей составит 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 также не изменится.

    Замечание. Если вы вместо 1000 укажите 100 предварительных прогонов и запустите модель, то получите тот же результат.

    Решение обратной задачи

    Целью обратной задачи является определение среднего времени на изготовление какого-то количества деталей. Для проверки работоспособности модели возьмём количество деталей, полученных в результате решения прямой задачи, т.е. 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

    В результате решения обратной задачи получим, что Det = 9 деталей будут изготовлены цехом за TDet = 7,266 часа, относительная доля которых составит DoljaDet = 0,721, а среднее время изготовления одной детали SDet = 48,443 мин. При этом будет забраковано Brak = 3 детали, относительная доля которых составит DoljaBrak = 0,279.

    Замечание. Если вы замените 1000 предварительных прогонов на 100 и запустите модель, то получите:
    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. Для его получения в программу введены строки:

    SAVEVALUE    AC3,(AC1-X$AC2)
    SAVEVALUE    AC2,AC1

    После предварительных прогонов в ячейке X$Prog сохранится указанное в первой команде START количество прогонов. Эта ячейка используется в первой строке рассматриваемого сегмента и её содержимое должно быть равным нулю. В противном случае модель будет работать неверно. Для предотвращения ошибки введена строка:

    SAVEVALUE    X$Prog,0
    Замечание. Если предварительное число прогонов модели меньше числа основных прогонов, то можно обойтись и без этой команды.

    Проведите эксперимент. Как проводится дисперсионный анализ, вы уже знаете. Теме не менее, установите необходимые данные эксперимента согласно рис. 2.2. Укажите число предварительных прогонов 1000 вместо 100, установленных по умолчанию.

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

    Измените непосредственно в процедуре запуска сгенерированного Plus-эксперимента количество предварительных прогонов с 1000 на 100 и запустите модель. Вы получите практически те же самые результаты, например, Grand Mean = 9,006 вместо 9,017.

    (рис 2.2) Диалоговое окно (заполненное) Screening Experiment Generator (Генератор отсеивающего эксперимента) (рис 2.3) Результаты отсеивающего эксперимента

    Модель в AnyLogic

    AnyLogic-модель процесса изготовления в цехе деталей будет включать согласно представлению как система массового обслуживания (Рис. 2.1) следующие сегменты:

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

    Для ввода исходных данных используем элементы Параметр. Идентификаторы возьмём те же (кроме времени моделирования и количества прогонов модели), что и в GPSS-модели, только без знака подчёркивания.

  • Выполните команду Файл/Создать/Модель на панели инструментов.
  • В поле Имя модели диалогового окна Новая модель введите Изготовление_в_цехе_деталей. Выберите каталог, в котором будут сохранены файлы вашей модели. Щелкните кнопку Далее.
  • На открывшейся второй странице Мастера создания модели выберите Начать создание модели "с нуля". Щелкните кнопку Далее.
  • В Палитре выделите Презентация.
  • Перетащите элемент Скруглённый прямоугольник в нужное место.
  • Перетащите элемент 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.10
    q4 double 0.80

    Создайте размерности массивов. В данном случае они одинаковые. Элементов в одной строке табл. 2.1 шесть. Предположим, что число видов заготовок может увеличиться до 10. Значит размерность одного массива 10 элементов.

  • Щёлкните правой кнопкой мышки в панели Проекты и в контекстном меню выберите Создать/Размерность.
  • В открывшемся окне Размерность в поле Имя введите КолВарЗаг.
  • Установите Тип размерности: Диапазон.
  • В открывшееся поле Диапазон: введите 1-10.
  • Щёлкните Готово.
  • Теперь создайте непосредственно массивы. Начните с массива верВарЗаг для вероятностей появления видов заготовок.

  • Из Палитры Основные перетащите элемент Параметр.
  • На странице Основные панели Свойства в поле Имя: введите верВарЗаг.
  • Установите флажок Массив. Рядом появится значок {…}. Щёлкните по нему.
  • Откроется страница свойств Массив. В окошке Возможные размерности: выделите КолВарЗаг.
  • Щелкните по кнопке . Размерность КолВарЗаг появится в окошке Выбранные размерности.
  • Вернитесь на страницу Основные панели Свойства.
  • В поле Значение по умолчанию: введите:
    {0.05,0.18,0.34,0.56,0.85,1.0,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 будем корректировать до тех пор, пока не посчитаем достаточным их взаимное расположение для корректной с нашей точки зрения работы модели и её презентации.

    Начнём с сегмента имитации процесса подготовки заготовки.

    Подготовка заготовки

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

  • В Палитре выделите Презентация. Перетащите элемент Прямоугольник и разместите, где считаете нужным. На странице Дополнительные панели Свойства введите в поле Ширина: 240, в поле Высота: 150.
  • Перетащите элемент text и на странице Основные панели Свойства в поле Текст: введите Подготовка заготовки (Рис. 2.5).
  • В Палитре выделите Enterprise Library. Перетащите объект source на диаграмму класса Main и разместите в прямоугольнике с именем Подготовка заготовки.
  • Для записи и хранения параметров детали в дополнительные поля заявок нужно создать нестандартный класс заявки. Создайте класс заявки Detail.
  • В панели Проект щелкните правой кнопкой мыши элемент модели верхнего уровня дерева и выберите Создать Java класс.
  • Появится диалоговое окно Новый Java класс. В поле Имя: введите имя нового класса Detail.
  • В поле Базовый класс: выберите из выпадающего списка Entity в качестве базового класса. Щелкните кнопку Далее. (рис 2.5) Сегмент Подготовка заготовки
  • Появится вторая страница Мастера создания Java класса. Добавьте следующие поля Java класса, которые потребуются в дальнейшем при разработке модели:
    double n;
    double a;
    double Tn1;

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

  • Оставьте выбранными флажки Создать конструктор и Создать метод toString().
  • Щелкните кнопку Готово. Появится редактор кода и автоматически созданный код вашего Java класса. Закройте код.
  • Из Палитры Основная перетащите на сегмент Исходные данные элемент Простая переменная. На странице Основные панели Свойства дайте Имя: b, установите Тип: double.
  • Выделите объект source. На странице Основные панели Свойства установите свойства согласно рис. 2.6.

    В коде, приведенном ниже, который вы ввели в поле свойства Действие при выходе, используются данные созданных ранее двух массивов.

    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);
  • Из библиотеки Enterprise Library перетащите объекты queue и delay на диаграмму класса Main, разместите в прямоугольнике с именем Подготовка заготовки и соедините как на рис. 2.5. (рис 2.6) Элемент source с установленными свойствами
  • Выделите объект queue и на странице Основные панели Свойства установите свойства:
  • Имя: очЗаг
  • Класс заявки: Detail
  • Максимальная вместимость установить флажок.
  • Выделите объект delay и на странице Основные панели Свойства установите свойства:
  • Имя: подЗаг
  • Класс заявки: Detail
  • Задержка задаётся Явно
  • Время задержки exponential (1/entity.Tn1)
  • Вместимость 1
  • Действие при выходе entity.a = 1;
  • Сегменты Операция 1, Операция 2, Операция 3

    Каждый из сегментов операций 1, 2 и 3 предназначен для имитации выполнения соответствующей операции, включающей ожидание в очереди, непосредственно выполнение операции, контроль её качества, отправку на пункт окончательного контроля в случае брака, приём на повторное выполнение операции и контроль.

  • В Палитре выделите Презентация. Перетащите три элемента Прямоугольник и разместите так, как на рис. 2.7. На странице Дополнительные панели Свойства для каждого прямоугольника введите в поле Ширина: 240, в поле Высота: 180.
  • Перетащите три элемента text и на странице Основные панели Свойства в поле Текст: каждого из них введите Операция 1, Операция 2, Операция 3 соответственно (Рис. 2.7).
  • В Палитре выделите Enterprise Library. Перетащите для каждого сегмента два объекта queue, два объекта delay и один объект selectOutput на диаграмму класса Main, разместите в прямоугольниках и соедините так, как показано на рис. 2.7.
  • Выделите поочередно объекты, начиная с объекта queue сегмента 1, и на странице Основные панели Свойства установите свойства согласно рис. 2.7 и табл. 2.4
  • На сегменте Операция 1 поясним принятые имена объектов: очОп1 - очередь на операцию 1; выпОп1 - имитация выполнения операции 1; очКонОп1 - очередь на контроль после операции 1; конОп11 - имитация контроля после операции 1; конОп12 - розыгрыш результата контроля.

    (рис 2.7) Добавлены сегменты Операция 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 выбирается С заданной вероятностью
    Вероятность [0..1] 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 выбирается С заданной вероятностью
    Вероятность [0..1] 1-q2
    Сегмент Операция 3
    queue имяочОп3
    Класс заявкиDetail
    Максимальная вместимость Установите флажок
    delay имявыпОп3
    Класс заявкиDetail
    Задержка задаётся Явно
    Время задержкиexponential (1/T3)
    Вместимость1
    queue1 имяочКонОп3
    Класс заявкиDetail
    Максимальная вместимость Установите флажок
    delay1 имяконОп31
    Класс заявкиDetail
    Задержка задаётся Явно
    Время задержкиexponential (1/Tk3)
    Вместимость1
    Действие при выходеentity.n = 3
    selectOutput имяконОп32
    Класс заявкиDetail
    Выход true выбирается С заданной вероятностью
    Вероятность [0..1] 1-q3

    Создание нового класса активного объекта

    На рис. 2.7 показаны четыре функциональных сегмента модели, которые построены с использованием 18 объектов AnyLogic. Если вы начнёте создавать очередной сегмент, то после перетаскивания второго объекта появится сообщение: Ограничение ознакомительной версии: нельзя создавать более 20 вложенных объектов. Поэтому остальные сегменты модели нам нужно разместить на втором активном объекте. Создайте этот объект.

  • На панели Проект щелкните Main правой кнопкой мыши и выберите из контекстного меню Создать/Класс активного объекта.
  • Откроется окно Новый класс активного объекта.
  • В поле Имя: задайте имя нового класса Kontrol.
  • Если нужно, в поле Описание: введите описание сущности, моделируемой этим классом.
  • Щелкните кнопку Готово.
  • Создание элемента нового класса активного объекта

    Согласно логике процесса изготовления деталей надо после выполнения каждой из трёх операций в случае брака отправить забракованные детали на пункт окончательного контроля. С последнего получить и отправить детали на повторное выполнение тех операций, после которых они были забракованы. Кроме того, готовые детали необходимо передать на склад готовых деталей. Таким образом, для связи с активным объектом Main потребуются семь портов (3+3+1).

    Создайте элемент нового класса активного объекта Kontrol.

  • Из Палитры Основная перетащите элемент Порт и разместите сверху в левом ряду (рис. 2.8).
  • На странице Основные панели Свойства имя port замените именем наОп1.
  • Скопируйте элемент Порт с именем наОп1.
  • Вставьте два элемента Порт (см. рис. 2.8). При вставке последовательно будут изменяться их имена: наОп2, наОп3.
  • Из Палитры Основная перетащите элемент Порт и разместите сверху в правом ряду (см. рис. 2.8). (рис 2.8) Порты
  • На странице Основные панели Свойства имя port замените именем брОп1 (идентификатор означает, что через этот порт отправляются бракованные детали после операции 1 на пункт окончательного контроля).
  • Скопируйте элемент Порт с именем брОп1.
  • Вставьте два элемента Порт (см. рис. 2.8). При вставке последовательно будут изменяться их имена: брОп2, брОп3.
  • Из Палитры Основная перетащите элемент Порт и разместите внизу в правом ряду (см. рис. 2.8).
  • На странице Основные панели Свойства имя port замените именем готДет.
  • По мере размещения элементов Порт они автоматически будут объединяться прямоугольником (с пунктирными линиями) и появится надпись Значок.
  • Возвратитесь на диаграмму класса Main.
  • На панели Проект выделите Kontrol, перетащите на диаграмму класса Main объект класса Kontrol, разместите как на рис. 2.9.
  • Объект активного класса Kontrol создан. На странице Основные панели Свойства уберите флажок Отображать имя и в поле Имя: введите на_контроль.
  • В Палитре выделите Презентация. Перетащите элемент Прямоугольник и разместите так, как на рис. 2.9. На странице Дополнительные панели Свойства введите в поле Ширина: 140, в поле Высота: 220.
  • Перетащите элемент text и на странице Основные панели Свойства в поле Текст введите На окончательный контроль.
  • Теперь для движения заявок-деталей в модели необходимо надлежащим образом соединить входы и выходы объектов сегментов Операция 1, Операция 2 и Операция 3 с портами.

  • Соедините выходы F (false) объектов конОп12, конОп22, конОп32 с портами брОп1, брОп2, брОп3 соответственно.
  • Соедините порты наОп1, наОп2, наОп3 с входами объектов очОп1, очОп2, очОп3 соответственно.
  • Соедините выход Т (true) объекта конОп32 сегмента Операция 3 с портом готДет.
  • На рис. 2.9 вы видите ещё объекты. Перейдём к размещению их на диаграмме класса Main.

    (рис 2.9) Объект Main с сегментами модели и элементом объекта Kontrol

    Создание области просмотра

    В случае сложных моделей, активные объекты которых содержат большое количество элементов, может возникнуть неудобство: все элементы активного объекта могут просто физически не поместиться в ту область диаграммы, которая будет отображена в окне презентации во время выполнения модели.

    Версия 6 AnyLogic предоставляет в распоряжение пользователей специальный элемент для решения этой проблемы - область просмотра. С помощью этого элемента вы можете выделить на диаграмме активного объекта некоторые области, содержащие логически обособленные группы элементов или участки диаграммы. Задав такие области, вы сможете легко переключаться между ними во время выполнения модели с помощью специальных средств навигации, что позволит быстро переходить к тому или иному участку диаграммы активного объекта. При этом в окне презентации запущенной модели будут отображаться те элементы активного объекта, которые попали в заданную вами ранее и сделанную в текущий момент активной область просмотра.

    Используем две области просмотра. В первой области просмотра разместим объекты первых пяти сегментов (см. рис. 2.9), во второй - сегменты Пункт окончательного контроля, Склад готовых деталей и Склад бракованных деталей.

    Первая область просмотра будет на диаграмме класса Main, а вторая - на новом классе активного объекта Kontrol.

    Создайте область просмотра на диаграмме класса Main для размещения объектов сегмента Постановка на дежурство.

  • В Палитре выделите Презентация. Перетащите элемент Область просмотра в нужное место.
  • Вы увидите на диаграмме значок якоря этой области просмотра . Чтобы в дальнейшем изменить свойства этой области, Вам нужно будет выделить этот значок мышью.
  • Перейдите на страницу Основные панели Свойства.
  • В поле Имя: введите zex.
  • Задайте, как будет располагаться область просмотра относительно ее якоря, с помощью элемента управления Выравнивать по: Верхн. левому углу.
  • Выберите режим масштабирования из выпадающего списка Масштабирование: Подогнать под окно.
  • Сбросьте флажок исключить, если он был установлен.
  • Переключение между областями просмотра

    Области просмотра используются как для навигации по графическому редактору во время создания модели, так и для навигации по окну презентации во время выполнения модели.

    Чтобы перейти к другой области просмотра в режиме создания модели:

  • Щелкните мышью в графическом редакторе, чтобы сделать его активным.
  • Щелкните по кнопке панели инструментов Области просмотра и выберите из выпадающего списка, к какой именно области просмотра вы хотите перейти.
  • Чтобы перейти к другой области просмотра в режиме выполнения модели:

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

  • В Палитре выделите Презентация. Перетащите элемент text, разместите и введите в поле Текст: Цех, как на рис. 2.9.
  • Перетащите второй элемент text, разместите и введите в поле Текст: Пункт окончательного контроля.
  • На панели Свойства выделите Динамические и в поле Действие по щелчку: введите следующий Java код:
    на_контроль.kontr.navigateTo();
  • Во введённом коде на_контроль - имя элемента нового класса активного объекта Kontrol, а kontr - имя области просмотра, которую мы создадим позднее на новом активном объекте Kontrol.

    На рис. 2.10 показан активный объект Kontrol с размещёнными на нём тремя сегментами модели. Создадим эти сегменты.

    (рис 2.10) Объект Kontrol с размещёнными на нём тремя сегментами

    Пункт окончательного контроля

  • Из Презентации перетащите три элемента Прямоугольник и разместите так, как на рис. 2.10. На странице Дополнительные панели Свойства для верхнего прямоугольника введите в поле Ширина: 580, в поле Высота: 240. Для нижних прямоугольников: Ширина: 250, Высота: 140.
  • Перетащите три элемента text и на странице Основные панели Свойства в поле Текст: каждого из них вместо имеющегося там слова text введите Пункт окончательного контроля, Склад готовых деталей, Склад бракованных деталей соответственно (рис. 2.10).
  • Из Основной библиотеки (Enterprise Library) перетащите два объекта selectOutput, объект queue, объект delay и один объект selectOutput5 на диаграмму класса Kontrol, разместите в верхнем прямоугольникe и соедините так, как показано на рис. 2.10. Порты брОп1, брОп2 и брОп3 соединяются с входом объекта selectOutput. Выход T (true) объекта окКон3 соединяется с входом объекта selectOutput.
  • Выделите поочередно объекты, начиная с левого объекта selectOutput, и на странице Основные панели Свойства установите свойства согласно рис. 2.10 и табл. 2.5. Во всех объектах должен быть установлен флажок Отображать имя и На презентации.
  • Объект Свойства Значения
    selectOutput имяокКон1
    Класс заявкиDetail
    Выход true выбирается При выполнении условия
    Условиеentity.a<2
    queue имяочКон
    Класс заявкиDetail
    Максимальная вместимость Установите флажок
    delay имяокКон2
    Класс заявкиDetail
    Задержка задаётсяЯвно
    Время задержкиexponential (1/get_Main().Tk)
    Вместимость 1
    selectOutput имяокКон3
    Класс заявкиDetail
    Выход true выбирается С заданной вероятностью
    Вероятность [0..1]1-get_Main().q4
    Действие при выходе(true) entity.a=2
    selectOutput5 имяраспределитель
    Класс заявкиDetail
    Использовать:Условия
    Условие 0entity.n==1
    Условие 1entity.n==2
    Условие 2 entity.n==3

    Склад готовых деталей. Вывод результатов моделирования

  • Из библиотеки Основная перетащите на левый нижний прямоугольник три элемента Простая переменная. На странице Основные панели Свойства в поле Имя: каждого элемента введите соответствующие имена, показанные на рис. 2.10. Установите Тип: double.
  • Из Основной библиотеки перетащите объект sink.
  • На странице Основные панели Свойства установите следующие свойства:
  • Имя: склГотДет
  • Отображать имя сбросьте флажок;
  • Класс заявки: Detail
  • Действие при входе
    готДетали = склГотДет.count()/get_Main().колПрог;
    доляГотДет = готДетали/(готДетали + бракДетали);
    срВрПодгДет = (get_Main().врМод*get_Main().колПрог)/склГотДет.count();
  • Код предназначен для расчёта результатов моделирования: абсолютного готДетали и относительного доляГотДет количества готовых деталей, среднего времени срВрПодгДет подготовки одной детали.

  • Из библиотеки Картинки перетащите картинку Склад и разместите как на рис. 2.10.
  • Склад бракованных деталей. Вывод результатов моделирования

  • Из библиотеки Основная перетащите на правый нижний прямоугольник два элемента Простая переменная. На странице Основные панели Свойства в поле Имя: каждого элемента введите соответствующие имена, показанные на рис. 2.10. Установите Тип: double.
  • Из Enterprise Library перетащите объект sink.
  • На странице Основные панели Свойства установите следующие свойства:
  • Имя: склБракДет
  • Отображать имя сбросьте флажок;
  • Класс заявки: Detail
  • Действие при входе
    бракДетали = склБракДет.count()/get_Main().колПрог;
    доляБрДет = бракДетали/(готДетали+бракДетали);
  • Код предназначен для расчёта результатов моделирования: абсолютного бракДетали и относительного доляБрДет количества бракованных деталей.

  • Из библиотеки Картинки перетащите картинку Склад и разместите как на рис. 2.10.

    Так как все исходные данные размещены на диаграмме класса Main, то ссылка на них из диаграммы класса Kontrol, производится, например, так: get_Main().колПрог;

  • Создание областей просмотра и переключение между ними

  • Из библиотеки Презентация перетащите элемент Область просмотра.
  • Перейдите на страницу Основные панели Свойства.
  • В поле Имя: введите kontr.
  • Задайте, как будет располагаться область просмотра относительно ее якоря, с помощью элемента управления Выравнивать по: Верхн. левому углу.
  • Выберите режим масштабирования из выпадающего списка Масштабирование: Подогнать под окно.
  • На странице Дополнительные панели Свойства введите в поля X: 30, Y: 10, Ширина: 670, в поле Высота: 480.
  • Сбросьте флажок Исключить, если он был установлен.
  • Перетащите элемент text, разместите и введите в поле Текст: Цех, как на рис. 2.10.
  • На панели Свойства выделите Динамические и в поле Действие по щелчку: введите следующий Java код:
    get_Main().zex.navigateTo();
  • Перетащите второй элемент text, разместите и введите в поле Текст: Пункт окончательного контроля.
  • Теперь в ходе моделирования вы можете перемещаться между двумя областями просмотра. Чёрный цвет, например, Цех, означает, что открыта область просмотра, на которой размещен Пункт окончательного контроля. При этом цвет названия Пункт окончательного контроля другой.
  • Проведение исследований в AnyLogic

    Для удобства считывания статистических данных о коэффициентах использования (загрузки) пункта подготовки заготовок и пунктов выполнения операций 1…3 дополним модель элементами Простая переменная и необходимыми java-кодами.

  • Из Презентации перетащите элемент Скругленный прямоугольник на диаграмму класса Kontrol и разместите как на рис. 2.11. Можно было бы всё это сделать на диаграмме класса Main, но тогда бы пришлось каждый раз после проведения эксперимента для считывания результатов переключаться между областями просмотра.
  • Перетащите элемент text, разместите и введите в поле Текст: Коэффициенты использования.
  • Из библиотеки Основная перетащите элемент Простая переменная. Разместите и дайте имя коэфИспПодЗаг, как на рис. 2.11. Оставьте тип double.
  • Перетащите ещё один элемент Простая переменная и дайте ему имя коэфИспВыпОп1. Оставьте тип double.
  • Скопируйте элемент с именем коэфИспВыпОп1. Вставьте ещё два таких элемента, которым системой будут присвоены имена коэфИспВыпОп2 и коэфИспВыпОп3 (см. рис. 2.11).
  • Выделите объект подЗаг. В поле Действие при выходе добавьте код:
    на_контроль.коэфИспПодЗаг=
    подЗаг.statsUtilization.mean();
  • Выделите объект выпОп1. В поле Действие при выходе введите код:
    на_контроль.коэфИспВыпОп1=
    выпОп1.statsUtilization.mean()
  • Выделите объект выпОп2. В поле Действие при выходе введите код:
    на_контроль.коэфИспВыпОп2=
    выпОп2.statsUtilization.mean()
  • Выделите объект выпОп3. В поле Действие при выходе введите код:
    на_контроль.коэфИспВыпОп3=
    выпОп3.statsUtilization.mean()
  • Перейдите на диаграмму класса Main. В панели Проекты выделите Simulation:Main.

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

    Нужно в панели Проект щёлкнуть Эксперимент. На странице Основные установить Фиксированное начальное число (воспроизводимые прогоны). В соответствующее поле ввести начальное число.

    В GPSS World при обращении к датчикам случайных чисел (в нашей модели распределенных по экспоненциальному закону) можно указывать различные начальные числа, или те же, что и в GPSS World.

    Чтобы не связывать разработчиков моделей выполнением условия одинаковости начальных чисел датчиков случайных чисел, в AnyLogic используем опцию Случайное начальное число (уникальные прогоны), а в GPSS-модели произвольным образом будем устанавливать различные начальные числа во всех обращениях к генераторам случайных чисел в каждом эксперименте. Это вполне корректно, так как в [1, 2, 3, 4] показано, что и при условии неодинаковости начальных чисел генераторов тенденция изменения количественных показателей, а значит и величины различия результатов моделирования в GPSS World и AnyLogic практически одни и те же.

  • На странице Модельное время в поле Остановить: введите 7987 680.0 (480*16 641 = 7 987 680.0).
  • Интерпретация результатов моделирования

    Мы провели эксперименты с моделями прямых задач, выполнив в каждом эксперименте в GPSS World 16 641 прогонов, а в AnyLogic увеличив модельное время в 16 641 раз.

    Всего выполнено 8 экспериментов, результаты которых сведены в табл. 2.6. Первый эксперимент соответствует постановке задачи. Результаты первого эксперимента представлены на рис. 2.11 и в табл. 2.6.

    В каждом следующем эксперименте параметры, установленные в предыдущем эксперименте, либо остаются неизменными, либо изменяются. Указываются только новые значения параметров в строке, предшествующей результатам следующего эксперимента. Например, во втором эксперименте уменьшено среднее время поступления заготовок с Tn = 35 до Tn = 30, а остальные параметры остались неизменными (табл. 2.6).

    Всего изменялись значения шести параметров. Кроме того, в восьмом эксперименте были уменьшены средние времена подготовки вариантов заготовок (значения элементов одномерного массива).

    Сравнительный анализ результатов экспериментов свидетельствует об адекватности GPSS World и AnyLogic, так как их различия несущественны.

    Например, относительная доля готовых изделий и относительная доля забракованных отличаются на 0 … 0,002, а среднее время изготовления одной детали - на 0,010 … 0,185.

    Коэффиценты использования пункта подготовки заготовок и пунктов выполнения операций 1…3 в некоторых экспериментах или одинаковы, или различаются на 0,001 … 0,006.

    По результатам экспериментов (табл. 2.6) можно сделать выводы об эффективности работы цеха по производству деталей и обнаружить "узкие" места.

    Изменение параметров в каждом следующем эксперименте преследовало цель увеличения количества годных деталей и сокращения времени подготовки одной детали. Если в первом эксперименте готовых деталей было 9,885 (9,882), а среднее время изготовления одной детали 48,559 (48,573), то в последнем восьмом эксперименте цель была достигнута - 21,161 (21,250) и 22,683 (22,588) соответственно.

    (рис 2.11) Вариант результатов моделирования
    Показатели функционирования цеха
    Показатели GPSS World AnyLogic
    1) согласно постановке задачи
    готДетали 9,885 9,882
    доляГотДет 0,721 0,723
    бракДетали 3,821 3,778
    доляБрДет 0,279 0,277
    срВрПодгДет 48,559 48,573
    коэфИспПодЗаг 0,639 0,638
    коэфИспВыпОп1 0,879 0,877
    коэфИспВыпОп2 0,662 0,658
    коэфИспВыпОп3 0,801 0,801
    Δ доляГотДет 0,002
    Δ доляБрДет 0,002
    Δ срВрПодгДет 0,014
    2) Tn = 30
    готДетали 11,284 11,333
    доляГотДет 0,722 0,723
    бракДетали 4,338 4,343
    доляБрДет 0,278 0,277
    срВрПодгДет 42,538 42,353
    коэфИспПодЗаг 0,749 0,746
    коэфИспВыпОп1 1,000 1,000
    коэфИспВыпОп2 0,752 0,762
    коэфИспВыпОп3 0,915 0,916
    Δ доляГотДет 0,001
    Δ доляБрДет 0,001
    Δ срВрПодгДет 0,185
    3) T1 = 25, T3 = 30
    готДетали 11,552 11,555
    доляГотДет 0,722 0,724
    бракДетали 4,459 4,414
    доляБрДет 0,278 0,276
    срВрПодгДет 41,553 41,542
    коэфИспПодЗаг 0,748 0,746
    коэфИспВыпОп1 0,852 0,852
    коэфИспВыпОп2 0,774 0,770
    коэфИспВыпОп3 0,802 0,801
    Δ доляГотДет 0,002
    Δ доляБрДет 0,002
    Δ срВрПодгДет 0,011
    4) Tn = 25, T1 = 20, T2 = 15, T3 = 25
    готДетали 13,845 13,900
    доляГотДет 0,723 0,724
    бракДетали 5,314 5,305
    доляБрДет 0,277 0,276
    срВрПодгДет 34,669 34,532
    коэфИспПодЗаг 0,895 0,899
    коэфИспВыпОп1 0,817 0,822
    коэфИспВыпОп2 0,555 0,558
    коэфИспВыпОп3 0,801 0,803
    Δ доляГотДет 0,001
    Δ доляБрДет 0,001
    Δ срВрПодгДет 0,037
    5) Tn = 20, T3 = 20
    готДетали 15,453 15,499
    доляГотДет 0,723 0,724
    бракДетали 5,932 5,915
    доляБрДет 0,277 0,276
    срВрПодгДет 31,063 30,969
    коэфИспПодЗаг 1,000 1,000
    коэфИспВыпОп1 0,911 0,913
    коэфИспВыпОп2 0,619 0,621
    коэфИспВыпОп3 0,716 0,718
    Δ доляГотДет 0,001
    Δ доляБрДет 0,001
    Δ срВрПодгДет 0,094
    6) q3 = 0,05
    готДетали 16,200 16,206
    доляГотДет 0,755 0,757
    бракДетали 5,246 5,1921
    доляБрДет 0,245 0,243
    срВрПодгДет 29,629 29,619
    коэфИспПодЗаг 1,000 1,000
    коэфИспВыпОп1 0,916 0,911
    коэфИспВыпОп2 0,622 0,620
    коэфИспВыпОп3 0,710 0,711
    Δ доляБрДет 0,002
    Δ доляГотДет 0,002
    Δ срВрПодгДет 0,010
    7) q1= 0,05, q2 = 0,05
    готДетали 18,903 18,856
    доляГотДет 0,883 0,883
    бракДетали 2,504 2,491
    доляБрДет 0,117 0,117
    срВрПодгДет 25,393 25,456
    коэфИспПодЗаг 1,000 1,000
    коэфИспВыпОп1 0,901 0,896
    коэфИспВыпОп2 0,650 0,646
    коэфИспВыпОп3 0,828 0,829
    Δ доляГотДет 0
    Δ доляБрДет 0
    Δ срВрПодгДет 0,059
    8) T1=15, срВрПодгЗаг={7,11,18,19,23,22,0,0,0,0}
    готДетали 21,161 21,250
    доляГотДет 0,883 0,884
    бракДетали 2,801 2,785
    доляБрДет 0,117 0,116
    срВрПодгДет 22,683 22,588
    коэфИспПодЗаг 0,939 0,940
    коэфИспВыпОп1 0,756 0,760
    коэфИспВыпОп2 0,725 0,729
    коэфИспВыпОп3 0,929 0,932
    Δ доляГотДет 0,001
    Δ доляБрДет 0,001
    Δ срВрПодгДет 0,095

    Но уже по второму эксперименту видно, что коэфИспВыпОп1=1, а коэфИспВыпОп3=0,916, то есть приближается к 1. Поэтому изменение других параметров ничего не даст. Нужно уменьшить среднее время выполнения операций 1 и 3. Третий эксперимент это подтвердил.

    В экспериментах 5…7 коэффициент загрузки пункта подготовки заготовок равен 1. Изменение доли брака лишь немного увеличил искомые показатели. Поэтому дальнейший рост годных деталей и среднего времени подготовки одной детали возможен был лишь при сокращении средних времён подготовки заготовок в зависимости от их типов.

    Вернуться к учебному плану