рефераты

рефераты

 
 
рефераты рефераты

Меню

Реферат: Моделирование на 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