оглавление   КМ   ДМ   экономическая информатика   визуальные среды - 4GL   Теория и практика обработки информации

Основы языка имитационного моделирования GPSS

Пример построения моделей с ОКУ, МКУ и списками пользователя

  • 4.2. Модель процесса изготовления изделий на предприятии. Обратная задача
  • 4.1. Модель процесса изготовления изделий на предприятии. Прямая задача

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

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

    Перед сборкой каждый тип блоков проверяется на соответствующих постах. Длительности контроля одного блока случайные. На каждом посту бракуется блоков соответственно. Эти блоки в дальнейшем процессе сборки не участвуют и удаляются с постов контроля.

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

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

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

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

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

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

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

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

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

    Таблица 6.2.
    Уровни факторовФакторы
    K1_T2_K3_T4_Kc_Kpr_
    Нижний0,480,6100,50,7
    Верхний1,6201,4241,51,3
    Примечание.
    1. В табл. 6.2 идентификаторы факторов указаны такими, какими они приняты в программе модели. Факторы T2_ и T4_ соответствуют и .
    2. Изменение параметров равномерного ( , , , в модели Т1, Т01, Т3, Т03 соответственно) и нормального ( , , , в модели Тс, Т0с, Тpr, Т0pr соответственно) законов распределения производится изменением значений коэффициентов K1_, K3_, Kc_, Kpr_ соответственно. В этом случае среднее значение и сред-неквадратическое отклонение изменяются пропорционально соответствующему коэффициенту, например, T1_#K1_, T01_#K1_.

    Вариант 2. При исходных данных, указанных в п. 6.4.1.2, исследовать влияние качества изготовления блоков и сборки изделий (табл. 6.3) на количество принятых приемкой изделий в течение недели (40 часов).

    Таблица 6.3.
    Уровни факторовФакторы
    q11_q12_q13_q14_q2_q4_
    Нижний0.480.6100.50.7
    Верхний1.6201.4241.51.3

    Сделать выводы о работе подразделений предприятия и необходимых мерах по повышению их эффективности.

    Результаты моделирования необходимо получить с точностью и доверительной вероятностью (достоверностью)

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

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

    Для имитации МКУ следует использовать блоки ENTER и LEAVE, для ОКУ - SEIZE и RELEASE. Для имитации ОКУ, а в данном случае это пункт приема изделий, можно также использовать МКУ, описав его командой STORAGE с емкостью 1. Тогда при увеличении количества пунктов приема собранных изделий нужно будет только изменить команду STORAGE, записав в ней вместо 1 новое значение емкости МКУ.

    Предприятие как система массового обслуживания

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

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

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

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

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

    4.1.5. Блок-диаграмма модели

    Модели функционирования систем на GPSS, как уже было показано в п. 6.3.2.1, могут быть первично описаны в виде блок-диаграмм.

    При этом отдельные элементы модели и модель в целом имеют достаточно различимое подобие. Для получения такого вывода сравните рис. 6.2 и 6.3: состав и блок-диаграмму модели функционирования предприятия.

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

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

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

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

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

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

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

    Блок-диаграмма модели (лист 1)


    Рис. 6.3.  Блок-диаграмма модели (лист 1)

    Блок-диаграмма модели (продолжение, лист 2)


    Рис. 6.3.  Блок-диаграмма модели (продолжение, лист 2)

    Блок-диаграмма модели (продолжение, лист 3)


    Рис. 6.3.  Блок-диаграмма модели (продолжение, лист 3)

    Блок-диаграмма модели (продолжение, лист 4)


    Рис. 6.3.  Блок-диаграмма модели (продолжение, лист 4)

    Блок-диаграмма модели (окончание, лист 5)


    Рис. 6.3.  Блок-диаграмма модели (окончание, лист 5)

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

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

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

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

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

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

    SAVEVALUE		RETRY		VALUE
    KOLIZD			0			122.000
    TIZD			0			19.512

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

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

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

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

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

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

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

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

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

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

    В блоке

    Met10	SAVEVALUE	NIzd+,1

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

    TEST E         X$NIzd,N_,Term5

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

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

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

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

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

    SAVEVALUE		RETRY		VALUE
    TIZD			0			39.438
    STIZD			0			19.396

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

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

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

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

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

    N_          EQU   244

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

    SAVEVALUE RETRY VALUE
    TIZD078.863
    STIZD019.393

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

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

    Уменьшение числа объектов в модели

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

    Автоматическая телефонная станция (АТС) обслуживает телефонных аппаратов (ТА) первой категории (ТА1), ТА второй категории (ТА2) и имеет выходов в сеть связи. Интервал времени между звонками с ТА1 случайный. Вероятность звонка с i-го ТА1 Вероятность того, что при этом для разговора потребуется внешняя линия связи соединение с ТА2 При этом может быть занята любая свободная линия связи, а вероятность звонка на -й ТА2 Длительность разговора с ТА1 случайная. Время ожидания при занятости ТА или внешних линий связи случайное. Вероятность того, что ТА2 не ответит, При этом время случайное.

    Интервал времени между звонками с ТА2 случайный. Вероятность звонка с -го ТА2 Вероятности того, что при этом для разговора потребуются внешняя линия связи соединение с ТА1 Для разговора может быть занята любая свободная внешняя линия связи, а вероятность звонка на -й ТА1 Длительность разговора с ТА2 случайная. Время при занятости ТА или внешних линий связи случайное. Вероятность того, что ТА1 не ответит, При этом время также случайное.

    Звонки с ТА1 обладают абсолютным приоритетом по отношению к звонкам с ТА2 при занятости внешнего выхода в сеть связи. Поэтому, если при поступлении с ТА1 заявки на разговор по внешнему выходу все внешние выходы будут заняты разговорами также с ТА1, прерывания разговоров не происходит и заявка считается потерянной. Если же некоторые внешние выходы будут заняты разговорами с ТА2, после один из этих разговоров прерывается (теряется) и начинается разговор по этому выходу с ТА1.

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

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

    Разработать имитационную модель функционирования АТС. Исследовать зависимость вероятности разговоров абонентами ТА1 от интервалов времени T1, T2, времени t1, t2 разговоров и вероятностей р5 и р10 ответа на звонки абонентов ТА2 и ТА1 соответственно.

    Результаты моделирования необходимо получить с точностью и доверительной вероятностью (достоверностью) \alpha = 0,99.

    5.4. Блок-диаграмма модели

    Модель функционирования АТС должна иметь:

    Телефоны и внешние выходы в модели нужно представить ОКУ, а заявки на разговоры - транзактами. Казалось бы, что в целях сокращения программы модели нужно использовать МКУ, однако МКУ не дает возможности идентифицировать каждый свой канал. Что касается сокращения, то этого можно достичь и с ОКУ.

    В программе п. 6.5.1.6 (сегмент имитации работы постов контроля) был продемонстрирован метод сокращения блоков модели за счет замены имен МКУ номерами. Язык GPSS не позволяет сразу, без объявления имен МКУ, использовать номера.

    Но для одноканального устройства это возможно. Дадим, используя переменные пользователя, номера ОКУ, предварительно не указывая их имена:

    Нумерацию будем использовать в блок-диаграмме и программе модели. За счет этого при увеличении числа ТА1, ТА2 и внешних выходов программа модели не потребует внесения каких-либо изменений.

    Конечно, можно также определить арифметические выражения для вычисления (N1_+N2_), (N1_+N2_+N3_) и затем ссылаться на них в программе модели, например:

    Num1VARIABLE   N1_+N2_
    Num2VARIABLE   N1_+N2_+N3_

    В больших моделях этот вариант предпочтителен. Для лучшего понимания построения модели ее сегменты разделены на части, реализующие самостоятельные функции. Сегмент имитации телефонных разговоров с ТА1:

    В программе демонстрируется возможность GPSS описания и использования в одной и той же модели ОКУ, функционирующего в различных режимах:

    Для имитации прерывания телефонных разговоров абонентов ТА2 звонками абонентов с ТА1 используются блоки PREEMPT и RETURN.

    Блок-диаграмма модели представлена ниже (рис. 6.4).

    Блок-диаграмма модели АТС (лист 1)


    Рис. 6.4.  Блок-диаграмма модели АТС (лист 1)

    Блок-диаграмма модели АТС (продолжение, лист 2)


    Рис. 6.4.  Блок-диаграмма модели АТС (продолжение, лист 2)

    Блок-диаграмма модели АТС (продолжение, лист 3)


    Рис. 6.4.  Блок-диаграмма модели АТС (продолжение, лист 3)

    Блок-диаграмма модели АТС (продолжение, лист 4)


    Рис. 6.4.  Блок-диаграмма модели АТС (продолжение, лист 4)

    Блок-диаграмма модели АТС (окончание, лист 5)


    Рис. 6.4.  Блок-диаграмма модели АТС (окончание, лист 5)

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

    В программе модели для задания исходных данных используются переменные пользователя. Значения им присваиваются командой EQU. Это позволяет проводить эксперименты с использованием встроенных генераторов, так как факторы в них должны быть только переменными пользователя.

    Рассмотрим работу сегмента имитации телефонных разговоров с ТА1.

    Генератор этого сегмента вводит в модель транзакты со средним интервалом времени (T1_/ N1_ ). Поскольку звонки с ТА1 имеют абсолютный приоритет, то блоком GENERATE транзактам присваивается приоритет 1. Генератор сегмента имитации телефонных разговоров с ТА2 вводит в модель транзакты с нулевым приоритетом.

    После ввода транзакта в модель, имитирующего заявку на звонок, производится определение номера звонящего ТА1. Группа событий - звонки с ТА1 - рассматривается как полная группа несовместных событий. Три варианта алгоритмов розыгрыша таких событий рассматривались ранее (п. 3.7). В модели реализован алгоритм розыгрыша в цикле, что делает его независимым при изменении количества телефонных аппаратов.

    Определенный в результате розыгрыша номер ТА1 заносится в параметр Р3 транзакта. Однако возможно, что с этого телефона уже звонят. Поэтому блоком GATE производится проверка: свободен ли ТА1 с данным номером? Если нет, заявка теряется.

    Если телефон свободен, то далее определяется: куда звонок? На ТА2 или требуется внешний выход? Ответ на этот вопрос находится розыгрышем единичного события (см. п. 3.6).

    Пусть требуется внешний выход. Поиск свободного внешнего выхода производится в цикле от номера (N1_+ N2_)+1) до номера ( N1_+ N2_+ N3_). Предположим, что найден свободный

    внешний выход, номер которого занесен в параметр Р4. Тогда последовательностью блоков, начиная с метки Мет4, имитируется ведение разговора с ТА1 без прерывания разговора по внешнему выходу с ТА2. После занятия свободного выхода в сохраняемую ячейку с тем же номером, что и номер занятого внешнего выхода, заносится уровень приоритета, в данном случае это 1.

    Разговор с ТА1 по внешнему выходу состоялся. Транзакт выводится из модели блоком TERMINATE с меткой Ter2.

    Вернемся к поиску свободного внешнего выхода. Пусть все внешние выходы заняты. Далее отыскивается внешний выход, занятый разговором с ТА2. Поиск производится также в цикле от номера (N1_+ N2_) +1 до номера ( N1_+ N2_+ N3_). Однако при этом проверяется содержимое сохраняемых ячеек с такими же номерами, как и номера внешних выходов. Если содержимое проверяемой ячейки равно 1, то внешний выход занят ТА1. Если все внешние выходы заняты ТА1, т. е. во всех проверяемых сохраняемых ячейках 1, заявка на звонок теряется - транзакт отправляется на метку Мет23.

    Пусть найден внешний выход, занятый ТА2, т. е. в соответствующей сохраняемой ячейке 0. Транзакт переходит к последовательности блоков, начинающихся с метки Мет22. Эта последовательность имитирует прерывание разговора с ТА2 и ведение разговора с ТА1 по внешнему выходу. По окончании разговора тран-закт выводится из модели блоком TERMINATE с меткой Ter1.

    Возвратимся к последовательности блоков, разыгрывающей номер ТА1, с которого поступает заявка на звонок. Пусть теперь требуется не внешний выход, а нужно позвонить одному из абонентов ТА2. В этом случае транзакт направляется к последовательности блоков, начинающейся с метки Мет2. Эта последовательность имитирует определение номера ТА2, на который звонят с ТА1. Номер ТА2 разыгрывается также, как и ранее рассмотренный розыгрыш номера ТА1. После определения номера ТА2 проверяется: свободен ли ТА2 с данным номером? Если не свободен, фиксируется несостоявшийся разговор выводом транзакта из модели блоком TERMINATE с меткой Ter3. Если же ТА2 свободен, транзакт направляется к последовательности блоков, начинающейся с метки Мет6. Эти блоки имитируют ведение разговора абонентами ТА1 и ТА2. По окончании разговора транзакт выводится из модели блоком TERMINATE с меткой Ter4.

    Сегмент имитации телефонных разговоров с ТА2 отличается от только что рассмотренного тем, что в нем отсутствует последовательность блоков, имитирующей прерывание разговоров с ТА2 заявками на разговор с ТА1 при отсутствии свободных внешних выходов.

    ; Модель функционирования автоматической телефонной станции 
    ; Задание исходных данных
    VrMod	EQU		3600	 ; Время моделирования, 1 ед. мод. вр. = 1 с 
    N1_	EQU		10	 ; Количество ТА1
    N2_	EQU		20	 ; Количество ТА2
    N3_	EQU		3 	 ; Количество внешних выходов
    T1_	EQU		40	 ; Время для расчета интервалов между звонками с ТА1
    T2_	EQU		50	 ; Время для расчета интервалов между звонками с ТА2
    Tog1	EQU		3.5	 ; Среднее время ожидания при занятости внешних линий
    Tog01	EQU		0.5	 ; Среднеквадратическое отклонение времени ожидания
    Tog2	EQU		3 ; Среднее время ожидания при звонке с ТА1 на ТА2
    Tog02	EQU		0.5	 ; Среднеквадратическое отклонение времени ожидания
    Tog3	EQU		2.5	 ; Среднее время ожидания при занятости внешних линий
    Tog03	EQU		0.4	 ; Среднеквадратическое отклонение времени ожидания
    Tog4	EQU		2 ; Среднее время ожидания при звонке с ТА2 на ТА1
    Tog04	EQU		0.3	 ; Среднеквадратическое отклонение времени ожидания
    Trazg1	EQU		3 	 ; Среднее время разговора с ТА1
    Trazg2	EQU		5 	 ; Среднее время разговора с ТА2
    P5_	EQU		0.7	 ; Вероятность того, что ТА2 не ответит
    P10_	EQU		0.3	 ; Вероятность того, что ТА1 не ответит
    ; Сегмент имитации телефонных разговоров с ТА1
    	GENERATE	(Exponential(333,0,(T1_/N1_))),,,,1
    ; Определение номера звонящего ТА1
    Met0	ASSIGN		7,(RN43/1000)	 ; Обращение к генератору RN
    Met1	ASSIGN		3+,1	 ; Начало цикла определения номера звонящего ТА1
    	TEST LE		P7,(P3#(1/N1_)),Met1 ; Если условие выполнено, то номер ТА1 запомнить в Р3
    	GATE NU		P3,Met9	 ; Свободен ли телефон с данным номером? Если да,
    	SEIZE		P3	 ; то звонят с него
    	ASSIGN		7,(RN343/1000)	 ; Обращение к генератору RN
    	TEST LE P7,(N3_/(N2_+N3_)),Met2 ; Если условие выполнено, то нужен внешний выход
    ; Поиск свободного внешнего выхода
    	ASSIGN		4,(N1_+N2_) ; Подготовка к циклу
    Met3	ASSIGN		4+,1 ; Начало цикла определения номера свободного внешнего выхода
    	GATE U		P4,Met4	 ; Свободен ли внешний выход?
    	TEST GE P4,(N1_+N2_+N3_),Met3 ; Все ли внешние выходы проверены и не найдено свободного?
    	ADVANCE		Tog1,Tog01  ; Если да, то задержаться и
    ; Поиск внешнего выхода, занятого ТА2
    	ASSIGN		4,(N1_+N2_) ; подготовка к циклу
    Met21	ASSIGN 4+,1 ; Начало цикла определения номера внешнего выхода, занятого ТА2
    	TEST E X*4,1,Met22 ; Равно ли значение сохраняемой ячейки 1? Если нет, то перейти к прерыванию разговора
    	TEST GE P4,(N1_+N2_+N3_),Met21 ; Все ли сохраняемые ячейки проверены? 
      Не найдено ни одной, значение которой равно 0? Если да, то
    	TRANSFER	,Met23	 ; все внешние выходы заняты звонками с ТА1
    ; Прерывание разговора с ТА2
    Met22 PREEMPT P4,PR,Met24,,RE ; Прервать разговор с ТА2 по внешнему выходу без права продолжения
    	SAVEVALUE	*4,PR ; Сохранить PR в ячейке с номером в Р4
    	ADVANCE		(Exponential(222,0,Trazg1)) ; Имитация разговора с ТА1 по внешнему выходу
    	RETURN		P4	 ; Освободить внешний выход с номером в Р4
    	RELEASE		P3	 ; Освободить ТА1 с номером в Р3 
    Ter1 TERMINATE ; Состоявшиеся разговоры с ТА1 по внешним выходам с прерыванием разговоров с ТА2
    Met23 RELEASE P3 ; Освободить ТА1, разговор с которого по внешнему выходу не состоялся
    	TERMINATE ; Несостоявшиеся разговоры с ТА1 по внешним выходам из-за занятости их ТА1
    ; Имитация ведения разговоров с ТА1 без прерывания
    Met4	SEIZE		P4	 ; Занять свободный внешний выход с номером в Р4
    	SAVEVALUE	P4,PR ; Занести в ячейку с номером в Р4 уровень приоритета
    	ADVANCE		(Exponential(222,0,Trazg1))	 ; Имитация разговора с ТА1
    	RELEASE		P4 ; Освободить внешний выход с номером в Р4
    	RELEASE		P3 ; освободить ТА1 с номером в Р3 
    Ter2	TERMINATE	; Состоявшиеся разговоры с ТА1 по внешним выходам
    ; Определение номера ТА2, на который звонят с ТА1
    Met2	ASSIGN		7,(RN343/1000) ; Обращение к генератору RN
    	ASSIGN		6,0 ; Подготовка к циклу
    Met5	ASSIGN		6+,1 ; Начало цикла определения номера ТА2, на который звонят с ТА1
    	TEST LE P7,(P6#(1/N2_)),Met5 ; Если условие выполнено, то номер ТА2 запомнить в Р6
    	GATE NU		(N1_+P6),Met7 ; Свободен ли телефон с данным номером? Если да,
    	ASSIGN		7,(RN343/1000) ; то ответит ли он?
    	TEST LE		P7,P5_,Met6 ; Если условие выполнено, то не ответит. Тогда 
    Met7	ADVANCE		Tog2,Tog02  ; задержаться и
    	RELEASE		P3 ; освободить ТА1 с номером в Р3 
    Ter3	TERMINATE	 ; Несостоявшиеся разговоры между абонентами ТА1 и ТА2
    ; Имитация разговоров абонентов ТА1 и ТА2
    Met6	SEIZE		(N1_+P6)	 ; Занять ТА2 с номером в (N1_+Р6)
    	ADVANCE (Exponential(222,0,Trazg1)) ; Имитация разговора между абонентами ТА1 и ТА2
    	RELEASE		(N1_+P6)	 ; Освободить ТА2 с номером в (N1_+Р6)
    	RELEASE		P3	 ; Освободить ТА1 с номером в Р3 
    Ter4	TERMINATE	 ; Состоявшиеся разговоры между абонентами ТА1 и ТА2
    Met9	TERMINATE	 ; ТА1 уже был занят, поэтому разговор не состоялся 
    Met24	RELEASE		(N1_+P3)	 ; Прерванные разговоры с ТА2 
    	TERMINATE
    ; Сегмент имитации телефонных разговоров с ТА2
    	GENERATE	(Exponential(493,0,(T2_/N2_)))
    ; Определение номера звонящего ТА1
    Met10	ASSIGN		7,(RN413/1000) ; Обращение к генератору RN
    	ASSIGN		3,0 ; Подготовка к циклу
    Met11	ASSIGN		3+,1 ; Начало цикла определения номера звонящего ТА2
    	TEST LE P7,(P3#(1/N2_)),Met11 ; Если условие выполнено, то номер ТА2 запомнить в Р3
    	GATE NU		(N1_+P3),Met19 ; Свободен ли телефон с данным номером? Если да,
    	SEIZE		(N1_+P3) ; то звонят с него 
    ; Поиск свободного внешнего выхода
    	ASSIGN		7,(RN343/1000) ; Обращение к генератору RN
    	TEST LE P7,(N3_/(N1_+N3_)),Met12 ; Если условие выполнено, то нужен внешний выход
    	ASSIGN		4,(N1_+N2_) ; Подготовка к циклу 
    Met13	ASSIGN		4+,1	 ; Начало цикла определения номера свободного внешнего выхода
    	GATE U		P4,Met14  ; Свободен ли внешний выход?
    	TEST GE P4,(N1_+N2_+N3_),Met13 ; Все ли внешние выходы проверены и не найдено свободного выхода?
    	ADVANCE		Tog3,Tog03 ; Если да, то задержаться и 
    	RELEASE		(N1_+P3) ; Освободить телефон с номером (N1_+P3)
    Ter5	TERMINATE	 ; Несостоявшиеся разговоры с ТА2 из-за занятости внешних выходов 
    Met14	SEIZE	P4	 ; Занять свободный внешний выход
    	SAVEVALUE	P4,PR ; Запомнить приоритет абонента, ведущего разговор
    	ADVANCE (Exponential(222,0,Trazg2)) ; Имитация разговора между абонентами ТА2 по внешним выходам
    	RELEASE		P4  ; Освободить внешний выход
    	RELEASE		(N1_+P3)  ; Освободить ТА2 
    Ter6	TERMINATE   ; Состоявшиеся разговоры с ТА2 по внешним выходам
    ; Определение номера ТА1, на который звонят с ТА2
    Met12	ASSIGN		7,(RN343/1000)   ; Обращение к генератору RN
    	ASSIGN		6,0   ; Подготовка к циклу
    Met15	ASSIGN		6+,1   ; Начало цикла определения номера ТА1, на который звонят с ТА2
    	TEST LE		P7,(P6#(1/N1_)),Met15   ; Если условие выполнено, то номер ТА1 запомнить в Р6
    	GATE NU		P6,Met17   ; Свободен ли телефон с данным номером? Если да,
    	ASSIGN		7,(RN343/1000)   ; то ответит ли он?
    	TEST LE		P7,P10_,Met16    ; Если условие выполнено, то не ответит. Тогда 
    Met17	ADVANCE	(Normal(211,Tog2,Tog02))   ; задержаться и
    	RELEASE		(N1_+P3)   ; освободить телефон с номером N1_+P3
    Ter7	TERMINATE   ; Несостоявшиеся разговоры с ТА2 из-за занятости ТА1
    ; Имитация разговоров абонентов ТА2 и ТА1
    Met16	SEIZE		P6   ; Занять ТА1 с номером в Р6
    	ADVANCE		(Exponential(222,0,Trazg2))  ; Имитация разговора между абонентами ТА2 и ТА1
    	RELEASE		P6   ; Освободить ТА1 с номером в Р6 
    	RELEASE		(N1_+P3) ; Освободить ТА2 с номером N1_+P3 
    Ter8	TERMINATE ; Состоявшиеся разговоры между абонентами ТА2 и ТА1 
    Met19	TERMINATE
    ; Сегмент задания времени моделирования и расчета результатов моделирования
    	GENERATE	VrMod	 ; Задание времени моделирования
    	TEST E		TG1,1,Met20 ; Если содержимое счетчика завершений равно 1, то рассчитать
    	SAVEVALUE	Ver1,((N$Ter2+N$Ter4)/N$Met0)	 ; Вероятность ведения разговоров с ТА1
    	SAVEVALUE	Ver2,((N$Ter6+N$Ter8)/N$Met10)	 ; Вероятность ведения разговоров с ТА2 
    Met20	TERMINATE	1    ; Фиксация очередного прогона
    

    Приведем результаты моделирования, полученные после 1000 прогонов.

    SAVEVALUE    RETRY  VALUE
    VER1    00.614
    VER2    00.396

    Вероятность ведения разговоров с ТА2 Ver2 = 0,396 меньше, чем Ver1 = 0,614. Одним из факторов, влияющим на это, является вероятность P10_ = 0,7 того, что абонент ТА1 на звонок абонента ТА2 не ответит.

    Оставим без изменений все исходные данные, установим лишь равную вероятность не ответа на звонки абонентами обеих категорий P10_ = P5_ = 0,3.

    По окончании моделирования получим:

    SAVEVALUE    RETRY  VALUE
    VER1    00.584
    VER2    00.625

    Применение матриц, функций и изменение версий модели

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

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

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

    Рассмотрим разработку и реализацию подобных моделей в системе моделирования GPSS World на примере бизнес-процесса предоставления услуг по средствам связи.

    6.1. Постановка задачи бизнес-процесса

    На дежурстве находятся n1 средств связи (СС) n2 типов (n21 + n22 + : + n2n2 = n2) в течение n3 часов.

    Каждое СС может в любой момент времени выйти из строя. В этом случае его заменяют резервным, причем либо сразу, либо по мере его появления. Тем временем, вышедшие из строя СС ремонтируют, после чего содержат в качестве резервного. Всего количество резервных СС - n4.

    Ремонт неисправных СС производят n5 мастеров. Время T1, T2, :, Tn2 ремонта случайное и зависит от типа СС, но не зависит от того, какой мастер это СС ремонтирует. Интервалы времени T21, T22, :, T2n2 между отказами находящихся на дежурстве СС случайные.

    Прибыль от СС, находящихся на дежурстве, составляет S1 денежных единиц в час. Почасовой убыток при отсутствии на дежурстве одного СС - S2 денежных единиц. Оплата мастера за ремонт неисправного СС - S31, S32, :, S3n2 денежных единиц в час. Затраты на содержание одного резервного СС составляют S4 денежных единиц в час.

    Задание на исследование. Разработать имитационную модель бизнес-процесса предоставления услуг по средствам связи в течение 25 суток ( 1000 часов ).

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

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

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

    Вариант исходных данных приведен в программе модели (п. 6.6.3).

    6.2. Уяснение задачи

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

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

    Структура системы предоставления услуг связи

    Рис. 6.5.  Структура системы предоставления услуг связи

    Какие ограничения в системе?

    1. Число мастеров-ремонтников в ремонтном подразделении.
    2. Максимальное число СС, одновременно находящихся на дежурстве.
    3. Максимальное число резервных СС.
    4. Общее число СС в системе.

    Для моделирования двух первых ограничений используем МКУ, а для третьего и четвертого ограничений - транзакты.

    Модель бизнес-процесса должна состоять из следующих сегментов:

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

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

    Предполагается, что количество типов СС в системе предоставления услуг связи может изменяться от одного до максимального значения n1_. Программа модели построена для n1_ =5.

    Для хранения результатов моделирования используются матрицы. В целях придания неизменности программы модели при варьировании количеством типов СС матрицы должны быть пронумерованы. Однако GPSS World при описании матриц командой MATRIX не позволяет вместо имени указывать число. Матрицы нужно вначале описать, дав им имена, а затем пронумеровать.

    Результаты моделирования для одного типа СС хранятся в трех матрицах, например, для СС типа 1 ( СС1 ) с идентификаторами:

    Значит, аналогичных матриц будет пятнадцать. Да плюс еще матрица KRem коэффициентов использования мастеров - ремонтников. Именам этим шестнадцати матрицам даны номера.

    Три матрицы для хранения суммарных результатов моделирования для СС всех типов не нумеровались:

    Именам пяти МКУ СС1_, СС2_, СС3_, СС4_ и СС5_, имитирующим по типам СС, находящиеся на дежурстве, даны номера 1 : 5. Это позволяет сократить число блоков в модели за счет того, что вместо пяти (в данном варианте модели) сегментов имитации постановки на дежурство СС используется один сегмент.

    Для записи исходных данных (количества СС всех типов (в том числе и резервных), среднего времени наработки до отказа и среднего времени восстановления по типам СС, дохода по типам от одного СС, находящегося на дежурстве, убытка по типам при отсутствии одного СС на дежурстве, стоимости по типам одного резервного СС) используются функции KolSS, KollSSRes, NarOtk, SrVrRem, S1_, S2_, S3_ соответственно. По сравнению с использованием матриц для записи этих же данных программа модели сокращается на двадцать пять строк.

    В начале работы модели генератор сразу вырабатывает количество транзактов, равное соответствующему количеству типов СС, и перестает быть активным.

    Далее блоками SAVEVALUE и ASSIGN в параметр 1 каждого из транзактов последовательно заносятся коды 1 : n1_ - признак типа СС.

    Затем каждый из транзактов с помощью блока SPLIT расщепляется (копируется, размножается) по количеству СС (с учетом резервных) соответствующего типа. После расщепления транзакты в соответствии с типом СС сразу занимают все каналы МКУ, имитирующие нахождение СС на дежурстве.

    Вышедшее из строя СС снимается с дежурства, поступает в ремонтное подразделение - транзакт либо занимает свободный канал МКУ Rem, если такой есть, либо при отсутствии свободного канала помещается в список задержки этого МКУ - список тран-зактов, ожидающих возможность занять освободившиеся каналы МКУ.

    После ремонта СС отправляется либо сразу на дежурство, либо в резерв. В обоих случаях транзакт направляется на метку Met1. Здесь также транзакт либо занимает свободный канал, либо помещается в список задержки МКУ, соответствующего типу СС.

    Ниже приводится программа только (в целях сокращения) для моделирования случая три мастера-ремонтника, а резервных СС2 - четыре, пять и шесть. Количество типов СС - n1_ = 4.

    ; Модель бизнес-процесса
    ; Задание номеров матрицам
    Prib1	EQU	1	; Матрица ожидаемой прибыли СС1
    KPr1	EQU	2	; Матрица коэффициентов прибыли СС1
    KZen1	EQU	3	; Матрица коэффициентов использования СС1
    Prib2	EQU	4	; Матрица ожидаемой прибыли СС2
    KPr2	EQU	5	; Матрица коэффициентов прибыли СС2
    KZen2	EQU	6	; Матрица коэффициентов использования СС2
    Prib3	EQU	7	; Матрица ожидаемой прибыли СС3
    KPr3	EQU	8	; Матрица коэффициентов прибыли СС3
    KZen3	EQU	9	; Матрица коэффициентов использования СС3
    Prib4	EQU	10	; Матрица ожидаемой прибыли СС4
    KPr4	EQU	11	; Матрица коэффициентов прибыли СС4
    KZen4	EQU	12	; Матрица коэффициентов использования СС4
    Prib5	EQU	13	; Матрица ожидаемой прибыли СС5
    KPr5	EQU	14	; Матрица коэффициентов прибыли СС5
    KZen5	EQU	15	; Матрица коэффициентов использования СС5
    KRem	EQU	16	; Матрица коэффициентов использования Rem
    ; Задание номеров МКУ, имитирующих дежурство СС
    CC1_	EQU	1	; Задание номера МКУ СС1
    CC2_	EQU	2	; Задание номера МКУ СС2
    CC3_	EQU	3	; Задание номера МКУ СС3
    CC4_	EQU	4	; Задание номера МКУ СС4
    CC5_	EQU	5	; Задание номера МКУ СС5
    ; Задание матриц
    Prib1	MATRIX ,3,5	; Матрица ожидаемой прибыли СС1
    KPr1	MATRIX ,3,5	; Матрица коэффициентов прибыли СС1
    KZen1	MATRIX ,3,5	; Матрица коэффициентов загрузки СС1
    Prib2	MATRIX ,3,5	; Матрица ожидаемой прибыли СС2 
    KPr2	MATRIX ,3,5	; Матрица коэффициентов прибыли СС2 
    KZen2	MATRIX ,3,5	; Матрица коэффициентов загрузки СС2 
    Prib3	MATRIX ,3,5	; Матрица ожидаемой прибыли СС3 
    KPr3	MATRIX ,3,5	; Матрица коэффициентов прибыли СС3 
    KZen3	MATRIX ,3,5	; Матрица коэффициентов загрузки СС3 
    Prib4	MATRIX ,3,5	; Матрица ожидаемой прибыли СС4 
    KPr4	MATRIX ,3,5	; Матрица коэффициентов прибыли СС4 
    KZen4	MATRIX ,3,5	; Матрица коэффициентов загрузки СС4 
    Prib5	MATRIX ,3,5	; Матрица ожидаемой прибыли СС5 
    KPr5	MATRIX ,3,5	; Матрица коэффициентов прибыли СС5 
    KZen5	MATRIX ,3,5	; Матрица коэффициентов загрузки СС5 
    KRem	MATRIX ,3,5	; Матрица коэффициентов загрузки 
    Rem 
    Pribil	MATRIX ,3,5	; Матрица суммарной прибыли 
    SrKPrib	MATRIX ,3,5	; Матрица коэффициентов прибыли СС всех типов
    SrKIsp	MATRIX ,3,5	; Матрица коэффициентов загрузки СС всех типов
    KolSS	MATRIX ,2,5	; Матрица количества СС всех типов 
    NarOtk	MATRIX ,1,5	; Матрица среднего времени наработки до отказа по типам СС, час 
    SrVrRem MATRIX ,1,5	; Матрица среднего ремонта по типам СС, час
    ; Определение МКУ по числу СС, находящихся на дежурстве
    CC1_	STORAGE 35 ; Емкость МКУ по количеству СС1 
    CC2_	STORAGE 100 ; Емкость МКУ по количеству СС2 
    CC3_	STORAGE 60 ; Емкость МКУ по количеству СС3 
    CC4_	STORAGE 45 ; Емкость МКУ по количеству СС4 
    CC5_	STORAGE 60 ; Емкость МКУ по количеству СС5 
    Rem	STORAGE	3 ; Емкость МКУ по числу мастеров-ремонтников
    ; Исходные данные
    VrMod	EQU	200	; Время моделирования, 1 ед. мод. вр. = 1 час
    Stroka	EQU	1	; Номер строки матрицы
    Stolbez	EQU	1	; Номер столбца матрицы
    n1_	EQU	5	; Количество типов СС
    StoMast	FUNCTION P1,D5	; Стоимость работы одного мастера
    1,17/2,18/3,16/4,20/5,21
    KolSS	FUNCTION P1,D5	; Количество по типам СС, находящихся на дежурстве
    1,55/2,100/3,60/4,45/5,60
    KolSSRes FUNCTION P1,D5	; Количество по типам резервных СС
    1,2/2,4/3,4/4,3/5,4
    NarOtk	FUNCTION P1,D5	; Среднее время наработки до отказа по типам СС, час
    1,373/2,301/3,482/4,325/5,470
    SrVrRem FUNCTION P1,D5	; Среднее время ремонта по типам СС 
    1,6.5/2,4.2/3,2.8/4,3/5, 5.5
    S1_	FUNCTION P1,D5	; Доход по типам от одного СС, находящегося на дежурстве 
    1,20/2,24.2/3,32.8/4,23/5, 25.5
    S2_	FUNCTION P1,D5	; Убыток по типам при отсутствии одного СС на дежурстве 
    1,32/2,34.2/3,37/4,31/5,32.5
    S3_	FUNCTION P1,D5	; Стоимость по типам содержания одного резервного СС 
    1,21/2,24.2/3,28/4,26/5, 25.5
    ; Арифметические выражения для расчета показателей
    DoxMax	VARIABLE VrMod#FN$S1_#FN$KolSS	; Максимальный доход от дежурства СС
    Ubitok	VARIABLE VrMod#FN$KolSS#(1-SR*1/1000)#FN$S2_ ; Убыток от отсутствия на дежурстве СС
    DoxPol	VARIABLE X$DoxMax-X$Ubitok	; Полученный доход от дежурства СС
    StoRem	VARIABLE (VrMod#SM$Rem#FN$StoMast)#(SR$Rem/1000) ; Стоимость ремонта неисправных СС
    ZatrResSS	VARIABLE FN$S3_#FN$KolSSRes#VrMod	; Затраты на содержание резервных СС
    SumPrib	VARIABLE X$DoxPol-(X$StoRem+X$ZatrResSS) ; Прибыль 
    KoefPr	VARIABLE	MX*3(Stroka,Stolbez)/X$DoxMax	; Коэффициент прибыли
    ; Сегмент имитации постановки на дежурство СС
    	GENERATE ,,,n1_
    	SAVEVALUE	TipSS+,1	; Код 1 ... n2_ - признак СС1 ... CCn1 в X$TipSS
    	ASSIGN	1,X$TipSS	; Код 1 ... n2_ - признак СС1 ...CCn2_ в P1
    	SPLIT	(FN$KolSS+FN$KolSSRes-1) ; Число СС + резервные СС
    ; Сегмент имитации дежурства СС
    Met1	ENTER	P1 ; Встать на дежурство СС типа с номером в Р1
    	ADVANCE	(Exponential(30,0,FN$NarOtk))	; Имитация выхода из строя СС
    	LEAVE	P1 ; Снятие с дежурства из-за выхода из строя СС типа, номер которого в Р1
    ; Сегмент имитации работы ремонтного подразделения
    	ENTER	Rem	; Занять одного мастера
    	ADVANCE (Exponential(31,0,FN$SrVrRem)) ; Имитация ремонта
    	LEAVE	Rem	; Конец ремонта
    	TRANSFER ,Met1 ; Направить исправное СС на дежурство или в резерв
    ; Сегмент задания времени моделирования и расчета результатов
    	GENERATE VrMod
    	TEST E	TG1,1,Met2
    Met23	ASSIGN	1+,1	; Начало цикла изменения типов СС
    	SAVEVALUE DoxMax,V$DoxMax ; Максимально возможный доход от дежурства СС
    	SAVEVALUE	Ubitok,V$Ubitok	; Убыток
    	SAVEVALUE	DoxPol,V$DoxPol	; Полученный доход от дежурства СС
    	SAVEVALUE	StoRem,V$StoRem ; Затраты на ремонт
    	SAVEVALUE	ZatrResSS,V$ZatrResSS	; Затраты на резервные СС
    	SAVEVALUE	SumPrib,V$SumPrib ; Суммарная прибыль
    	ASSIGN	2,(P1#3)
    	ASSIGN	3,(P2-2)
    	MSAVEVALUE *3,Stroka,Stolbez,X$SumPrib	; Прибыль по типу СС
    	MSAVEVALUE Pribil+,Stroka,Stolbez,X$SumPrib	; Суммарная прибыль по СС всех типов
    	ASSIGN	4,V$KoefPr	; Коэфициент прибыли по типам СС в Р4
    	ASSIGN	3,(P2-1)
    	MSAVEVALUE *3,Stroka,Stolbez,P4 ; Коэфициент прибыли по типам СС
    	MSAVEVALUE SrKPrib+,Stroka,Stolbez,(P4/n1_)	; Средний коэффициент прибыли по СС всех типов
    	MSAVEVALUE *2,Stroka,Stolbez,(SR*1/1000) ; Коэффициент использования CC
    	MSAVEVALUE SrKIsp+,Stroka,Stolbez,(SR*1/(1000#n1_))
    ; Средний коэффициент использования CC всех типов
    	TEST GE	P1,n1_,Met23
    	MSAVEVALUE 16,Stroka,Stolbez,(SR$Rem/1000); Коэффициент использования Rem
    	SAVEVALUE	TipSS,0 Met2	TERMINATE	1
    	START 1000,NP ; Недели 1-5: Резервных СС2=4, мастеров=3
    ; Сегмент переопределения блоков - изменения версий модели
    Stolbez	EQU	2
    	RESET
    	START	1000,NP	; Недели 6-10: Резервных СС2=4, масте-ров=3 
    Stolbez	EQU	3
    	RESET
    	START	1000,NP	; Недели 11-15: Резервных СС2=4, мас-теров=3 
    Stolbez	EQU	4
    	RESET
    	START	1000,NP	; Недели 16-20: Резервных СС2=4, мас-теров=3 
    Stolbez	EQU	5
    	RESET
    	START	1000,NP	; Недели 21-25: Резервных СС2=4, мас-теров=3
    KolSSRes FUNCTION P1,D5	; Количество резервных СС2 
    1,2/2,5/3,4/4,4/5,4 
    Stroka	EQU	2 
    Stolbez	EQU	1
    	RESET
    	START	1000,NP	; Недели 1-5: Резервных СС2=5, мастеров=3 
    Stolbez	EQU	2
    	RESET
    	START	1000,NP	; Недели 6-10: Резервных СС2=5, мастеров=3 
    Stolbez	EQU	3
    	RESET
    	START	1000,NP	; Недели 11-15: Резервных СС2=5, мастеров=3 
    Stolbez	EQU	4
    	RESET
    	START	1000,NP	; Недели 16-20: Резервных СС2=5, мастеров=3 
    Stolbez	EQU	5
    	RESET
    	START	1000,NP	; Недели 21-25: Резервных СС2=5, мастеров=3
    KolSSRes FUNCTION P1,D5	; Количество резервных СС2 
    1,2/2,6/3,4/4,5/5,4 Stroka	EQU	3
    Stolbez	EQU	1
    	RESET
    	START	1000,NP	; Недели 1-5: Резервных СС2=6, мастеров=3 
    Stolbez	EQU	2
    	RESET
    	START	1000,NP	; Недели 6-10: Резервных СС2=6, мастеров=3 
    Stolbez	EQU	3
    	RESET
    	START	1000,NP	; Недели 11-15: Резервных СС2=6, мастеров=3 
    Stolbez	EQU	4
    	RESET
    	START	1000,NP	; Недели 16-20: Резервных СС2=6, мастеров=3 
    Stolbez	EQU	5
    	RESET
    	START	1000	; Недели 21-25: Резервных СС2=6, мастеров=3

    В программе, кроме методов применения матриц и функций, показывается метод изменения версий модели. Изменение версий модели производится переопределением соответствующих блоков. Переопределяться не могут блоки GENERATE. Для переопределения блоков, описывающих ОКУ и МКУ, они должны иметь метки. Однако одного переопределения блоков недостаточно. В GPSS World изменение версий модели достигается также за счет использования команд RESET и CLEAR.

    В рассматриваемом примере в процессе моделирования необходимо собирать статистику по отрезкам времени \Delta T. То есть предшествующую статистику нужно сбросить, но оставить неизменными условия функционирования системы.

    Сброс в ноль статистики без удаления транзактов из процесса моделирования осуществляет команда RESET. Команда RESET не имеет операндов:

    RESET

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

    После того как для данной версии модели выполнено моделирование в течение заданного числа отрезков времени \Delta T (в примере - пять), нужно изменить версию модели и провести моделирование сначала.

    Изменение версии в данной модели производится переопределением функции KolSSRes, т. е. изменением количества резервных СС2, например:

    KolSSRes          FUNCTION        P1,D5 ; Количество резервных СС2
    1,2/2,5/3,4/4,4/5,4

    Процесс моделирования в исходное состояние возвращает команда CLEAR. Формат записи команды:

    CLEAR         [A]

    Операнд А может быть ON либо OFF. По умолчанию - ON.

    Команда CLEAR сбрасывает всю накопленные статистические данные, удаляет все транзакты из процесса моделирования и заполняет все блоки GENERATE первым транзактом. ОКУ и МКУ становятся доступными, устанавливаются в незанятое состояние. Содержимое всех блоков становится нулевым. Генераторы случайных чисел не сбрасываются.

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

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

    Поскольку накопленные и сохраненные в матрицах результаты моделирования нет необходимости выводить на каждом отрезке \Delta T, то в команде START используется операнд B, равный ON. В последней команде START операнд B не используется. Поэтому стандартный отчет выдается после завершения моделирования. В рассматриваемом примере - после пятнадцати наблюдений.

    Ниже показан фрагмент журнала с информацией о ходе моделирования. В первых пяти наблюдениях (первой версии модели) команда RESET не влияет на абсолютное модельное время, которое растет от 0 до 1 000 000 единиц модельного времени.

    После переопределения (формирования второй версии модели) выполняется команда CLEAR и абсолютное модельное время вновь изменяется от 0 до 1 000 000 единиц модельного времени.

    06/05/08 17:29:10  Model Translation Begun.
    06/05/08 17:29:10  Ready.
    06/05/08 17:29:10  Simulation in Progress.
    06/05/08 17:29:15  The Simulation has ended. Clock is 200000.000000.
    06/05/08 17:29:15  Simulation in Progress.
    06/05/08 17:29:19  The Simulation has ended. Clock is 400000.000000.
    06/05/08 17:29:19  Simulation in Progress.
    06/05/08 17:29:24  The Simulation has ended. Clock is 600000.000000.
    06/05/08 17:29:24  Simulation in Progress.
    06/05/08 17:29:28  The Simulation has ended. Clock is 800000.000000.
    06/05/08 17:29:28  Simulation in Progress.
    06/05/08 17:29:32  The Simulation has ended. Clock is 1000000.000000.
    06/05/08 17:29:33  Simulation in Progress.
    06/05/08 17:29:37  The Simulation has ended. Clock is 200000.000000.
    06/05/08 17:29:37  Simulation in Progress.
    06/05/08 17:29:41  The Simulation has ended. Clock is 400000.000000.
    06/05/08 17:29:41  Simulation in Progress.
    :
    06/05/08 17:30:17  Reporting in Rem_SS_2.59.1 - REPORT Window.

    Для включения в формируемый стандартный отчет матриц необходимо при открытом объекте "Модель" выполнить команду:

    Edit/Settings/Reports/Matrices/Применить/Ok

    Результаты моделирования после 1000 прогонов приведены ниже. Но опять же в целях сокращения - для СС1 и СС всех типов.

    MATRIXRETRYINDICESVALUE
    PRIB10
    1 1181586.183
    1 2181251.160
    1 3179584.944
    1 4181774.706
    1 5182291.154
    2 1180844.964
    2 2181435.896
    2 3181478.223
    2 4179347.815
    2 5179178.486
    3 1178683.512
    3 2178136.334
    3 3179139.261
    3 4181934.517
    3 5179655.938
    KPR10
    1 1.825
    1 2.823
    1 3.816
    1 4.826
    1 5.828
    2 1.822
    2 2.824
    2 3.824
    2 4.815
    2 5.814
    3 1.812
    3 2.809
    3 3.814
    3 4.826
    3 5.816
    KZEN10
    1 1.943
    1 2.942
    1 3.937
    1 4.943
    1 5.945
    2 1.941
    2 2.942
    2 3.942
    2 4.936
    2 5.936
    3 1.935
    3 2.933
    3 3.936
    3 4.944
    3 5.937
    3 5.601
    KREM0
    1 1.981
    1 2.982
    1 3.984
    1 4.978
    1 5.981
    2 1.983
    2 2.982
    2 3.982
    2 4.984
    2 5.982
    3 1.985
    3 2.984
    3 3.984
    3 4.979
    3 5.982
    PRIBIL0
    1 11111897.023
    1 21110398.484
    1 31102062.813
    1 41113459.610
    1 51114232.258
    2 11105731.875
    2 21107881.589
    2 31111610.502
    2 41098478.153
    2 51097605.578
    3 11094679.743
    3 21091129.285
    3 31096084.094
    3 41107311.254
    3 51097609.762
    SRKPRIB0
    1 1.844
    1 2.843
    1 3.837
    1 4.846
    1 5.846
    2 1.839
    2 2.840
    2 3.843
    2 4.833
    2 5.832
    3 1.829
    3 2.826
    3 3.830
    3 4.839
    3 5.831
    SRKISP0
    1 1.954
    1 2.953
    1 3.948
    1 4.954
    1 5.955
    2 1.956
    2 2.957
    2 3.959
    2 4.952
    2 5.951
    3 1.955
    3 2.953
    3 3.956
    3 4.962
    3 5.957

    Моделирование неисправностей одноканальных устройств

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

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

    ВККС обрабатывает сообщения с производительностью оп/с. После обработки сообщения передаются по каналам связи. Скорость передачи бит/с. Сообщения 1-й категории обладают абсолютным приоритетом по отношению к сообщениям других категорий. Поэтому если после обработки сообщения все каналов связи заняты передачей сообщений 1-й категории, обработанное сообщение помещается в накопитель каналов связи, если в нем есть место, иначе - теряется. Если же по какому-либо каналу передается сообщение другой категории, происходит прерывание передачи этого сообщения и передается сообщение 1-й категории. Емкость накопителя каналов связи ограничена сообщениями.

    ВККС и каналы связи имеют конечную надежность. Интервалы времени и между отказами ВККС и каналов связи случайные. Длительности восстановления и ВККС и каналов связи случайные. При отказе канала связи передаваемые сообщения 1-й категории сохраняются в накопителе каналов, если в нем есть место. При выходе из строя ВККС с вероятностью все сообщения в накопителе ВККС и накопителе каналов связи сохраняются, обрабатываемое сообщение теряется, а прием ВККС и передача сообщений по каналам связи прекращается. Все поступающие в это время сообщения теряются.

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

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

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

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

    7.4. Уяснение задачи

    Представим систему, имитационную модель которой предстоит разработать, схемой (рис. 6.6).

    Видно, что ВККС - это многофазная многоканальная система массового обслуживания разомкнутого типа. На рис. 6.6 показаны средства GPSS World, которые будут использованы для моделирования элементов ВККС.

    В структуре системы выделен блок контроля состояний ВККС, каналов связи ( GATE ) и их накопителей ( TEST ).

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

    Для имитации накопителей будет использоваться список пользователя, т. е. блоки LINK и UNLINK. Но так как емкость накопителя ВККС определяется в байтах, а список пользователя не позволяет вести в них учет, следует ввести сохраняемую ячейку и в ней вести учет текущей емкости накопителя. Также примем, что объем накопителя, занимаемый сообщением, равен его вычислительной сложности.

    Для моделирования неисправностей ВККС и каналов связи нужно использовать блоки FUNAVAIL и F AVAIL. В этом случае статистика ОКУ не будет искажена, как это могло быть при использовании блоков PREEMPT и RETURN.

    ВККС как система массового обслуживания


    Рис. 6.6.  ВККС как система массового обслуживания

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

    Программа модели согласно декомпозиции ВККС (рис. 6.6) должна иметь:

    Программа модели функционирования ВККС приведена ниже.

    ; Модель функционирования ВККС 
    ; Задание исходных данных
    VrMod	EQU	7200	; Время моделирования, 1 ед. мод. вр. = 1с
    NCan	EQU	3	; Число каналов
    n1_	EQU	6	; Количество источников сообщений
    MaxKat	EQU	3	; Максимальное число категорий сообщений
    T_	EQU	118.4 ; Средний интервал времени поступления сообщений от источника
    Q	EQU	3600	; Производительность ВККС, оп/c
    V_	EQU	5000	; Скорость передачи, бит/с
    Pc_	EQU	0.7 ; Вероятность потери сообщений при отказе ВККС
    L1_	EQU	2500000	; Емкость накопителя ВККС, байт
    L2_	EQU	5	; Емкость накопителя каналов связи, сообщений
    TOtk1	EQU	3600	; Среднее время между отказами ВККС
    TOtk2	EQU	1800	; Среднее время между отказами каналов
    TVost1	EQU	3.7	; Среднее время восстановления ВККС
    TVost2	EQU	4.2	; Среднее время восстановления каналов
    ; Описание функций, задающих исходные данные
    Kat	FUNCTION RN34,D3 ; Вероятности видов категорий
    .3,1/.5,2/1,3
    S_	FUNCTION P1,D3	; Средние вычислительные сложности
    сообщений (длины), оп (байт) по категориям 1,53000/2,86000/3,66000
    So_	FUNCTION P1,D3 ; Среднеквадратические отклонения вычис-
    лительных сложностей (длин) сообщений, оп (байт) по категориям 1,6100/2,5000/3,7000
    ; Арифметические выражения вычисления
    DL	VARIABLE INT(NORMAL(114,FN$S_,FN$So_))	; Длин (вычислительных сложностей) сообщений
    VrPer	VARIABLE (P2/V_)#8	; Времени передачи сообщения 
    VrObr	VARIABLE P2/Q_	; Времени обработки сообщения
    ; Сегмент имитации поступления сообщений от источников
    	GENERATE (Exponential(11,0,(T_/n1_)))	; Источники сообщений
    ; Розыгрыш категории сообщения и счета сообщений
    Met4	ASSIGN	1,FN$Kat	; Запись в Р1 кода категории и счет сообщений всех категорий
    	ASSIGN	10,(P1+MaxKat)	; Запись в Р10 номера Х для счета поступающих сообщений по категориям
    	ASSIGN	11,(P10+MaxKat)	; Запись в Р11 номера Х для счета переданных сообщений по категориям
    	ASSIGN	12,(P11+MaxKat)	; Запись в Р12 номера Х для счета потерянных сообщений по категориям
    	ASSIGN	13,(P12+MaxKat)	; Запись в Р13 номера Х для записи вероятности переданных сообщений по категориям
    	ASSIGN	14,(P13+MaxKat)	; Запись в Р14 номера Х для записи вероятности потерянных сообщений по категориям
    	SAVEVALUE	P10+,1	; Cчет поступающих сообщений по категориям
    ; Розыгрыш характеристик сообщений
    Met02	ASSIGN	2,V$DL	; Занесение в Р2 длины (вычислительной сложности) сообщения
    	ASSIGN	3,V$VrPer	; Занесение в Р3 времени передачи сообщения
    	ASSIGN	8,V$VrObr	; Занесение в Р8 времени обработки сообщения
    	ASSIGN	7,0	; Код 0 в Р7 - признак попадания сообщения в накопитель
    	TEST E	P1,1,Met111 ; Если сообщение 1 категории, то
    	PRIORITY	1	; сообщению 1 категории - высокий приоритет
    ;Сегмент имитации работы накопителя 1 и ВККС
    Met111	GATE FV	Vkks,Met5	; Проверка ВККС на исправность GATE U	Vkks,Met17	; Проверка ВККС на занятость 
    	TEST LE	P2,(L1_-X$TEmk),Met5	; Есть ли место в накопителе ВККС?
    	SAVEVALUE	TEmk+,P2	; Увеличение текущей емкости накопителя на длину сообщения
    	LINK	SVkks,PR ; Поместить сообщение в накопитель ВККС 
    Met17	ASSIGN	7,1	; Признак: сообщение поступило на ВККС, минуя накопитель 
    Met14	SEIZE	Vkks	; Занять ВККС
    	ADVANCE	P8	; Имитация обработки
    	RELEASE	Vkks	; Освобождение ВККС
    	TEST E	P7,0,Met18	; Если Р7 =0, то
    	SAVEVALUE	TEmk-,P2	; уменьшить текущую емкость накопителя ВККС на длину обработанного сообщения 
    Met18	UNLINK	SVkks,Met111,1 ; Очередное сообщение из накопителя ВККС послать на обработку
    ; Сегмент имитации работы накопителя 2 и каналов связи
    Met15	ASSIGN	4,NCan	; Подготовка к циклу
    Met16	GATE FV	P4,Met23	; Начало цикла поиска исправного и свободного канала.
    ;Исправен ли канал? Если да, то
    	GATE U	P4,Met21	; занят ли канал? Если нет, на Met21-занять канал
    	TEST E	X*4,1,Met61 ; Если канал занят сообщением низкого приоритета, то прервать
    Met23	LOOP	4,Met16	; Все ли каналы просмотрены? Если нет, продолжить поиск
    	TEST L	CH$SCan_,L2_,Met5	; Есть ли место в накопителе каналов?
    	LINK	SCan_,PR	; Сообщение в накопитель каналов
    Met21	SEIZE	P4	; Занять канал с номером в Р4
    	SAVEVALUE	P4,P1	; Занести код категории в ячейку с номером в Р4
    	ADVANCE	P3	; Имитация передачи сообщения
    	RELEASE	P4	; Освобождение канала с номером в Р4
    	UNLINK	SCan_,Met15,1	; Очередное сообщение из накопителя каналов на передачу
    	TRANSFER	,Met10	; Счет переданных сообщений
    ; Имитация передачи по каналам с прерыванием
    Met61	SAVEVALUE	P4,P1	; Занести PR в ячейку с номером в Р4 
    	PREEMPT	P4,PR,Met62	; Занять канал с номером в Р4
    	ADVANCE	P3	; Имитация передачи сообщения
    	RETURN	P4	; Освобождение канала с номером в Р4
    	UNLINK	SCan_,Met15,1	; Очередное сообщение из накопителя каналов на передачу
    	TRANSFER	,Met10	; Счет переданных сообщений
    Met62	RELEASE	P4	; Освободить канал с номером в Р4
    	TRANSFER	,Met15	; Отправить в накопитель каналов
    ;Сегмент имитации отказов ВККС
    	GENERATE	,,,1 
    Met49	ADVANCE	(Exponential(237,0,TOtk1))	; Розыгрыш времени до очередного отказа
    	ASSIGN	1,(RN35/1000)	; Обращение к датчику RN
    	TEST LE	P1,Pc_,Met50	; Все ли сообщения в накопителях теряются?
    Met51	FUNAVAIL	Vkks,RE,Met115	; Перевод ВККС в неисправное состояние
    	ADVANCE	(Exponential(237,0,TVost1))	; Имитация восстановления
    	FAVAIL	Vkks	; Перевод ВККС в исправное состояние
    	TRANSFER	,Met49	; Отправить для розыгрыша очередного отказа
    Met115	RELEASE	Vkks	; Освобождение ВККС прерванным сообщением
    	TEST E	P7,0,Met5	; Если Р7=0, то
    	SAVEVALUE	TEmk-,P2	; уменьшить текущую емкость накопителя ВККС на длину потерянного сообщения
    	TRANSFER	,Met5	; Отправить для счета потерь 
    Met50	UNLINK	SVkks,Met5,ALL	; Потеря всех сообщений из накопителя ВККС
    	UNLINK	SCan_,Met5,ALL	; Потеря всех сообщений из накопителя каналов
    	SAVEVALUE	TEmk,0	; Значение текущей емкости =0
    	TRANSFER	,Met51	; Отправить для перевода ВККС в неисправное состояние
    ;Сегмент имитации отказов каналов связи
    	GENERATE	,,,NCan	; Число транзактов - по числу каналов связи
    	SAVEVALUE	NumCan+,1	; Записать в X$NumCan последовательно 1, 2, ..., NCan
    	ASSIGN	4,X$NumCan	; Записать в Р4 последовательно 1, 2, ..., NCan
    Met19	ADVANCE	(Exponential(237,0,TOtk2))	; Розыгрыш времени до очередного отказа
    	GATE FV	P4,Met19
    	FUNAVAIL	P4,RE,Met112	; Перевод канала в неисправное состояние
    	ADVANCE	(Exponential(237,0,TVost2))	; Имитация восстановления канала
    	FAVAIL	P4	; Перевод в исправное состояние
    	TRANSFER	,Met19	; Отправить для розыгрыша очередного отказа 
    Met112	RELEASE	P4	; Освобождение канала с номером 1
    	TEST E	P1,1,Met5	; Если сообщение 1 категории, то
    	TRANSFER	,Met15	; отправить на повторную передачу
    ; Сегмент счета переданных и потерянных сообщений и расчет вероятностей передачи сообщений
    Met10	SAVEVALUE	P11+,1	; Cчет и сохранение в ячейке с номером в Р11 переданных сообщений всего и по категориям
    	SAVEVALUE	P13,(X*11/X*10)	; Расчет и сохранение в ячейке с номером в Р13 вероятностей передачи по категориям
    ;	SAVEVALUE	VPerS,(N$Met10/N$Met4)	
    ; Расчет и сохранение в ячейке VPerS вероятностей передачи сообщений всех категорий
    	TERMINATE 
    Met5	SAVEVALUE	P12+,1	; Cчет и сохранение в ячейке с номером в Р12 потерянных сообщений всего и по категориям
    	SAVEVALUE	P14,(X*12/X*10)	; Расчет и сохранение в ячейке с номером в Р14 вероятностей 
       потери сообщений по категориям ;	
    	SAVEVALUE	VPotS,(N$Met5/N$Met4)	; Расчет и сохранение в ячейке VPotS вероятностей 
       потерь сообщений всех категорий
    	TERMINATE
    ;Задание времени моделирования
    	GENERATE	VrMod	; Задание времени моделирования 
    	TERMINATE	1

    Для задания исходных данных использованы команда EQU и функции.

    Арифметические выражения введены для расчета вычислительных сложностей сообщений, времени их обработки и передачи. Поскольку вычислительная сложность определяется количеством операций, которое не может быть дробным, то для перевода в целое используется встроенная функция INT.

    Рассмотрим работу блоковой части модели.

    Так как интервалы времени поступления сообщений от источников одинаковы, то блок GENERATE вводит транзакты - сообщения в модель со средним значением интервала (T_/n1_ ).

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

    Для этого в сегмент имитации поступления сообщений от источников включена последовательность блоков, разыгрывающих категории сообщений. Категория сообщения записывается в параметр Р1 транзакта. Для счета всех поступивших сообщений и в последующем переданных и потерянных сообщений по категориям в параметры Р10:Р14 транзакта записываются номера сохраняемых ячеек. В параметр Р10 записывается номер (Р1+MaxKat), в параметры Р11:Р14 записываются те, которые отличаются в указанной последовательности на максимальное число категорий MaxKat, задаваемое в исходных данных.

    Пусть MaxKat = 5. Тогда в зависимости от того, что в Р1:

    Таким образом, распределение номеров сохраняемых ячеек не зависит от количества категорий сообщений.

    После счета поступающих сообщений по категориям в сохраняемых ячейках с номерами в параметре Р10 производится розыгрыш и запись характеристик сообщений: вычислительной сложности, времени обработки и времени передачи по описанным ранее арифметическим выражениям. Характеристики записываются в параметры Р2, Р8 и Р3 соответственно.

    Если сообщение первой категории, ему присваивается приоритет 1. Все сообщения отправляются на сегмент имитации работы накопителя 1 и ВККС.

    Здесь вначале ВККС проверяется на исправность и занятость.

    Если ВККС неисправен, сообщение теряется. Транзакт направляется на метку Мет5. Здесь учитывается потерянное сообщение, и рассчитываются вероятности потерь по категориям и в целом по всем категориям. После этого транзакт выводится из модели.

    Если ВККС исправен, но занят, проверяется возможность сохранения сообщения в накопителе 1 SVkks. Если достаточно свободной емкости, сообщение помещается в накопитель 1. Его текущая занятая емкость TEmk увеличивается на длину сообщения. Если свободной емкости недостаточно, сообщение теряется. Транзакт направляется на метку Мет5. Здесь выполняются те же действия, что и при возникновении неисправности ВККС.

    Если ВККС исправен и свободен, т. е. накопитель 1 пуст, тран-закт направляется на метку Мет17. В параметр Р7 заносится 1 - признак поступления сообщения на обработку, минуя накопитель 1. Транзакт занимает ВККС. После обработки при Р7 = 1 транзакт направляется на Мет18 для вывода очередного сообщения из накопителя 1 (если оно есть) для обработки на ВККС. Выводящий же транзакт - обработанное сообщение направляется в сегмент имитации работы накопителя 2 и каналов связи.

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

    Для организации в модели циклов предназначен блок LOOP. Он имеет следующий формат:

    LOOP A,B

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

    Операнд B - метка блока, с которого начинается цикл.

    Операнды А и B могут быть именем, положительным целым числом, выражением в скобках, СЧА или СЧА*параметр.

    Например, в данной модели блок LOOP используется так:

    Met15	ASSIGN	4,NCan	; Подготовка к циклу
    Met16	GATE FV	P4,Met23	; Начало цикла поиска исправного и свободного канала
    ; Исправен ли канал? Если да, то
    	GATE U	P4,Met21	; занят ли канал? Если нет, на Met21-занять канал
    	TEST E	X*4,1,Met61	; Если канал занят сообщением низкого приоритета, то прервать
    Met23	LOOP	4,Met16	; Все ли каналы просмотрены? Если нет, продолжить поиск

    Блок с меткой Мет16 является началом цикла, т. е. расположен раньше блока LOOP. Когда транзакт, пройдя участок модели, начинающийся блоком с меткой Мет16, войдет в блок LOOP, значение его параметра - параметра номер четыре транзакта уменьшается на 1. Если это значение не равно нулю, транзакт переходит к блоку с меткой Мет16, т. е. цикл повторяется. Если же после вычитания 1 значение параметра цикла равно нулю, следовательно, выполнено заданное число повторений, транзакт переходит к следующему блоку.

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

    Если в результате поиска находится исправный и свободный канал, транзакт направляется на Мет21 и занимает канал, номер которого содержится в его параметре Р4 (ссылка *4). После имитации передачи транзакт входит в блок UNLINK для вывода очередного сообщения из накопителя 2 на передачу. Выводящий же транзакт - переданное сообщение направляется на метку Мет10. Здесь учитывается переданное сообщение, рассчитываются вероятности передачи сообщений отдельно по категориям и в целом по всем категориям.

    Если просмотрены все каналы связи и не найдено свободного канала для передачи сообщения не первой категории, проверяется возможность помещения этого сообщения в накопитель Scan_. При отсутствии свободного места в накопителе Scan_ сообщение теряется, и транзакт направляется на метку Мет5 для учета и вывода из модели.

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

    Если же обнаружен канал, занятый передачей сообщения более низкого приоритета, транзакт направляется на метку Мет61. Происходит прерывание сообщения низкого приоритета. Прерванное сообщение направляется на метку Мет15 для проверки возможности размещения его в накопителе каналов связи Scan_. Переданное сообщение выводит из накопителя каналов связи на передачу очередное сообщение и направляется на метку Мет10 для счета.

    Теперь рассмотрим сегменты имитации отказов.

    Начнем с сегмента имитации отказов ВККС. ВККС в модели представлен ОКУ с именем Vkks. Блок GENERATE вырабатывает один транзакт и становится неактивным. Далее имитация отказов организуется в цикле. Такой метод позволяет уменьшить количество транзактов в модели, сократить машинное время. Ведь можно было бы сделать так, чтобы GENERATE вводил в модель транзакт для имитации каждого отказа ВККС, а блок TERMINATE выводил его после имитации восстановления.

    Блоком ADVANCE с меткой Мет49 разыгрывается время до очередного отказа. Затем: все ли сообщения в накопителе теряются? Если да, транзакт направляется на Мет50. Из накопителей SVkks и Scan_ выводятся и теряются все имевшиеся там сообщения. Обнуляется текущая емкость TEmk накопителя SVkks и транзакт направляется к метке Мет51 для перевода ВККС в неисправное (недоступное) состояние. После восстановления транзакт направляется на метку Мет49 для розыгрыша очередного отказа.

    Если же не все сообщения теряются, а только те, которые обрабатываются ВККС, он переводится в неисправное состояние. Обрабатываемое сообщение удаляется, и транзакт направляется на метку Мет115.

    Если сообщение перед обработкой помещалось в накопитель SVkks, его емкость уменьшается на длину потерянного сообщения. Транзакт направляется на метку Мет5 для счета и уничтожения.

    Каналы связи в модели представлены несколькими ОКУ, работающими параллельно. Следовательно, они будут независимо друг от друга выходить из строя. Поэтому блок GENERATE вырабатывает сразу количество транзактов, равное количеству каналов связи NCan_. Далее эти транзакты в соответствии с номером канала, записанным в параметр Р1 каждого из NCan_ транзактов, имитируют выход каналов связи из строя. Предполагается, что время восстановления канала связи значительно меньше времени между его предыдущим и последующим отказами.

    После 1000 прогонов получим следующие результаты моделирования:

    SAVEVALUE RETRY VALUE
    101.000
    201.000
    301.000
    401094993.000
    50729783.000
    601823763.000
    70519429.000
    80320633.000
    90811566.000
    100575561.000
    110409149.000
    1201012190.000
    1300.474
    1400.439
    1500.445
    1600.526
    1700.561
    1800.555
    TEMK02498959.000
    VPERS00.453
    VPOTS00.547

    Моделирование неисправностей многоканальных устройств

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

    Ранее отмечалось, что осуществить имитацию выхода МКУ из строя, при котором все транзакты, находившиеся в МКУ на обслуживании, теряются, блоками SUNAVAIL и SAVAIL невозможно. Рассмотрим, как это можно осуществить с применением блока DISPLACE на следующем примере.

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

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

    ; Модель многоканальной СМО конечной надежности
    ;	Определение МКУ и булевых переменных
    Emk	EQU	7
    Zap	EQU	2
    Sist	STORAGE	7
    Kont1	BVARIABLE	SV$Sist'AND'((7-S$Sist)>=Zap)
    Kont2	BVARIABLE	SE$Sist
    ; Сегмент имитации поступления и обслуживания заявок
    	GENERATE	2,,,7	; Источник заявок
    Met12	TEST E	BV$Kont1,1,Met1	; Есть ли место в МКУ?
    	SAVEVALUE	KolPovt,(INT(Emk/Zap)) ENTER	Sist,Zap	; Занять МКУ
    ;	Учет номеров транзактов, занявших МКУ
    	ASSIGN	KolPovt,X$KolPovt ; Запись в параметр цикла
    Met5	TEST E	X*KolPovt,0,Met4 ; Есть ли в списке место?
    	SAVEVALUE	P$KolPovt,XN1 ; Да, записать номер транзакта
    	TRANSFER	,Met6	; Выйти из цикла
    Met4	LOOP	KolPovt,Met5	; Повторить или конец цикла
    ; Met6	ADVANCE	5	; Имитация обслуживания
    	LEAVE	Sist,Zap	; Освободить МКУ
    ;	Учет номеров транзактов, освободивших МКУ
    	ASSIGN	KolPovt,X$KolPovt ; Запись в параметр цикла
    Met8	TEST E	X*KolPovt,XN1,Met7	; Есть ли этот номер транзакта?
    	SAVEVALUE	P$KolPovt,0	; Да, тогда удалить
    	TRANSFER	,Met9	; Выйти из цикла
    Met7	LOOP	KolPovt,Met8	; Повторить или конец цикла
    Met9	TERMINATE	1	; Обслуженные заявки
    Met1	TERMINATE	1	; Потерянные заявки
    ; Сегмент имитации неисправностей
    	GENERATE	,,,1
    Met2	ADVANCE	7.5	; Интервал отказов
    	SUNAVAIL	Sist	; Перевод в недоступность
    ;	Удаление транзактов из МКУ
    	ASSIGN	KolPovt,X$KolPovt ; Запись в параметр цикла
    Met10	TEST NE	X*KolPovt,0,Met11 ; Есть ли транзакт в МКУ
    	DISPLACE	X*KolPovt,Met3	; Да, тогда удалить
    	SAVEVALUE	P$KolPovt,0	; Снять с учета
    Met11	LOOP	KolPovt,Met10	; Повторить или конец цикла
    	TEST E	BV$Kont2,1	; МКУ пуст?
    	ADVANCE	1	; Да, тогда ремонтируем
    	SAVAIL	Sist	; Перевод в доступность
    	TRANSFER	,Met2
    Met3	LEAVE	Sist,2	; Освободить МКУ
    	TERMINATE	1	; Удаленные из МКУ транзакты

    В данной модели кроме блока DISPLACE показывается также применение булевых переменных.

    Булевы переменные с использованием всего лишь одного блока дают возможность принимать решения в зависимости от состояния и значения атрибутов многих объектов GPSS. Булева переменная представляет собой логическое выражение, составленное из различных СЧА, в том числе и других булевых переменных.

    Булева переменная определяется командой BVARIABLE.

    Формат команды:

    Name     BVARIABLE     A

    Name - имя булевой переменной, которое также, как и имя арифметической переменной, по желанию пользователя командой EQU может быть заменено номером.

    Операнд А - логическое выражение.

    В выражении можно использовать арифметические и логические операторы. Результат преобразуется в целое значение 0, если равен нулю, или в целое значение 1, если отличен от нуля.

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

    Имеются следующие логические операторы:

    Например:

    Oky      BVARIABLE     FV$Rem1
    Can3     BVARIABLE     SF$Usel
    Prov1    BVARIABLE     SV$Pusk
    Prov2    BVARIABLE     LS2

    В первом примере булева переменная Oky равна 1, если устройство Rem1 доступно, и - 0, если не доступно. Во втором примере булева переменная Can3 равна 1, если МКУ Usel заполнено полностью. В третьем примере булева переменная Prov1 равна 1, если МКУ Pusk доступно. В четвертом примере булева переменная Prov2 равна 1, если логический ключ номер 2 включен.

    Операторы отношения производят алгебраическое сравнение операндов. Например:

    Prov1    BVARIABLE     V$VseAvt'G'16
    Prov2    BVARIABLE     Q5$'LE'P3
    Prov3    BVARIABLE     MX$Plan(Stroka,Stolbez)'GE'P2

    Булева переменная Prov1 равна 1, если переменная VseAvt больше 16, иначе равна 0. Во втором примере булева переменная Prov2 равна 1, если текущая длина очереди номер 5 меньше или равна значению параметра 3 транзакта. В третьем примере булева переменная Prov3 равна 1, если значение определенного элемента матрицы Plan больше или равно значению параметра 2.

    Булевых операторов два: OR - ИЛИ и AND - И. Оператор ИЛИ проверяет выполнение хотя бы одного из условий, а оператор И требует выполнения обоих условий. Например:

    Con1     BVARIABLE     FI$Rem"OR"SF4 
    Con2     BVARIABLE     FI$Rem"AND"SF$Pogr 
    Con3     BVARIABLE     (V3'G'7)"AND"(FN$Rav"OR"LS7)

    Булева переменная Con1 равна 1, если выполняется одно из условий: устройство Rem обслуживает прерывание или память номер 4 не заполнена. Булева переменная Con2 равна 1, если выполняются оба условия: устройство Rem обслуживает прерывание и память с именем Pogr не заполнена. В третьем примере переменная Con3 равна 1, если выполняются оба условия: значение переменной номер 3 больше 7 и логический ключ номер 7 включен.

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

    Если булева переменная задается СЧА, как например

    Stan       BVARIABLE     V$TreAvt

    то вычисляется значение арифметической переменной с именем TreAvt и если оно отлично от нуля - значение булевой переменной Stan будет равно 1, в противном случае - 0.

    Рассмотрим работу модели.

    Блок GENERATE с интервалами две единицы модельного времени генерирует семь транзактов. Следующий за ним блок TEST проверяет МКУ Sist на исправность (доступность) и наличия в нем свободных каналов, достаточных для удовлетворения запроса. Если булева переменная Kont1 равна 1, транзакт пропускается и занимает МКУ Sist. Но перед этим вычисляется и заносится целое число INT(Emk/Zap) = INT(7/2)=3 в сохраняемую ячейку с именем KolPovt, которое определяет, сколько транзактов может одновременно находится в МКУ.

    После выхода транзакта из блока ENTER начинает работать сегмент учета номеров транзактов, занявших МКУ. Блоком ASSIGN в параметр с именем KolPovt - параметр цикла - заносится число, находящееся в сохраняемой ячейке с именем KolPovt. Далее в цикле, тело которого начинается с блока TEST с меткой Met5 и заканчивается блоком LOOP с меткой Met4, находится свободное место в списке для записи номера транзакта. Свободное место определяется блоком TEST как равенство нулю значения какой-либо одной из трех сохраняемых ячеек Х1, Х2 или Х3 (по числу транзактов, одновременно находящихся в МКУ). Такая ячейка всегда есть и блоком SAVEVALUE в нее записывается номер занявшего МКУ транзакта. А так как сохраняемых ячеек, значения которых равны нулю, может быть несколько (особенно вначале работы модели), после записи номера транзакта осуществл яется выход из цикла.

    Транзакт направляется к блоку ADVANCE с меткой Met6 и входит в него. Имитируется обслуживание заявки. После обслуживания транзакт освобождает МКУ Sist, пройдя блок LEAVE.

    Начинает работать сегмент учета номеров транзактов, освободивших МКУ. Его работа аналогична рассмотренной ранее работе сегмента учета номеров транзактов, занявших МКУ. Отличие состоит в том, что отыскивается сохраняемая ячейка Х1, Х2 или Х3, которая содержит номер обслуженного транзакта. Найденная ячейка обнуляется, т. е. обслуженный транзакт снимается с учета. Так как номер записывается только в одну ячейку, то после ее обнуления осуществляется выход из цикла, тело которого начинается с блока TEST с меткой Met8 и заканчивается блоком LOOP с меткой Met7.

    Теперь рассмотрим работу модели при возникновении неисправности МКУ. Транзакт, инициирующий неисправность, после задержки блоком ADVANCE сегмента имитации неисправностей, входит в блок SUNAVAIL, который переводит МКУ Sist в недоступное (неисправное) состояние.

    Далее начинается работа сегмента удаления транзактов из МКУ. Суть ее заключается в следующем. В цикле, также организованном с помощью блока LOOP, просматривается список номеров транзактов, занявших МКУ. Если значение какой-либо сохраняемой ячейки Х1, Х2 или Х3 не равно нулю, значит в ней записан номер транзакта, находящегося в данный момент в МКУ. Блоком DISPLACE этот транзакт перемещается к блоку LEAVE с меткой Met3, освобождает МКУ и выводится из модели.

    После удаления из МКУ всех транзактов, транзакт - инициатор неисправности входит в следующий за блоком LOOP с меткой Met11 блок TEST. Так как МКУ Sist пусто (булева переменная Kont2 равна нулю), блок TEST пропускает этот транзакт в блок ADVANCE и начинается имитация восстановления работоспособности МКУ.

    Результаты моделирования представлены в табл. 6.4.

    Из результатов следует, что обслужены только две заявки (первый и шестой транзакты). Пять заявок не обслужены: пятый тран-закт поступил, когда МКУ было неисправным, а третий и четвертый, седьмой и восьмой транзакты потеряны: в моменты возникновения неисправностей ( t = 7,5 и t =16 соответственно) они находились в МКУ.

    Таблица 6.4. Результаты моделирования примера п. 6.8.1
    СобытияТранзакты
    1345678
    Вход в модель2468101214
    Занятие МКУ246101214
    В МКУ транзакты11,31,3,466,76,7,8
    Удаление7.57.51616
    Освобождение МКУ77.57.5151616
    Вывод из модели77.57.58151616

    Коэффициент использования ( Util.) МКУ Sist равен 0,375. Он рассчитывается по формуле:

    где - число транзактов, занимавших МКУ за время Т моделирования;

    - число каналов МКУ (емкость);

    - число каналов, занимаемых i - м транзактом;

    - промежуток времени, в течение которого - м транзактом было занято каналов, рассчитывается как

    и - абсолютное модельное время занятия и освобождения соответственно каналов МКУ.

    Для рассматриваемого примера п. 6.8.1 (см. табл. 6.4) имеем:

    Таким образом, коэффициент использования МКУ рассчитан с учетом времени занятия его полностью обработанными транзак-тами и временем, затраченным на обработку тех транзактов, обслуживание которых было прервано.

    Если в результате моделирования требуется определить коэффициент использования МКУ без учета удаленных из него тран-зактов, т. е. транзактов, обслуживание которых было прервано, пользователь может это сделать самостоятельно. Для этого нужно знать, сколько заявок будет обслужено полностью. Введем в модель следующие строки:

    KIsp      VARIABLE        (Zap#N$Met9#5)/(Emk#16) SAVEVALUE       KIsp,V$KIsp

    Получим .

    Вопросы для самоконтроля

    1. Перечислите категории объектов GPSS World.
    2. Какие реальные объекты моделируются транзактом?
    3. Назовите блок, генерирующий транзакты, его формат и назначение операндов.
    4. Раскройте понятие одноканального устройства (ОКУ), режимы его работы. Напишите операторы, описывающие ОКУ; назначение операндов.
    5. Раскройте понятие многоканального устройства (МКУ), режимы его работы. Напишите операторы, описывающие МКУ; назначение операндов.
    6. Назовите блоки, обеспечивающие получение статистических результатов.
    7. Назначение и формат операторов LINK и UNLINK.
    8. Что такое системные числовые атрибуты?
    9. Как описывается в модели арифметическое выражение? Приведите примеры.
    10. Как организовать в модели сохранение какой-либо величины?
    11. Что такое прямая и обратная задачи имитационного моделирования?
    12. Назовите виды списков для хранения транзактов.
    13. Назовите виды списков ОКУ и МКУ.
    14. Структура модели на языке GPSS и ее представление в виде блок-диаграмм.
    15. Назначение, сходство и различие команд CLEAR и RESET.
    16. Назовите блоки, изменяющие последовательность движения транзактов (блоки передачи управления).
    17. Приведите пример фрагмента модели, с введением которого арифметические выражения расчета результатов моделирования не требуют корректировки при изменении количества прогонов.
    18. Какими методами можно уменьшить машинное время моделирования?
    19. Измените условия примера 6.1 так, чтобы сервер стал однофазной системой массового обслуживания с ожиданием разомкнутого типа (добавьте входной накопитель емкостью на L сообщений). В соответствии с этим откорректируйте программу модели решения прямой задачи (п. 6.3.1). Запустите модель и получите результаты.
    20. Откорректируйте так же, как и в вопросе 6.19, программу модели решения обратной задачи (п. 6.3.2). В качестве количества запросов, время обработки которых нужно оценить, используйте результат моделирования, полученный при решении прямой задачи. Запустите модель. Получив результаты, сделайте выводы об особенностях решения прямой и обратной задач. Выясните, учитывается ли стохастичность при решении обратной задачи.
    21. В каких отношениях должны быть средние значения и среднеквадратические отклонения равномерного и нормального распределений? К чему приводят несоблюдения этих отношений?
    22. Какими средствами GPSS World можно представлять исходные данные в программе модели?
    23. Внесите изменения в исходные данные модели процесса изготовления изделий на предприятии (п. 6.5.1.2, прямая задача): количество цехов, а значит и количество различных типов блоков, выпускаемых цехами, из которых собирается одно изделие, равно шести ( ) . Откорректируйте в соответствии с этим программу модели. Дополните по своему усмотрению необходимыми исходными данными. Сравните результаты моделирования с результатами, полученными при
    24. Проделайте то же самое, что и при ответе на вопрос 6.23, с моделью процесса изготовления изделий на предприятии (обратная задача). Количество изделий, время подготовки которых нужно оценить, возьмите из ответа на вопрос 6.23.
    25. Какими методами можно сократить количество блоков в программе модели?
    26. Приведите примеры организации циклов средствами GPSS World. Назовите достоинства и недостатки.
    27. Приведите пример розыгрыша в имитационной модели группы несовместных независимых событий средствами GPSS World.
    28. Приведите варианты организации счета, например, сообщений по видам и в целом средствами GPSS World.
    29. Приведите примеры имитации средствами GPSS World неисправностей одноканальных устройств.
    30. Какими средствами GPSS World можно организовать изменение версий модели?
    31. Измените постановку задачи процесса изготовления изделий на предприятии (п. 6.4.1.1, прямая задача) так, чтобы на откорректированной в соответствии с этими изменениями модели можно было исследовать зависимость дохода (в условных единицах) предприятия от качества изготовления блоков и других факторов.
    32. Какими средствами GPSS World можно имитировать неисправности многоканальных

    Ссылки

    Боев В.Д., Сыпченко Р.П. Компьютерное моделирование

    оглавление   КМ   ДМ   экономическая информатика   визуальные среды - 4GL   Теория и практика обработки информации

    (время поиска примерно 20 секунд)

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


    НОВОСТИ ФОРУМА

    Форум Рыцари теории эфира


    Рыцари теории эфира
     23.01.2021 - 13:19: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
    23.01.2021 - 12:06: ТЕОРЕТИЗИРОВАНИЕ И МАТЕМАТИЧЕСКОЕ МОДЕЛИРОВАНИЕ - Theorizing and Mathematical Design -> ФУТУРОЛОГИЯ - прогнозы на будущее - Карим_Хайдаров.
    23.01.2021 - 09:08: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ФАЛЬСИФИКАЦИЯ ИСТОРИИ - Карим_Хайдаров.
    23.01.2021 - 08:03: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
    23.01.2021 - 06:26: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Анны ван Дэнски - Карим_Хайдаров.
    22.01.2021 - 18:59: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от проф. В.Ю. Катасонова - Карим_Хайдаров.
    22.01.2021 - 18:03: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Амары Ельской - Карим_Хайдаров.
    22.01.2021 - 13:40: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вячеслава Осиевского - Карим_Хайдаров.
    21.01.2021 - 17:54: ЭКОНОМИКА И ФИНАНСЫ - Economy and Finances -> ПРОБЛЕМА КРИМИНАЛИЗАЦИИ ЭКОНОМИКИ - Карим_Хайдаров.
    21.01.2021 - 08:17: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Пламена Паскова - Карим_Хайдаров.
    20.01.2021 - 17:39: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Проблема народного образования - Карим_Хайдаров.
    18.01.2021 - 11:33: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
    Боровское исследовательское учреждение - Bourabai Research Bourabai Research Institution