Реферат: Моделирование на GPSS
быть вычислено
через R по формуле. Так, например, значение случай-
ной величины E
с показательным (экспоненциальным) распределением с
параметром d
вычисляется по формуле:
E= -(1/d) * ln(R)
Напомним, что
параметр d имеет смысл величины, обратной математи-
ческому ожиданию
E, а, следовательно, 1/d - математическое ожидание
(среднее значение)
случайной величины E.
Для получения
случайной величины R с равномерным распределени-
ем на отрезке
[0;1] в GPSS/PC имеются встроенные генераторы случай-
ных чисел. Для
получения случайного числа путем обращения к такому
генератору
достаточно записать системный СЧА RN с номером генерато-
ра, например
RN1. Правда, встроенные генераторы случайных чисел
GPSS/PC дают числа
не на отрезке [0;1], а целые случайные числа,
равномерно
распределенные от 0 до 999, но их нетрудно привести к
указанному отрезку
делением на 1000.
Проще всего
описанные вычисления в GPSS/PC выполняются с
использованием
арифметических переменных. Они могут быть целыми и
действительными. Целые
переменные определяются перед началом моде-
лирования с помощью оператора определения VARIABLE
(переменная), имеющего
следующий формат:
имя VARIABLE
выражение
Здесь имя - имя
переменной, используемое для ссылок на нее, а
выражение - арифметическое выражение, определяющее
переменную.
Арифметическое выражение
представляет собой комбинацию операндов,
в качестве которых могут
выступать константы, СЧА и функции, зна-
ков арифметических
операций и круглых скобок. Следует заметить,
что знаком операции
умножения в GPSS/PC является символ # (номер).
Результат каждой
промежуточной операции в целых переменных преобра-
зуется к целому типу путем
отбрасывания дробной части, и, таким
образом, результатом
операции деления является целая часть частного.
Действительные
переменные 0определяются перед началом модели-
рования с помощью
оператора определения FVARIABLE, имеющего тот же
формат, что и оператор
VARIABLE. Отличие действительных переменных
от целых
заключается в том, что в действительных переменных все
промежуточные
операции выполняются с сохранением дробной части
чисел, и лишь
окончательный результат приводится к целому типу отб-
расыванием дробной части.
Арифметические
переменные обоих типов имеют единственный СЧА с
названием V,
значением которого является результат вычисления ариф-
метического
выражения, определяющего переменную. Вычисление выраже-
ния производится
при входе транзакта в блок, содержащий ссылку на
СЧА V с именем переменной.
Действительные переменные могут быть использованы для получе-
ния случайных
интервалов времени с показательным законом распреде-
ления. Пусть в
модели из примера на рис. 3 распределения времени
поступления
транзактов и времени задержки должны иметь показатель-
ный закон. Это может быть
сделано так, как показано на рис. 4.
TARR FVARIABLE -100#LOG((1+RN1)/1000)
TSRV FVARIABLE -80#LOG((1+RN1)/1000)
GENERATE V$TARR
ADVANCE V$TSRV
TERMINATE 1
Рис. 4
Переменная
с именем TARR задает выражение для вычисления ин-
тервала
поступления со средним значением 100, вторая переменная с
именем TSRV
- для вычисления времени задержки со средним значением
80. Блоки
GENERATE и ADVANCE содержат в поле A ссылки на соот-
ветствующие
переменные, при этом поле B не используется, так как в
поле A содержится
случайная величина, не нуждающаяся в модификации.
Большинство случайных
величин не может быть получено через
случайную величину
R с помощью арифметического выражения. Кроме то-
го, такой способ
является достаточно трудоемким, так как требует
обращения к
математическим функциям, вычисление которых требует
десятков
машинных операций. Другим возможным способом является
использование
вычислительных объектов GPSS/PC типа функция.
Функции
используются для вычисления величин, заданных таблич-
ными
зависимостями. Каждая функция определяется перед началом моде-
лирования с
помощью оператора определения FUNCTION (функция), имею-
щего следующий формат:
имя FUNCTION
A,B
Здесь имя - имя
функции, используемое для ссылок на нее; A –
стандартный числовой
атрибут, являющийся аргументом функции; B -
тип функции и число точек
таблицы, определяющей функцию.
Существует пять типов
функций. Рассмотрим вначале непрерывные
числовые функции, тип которых кодируется
буквой C. Так, например,
в определении непрерывной
числовой функции, таблица которой соде-
ржит 24 точки, поле B
должно иметь значение C24.
При использовании непрерывной функции для
генерирования слу-
чайных чисел ее
аргументом должен быть один из генераторов случай-
ных чисел RNj. Так,
оператор для определения функции показательного
распределения может иметь
следующий вид:
EXP FUNCTION RN1,C24
Особенностью
использования встроенных генераторов случайных чисел
RNj в качестве
аргументов функций является то, что их значения в
этом контексте интерпретируются
как дробные числа от 0 до 0,999999.
Таблица с координатами
точек функции располагается в строках,
следующих
непосредственно за оператором FUNCTION. Эти строки не
должны иметь поля
нумерации. Каждая точка таблицы задается парой Xi
(значение аргумента) и Yi
(значение функции), отделяемых друг от
друга запятой. Пары
координат отделяются друг от друга символом "/"
и располагаются на
произвольном количестве строк. Последователь-
ность значений аргумента Xi
должна быть строго возрастающей.
Как уже отмечалось,
при использовании функции в поле B блоков
GENERATE и ADVANCE
вычисление интервала поступления или времени за-
держки производится путем
умножения операнда A на вычисленное зна-
чение функции. Отсюда
следует, что функция, используемая для гене-
рирования случайных
чисел с показательным распределением, должна
описывать зависимость
y=-ln(x), представленную в табличном виде.
Оператор FUNCTION с
такой таблицей, содержащей 24 точки для обеспе-
чения достаточной точности
аппроксимации, имеет следующий вид:
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
Вычисление непрерывной функции производится
следующим образом.
Сначала определяется
интервал (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, моделирующими занятие и освобождение
Страницы: 1, 2, 3, 4, 5, 6, 7, 8
|