logo
Обработка данных / Томашевский_Имитационное моделирование в среде GPSS_2003

4.17. Сохраняемые величины

В GPSSпользователю предоставляется возможность определить «свои» глобальные переменные, начальные значения которых могут быть заданы перед моделированием и к которым можно обратиться из любого места модели в любой момент времени. Эти переменные называютсохраняемыми величинами (ячейками). Совокупность ло­гически связанных между собой ячеек образуетматрицу (аналог массива).

В отличие от параметров транзакта, приоритета и отметки вре­мени, которые теряются в момент выхода транзакта из модели, ячей­ки доступны на протяжении всего процесса моделирования. Значения сохраняемых величин не подсчитываются интерпретатором автома­тически (как СЧА устройств, очередей, МКУ и т.п.), А задаются и из­меняются программистом.

Сохраняемые величины могут принимать положительные и от­рицательные значения. Стандартный числовой атрибут Xj (Х$<имя ячейки>) дает значение соответствующей сохраняемой ве­личины. Например,X2– значение ячейки 2;X$DAYзначение ячейкиDAY.

Cматрицами связан стандартный числовой атрибутMXj(m, n) – значение, записанное в строкет и в столбцеn матрицыj илиМХ$<имя матрицы> (m,n), если матрица имеет символьное имя.

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

Перед использованием матрица определяется оператором опи­сания MATRIX. Начальные значения ячеек и матриц можно задатьcпомощью оператора описанияINITIAL.

1. Допускается косвенная адресация ячеек, матриц, А также их строк и столбцов. Например:X*P2– значение ячейкиcномером, который сохраняется в параметре 2;MX*P5(5,2)– элемент (5,2) матрицы, номер которой записан в параметре 5;MX3(P4,X2)– значение, записанное в строкеP4 и в столбцеX2 мат­рицы 3.

2. Недопустимой является запись такого вида: MXl(MX2(l,2),MX3(3,4)), поскольку нельзя задавать номера строк и столбцов матрицыcпомощью СЧА матриц.

Оператор INITIAL (ИНИЦИАЛИЗИРОВАТЬ). Если в про­цессе моделирования происходит обращение к сохраняемой величи­не, которая не была задана, то интерпретатор выдает ошибку в процессе выполнения программы. Поэтому перед началом моделирова­ния все сохраняемые величины должны быть инициализированыcпомощью оператораINITIAL.

Формат оператора представлен в таблице.

Ta6лицa 4.39

Поле

Информация в поле

Метка

Не используется

Операция

INITIAL

Операнд А

Имя сохраняемой вели­чины

Операнд В

Начальное значение

Пример 4.38

INITIAL X$TIMER,1000000

Ячейке TIMER присваивается начальное значение 1000000;

INITIAL X3,2S

Ячейке cномером 3 присваивается начальное значение 25.

INITIAL MX8(2,4),-53

Величина – 53 записывается в строку 2, столбец 4 матрицы 8.

INITIAL MX$COST(l,3),22

Величина 22 записывается в строку 1, столбец 3 матрицы COST.

Блок SAVEVALUE (СОХРАНИТЬ ВЕЛИЧИНУ). Значение сохраняемой величины изменяется при входе транзакта в блок,SAVEVALUE (СОХРАНИТЬ ВЕЛИЧИНУ).

Его формат:

SAVEVALUE A[+,-],B

Таблица 4.40

Операнд

Значение

Результат по умолча­нию

А

Номер или символьное имя сохраняемой величины

Ошибка

В

Величина, используемая для модификации (число или СЧА)

Ошибка

Подобно блоку ASSIGN блокSAVEVALUE может быть ис­пользован как в режиме замещения величины, так и в режиме увели­чения или уменьшения. В режиме увеличения предыдущее значение сохраняемой величины увеличивается на значение, заданное операн­домВ, А в режиме уменьшения – уменьшается на это значение. Ре­жимы увеличения и уменьшения определяются введением соответственно знака «плюс» или «минус» перед запятой, разделяющей опе­ранды А иВ.

Пример 4.39

SAVEVALUE P5,VSALPHA

При входе транзакта в блок SAVEVALUE прежде всего вычис­ляется величина переменнойALPHA. Полученный результат при­сваивается сохраняемой величине, номер которой записан в параметpeP5.

SAVEVALUE 5+,X2

При входе транзакта в блок величина X5увеличивается на зна­чение величиныX2.

SAVEVALUE PROFIT-,FN$COSTS

При входе транзакта в блок величина X$PROFIT уменьшается на значение функцииFN$COSTS.

Оператор описания матрицы MATRIX. Каждая матрица должна быть объявлена до ее использования, т.е. должна иметь опе­ратор описания. Формат оператора представлен в таблице.

Таблица 4.41

Поле

Информация в поле

Метка

Имя матрицы

Операция

MATRIX

Операнд А

Не используется (оставлен для совместимости с более старыми версиями GPSS)

Операнд В

Число строк матрицы (целое положительное)

Операнд С

Число столбцов матрицы (целое положительное)

Матрица в GPSS/PCможет содержать не более чем 8191 эле­мент. Она может быть переопределена или инициализирована по­вторно другим операторомMATRIX cтем же именем. Переопреде­ление, при котором размер матрицы изменяется, повлечет за собой выделение памяти под новую матрицу. Выделенная до этого опера­тивная память остается занятой.

Блок MSAVEVALUE. Блок MSAVEVALUE используется для записи значений в матрицы, А также для увеличения или уменьшения значений элементов матриц. Его формат:

MSAVEVALUE A[+,-|3,C,D

Таблица 4.42

Операнд

Значение

Результат по умолча­нию

А

Имя матрицы

Ошибка

В

Номер строки матрицы

Ошибка

С

Номер столбца матрицы

Ошибка

D

Величина, используемая для модификации

Ошибка

Операнды А,ВиCмогут быть именем, положительным целым, СЧА илиCЧA*CЧA. ОперандDможет быть именем, СЧА или: CЧA*CЧA.

Подобно блокам ASSIGN и SAVEVALUEэтот блок может быть использован как в режиме замещения величины, так и в режиме увеличения или уменьшения.

Когда транзакт входит в блок MSAVEVALUE, то анализируется операнд А и ищется матрицаcуказанным именем. Если матрица ненайдена, то возникает ошибка. Соответствующий элемент матрицы определяется содержимым операндовВиC. Если такого элемента не существует, то также возникает ошибка.