Опубликован: 16.11.2010 | Уровень: специалист | Доступ: платный
Лекция 7:

Моделирование в GPSS World

6.2.5. Методы сбора статистики в имитационной модели

6.2.5.1. Регистратор очереди

В GPSS объекты типа "очередь" вводятся для сбора статистических данных. Эта статистика должна дать ответы на вопросы:

  1. Сколько раз транзакты приходили в очередь?
  2. Сколько пришедших транзактов фактически присоединились к очереди (задержались) и сколько их сразу без задержки заняло ОКУ?
  3. Каково было максимальное значение длины очереди?
  4. Среднее число ожидающих транзактов в очереди?
  5. Каково было среднее время ожидания тех транзактов, которым пришлось ждать?

GPSS обеспечивает возможность сбора такой статистики с помощью средства, называемого регистратором очереди. При использовании регистратора очереди в тех точках модели, где ресурсы ограничены, планировщик начинает автоматически собирать статистику, описывающую ожидание (если оно есть), возникающее в этих точках. Регистраторы очередей различают заданием имен. Условия задания имен те же, что и у устройств. Разработчик вносит регистратор очереди в модель с помощью пары взаимодополняющих блоков QUEUE (стать в очередь) и DEPART (покинуть очередь).

Формат записи блока QUEUE следующий:

QUEUE            A,[B]

Блок QUEUE увеличивает длину очереди. Операнд А задает номер или имя очереди, к длине которой добавляются единицы.

Операнд B определяет число единиц, на которое увеличивается текущая длина очереди. Если операнд B не используется, то прибавляется единица.

Рассмотрим примеры записи блока QUEUE.

QUEUE            RemQ

Увеличивает длину очереди RemQ на единицу при входе каждого транзакта.

QUEUE            Р14,Р1

Увеличивает длину очереди, номер или имя которой задан в параметре Р14 транзакта, на число единиц, заданных в параметре Р1.

Формат записи блока DEPART имеет вид:

DEPART           A,[B]

Блок DEPART служит для уменьшения длины очереди. Операнд А задает номер или имя очереди, длину которой надо уменьшить. Операнд B задает число единиц, на которое уменьшается длина очереди. Это число не должно превышать текущую длину очереди. Если операнд B не используется, то по умолчанию длина очереди уменьшается на 1. Операнды А и B в блоках QUEUE и DEPART могут быть именем, положительным целым числом, выражением в скобках, СЧА или СЧА*параметр.

Приведем примеры записи блока DEPART.

DEPART           RemQ

Уменьшает длину очереди RemQ на единицу. DEPART V3,(V4+3.7)

Операнды А и B заданы арифметической переменной V3 и выражением в скобках, которое также содержит арифметическую переменную V4. При входе транзакта в блок DEPART переменная и выражение в скобках вычисляются и округляются. После этого длина очереди, номер которой есть значение переменной V3, уменьшается на значение выражения в скобках (V4+3.7).

Очереди, как и ОКУ, разрешается записывать вместо операнда А номер без предварительного присвоения его имени командой EQU. Например:

QUEUE            5
…
DEPART           5

Рассмотрим использование блоков QUEUE и DEPART в модели на примере представленной блок-диаграммы. Ожидание может возникнуть ввиду занятости ОКУ с именем Rem1. Для сбора статистики об ожидании введем регистратор очереди и дадим ему имя RemQ.

Если транзакт вошел в сегмент в момент, когда ОКУ Rem1 не занято, транзакт входит в блок QUEUE. Далее транзакт пытается войти в блок SEIZE и, поскольку Rem1 свободно, эта попытка оказывается успешной. Состояние Rem1 меняется на "занято", и далее транзакт сразу попадает в блок DEPART. Выполняется соответствующая подпрограмма и транзакт попадает в блок ADVANCE, где задерживается на некоторое время, вычисленное в соответствии с распределением 21\pm 7.

Предположим теперь, что ОКУ Rem1 находится в занятом состоянии и следующий транзакт входит в сегмент модели. Он проходит в блок QUEUE и получает далее отказ, поскольку Rem1 находится в занятом состоянии. Транзакт перестает двигаться, оставаясь в блоке QUEUE.

Позднее, когда транзакт, находящийся на обслуживании в устройстве, покидает его, ожидающий транзакт опять попытается войти в блок SEIZE. На этот раз попытка окажется успешной. Двигаясь дальше, транзакт войдет в блок DEPART, уменьшая значение счетчика содержимого очереди на 1 (по умолчанию, так как операнд B не используется).

Длина очереди не может быть отрицательной. Если такое произойдет, происходит останов по ошибке "Запрещенная попытка сделать содержимое очереди отрицательным".

Останов по ошибке "Недопустимое отрицательное число в операторе GPSS. Operand B." происходит и тогда, когда при создании очереди делается попытка уменьшить ее длину.

Например:

QUEUE            Server,3
6.2.5.2. Статистические таблицы

Для получения плотности распределения, ее интегральных относительных частот, среднего значения и стандартного отклонения некоторых аргументов, которыми могут быть СЧА (например, времени нахождения транзакта в модели или задержки в ее отдельных частях, длин очередей, содержимого МКУ, коэффициентов использования устройств и т. д.), используются статистические таблицы TABLE и QTABLE.

Команда описания таблицы TABLE имеет следующий формат:

Name    TABLE A,B,C,D

Команда определяет аргумент, а также число и ширину частотных интервалов (классов). Метка Name определяет имя таблицы.

Операндом А задается аргумент таблицы - элемент данных, чье частотное распределение будет табулироваться. Операнд может быть именем, выражением в скобках или СЧА.

Операндом B задается верхний предел первого частотного интервала.

Операнд С задает ширину частотного интервала - разницу между верхней и нижней границей каждого частотного класса.

Операнды B и С могут быть числами или strinq.

Операндом D задается число частотных интервалов (положительное целое число).

Для сбора данных транзакт должен войти в блок TABULATE с тем же именем таблицы, которое определено в блоке TABLE. Блок помещается в ту точку модели, которая соответствует исследуемому объекту.

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

TABULATE       A,[B]

Операндом А задается имя таблицы, в которую табулируется значение аргумента.

Операндом B ( весовой коэффициент ) задается число единиц, которые должны быть занесены в тот частотный интервал, в который попало значение аргумента. Если операнд B отсутствует, то по умолчанию эта величина равна 1.

Операнды А и B могут быть именем, выражением в скобках, СЧА или СЧА*параметр. Кроме того, операнд А может быть только положительным целым числом, а операнд B - положительным числом. Например,

VrRem TABLE             P$ReaLvs,8.2,5.5,10
      . . .
      TABULATE       VrRem

Оператором TABLE описывается таблица с именем VrRem. Аргументом таблицы является СЧА P$ReaLvs с верхним пределом первого интервала 8.2, шириной 5.5 и числом интервалов 10. Каждое значение табулируемого аргумента P$ReaLvs, меньшее или равное 8.2, увеличивает частоту первого частотного класса таблицы на 1. Если аргумент таблицы не попадает в первый частотный класс, класс определяется делением значения аргумента на операнд С оператора TABLE. Например, значение P$ReaLvs равно 30.25. Тогда 30.25/5.5=5.5 и будет увеличена на 1 частота шестого класса. Если аргумент A таблицы больше B+C#D=8.2+5.5#10= =63.2, изменен будет на 1 последний (десятый) класс. Одновременно корректируются текущие значения СЧА таблицы: счетчик входов в таблицу ТС, среднее время ожидания ТВ и стандартное отклонение времени ожидания TD. Собранная в таблице статистика выводится в стандартный отчет.

При использовании в операнде B блока TABULATE весового коэффициента, например:

TABULATE       VrRem,3

последний будет добавляться к значению частоты частотного класса. Весовой коэффициент применяется также для среднего и стандартного отклонения, что равносильно нескольким входам в блок TABULATE.

Таким образом, команда TABLE вместе с блоком TABULATE служат для табулирования любого СЧА.

Кроме таблиц TABLE могут использоваться Q -таблицы, являющиеся средством получения распределения только времени пребывания транзакта в очереди. Формат команды описания Q -таблицы такой же, как и TABLE. Отличие состоит в том, что операндом А задается имя очереди. Назначение операндов B, С, D такое же, что и в команде описания TABLE. Операнд B может быть нулем или положительным числом. Для создания в модели такой таблицы ее нужно предварительно определить с помощью команды QTABLE формата:

Name    QTABLE          A,B,C,D

Например:

VTime   QTABLE          Dlina,18.2,4.3,6

Dlina - имя очереди к устройству, а не СЧА, как в случае использования TABLE.

При прохождении транзакта через блоки QUEUE и DEPART его время ожидания фиксируется, и к счетчику частотного интервала таблицы, в который попало это время, добавляется 1. Одновременно в таблице накапливается информация для вычисления среднего значения и среднеквадратического отклонения времени ожидания. Следует обратить внимание, что при использовании QTABLE информация в таблицу заносится автоматически при входе транзакта в блоки QUEUE и DEPART и никаких специальных мер, т. е. блока TABULATE, при этом не требуется. По окончании моделирования собранная в таблице информация также выводится в стандартном отчете GPSS.

6.2.6. Методы изменения маршрутов движения транзактов в модели

Для изменения маршрутов движения транзактов в модели применяются блоки DISPLACE, LOOP, GATE, TEST и TRANSFER. Здесь мы рассмотрим методы применения блоков TRANSFER и DISPLACE.

6.2.6.1. Блок TRANSFER

Блок TRANSFER (передать) предназначен для передачи входящего в него транзакта в любой другой блок модели. Он имеет следующий формат:

TRANSFER          [A],[B],[C],[D]

Все режимы блока TRANSFER, кроме безусловного, выборочные, т. е. отличаются друг от друга способом выбора очередного блока, к которому должен быть направлен активный транзакт. Операнд А задает этот режим выбора. Существуют следующие девять режимов работы блока TRANSFER:

  • , (по умолчанию) - безусловный;
  • - статистический, выбор случайным образом одного из двух блоков;
  • ВОТН - последовательный выбор одного из двух блоков;
  • ALL - последовательный выбор одного из нескольких блоков;
  • PICK - выбор случайным образом одного из нескольких блоков;
  • FN - функциональный;
  • P - параметрический;
  • SBR - подпрограммный;
  • SIM - одновременный.

Операнд А может принимать указанные выше значения, а также может быть именем, положительным целым числом, выражением в скобках, СЧА, СЧА*параметр.

Операнды B и С задают возможные значения номеров следующих блоков или их положение. Они могут быть такими же, как и операнд А. Использование этих значений будет описано ниже при рассмотрении указанных выше режимов работы. Если операнд B опущен, то планировщик записывает вместо него номер блока, следующего за блоком TRANSFER.

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

Режим безусловной передачи. B режиме безусловной передачи операнд А не используется. Операнд B указывает имя блока, в который транзакт должен попытаться войти. Блок TRANSFER не может отказать транзакту во входе.

Например:

TRANSFER                  ,Oper

После входа транзакт сразу же пытается войти в блок с меткой Oper. Если этот блок отказывает во входе, транзакт остается в блоке TRANSFER.

Рассмотрим еще один пример использования безусловного режима блока TRANSFER. Пусть требуется поток обслуженных транзактов перед удалением из модели разделить на четыре составляющие. Первый параметр каждого транзакта имеет одно из четырех присвоенных ранее значений: 1, 2, 3 или 4. Вначале для разделения потока используем блок TEST.

. . .
         TEST E            P1,1,Met2
Met2     TERMINATE
         TEST E            P1,2,Met3
         TERMINATE
Met3     TEST E            P1,3,Met4
         TERMINATE
Met4     TERMINATE

Теперь этот же фрагмент модели перепишем с использованием блока TRANSFER.

. . .
Met1     TRANSFER          ,(Met1+P1)
         TERMINATE
         TERMINATE
         TERMINATE
         TERMINATE

В блоке TRANSFER в качестве операнда B указано выражение в скобках. При входе активного транзакта выражение вычисляется, т. е. к номеру, который присвоен планировщиком блоку с меткой Met1, прибавляется значение первого параметра. В итоге получается номер блока, к которому и направляется транзакт.

Режим статистической передачи. Когда операнд А используется и не является зарезервированным словом, блок TRANSFER работает в режиме передачи транзакта в один из двух блоков случайным образом.

Значение операнда А, записываемого после точки, рассматривается как трехзначное число, показывающее (в долях от тысячи), какая доля входящих в блок транзактов должна быть направлена в блок С. Остальные транзакты направляются в блок B или к следующему по номеру блоку, если операнд B опущен.

Числовое значение операнда А может быть задано любым СЧА. При этом возможны следующие случаи:

  • значение операнда А меньше или равно нулю;
  • значение операнда А равно или больше 1 000 ;
  • значение операнда А больше нуля, но меньше 1 000.

Если вычисленное значение операнда А меньше или равно нулю, то будет производиться безусловная передача транзакта к блоку B. Если значение операнда А больше или равно 1 000, то будет осуществляться безусловная передача транзакта к блоку С. В третьем случае блок TRANSFER работает в обычном режиме.

Например:

TRANSFER        .P5,,Rrw

Трехзначное число, записанное в параметре 5 транзакта, входящего в блок TRANSFER, интерпретируется как вероятность (в долях от тысячи) того, что транзакт будет передаваться блоку Rrw, а в остальных случаях - следующему блоку, так как операнд B не используется.

Режим статистической передачи удобно использовать, например, в таких случаях. При моделировании работы цеха по производству деталей известно, что 12,5% изготовленных деталей бракуется. В модели это можно реализовать так:

. . .
TRANSFER        .125,Sam,Wzw
. . .

Транзакты, имитирующие изготовленные в цехе детали, в 12,5% случаев будут направлены к блоку с

меткой Wzw, а в остальных 87,5% случаях - к блоку с меткой Sam.

Можно указать генератор - источник случайных чисел. Для этого нужно выбрать Edit/Settings ( Правка/Настройки ). Затем выбрать страницу Random Numbers ( Случайные числа ) и ввести номер генератора в поле ввода, отмеченное TRANSFER. После инсталляции по умолчанию используется генератор номер 1.

Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!

Лариса Парфенова
Лариса Парфенова

1) Можно ли экстерном получить второе высшее образование "Программная инженерия" ?

2) Трудоустраиваете ли Вы выпускников?

3) Можно ли с Вашим дипломом поступить в аспирантуру?

 

Виктор Погула
Виктор Погула
Россия, Новокузнецк, СибГИУ, 2002
Анастасия Кузнецова
Анастасия Кузнецова
Россия