уже не может быть выполнено симулятором автоматически, как в случае
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
Блоки, изменяющие маршруты транзактов
В приведенных выше примерах транзакты, выходящие из любого
блока, всегда поступали в следующий блок. В более сложных моделях
возникает необходимость направления транзактов к другим блокам в
зависимости от некоторых условий. Эту возможность обеспечивают бло-
ки изменения маршрутов транзактов.
Блок 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.