Обработки данных о выборочном распределении времени ожидания в оче-

реди служат статистические объекты типа Q-таблица.

      Для создания в модели такой таблицы она должна быть предвари-

тельно определена с помощью оператора определения QTABLE (Q -табли-

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

                имя QTABLE A,B,C,D

Здесь имя - имя таблицы, используемое для ссылок на нее; A - номер

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

мо получить; B - верхняя граница первого частотного интервала таб-

лицы; C - ширина частотных интервалов; D - количество частотных ин-

тервалов.

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

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

чество которых указано в поле D. Первый из этих интервалов имеет

ширину от минус бесконечности до величины, указанной в поле B,

включительно. Второй интервал включает значения, большие, чем вели-

чина первой границы в поле B, но меньшие или равные B+C, и т.д. Все

промежуточные интервалы имеют одинаковую ширину, указанную в поле

C. Наконец, последний интервал включает все значения, большие, чем

последняя граница. Значения операндов B, C и D должны задаваться

целыми константами. Операнд B может быть неположительным, хотя для

Q-таблицы это не имеет смысла, так как время не может быть отрица-

тельным. Операнды C и D должны быть строго положительными.

      При прохождении транзакта через блоки QUEUE и DEPART его время

ожидания фиксируется, и к счетчику частотного интервала таблицы, в

который попало это время, добавляется 1. Одновременно в таблице на-

капливается информация для вычисления среднего значения и средне-

квадратического отклонения (корня из дисперсии) времени ожидания.

По окончании моделирования среднее значение и среднеквадратическое

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

частотные интервалы выводятся в стандартный отчет GPSS/PC.

      Таблицы, как и другие объекты GPSS/PC, имеют СЧА: ТС - общее

число транзактов, вошедших в очередь, связанную с таблицей; TB -

целая часть среднего времени ожидания в очереди; TD - целая часть

среднеквадратического отклонения времени ожидания в очереди.

      Дополним модель из примера на рис. 9 оператором QTABLE для по-

лучения распределения времени ожидания в очереди с именем LINE

(рис. 10).

 

    WTIME QTABLE LINE,50,50,10

    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

          QUEUE  LINE

           SEIZE  SYSTEM

           DEPART LINE

           ADVANCE 80,FN$EXP

           RELEASE SYSTEM

           TERMINATE 1

 

                         Рис. 10

 

      Оператор определения таблицы с именем WTIME разбивает ось вре-

мени на 10 частотных интервалов. Первый интервал включает значения

от 0 до 50, второй - от 50 до 100, третий - от 100 до 150 и т.д.

Последний, десятый, интервал включает значения, превышающие 450.

Если, например, время ожидания некоторого транзакта в очереди

составило 145 единиц модельного времени, то к счетчику третьего

частотного интервала будет добавлена 1. Следует заметить, что ин-

формация в таблицу с именем WTIME заносится автоматически, при вхо-

де транзактов в блоки QUEUE и DEPART, и никаких специальных мер для

этого принимать не требуется.

      Таблицы в GPSS/PC могут использоваться в более общем случае не

только для табулирования времени ожидания в очереди, но и для полу-

чения выборочных распределений произвольных СЧА любых объектов мо-

дели. Для определения таблиц служит оператор TABLE (таблица), фор-

мат которого совпадает с форматом оператора QTABLE. Отличие состоит

лишь в том, что в поле A оператора TABLE записывается стандартный

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

лучить, а операнды B, C и D определяют разбиение на частотные ин-

тервалы диапазона всевозможных значений этого СЧА.

      Занесение информации в таблицу, определяемую оператором TABLE,

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

Q-таблиц. Для этого используется специальный блок TABULATE (табули-

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

             имя TABULATE A

      В поле A указывается номер или имя таблицы, определенной соот-

ветствующим оператором TABLE.

      При входе транзакта в блок TABULATE текущее значение табулиру-

емого аргумента таблицы, указанного в поле A оператора TABLE, за-

носится в нее в соответствии с заданным в операторе TABLE разбиени-

ем области значений аргумента на частотные интервалы. Одновременно

корректируются текущие значения СЧА таблицы: счетчик входов в таб-

лицу TC, среднее время ожидания TB и среднеквадратическое отклоне-

ние времени ожидания TD.

      Пусть, например, в модели многоканальной СМО, приведенной на

рис. 8, надо получить распределение времени пребывания заявок в

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

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

     Оператор TABLE определяет таблицу с именем TTIME, аргументом

которой служит СЧА М1 - время пребывания транзакта в модели. В

рассматриваемой модели значение СЧА M1 одновременно будет являться

временем пребывания транзакта в СМО в том случае, если занесение

информации в таблицу производить перед выходом транзакта из модели.

Поэтому блок TABULATE, заносящий информацию о времени пребывания

каждого транзакта в модели в таблицу TTIME, располагается перед

блоком TERMINATE. Диапазон возможных значений времени пребывания

транзакта в модели разбит в операторе TABLE на 12 частотных интер-

валов, ширина которых (кроме последнего) равна 100 единицам модель-

ного времени.

 

   TTIME TABLE  M1,100,100,12

    STO2 STORAGE 2

    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

           ENTER  STO2

           ADVANCE 160,FN$EXP

           LEAVE  STO2

            TABULATE TTIME

           TERMINATE 1

 

                         Рис. 11

 

       2.4. Блоки, изменяющие маршруты транзактов

 

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

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

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

зависимости от некоторых условий. Эту возможность обеспечивают бло-

ки изменения маршрутов транзактов.

     

      Блок TRANSFER (передать) служит для передачи входящих в него

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

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

используемых. В этих трех режимах блок имеет следующий формат:

                имя TRANSFER A,B,C

Смысл операндов в полях A, B и C зависит от режима работы блока.

В режиме безусловной передачи поля A и C пусты, а в поле B

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

транзакт, вошедший в блок TRANSFER. Например:

                   TRANSFER,FINAL

      В режиме статистической передачи операнд A определяет вероят-

ность, с которой транзакт направляется в блок, указанный в поле C.

С вероятностью 1-A транзакт направляется в блок, указанный в поле B

(в следующий, если поле B пусто).

      Вероятность в поле A может быть задана непосредственно деся-

тичной дробью, начинающейся с точки. Например, блок

               TRANSFER.75,THIS,THAT

с вероятностью 0,75 направляет транзакты в блок с именем THAT, а с

   вероятностью 0,25 - в блок с именем THIS.

      Если же поле A начинается не с десятичной точки и не содержит

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

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

ятности передачи. Например, предыдущий блок TRANSFER можно записать

также в следующем виде:

                TRANSFER 750,THIS,THAT

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

слово BOTH (оба). Транзакт, поступающий в блок TRANSFER, сначала

пытается войти в блок, указанный в поле B (или в следующий блок,

если поле B пусто), а если это не удается, т.е. блок B отказывает

транзакту во входе, то в блок, указанный в поле C. Если и эта по-

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

нения условий в модели, делающего возможным вход в один из блоков B

или C, причем при одновременно возникшей возможности предпочтение

отдается блоку B. Например:

               TRANSFER BOTH,MET1,MET2

 

      Блок TEST (проверить) служит для задержки или изменения марш-

рутов транзактов в зависимости от соотношения двух СЧА. Он имеет

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

                 имя TEST X A,B,C

      Вспомогательный операнд X содержит условие проверки соотноше-

ния между СЧА и может принимать следующие значения: L (меньше); LE

(меньше или равно); E (равно); NE (не равно); GE (больше или рав-

но); G (больше). Поле A содержит первый, а поле B - второй из срав-

ниваемых СЧА. Если проверяемое условие A X B выполняется, то блок

TEST пропускает транзакт в следующий блок. Если же это условие не

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

если оно пусто, то задерживается перед блоком TEST.

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

                 TEST LE P$TIME,C1

не впускает транзакты, у которых значение параметра с именем TIME

больше текущего модельного времени. Блок

                 TEST L Q$LINE,5,OUT

направляет транзакты в блок с именем OUT, если текущая длина очере-

ди LINE больше либо равна 5.

 

      Для задержки или изменения маршрута транзактов в зависимости

от состояния аппаратных объектов модели служит блок GATE

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

                  имя GATE X A,B

      Вспомогательный операнд X содержит код состояния проверяемого

аппаратного объекта, а в поле A указывается имя или номер этого

объекта. Если проверяемый объект находится в заданном состоянии, то

блок GATE пропускает транзакт к следующему блоку. Если же заданное

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

занному в поле B, а если это поле пусто, то задерживается перед

блоком GATE.

      Операнд X может принимать следующие значения: U (устройство

занято); NU (устройство свободно); I (устройство захвачено); NI

(устройство не захвачено); SE (МКУ пусто); SNE (МКУ не пусто); SF

(МКУ заполнено); SNF (МКУ не заполнено); LS (ЛП включен), LR (ЛП

выключен).

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

                   GATE SNE BUF3

отказывает во входе транзактам, поступающим в моменты, когда в МКУ

с именем BUF3 все каналы обслуживания свободны. Блок

                  GATE LR 4,BLOK2

направляет транзакты в блок с именем BLOK2, если в момент их

поступления ЛП с номером 4 включен.

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

различных СМО с потерями заявок. Воспользуемся, например, блоками

TRANSFER для моделирования двухканальной СМО с отказами и повторны-

ми попытками (рис. 12).

 

   STO2 STORAGE 2

    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

    ENT1 TRANSFER BOTH,,REFUS

           ENTER  STO2

           ADVANCE 160,FN$EXP

              LEAVE  STO2

           TERMINATE 1

    REFUS TRANSFER.1,,OUT

           ADVANCE 250,FN$EXP

           TRANSFER,ENT1

    OUT TERMINATE 1

 

                         Рис. 12

 

     Транзакты, поступающие в модель, попадают в блок TRANSFER с

именем ENT1, работающий в логическом режиме. Если в момент поступ-

ления транзакта в МКУ STO2 хотя бы один канал свободен, то блок

TRANSFER направит транзакт в следующий блок, т.е. в блок ENTER.

Если же в момент поступления оба канала МКУ заняты, и поэтому блок

ENTER отказывает во входе, то транзакт будет направлен в блок

TRANSFER с именем REFUS, работающий в статистическом режиме. С ве-

роятностью 0,9 транзакты из этого блока передаются в следующий

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

TRANSFER, работающего в безусловном режиме, передаются вновь на

вход модели в блок с именем ENT1. С вероятностью 0,1 транзакты из

блока с именем REFUS передаются в блок TERMINATE с именем OUT для

уничтожения.

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

отказ в обслуживании, понадобился отдельный блок TERMINATE для

фиксации в стандартном отчете количества потерянных транзактов с

помощью счетчика блока с именем OUT (СЧА N$OUT).

      Для моделирования той же СМО может быть использован также блок

TEST (рис. 13). В этом варианте модели транзакт проходит в блок

ENTER, если текущее число занятых каналов (СЧА S$STO2) меньше 2.

 

   STO2 STORAGE 2

    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

    ENT1 TEST L S$STO2,2,REFUS

           ENTER  STO2

           ADVANCE 160,FN$EXP

           LEAVE  STO2

           TERMINATE 1

    REFUS TRANSFER.1,,OUT

           ADVANCE 250,FN$EXP

           TRANSFER,ENT1

    OUT TERMINATE 1

 

                         Рис. 13

 

      При использовании блока GATE модель принимает вид, показанный

на рис. 14. В этом варианте транзакт проходит в блок ENTER, если

условие "МКУ STO2 не заполнено" истинно.

 

    STO2 STORAGE 2

    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

    ENT1 GATE SNF STO2,REFUS

           ENTER  STO2

           ADVANCE 160,FN$EXP

           LEAVE  STO2

           TERMINATE 1

    REFUS TRANSFER.1,,OUT

           ADVANCE 250,FN$EXP

           TRANSFER,ENT1

    OUT TERMINATE 1

 

                         Рис. 14

 

            2.5. Блоки, работающие с памятью

 

     Для хранения в памяти отдельных числовых значений и массивов

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

емых величин.

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

ния исходных данных, которые надо изменять при различных прогонах

модели, промежуточных значений и результатов моделирования. В нача-

ле моделирования все сохраняемые величины устанавливаются равными

0. Для установки отличных от 0 начальных значений сохраняемых вели-

чин используется оператор INITIAL, имеющий следующий формат:

 

                INITIAL X$ имя,значение

                  INITIAL Xj,значение

Здесь имя и j - соответственно имя и номер сохраняемой величины, а

значение - присваиваемое ей начальное значение (константа).

      Для изменения сохраняемых величин в процессе моделирования

служит блок SAVEVALUE (сохранить величину), имеющий следующий фор-

мат:

                 имя SAVEVALUE A,B

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

записывается значение операнда B. Если в поле A после имени (номера)   

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

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

величины. Например:

                  SAVEVALUE 5,Q$LINE

 

                  SAVEVALUE NREF+,1

 

      Сохраняемые величины имеют единственный СЧА с названием X,

значением которого является текущее значение соответствующей сохра-

няемой величины.

      Изменим пример на рис. 14 таким образом, чтобы исходные данные

модели (средний интервал  поступления транзактов и среднее время

обслуживания) были заданы сохраняемыми величинами, а результат мо-

делирования (количество потерянных транзактов) фиксировался также в

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

рис. 15.

     Матрицы сохраняемых величин дают возможность упорядочить сох-

раняемые значения в виде матриц m*n, где m - число строк, n - число

столбцов матрицы. Каждая матрица должна быть перед началом модели-

рования определена с помощью оператора MATRIX (определить матрицу),

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

                 имя MATRIX A,B,C

     Поле A оператора не используется и сохранено в GPSS/PC для

совместимости со старыми версиями GPSS. В полях B и C указываются

соответственно число строк и столбцов матрицы, задаваемые констан-

тами, причем общее число элементов, равное произведению B на C, не

должно превышать 8191. Например, оператор

                 MTAB MATRIX,10,2

определяет матрицу с именем MTAB, содержащую десять строк и два

столбца.

 

          INITIAL X$TARR,100

           INITIAL X$TSRV,160

    STO2 STORAGE 2

    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 X$TARR,FN$EXP

    ENT1 GATE SNF STO2,REFUS

           ENTER  STO2

           ADVANCE X$TSRV,FN$EXP

           LEAVE  STO2

    OUT TERMINATE 1

    REFUS TRANSFER.1,,COUT

           ADVANCE 250,FN$EXP

           TRANSFER,ENT1

    COUT SAVEVALUE NREF+,1

           TRANSFER,OUT

     

                         Рис. 15

 

      В начале моделирования элементы всех определенных матриц уста-

навливаются равными 0. Для установки отличных от 0 начальных значе-

ний отдельных элементов матриц используется оператор INITIAL, имею-

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

             INITIAL MX$ имя (a,b),значение

             INITIAL MXj (a,b),значение

Здесь имя и j - соответственно имя и номер матрицы; a и b - номера

соответственно строки и столбца, задаваемые константами; значение -

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

константой.

      Для изменения значений элементов матриц в процессе моделирова-

ния служит блок MSAVEVALUE (сохранить значение элемента матрицы),

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

              имя MSAVEVALUE A,B,C,D

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

как и в блоке SAVEVALUE, может стоять знак + или -. В полях B и C

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

изменяемый элемент матрицы. В поле D указывается величина, исполь-

зуемая для изменения заданного элемента матрицы. Например:

              MSAVEVALUE 5,3,2,X1

               MSAVEVALUE MTAB+,P$ROW,P$COL,1

     

      Матрицы имеют единственный СЧА с названием MX, ссылка на кото-

рый записывается в следующем виде:

               MX$ имя (a,b)

               MXj (a,b)

Здесь имя и j - соответственно имя и номер матрицы; a и b - номера

соответственно строки и столбца, задаваемые константами или ссылка-

ми на СЧА параметров транзактов. Например:

                  MX5(2,1)

 

                  MX$MTAB(P$ROW,P$COL)

 

     2.6. Блоки для работы со списками пользователя

 

      Так как заблокированные транзакты находятся в списке текущих

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

расходует слишком много времени на просмотр этого списка с целью

выбора очередного транзакта для продвижения. Для экономии машинного

времени заблокированные транзакты целесообразно помещать в так на-

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

выполнятся условия, позволяюшие дальнейшее продвижение этих тран-

зактов. Кроме того, размещение ожидающих транзактов в списках поль-

зователя позволяет организовать различные дисциплины очередей, от-

личные от дисциплины "раньше пришел - раньше обслужен", реализован-

ной в списке текущих событий.

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

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

событий. В отличие от списков текущих и будущих событий транзакты

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

а в соответствии с логикой модели с помощью специальных блоков.

     

      Для ввода транзактов в список пользователя служит блок LINK

(ввести в список), который может быть использован в двух режимах:

условном и безусловном. Ограничимся рассмотрением лишь безусловного

режима, в котором блок LINK имеет следующий формат:

                   имя LINK A,B

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

безусловным образом помещается транзакт, вошедший в блок. Поле B

определяет, в какое место списка пользователя следует поместить

этот транзакт. Если в поле B записано ключевое слово FIFO, то тран-

закт помещается в конец списка, если LIFO - в начало списка. В дру-

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

значением поля B, где обычно записывается один из СЧА транзактов,

таких как PR, M1 или P. Если поле B содержит СЧА PR, то транзакты

упорядочиваются по убыванию приоритета. В остальных случаях произ-

водится упорядочение по возрастанию указанного СЧА.

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

                   LINK 5,FIFO

помещает транзакты в список пользователя с номером 5 в порядке их

поступления в блок. Блок

                  LINK BUFER,P$ORDER

помещает транзакты в список пользователя с именем BUFER, упорядочи-

вая их по возрастанию параметра с именем ORDER.

      Условия, при которых транзакт помещается в список пользовате-

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

разработчиком модели. Например, направить транзакт в список пользо-

вателя в случае занятости устройства можно так, как показано на

рис. 16. Если устройство с именем FAC4 занято, то блок GATE не

впускает транзакт в блок SEIZE, а направляет его в блок LINK с име-

нем WAIT, и транзакт вводится в конец списка пользователя с именем

BUFER.

 

                 ....................

                  GATE NU FAC4,WAIT

                  SEIZE FAC4

                 ....................

          WAIT LINK  BUFER,FIFO

                 ....................

 

                         Рис. 16

 

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: