- •3.4. Сбор статистических данных для получения оценок характеристик случайных величин
- •3.5. Определение количества реализаций при моделировании случайных величин
- •Глава 4. Система моделирования gpss
- •4.1. Объекты
- •4.2. Часы модельного времени
- •4.3. Типы операторов
- •4.4. Внесение транзактов в модель. Блок gеnеrате
- •4.5. Удаление транзактов из модели. Блок terminate
- •4.6. Элементы, отображающие одноканальные обслуживающие устройства
- •4.7. Реализация задержки во времени. Блок аdvance
- •4.8. Сбор статистики об ожидании. Блоки queue, depart
- •4.9. Переход транзакта в блок, отличный от последующего. Блок transfer
- •4.10. Моделирование многоканальных устройств
- •4.11. Примеры построения gpss-моделей
- •4.12. Переменные
- •4.13. Определение функции в gpss
- •4.14. Стандартные числовые атрибуты, параметры транзактов. Блоки аssign, маrк, lоор
- •4.15. Изменение приоритета транзактов. Блок рriority
- •4.16. Организация обслуживания с прерыванием. Блоки рrеемрт и return
- •4.17. Сохраняемые величины
- •4.18. Проверка числовых выражений. Блок теsт
- •4.20. Косвенная адресация
- •4.21. Обработка транзактов, принадлежащих одному семейству
- •4.22. Управление процессом моделирования в системе gpss
- •4.23. Списки пользователей
- •Блоки управления потоками транзактов
4.17. Сохраняемые величины
В GPSS пользователю предоставляется возможность определить «свои» глобальные переменные, начальные значения которых могут быть заданы перед моделированием и к которым можно обратиться из любого места модели в любой момент времени. Эти переменные называют сохраняемыми величинами (ячейками). Совокупность логически связанных между собой ячеек образует матрицу (аналог массива).
В отличие от параметров транзакта, приоритета и отметки времени, которые теряются в момент выхода транзакта из модели, ячейки доступны на протяжении всего процесса моделирования. Значения сохраняемых величин не подсчитываются интерпретатором автоматически (как СЧА устройств, очередей, МКУ и т.п.), а задаются и изменяются программистом.
Сохраняемые величины могут принимать положительные и отрицательные значения. Стандартный числовой атрибут Xj
(X$<имя ячейки>) дает значение соответствующей сохраняемой величины. Например, Х2 – значение ячейки 2; Х$DАY – значение ячейки DАY.
С матрицами связан стандартный числовой атрибут MXj(т,п) – значение, записанное в строке m и в столбце п матрицы j или МХ$<имя матрицы> (т,п), если матрица имеет символьное имя.
СЧА сохраняемой величины может быть использован для косвенного задания данных, а также как аргумент функций и таблиц.
Перед использованием матрица определяется оператором описания МАТRIХ. Начальные значения ячеек и матриц можно задать с помощью оператора описания INITIAL.
1. Допускается косвенная адресация ячеек, матриц, а также их строк и столбцов. Например: Х*Р2 – значение ячейки с номером, который сохраняется в параметре 5; МХ3*Р5(5,2) – элемент (5,2) матрицы, номер которой записан в параметре 5; МХЗ(Р4,Х2) – значение, записанное в строке Р4 и в столбце Х2 матрицы 3.
2. Недопустимой является запись такого вида:
МХ1(МХ2(1,2),МХЗ(3,4)), поскольку нельзя задавать номера строк и столбцов матрицы с помощью СЧА матриц.
Оператор INITIAL (ИНИЦИАЛИЗИРОВАТЬ). Если в процессе моделирования происходит обращение к сохраняемой величине, которая не была задана, то интерпретатор выдает ошибку в процессе выполнения программы. Поэтому перед началом моделирования все сохраняемые величины должны быть инициализированы с помощью оператора INITIAL.
Формат оператора представлен в таблице.
Таблица 4.39
-
Поле
Информация в поле
Метка
Не используется
Операция
INITIAL
Операнд А
Имя сохраняемой величины
Операнд B
Начальное значение
Пример 4.38
INITIAL Х$ТIМЕR, 1000000
Ячейке ТIМЕR присваивается начальное значение 1000000;
INITIAL Х3,25
Ячейке с номером 3 присваивается начальное значение 25.
INITIAL МХ8(2,4),–53
Величина – 53 записывается в строку 2, столбец 4 матрицы 8.
INITIAL МХ$СOSТ(1,3),22
Величина 22 записывается в строку 1, столбец 3 матрицы COST.
Блок SАVЕVАLUE (СОХРАНИТЬ ВЕЛИЧИНУ). Значение сохраняемой величины изменяется при входе транзакта в блок SАVЕVАLUE (СОХРАНИТЬ ВЕЛИЧИНУ). Его формат:
SАVЕVАLUE А[+,–],В
Таблица 4.40
|
Операнд |
Значение |
Результат по умолчанию |
|
А |
Номер или символьное имя сохраняемой величины |
Ошибка |
|
В |
Величина, используемая для модификации (число или СЧА) |
Ошибка |
Подобно блоку АSSIGN блок SАVЕVАLUE может быть пользован как в режиме замещения величины, так и в режиме увеличения или уменьшения. В режиме увеличения предыдущее значение сохраняемой величины увеличивается на значение, заданное операндом В, а в режиме уменьшения – уменьшается на это значение. Режимы увеличения и уменьшения определяются введением соответственно знака «плюс» или «минус» перед запятой, разделяющей операнды А и В.
Пример 4.39
SАVЕVАLUE Р5,V$АLРНА
При входе транзакта в блок SАVЕVАLUE прежде всего вычисляется величина переменной АLРНА. Полученный результат присваивается сохраняемой величине, номер которой записан в параметре Р5.
SАVЕVАLUE 5+,Х2
При входе транзакта в блок величина Х5 увеличивается на значение величины Х2.
SAVEVALUE РRОFIТ–FN$СOSТS
При входе транзакта в блок величина Х$РRОFIТ уменьшается на значение функции FN$СOSТS.
Оператор описания матрицы МАТRIХ. Каждая матрица должна быть объявлена до ее использования, т.е. должна иметь оператор описания. Формат оператора представлен в таблице.
Таблица 4.41
-
Поле
Информация в поле
Метка
Имя матрицы
Операция
МАТRIX
Операнд А
Не используется (оставлен для совместимости с более старыми версиями GPSS)
Операнд В
Число строк матрицы (целое положительное)
Операнд С
Число столбцов матрицы (целое положительное)
Матрица в GPSS/РС может содержать не более чем 8191 элемент. Она может быть переопределена или инициализирована повторно другим оператором МАТRIХ с тем же именем. Переопределение, при котором размер матрицы изменяется, повлечет за собой выделение памяти под новую матрицу. Выделенная до этого оперативная память остается занятой.
Блок MSAVEVALUE. Блок MSAVEVALUE используется для записи значений в матрицы, а также для увеличения или уменьшения значений элементов матриц. Его формат:
MSAVEVALUE А[+,–],В,С,D
Таблица 4.42
-
Операнд
Значение
Результат по умолчанию
А
Имя матрицы
Ошибка
В
Номер строки матрицы
Ошибка
С
Номер столбца матрицы
Ошибка
D
Величина, используемая для модификации
Ошибка
Операнды А, В и С могут быть именем, положительным целым, СЧА или СЧА*СЧА. Операнд D может быть именем, СЧА или СЧА*СЧА.
Подобно блокам АSSIGN и SАVЕVАLUE этот блок может быть использован как в режиме замещения величины, так и в режиме увеличения или уменьшения.
Когда транзакт входит в блок МSАVЕVАLUE, то анализируется операнд А и ищется матрица с указанным именем. Если матрица не найдена, то возникает ошибка. Соответствующий элемент матрицы определяется содержимым операндов В и С. Если такого элемента не существует, то также возникает ошибка.
