При каждом входе транзакта в модель интерпретатор фиксирует для него текущее значение модельного времени (время входа транзакта в модель), это значение времени также называется отметкой времени. Системный СЧА М1 (см. выше) тесно связан с отметкой времени, так как его значение определяется как разность между текущим значением таймера абсолютного времени (СЧА АС1) и отметкой времени. Таким образом, обратиться к отметке времени возможно, но опосредованно через системные СЧА М1 и АС1 (отметка времени = АС1 – М1).
Значение M1 для каждого транзакта изменяется в процессе моделирования. Сразу после входа транзакта в модель M1= 0, через 10 единиц модельного времени M1=10 и т. д.
Пример. В устройстве, номер которого хранится в параметре транзакта с именем CLR_1, продолжительность обслуживания зависит от времени, которое прошло c момента входа транзакта в модель (СЧА М1). Предполагается, что это время не может превышать 1000 ед. времени. Для построения модели по данной задаче можно использовать такие блоки:
|
|
ZATR FUNCTION M1,C2
1,4/1000,80
…
SEIZE P$CLR_1
ADVANCE FN$ZATR
RELEASE P$CLR_1
…
Транзитное время – время, затраченное на перемещение транзакта между двумя произвольными точками модели. Для того чтобы узнать это время используется блок MARK (ОТМЕТИТЬ).
Блок MARK заносит значение таймера абсолютного модельного времени в один из параметров транзакта, вошедшего в данный блок.
Блок имеет следующий формат записи:
MARK [A],
где А – номер (имя) параметра, в который записывается значение абсолютного модельного времени (целое число, СЧА). При отсутствии операнда А отметка времени заменяется текущим значением абсолютного времени.
Например, чтобы определить интервал времени, на протяжении которого транзакт проходит от точки Т1 к точке Т2, необходимо в точку Т1 поместить блок MARK j, где j – номер параметра, в который записывается значение абсолютного времени в момент записи, и в точке Т2 обратиться к СЧА c именем MPj, где j – номер параметра, в который в точке Т1 записано значение абсолютного времени в тот момент; СЧА MPj имеет значение, равное разности между значением текущего абсолютного модельного времени и значением j-го параметра активного транзакта.
Циклы
Организация циклов в программе моделирования осуществляется с помощью параметров транзактов. Для этого используется блок LOOP (ЦИКЛ), управляющий количеством повторных прохождений транзактом определенной последовательности блоков модели.
Блок LOOP имеет следующий формат записи:
LOOP A[,B],
где А – параметр транзакта, используемый для организации цикла, в нем содержится число повторений какого-либо участка модели;
В – метка (имя или номер) начального блока цикла.
|
|
Операнды А и В могут быть именем, положительным целым числом, выражением в скобках, СЧА, CЧA*параметр (косвенная адресация).
Когда транзакт входит в блок LOOP, значение параметра, указанного в операнде А, уменьшается на единицу, затем проверяется его значение на равенство нулю. Если значение не равно нулю, то транзакт переходит в блок, указанный в операнде В. Если значение параметра равно нулю, транзакт переходит в следующий блок.
Пример.[4] Организовать цикл, число повторений которого задано первым параметром транзакта.
ASSIGN 1,3
SIS SEIZE PC
…
RELEASE PC
LOOP 1,SIS
…
Итак, цикл организован по первому параметру транзакта, начальное значение которого равно 3. После освобождения устройства с именем РС значение первого параметра транзакта уменьшается на единицу и проверяется на равенство нулю. Если оно не равно нулю, то транзакт возвращается к блоку, помеченному меткой SIS, т. е. занимает устройство c именем PC. Таким образом, каждый транзакт будет занимать это устройство три раза.
Пример.[5] В систему массового обслуживания c одним устройством и очередью поступает пуассоновский поток заявок c интенсивностью 12 приходов за 1 ч. Обслуживание имеет экспоненциальное распределение, но среднее время обслуживания зависит от числа заявок, которые находятся в очереди к устройству. Эта зависимость приведена в табл. 1.9. Требуется промоделировать обслуживание 500 заявок.
Т а б л и ц а 1.9. Зависимость числа заявок от очереди к устройству
Длина очереди | 1 или 2 | 3,4 или 5 | 6 и больше | |
Среднее время обслуживания, мин | 5,5 | 5,0 | 4,5 | 4,0 |
Для удобства программирования принято составлять таблицу определений, для этого элементам GPSS дают имена и ставят в соответствие им данные задачи. Составим таблицу определений для нашего примера (табл. 1.10).
Т а б л и ц а 1.10. Таблица определений
Элементы GPSS | Интерпретация |
Транзакты | Заявки |
Устройство SURVR | Обслуживающее устройство |
Функции: MEAN XPDIS | Функция, определяющая среднее время обслуживания в зависимости от длины очереди Функция розыгрыша случайных чисел в соответствии с экспоненциальным законом с параметром λ, равным единице |
Очередь WAIT | Регистратор очереди для сбора статистики о состоянии очереди перед устройством |
Программа на языке GPSS:
MEAN FUNCTION Q$WAIT,D4
0,330/2,300/5,270/6,240
XPDIS 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.83/.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 300,FN$XPDUS
QUEUE WAIT
SEUZE SURVR
DEPART WAIT
ADVANCE FN$MEAN,FN$XPDIS
RELEASE SURVR
TERMINATE 1
START 500
Для учета длины очереди при определении интенсивности обслуживания в модель необходимо включить дискретную функцию, в которой текущая длина очереди является аргументом для определения среднего значения интенсивности обслуживания. Способы описания функций см. в п. 1.7. За единицу модельного времени здесь принята 1 c.