Опубликован: 16.11.2010 | Доступ: свободный | Студентов: 5107 / 2806 | Оценка: 4.43 / 4.14 | Длительность: 27:21:00
Лекция 7:

Моделирование в GPSS World

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

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

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

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

6.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, если отличен от нуля.

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

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

  • FVj равен 1, если устройство j доступно, иначе - 0 ;
  • FIj равен 1, если устройство j обслуживает прерывание, иначе - 0 ;
  • SFj равен 1, если МКУ j заполнено полностью, иначе - 0 ;
  • SEj равен 1, если МКУ j пусто, иначе - 0 ;
  • SVj равен 1, если МКУ j доступно, иначе - 0 ;
  • LSj равен 1, если логический ключ j включен, иначе - 0. Под j понимается номер или имя.

Например:

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
События Транзакты
1 3 4 5 6 7 8
Вход в модель 2 4 6 8 10 12 14
Занятие МКУ 2 4 6 10 12 14
В МКУ транзакты 1 1,3 1,3,4 6 6,7 6,7,8
Удаление 7.5 7.5 16 16
Освобождение МКУ 7 7.5 7.5 15 16 16
Вывод из модели 7 7.5 7.5 8 15 16 16

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

k=\cfrac{\sum\limita_{i=1}^{n}{\alpha_i \Delta t_i}}{T\cdot E}

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

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

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

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

\Delta t_i =t_{2i} - t_{1i}

t_{1i} и t_{2i} - абсолютное модельное время занятия и освобождения соответственно \alpha _{i} каналов МКУ.

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

E=7,\,\,T=16,\,\,\alpha=2;\\
\Delta t_1=7-2=5,\,\,\Delta t_2=7.5-4=3.5,\,\,\Delta t_3=7.5-6=1.5,\,\,\Delta t_4=0;\\
\Delta t_5=15-10=5,\,\,\Delta t_6=16-12=4,\,\,\Delta t_7=16-14=2;\\
k_1=\cfrac{2(5+3.5+1.5+0+5+4+2)}{16\cdot 7}=\cfrac{2\cdot 21}{16\cdot 7}=\cfrac{3}{8}=0.375.

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

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

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

Получим k_1=\cfrac{2(5+5)}{16\cdot 7}=\cfrac{5}{28}=0.179.

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

  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, прямая задача): количество цехов, а значит и количество различных типов блоков, выпускаемых цехами, из которых собирается одно изделие, равно шести ( n_1 = 6 ) . Откорректируйте в соответствии с этим программу модели. Дополните по своему усмотрению необходимыми исходными данными. Сравните результаты моделирования с результатами, полученными при n_1 =4.
  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, прямая задача) так, чтобы на откорректированной в соответствии с этими изменениями модели можно было исследовать зависимость дохода (в условных единицах) предприятия от качества изготовления блоков и других факторов.
Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!

Лариса Парфенова
Лариса Парфенова

1) Можно ли экстерном получить второе высшее образование "Программная инженерия" ?

2) Трудоустраиваете ли Вы выпускников?

3) Можно ли с Вашим дипломом поступить в аспирантуру?