Рефераты. Моделирование на GPSS p> занесено какое-либо значение.

Для присваивания параметрам начальных значений или изменения этих значений служит блок ASSIGN (присваивать), имеющий следущий формат: имя ASSIGN A,B,C

В поле A указывается номер или имя параметра, в который за- носится значение операнда B. Если в поле A после имени (номера) па- раметра стоит знак + или -, то значение операнда B добавляется или вычитается из текущего содержимого параметра. В поле С может быть указано имя или номер функции-модификатора, действующей аналогично функции-модификатору в поле B блока GENERATE.

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

ASSIGN 5,0 записывает в параметр с номером 5 значение 0, а блок

ASSIGN COUNT+,1 добавляет 1 к текущему значению параметра с именем COUNT.

Для записи текущего модельного времени в заданный параметр транзакта служит блок MARK (отметить), имеющий следующий формат:

имя MARK A

В поле A указывается номер или имя параметра транзакта, в ко- торый заносится текущее модельное время при входе этого транзакта в блок MARK. Содержимое этого параметра может быть позднее использо- вано для определения транзитного времени 0пребывания транзакта в какой-то части модели с помощью СЧА с названием MP.

Например, если на входе участка модели поместить блок

MARK MARKER , то на выходе этого участка СЧА MP$MARKER будет содержать разность между текущим модельным временем и временем, занесенным в параметр

MARKER блоком MARK.

Если поле A блока MARK пусто, то текущее время заносится на место отметки времени входа транзакта в модель, используемой при определении резидентного времени транзакта с помощью СЧА M1.

Для изменения приоритета транзакта служит блок PRIORITY (прио- ритет), имеющий следующий формат: имя PRIORITY A,B

В поле A записывается новый приоритет транзакта. В поле B мо- жет содержаться ключевое слово BU, при наличии которого транзакт, вошедший в блок, помещается в списке текущих событий после всех остальных транзактов новой приоритетной группы, и список текущих событий просматривается с начала. Использование такой возможности будет рассмотрено ниже.

Для удаления транзактов из модели служит блок TERMINATE (за- вершить), имеющий следующий формат: имя TERMINATE A

Значение поля A указывает, на сколько единиц уменьшается со- держимое так называемого счетчика завершений при входе транзакта в данный блок TERMINATE. Если поле A не определено, то оно считается равным 0, и транзакты, проходящие через такой блок, не уменьшают содержимого счетчика завершений.

Начальное значение счетчика завершений устанавливается управ- ляющим оператором START (начать), предназначенным для запуска про- гона модели. Поле A этого оператора содержит начальное значение счетчика завершений (см. разд. 3). Прогон модели заканчивается, когда содержимое счетчика завершений обращается в 0. Таким образом, в модели должен быть хотя бы один блок TERMINATE с непустым полем

A, иначе процесс моделирования никогда не завершится.

Текущее значение счетчика завершений доступно программисту че- рез системный СЧА TG1.

Участок блок-схемы модели, связанный с парой блоков

GENERATE-ТERMINATE, называется сегментом. Простые модели могут состоять из одного сегмента, в сложных моделях может быть несколько сегментов.

Например, простейший сегмент модели, состоящий всего из двух блоков GENERATE и TERMINATE и приведенный на рис. 1, в совокупности с управлящим оператором START моделирует процесс создания случайно- го потока транзактов, поступащих в модель со средним интервалом в

100 единиц модельного времени, и уничтожения этих транзактов. На- чальное значение счетчика завершений равно 1000. Каждый транзакт, проходящий через блок TERMINATE, вычитает из счетчика единицу, и таким образом моделирование завершится, когда тысячный по счету транзакт войдет в блок TERMINATE. При этом точное значение таймера в момент завершения прогона непредсказуемо. Следовательно, в приве- денном примере продолжительность прогона устанавливается не по мо- дельному времени, а по количеству транзактов, прошедших через мо- дель.

GENERATE 100,40

TERMINATE 1

START 1000

Если необходимо управлять продолжительностью прогона по мо- дельному времени, то в модели используется специальный сегмент, на- зываемый сегментом таймера.

GENERATE 100,40

TERMINATE

GENERATE 100000

TERMINATE 1

START 1

Например, в модели из двух сегментов, приведенной на рис. 2, первый (основной) сегмент выполняет те же функции, что и в предыду- щем примере. Заметим, однако, что поле A блока TERMINATE в первом сегменте пусто, т.е. уничтожаемые транзакты не уменьшают содержимо- го счетчика завершений. Во втором сегменте блок GENERATE создаст первый транзакт в момент модельного времени, равный 100000. Но этот транзакт окажется и последним в данном сегменте, так как, войдя в блок TERMINATE, он обратит в 0 содержимое счетчика завершений, установленное оператором START равным 1. Таким образом, в этой мо- дели гарантируется завершение прогона в определенный момент модель- ного времени, а точное количество транзактов, прошедших через мо- дель, непредсказуемо.

В приведенных примерах транзакты, входящие в модель через блок

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

TERMINATE. В моделях систем массового обслуживания заявки обслужи- ваются приборами (каналами) СМО в течение некоторого промежутка времени прежде, чем покинуть СМО. Для моделирования такого обслужи- вания, т.е. для задержки транзактов на определенный отрезок модель- ного времени, служит блок ADVANCE (задержать), имеющий следующий формат: имя ADVANCE A,B

Операнды в полях A и B имеют тот же смысл, что и в соот- ветствующих полях блока GENERATE. Следует отметить, что транзакты, входящие в блок ADVANCE, переводятся из списка текущих событий в список будущих событий, а по истечении вычисленного времени задерж- ки возвращаются назад, в список текущих событий, и их продвижение по блок-схеме продолжается. Если вычисленное время задержки равно

0, то транзакт в тот же момент модельного времени переходит в сле- дующий блок, оставаясь в списке текущих событий.

Например, в сегменте, приведенном на рис. 3, транзакты, посту- пающие в модель из блока GENERATE через случайные интервалы време- ни, имеющие равномерное распределение на отрезке [60;140], попадают в блок ADVANCE. Здесь определяется случайное время задержки тран- закта, имеющее равномерное распределение на отрезке [30;130], и транзакт переводится в список будущих событий. По истечении времени задержки транзакт возвращается в список текущих событий и входит в блок TERMINATE, где уничтожается. Заметим, что в списке будущих со- бытий, а значит и в блоке ADVANCE может одновременно находиться произвольное количество транзактов.

GENERATE 100,40

ADVANCE 80,50

TERMINATE 1

В рассмотренных выше примерах случайные интервалы времени под- чинялись равномерному закону распределения вероятностей. Для полу- чения случайных величин с другими распределениями в GPSS/PC исполь- зуются вычислительные объекты: переменные и функции.

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

[0;1], через свою обратную функцию распределения. Для некоторых случайных величин уравнение связи имеет явное решение, и значение случайной величины с заданным распределением вероятностей может быть вычислено через 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, сравнивается по условию


Страницы: 1, 2, 3



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.