Смекни!
smekni.com

Моделирование на GPSS (стр. 5 из 13)

Вычисление непрерывной функции производится следующим образом.

Сначала определяется интервал (Xi;Xi+1), на котором находится теку-

щее значение СЧА-аргумента (в нашем примере - сгенерированное зна-

чение RN1). Затем на этом интервале выполняется линейная интерполя-

ция с использованием соответствующих значений Yi и Yi+1. Результат

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

в качестве значения функции. Если функция служит операндом B блоков

GENERATE или ADVANCE, то усечение результата производится только

после его умножения на значение операнда A.

Использование функций для получения случайных чисел с заданным

распределением дает хотя и менее точный результат за счет погреш-

ностей аппроксимации, но зато с меньшими вычислительными затратами

(несколько машинных операций на выполнение линейной интерполяции).

Чтобы к погрешности аппроксимации не добавлять слишком большую пог-

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

распределений должно быть достаточно большим (не менее 50). Эта ре-

комендация относится и к использованию переменных.

Функции всех типов имеют единственный СЧА с названием FN, зна-

чением которого является вычисленное значение функции. Вычисление

функции производится при входе транзакта в блок, содержащий ссылку

на СЧА FN с именем функции.

Заменим в примере на рис. 4 переменные TARR и TSRV на функцию

EXP (рис. 5).

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

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

GENERATE и ADVANCE, должны получиться весьма близкими, а может быть

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

рез модель (десятки и сотни тысяч), разница в скорости вычислений

должна стать заметной.

EXP FUNCTION RN1,C24

0,0/.1,.104/.2,.222/.3,.355/.4,.509/.5,.69/.6,.915

.7,1.2/.75,1.38/.8,1.6/.84,1.85/.88,2.12/.9,2.3

.92,2.52/.94,2.81/.95,2.99/.96,3.2/.97,3.5/.98,3.9

.99,4.6/.995,5.3/.998,6.2/.999,7/.9998,8

GENERATE 100,FN$EXP

ADVANCE 80,FN$EXP

TERMINATE 1

Рис. 5

Особенностью непрерывных функций является то, что они принима-

ют "непрерывные" (но только целочисленные) значения в диапазоне от

Y1 до Yn , где n - количество точек таблицы. В отличие от них диск-

ретные числовые функции, тип которых кодируется буквой D в операнде

B оператора определения функции, принимают только отдельные

(дискретные) значения, заданные координатами Yi в строках, следую-

щих за оператором определения FUNCTION. При вычислении дискретной

функции текущее значение СЧА-аргумента, указанного в поле A

оператора FUNCTION, сравнивается по условию <= последовательно со

всеми значениями упорядоченных по возрастанию координат Xi до

выполнения этого условия при некотором i. Значением функции ста-

новится целая часть соответствующего значения Yi.

Если последовательность значений аргумента таблицы с координа-

тами точек функции представляет числа натурального ряда

(1,2,3,...,n), то такую дискретную функцию с целью экономии памяти

и машинного времени удобно определить как списковую числовую функ-

цию (тип L).

Пусть в модели на рис. 5 заявки, моделируемые транзактами, с

равной вероятностью 1/3 должны относиться к одному из трех классов

(типов) 1,2 и 3, а среднее время задержки обслуживания заявок каж-

дого типа должно составлять соответственно 70, 80 и 90 единиц мо-

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

рис. 6.

В блоке ASSIGN в параметр TYPE каждого сгенерированного тран-

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

CLASS. Аргументом функции является генератор случайных чисел RN1, а

координаты ее таблицы представляют собой обратную функцию распреде-

ления дискретной случайной величины "класс заявки" с одинаковыми

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

Поле A блока ADVANCE содержит ссылку на списковую функцию

MEAN, аргументом которой служит параметр TYPE входящих в блок тран-

зактов. В зависимости от значений этого параметра (типа заявки)

среднее время задержки принимает одно из трех возможных значений

функции MEAN: 70, 80 или 90 единиц.

EXP FUNCTION RN1,C24

0,0/.1,.104/.2,.222/.3,.355/.4,.509/.5,.69/.6,.915

.7,1.2/.75,1.38/.8,1.6/.84,1.85/.88,2.12/.9,2.3

.92,2.52/.94,2.81/.95,2.99/.96,3.2/.97,3.5/.98,3.9

.99,4.6/.995,5.3/.998,6.2/.999,7/.9998,8

CLASS FUNCTION RN1,D3

.333,1/.667,2/1,3

MEAN FUNCTION P$TYPE,L3

1,70/2,80/3,90

GENERATE 100,FN$EXP

ASSIGN TYPE,FN$CLASS

ADVANCE FN$MEAN,FN$EXP

TERMINATE 1

Рис. 6

Следует отметить, что в данном примере можно было бы не

использовать параметр TYPE и обойтись одной дискретной функцией,

возвращающей с равной вероятностью одно из трех возможных значений

среднего времени задержки. Однако использование параметров дает не-

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

же.

Транзакты могут входить в модель не только через блок

GENERATE, но и путем создания копий уже существующих транзактов в

блоке SPLIT (расщепить), имеющем следующий формат:

имя SPLIT A,B,C

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

(родителя), входящего в блок SPLIT. После выхода из блока SPLIT

транзакт-родитель направляется в следующий блок, а все транзак-

ты-потомки поступают в блок, указанный в поле B. Если поле B пусто,

то все копии поступают в следующий блок.

Транзакт-родитель и его потомки, выходящие из блока SPLIT, мо-

гут быть пронумерованы в параметре, имя или номер которого указаны

в поле C. Если у транзакта-родителя значение этого параметра при

входе в блок SPLIT было равно k, то при выходе из блока оно станет

равным k+1, а значения этого параметра у транзактов-потомков ока-

жутся равными k+2, k+3 и т.д.

Например, блок

SPLIT 5,MET1,NUM

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

именем MET1. Транзакт-родитель и потомки нумеруются в параметре с

именем NUM. Если, например, перед входом в блок значение этого па-

раметра у транзакта-родителя было равно 0, то при выходе из блока

оно станет равным 1, а у транзактов-потомков значения параметра NUM

будут равны 2, 3, 4, 5 и 6.

2.2. Блоки, связанные с аппаратными объектами

Все примеры моделей, рассматривавшиеся выше, пока еще не явля-

ются моделями систем массового обслуживания, так как в них не учте-

на основная особенность СМО: конкуренция заявок на использование

некоторых ограниченных ресурсов системы. Все транзакты, входящие в

эти модели через блок GENERATE, немедленно получают возможность

"обслуживания" в блоке ADVANCE, который никогда не "отказывает"

транзактам во входе, сколько бы транзактов в нем не находилось.

Для моделирования ограниченных ресурсов СМО в модели должны

присутствовать аппаратные объекты: одноканальные или многоканальные

устройства. Одноканальные устройства создаются в текущей модели при

использовании блоков SEIZE (занять) и RELEASE (освободить), име-

ющих следующий формат:

имя SEIZE A

имя RELEASE A

В поле A указывается номер или имя устройства. Если транзакт

входит в блок SEIZE, то устройство, указанное в поле A, становится

занятым и остаётся в этом состоянии до тех пор, пока этот же тран-

закт не пройдёт соответствующий блок RELEASE, освобождая уст-

ройство. Если устройство, указанное в поле A блока SEIZE, уже заня-

то каким-либо транзактом, то никакой другой транзакт не может войти

в этот блок и остаётся в предыдущем блоке. Транзакты, задержанные

(заблокированные) перед блоком SEIZE, остаются в списке текущих со-

бытий и при освобождении устройства обрабатываются с учетом приори-

тетов и очередности поступления.

Каждое устройство имеет следующие СЧА:F - состояние уст-

ройства (0 - свободно,1 - занято); FR - коэффициент использования в

долях 1000; FC - число занятий устройства; FT - целая часть средне-

го времени занятия устройства.

Воспользуемся блоками SEIZE и RELEASE для моделирования одно-

канальной СМО с ожиданием (рис. 7). Теперь блок ADVANCE находится

между блоками SEIZE и RELEASE, моделирующими занятие и освобождение

устройства с именем SYSTEM, и поэтому в нем может находиться только

один транзакт. Транзакты, выходящие из блока GENERATE в моменты за-

нятости устройства, не смогут войти в блок SEIZE и будут оставаться

в блоке GENERATE, образуя очередь в списке текущих событий.

EXP FUNCTION RN1,C24

0,0/.1,.104/.2,.222/.3,.355/.4,.509/.5,.69/.6,.915

.7,1.2/.75,1.38/.8,1.6/.84,1.85/.88,2.12/.9,2.3

.92,2.52/.94,2.81/.95,2.99/.96,3.2/.97,3.5/.98,3.9

.99,4.6/.995,5.3/.998,6.2/.999,7/.9998,8

GENERATE 100,FN$EXP

SEIZE SYSTEM

ADVANCE 80,FN$EXP

RELEASE SYSTEM

TERMINATE 1

Рис. 7

Для моделирования захвата (прерывания) одноканального уст-

ройства вместо блоков SEIZE и RELEASE используются соответственно

блоки PREEMPT (захватить) и RETURN (вернуть). Блок PREEMPT имеет

следующий формат:

имя PREEMPT A,B,C,D,E

В поле A указывается имя или номер устройства, подлежащего

захвату. В поле B кодируется условие захвата. Если это поле пусто,

то захват возникает, если обслуживаемый транзакт сам не является

захватчиком. Если же в поле B записан операнд PR, то захват возни-

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

обслуживаемого транзакта.

Поля C, D и E определяют поведение транзактов, обслуживание

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