Моделирование последовательности значений случайных величин с заданным законом распределения
Моделирование последовательности значений случайных величин с заданным законом распределения реализуется на основе использования случайных величин, имеющих равномерное распределение в интервале (0, 1) [3, 5, 6].
Для получения случайной величины Y с равномерным распределением на интервале (0;1) в GPSS имеются встроенные генераторы случайных чисел. Для получения случайного числа путем обращения к такому генератору достаточно записать RN с номером генератора, например RN1. Правда, встроенные генераторы случайных чисел GPSS/World дают числа не на интервале (0;1), а целые случайные числа, равномерно распределенные от 0 до 999, но их нетрудно привести к указанному отрезку делением на 1000.
При каждом запуске системы генераторы выдают одну и ту же последовательность чисел. Команда PMULT позволяет изменить эту последовательность путем изменения начальных множителей.
Формат команды: PMULT A,B,C,D,E,F,G
Операнды A,B,C,D,E,F,G задают соответственно начальные множители для 1-7 генераторов случайных чисел.
Например, PMULT 890,,,5,устанавливает начальные состояния множителей генераторов случайных чисел 1 и 4.
Вычисления в GPSS выполняются с использованием переменных. Они могут быть целыми и действительными (с плавающей точкой). Действительные переменные определяются перед началом моделирования с помощью оператора определения FVARIABLE (переменная), имеющего следующий формат:
Имя FVARIABLE выражение
Здесь имя - имя переменной, используемое для ссылок на нее, а выражение - арифметическое выражение, определяющее переменную.
Арифметическое выражение представляет собой комбинацию операндов, в качестве которых могут выступать константы, функции, знаки арифметических операций и круглых скобок. Следует заметить, что знаком операции умножения в GPSS является символ #.
Переменные могут быть использованы для получения значений случайной величины с заданным законом распределения. Пусть необходимо сгенерировать 100 значений равномерно распределенной СВ на интервале [5, 15].
TARR FVARIABLE 10#(RN1/1000)+5
GENERATE V$TARR
TERMINATE 1
START 100
Для получения значений случайной величины Y с показательным (экспоненциальным) законом необходимо воспользоваться соотношением , полученным на основе метода обратной функции (см. раздел 7.2. в учебном пособии). Для имеем:
TARR1 FVARIABLE (-1)#LOG(RN1/1000)
GENERATE V$TARR1
TERMINATE 1
START 100
Такой способ является достаточно трудоемким, так как требует обращения к математическим функциям, вычисление которых требует десятков машинных операций. Другим возможным способом является использование вычислительных объектов GPSS типа функция.
Функции используются для вычисления величин, заданных табличными зависимостями. Каждая функция определяется перед началом моделирования с помощью оператора определения 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(1-x)(данная зависимость получена на основе использования метода обратной функции, см. раздел 7.2. в учебном пособиичена на основе исползсел 1,л.ельность путем изменения начальных мнежителей.
л. ()), представленную в табличном виде.
Оператор 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.
Использование функций для получения случайных чисел с заданным распределением дает хотя и менее точный результат за счет погрешностей аппроксимации, но зато с меньшими вычислительными затратами (несколько машинных операций на выполнение линейной интерполяции). По сути, этот вариант реализации (получения последовательности значений СВ) соответствует методу кусочной аппроксимации функции плотности распределения вероятностей (см. раздел 7.2 учебного пособия).
Функции всех типов имеют единственный системный числовой атрибут с названием FN, значением которого является вычисленное значение функции. Вычисление функции производится при входе транзакта в блок, содержащий ссылку на СЧА FN с именем функции.
При большом количестве транзактов, пропускаемых через модель (десятки и сотни тысяч), разница в скорости вычислений по данному способу и способу, описанному выше, должна стать заметной.
EXP1 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$EXP1
TERMINATE 1
START 100