В GPSS можно определить глобальные переменные, начальные значения которых могут быть заданы перед моделированием и к которым можно обратиться из любого места модели в любой момент времени. Эти переменные называют сохраняемыми величинами (ячейками).Совокупность логически связанных между собой ячеек образует матрицу (аналог массива). [4] Значения сохраняемых величин изменяются только при прямом указании пользователя.
Сохраняемые величины могут принимать положительные и отрицательные значения. Стандартный числовой атрибут Xj (Х$<имя ячейки>) дает значение соответствующей сохраняемой величины. Например, X2 – значение ячейки с номером 2; X$DAY – значение ячейки с именем DAY.
C матрицами связан стандартный числовой атрибут MXj (m, n) – значение, записанное в строке т и в столбце n матрицы j или МХ$<имя матрицы> (m,n), если матрица имеет символьное имя.
СЧА сохраняемой величины может быть использован для косвенного задания данных, а также как аргумент функций и таблиц.
Перед использованием матрица определяется оператором описания MATRIX. Начальные значения ячеек и матриц можно задать c помощью оператора описания INITIAL. Допускается косвенная адресация ячеек, матриц, а также их строк и столбцов.
|
|
Оператор INITIAL (ИНИЦИАЛИЗИРОВАТЬ). Сохраняемые величины должны быть инициализированы перед началом моделирования c помощью оператора INITIAL, так как если в процессе моделирования происходит обращение к сохраняемой величине, которая не была задана, интерпретатор выдает ошибку. Формат оператора:
INITIAL А[,В],
где А – имя сохраняемой величины;
В – начальное значение (по умолчанию – 1).
Примеры записи оператора INITIAL.
1. INITIAL X33,351.37 – ячейке c номером 33 присваивается начальное значение 351.37.
2. NITIAL X$DEF,Q$POD – ячейке с именем DEF присваивается начальное значение, равное текущей длине очереди с именем POD.
3. INITIAL MX8(2,4),-53 – значение -53 записывается в строку 2, столбец 4 матрицы 8.
4. INITIAL MX$COST(l,3),22 – значение 22 записывается в строку 1, столбец 3 матрицы COST.
Блок SAVEVALUE (СОХРАНИТЬ ВЕЛИЧИНУ). Значение сохраняемой величины изменяется при входе транзакта в блок SAVEVALUE. Его формат:
SAVEVALUE A[+,-],B,
где А – номер или символьное имя сохраняемой величины;
В – величина, используемая для модификации (число или СЧА).
Блок SAVEVALUE может быть использован как в режиме замещения величины, так и в режиме увеличения или уменьшения. В первом случае когда транзакт входит в блок SAVEVALUE, величина, стоящая в операнде В, становится значением сохраняемой ячейки, номер (или символическое имя) которой записан в операнде А. В режиме увеличения (уменьшения) предыдущее значение сохраняемой величины увеличивается (уменьшается) на значение, заданное операндом В (знак «+»).
|
|
Примеры записи блока SAVEVALUE.
1. SAVEVALUE P5,V$ALF – при входе транзакта в блок SAVEVALUE прежде всего вычисляется величина переменной ALF. Полученный результат присваивается сохраняемой величине, номер которой записан в параметpe P5 активного в текущий момент транзакта.
2. SAVEVALUE 5+,X2 – при входе транзакта в блок значение сохраняемой величины номер 5 увеличивается на значение сохраняемой величины с номером 2;
3. SAVEVALUE PROFIT-,FN$COSTS – при входе транзакта в блок величина с именем PROFIT уменьшается на вычисленное значение функции с именем COSTS.
4. SAVEVALUE GR1,–155 – при входе транзакта в блок значение сохраняемой величины с именем GR1 замещается числом –155.
5. SAVEVALUE 3,(25.75#X$NUM1+Q4) – при входе транзакта в блок вычисляется значение выражения в скобках и присваивается ячейке номер 3.
Каждая матрица должна быть объявлена до ее использования, т. е. должна иметь оператор описания. Формат оператора:
имя матрицы MATRIX А,В,С,[D],[E],[F],[G],
где А – не используется (оставлен для совместимости с более старыми версиями GPSS);
В – число строк матрицы (целое положительное);
С – число столбцов матрицы (целое положительное).
Операнды D, E, F, G задают максимальное количество элементов в третьем, четвертом, пятом и шестом измерениях соответственно.
Блок MSAVEVALUE используется для записи значений в матрицы, а также для увеличения или уменьшения значений элементов матриц. Его формат:
MSAVEVALUE A[+,-],В,C,D,
где А – имя матрицы;
В – номер строки матрицы;
С – номер столбца матрицы;
D – величина, используемая для модификации.
Все операнды являются обязательными. Операнды А, В и C могут быть именем, положительным целым числом, выражением в скобках, СЧА или СЧА*параметр. Аналогично блокам ASSIGN и SAVEVALUE блок может быть использован как в режиме замещения величины, так и в режиме увеличения или уменьшения.
Когда транзакт входит в блок MSAVEVALUE, то анализируется операнд А и ищется матрица c указанным именем. Соответствующий элемент матрицы определяется содержимым операндов В и C.