Краткое руководство по моделированию на языке GPSS (1049434), страница 4
Текст из файла (страница 4)
2. SAVEVALUE WES+,2
Значение сохраняемой величины X$WES увеличивается на 2.
Оператор MATRIX
Матрица сохраняемых величин – это совокупность параметров, предназначенная для сохранения скалярных значений, организованная в виде двумерной матрицы. Адресация такой величины имеет вид МХ ( I, J ), где МХ – стандартное имя матрицы; I,J – номера или имена элемента матрицы МХ.
Оператор определяет матрицу сохраняемых величин. Имеет декларирующий характер и располагается выше описаний треков.
Синтаксис. <имя матрицы> MATRIX A,B,C
имя матрицы – числовое или символическое имя, обязательный параметр. Расположен в поле метки.
А - неиспользуемое поле (для совместимости с ранними версиями GPSS).
В - максимальное количество элементов в первом измерении. (количество строк матрицы). Допустимое значение – целое число. Обязательный операнд
С - максимальное количество элементов во втором измерении (количество столбцов матрицы). Допустимое значение – целое число. Обязательный операнд.
Пример.
REZULT MATRIX ,15, 3
Оператор определяет матрицу с именем REZULT с 15 строками и 3 столбцами.
Блок MSAVEVALUE
Назначение. Блок присваивает, увеличивает или уменьшает значение элемента матрицы сохраняемых величин.
Синтаксис. MSAVEVALUE A[±],B,C,D
Операнд | Назначение | Значение | Значение |
A | Имя изменяемой матрицы сохраняемых величин | Имя / число / СЧА | Обязательный операнд |
B | Номер строки матрицы | Имя / число / СЧА | Обязательный операнд |
C | Номер столбца матрицы | Имя / число / СЧА | Обязательный операнд |
D | Значение, которое присвоено, прибавлено или вычтено из элемента матрицы | Имя / число / СЧА | Обязательный операнд |
Особенности выполнения.
-
Матрица должна быть предварительно определена с помощью оператора определения данных MATRIX.
-
Если операнд А сопровождается знаком «+», то к значению элемента матрицы, определенного операндами А, B и C, прибавляется значение, определенное операндом D.
-
Если операнд А сопровождается знаком «-»,то из значения элемента матрицы, определенного операндами А, B и C, вычитается значение, определенное операндом D.
-
Если за операндом А нет знака, то значение элемента матрицы, определенного операндами А, B и C, заменяется значением, определенным операндом D.
Пример.
MSAVEVALUE DATA,4,5,P7
Элементу матрицы DATA с номером строки 4 и номером столбца 5 присваивается значение седьмого параметра активного транзакта.
Обращение к этому элементу в арифметических и других выражениях имеет вид MX(4, 5)
Оператор VARIABLE
VARIABLE является оператором-функцией, определяющим арифметическую целую переменную, имеющую имя V I, где V – стандартное обозначение переменной типа оператор-функция, I – номер или имя функции VARIABLE.
Синтаксис: <имя переменной> VARIABLE <арифметическое выражение>
Имя переменной - символическое или числовое имя переменной, ставится в поле меток.
Арифметическое выражение определяет значение данной переменной.
Примеры.
1. 5 VARIABLE 46+P6
Арифметическая переменная с числовым именем 5 равна сумме числа 46 и значения параметра 6 активного транзакта.
Обращение к этой переменной имеет вид V5.
2. SUM VARIABLE (P3 + Р4)/5
Арифметическая переменная с символическим именем SUM равна сумме значений 3-го и 4-го параметров активного транзакта, деленной на 5.
Обращение к этой переменной имеет вид V$SUM.
Арифметическая переменная может использоваться как:
-
элемент другой арифметической переменной, булевой переменной;
-
аргумент функции, таблицы;
-
операнд блока
Оператор FVARIABLE
FVARIABLE является оператором-функцией, определяющим арифметическую переменную с фиксированной точкой, имеющую имя FV I, где FV – стандартное обозначение, I – номер или имя функции FVARIABLE.
Синтаксис. <имя переменной> FVARIABLE <арифметическое выражение>
Имя переменной - символическое или числовое имя переменной, ставится в поле меток.
Арифметическое выражение определяет значение переменной.
Пример.
PBR FVARIABLE (Sl-S$CAN)/5+3.6
Ссылка на арифметическую переменную с фиксированной точкой выполняется так же, как и на арифметическую переменную.
Оператор BVARIABLE
Оператор определяет булеву переменную.
Синтаксис. <имя переменной> BVARIABLE <булево выражение>
Выражения в операторе BVARIABLE кроме логических операторов могут включать операции отношений и вызовы библиотечных процедур.
Пример.
FLAG BVARIABLE BV$CAN1’AND’BV$CAN2
Значение переменной FLAG равно 1, если булевы переменные CAN1 и CAN2 имеют значение TRUE, и равно 0 в других случаях.
Оператор FUNCTION (упрощенная транскрипция)
Оператор определяет функцию GPSS, заданную таблично.
Синтаксис. <имя функции> FUNCTION А,ВN
имя функции – числовое или символическое имя, обязательный параметр.
А - аргумент функции; обязательный операнд. Допустимые значения – имя, число, СЧА.
В - тип функции (одна буква) и N - количество пар данных в списке данных функции. Обязательный операнд.
Обращение к функции выглядит, как FN I, где I – имя функции.
Существует несколько типов функций. Тип определяется операндом В оператора FUNCTION.
За строкой FUNCTION А,ВN сразу же должна следовать строка, содержащая список пар данных, разделенных символом «/». Каждая пара данных определяет значения аргумента X и значения функции Y, разделенные запятой. Список данных используются для вычисления значения функции по заданным значениям аргумента.
В данной транскрипции оператора представимо 2 типа функций. Полное изложение вариантов задания функции приведено в приложении.
-
Функции типа С – непрерывные числовые функции.
В списке данных функций типа С значения X и Y должны быть целочисленными (Integer) или вещественными (Real). Значения X и Y хранятся, как числа с плавающей точкой двойной точности.
Вычисление функции начинается с вычисления аргумента. Далее определяется интервал (Xi;Xi+1), на котором находится вычисленное значение аргумента и на этом интервале выполняется линейная интерполяция двойной точности с использованием соответствующих значений Yi и Yi+1. Результатом является значение функции двойной точности. Если аргумент попадает за предельные значения области определения функции, возвращается значение функции в ближайшей предельной точке.
Примеры.
1) ART FUNCTION X1,C3
1.1,10.1/20.5,98.7/33.3,889.2
Оператор определяет кусочно-линейную функцию с двумя линейными участками. Если мы обращаемся к функции FN$ART, то по значению сохраняемой величины Х1 вычисляется функция в соответствии с заданной совокупностью точек.
Пример приближенного представления обратного экспоненциального распределения со средним, равным 1.
2) Xpdis FUNCTION RN1,С24
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
-
Функции типа D - дискретные функции.
В списках данных функций типа D значения X должны быть целочисленными или вещественными, а значения Y – целочисленными, вещественными или именами.
Функция типа D задает одно и то же значение функции Yi для всех значений аргумента Xi-1< X ≤Xi. Значения X в списке данных функции должны быть неубывающими. Внутренне они сохраняются, как числа двойной точности. Когда вычисляется функция, значения X в списке данных функции просматриваются от наименьшего к наибольшему. Когда найдено значение X, которое больше или равно текущему значению аргумента, возвращается соответствующее ему значение Y. Если такое значение X отсутствует, возвращается значение Y или именованная величина, соответствующая самому большому значению X.
Примеры.
1) LIR FUNCTION X$A2,D5
1.1,6.9/2.1,7/6.33,9.4/7,10/9.9,12.01
2) RAF FUNCTION RN1,D5
0,0/.2,7.2/.4,6.667/.8,9.92/1.0,10
Оператор INITIAL
Оператор INITIAL задает начальное значение сохраняемым величинам, элементам матрицы, логическим ключам.
Синтаксис. INITIAL А,В
А - логический ключ, сохраняемая величина, элемент матрицы, определенные как СЧА. Операнд А должен иметь форму СЧА классов LS, X, MX или имени матрицы. В операнде А нельзя использовать параметры транзакта.
В - присваиваемое значение
Если операнд А указывает на логический ключ, присваиваются только значения 0 или 1. Если операнд В явно задан как 0, то присваивается значение 0. В противном случае присваивается 1. Если операнд А задает имя матрицы, всем ее элементам присваивается значение, указанное операндом В. По умолчанию это 1. Для задания элемента двумерной матрицы может использоваться СЧА класса MX.
Примеры
INITIAL Х21,17
INITIAL L$KLU,1
Блоки управления движением транзактов
Блок TRANSFER (упрощенная транскрипция)
Назначение. Блок передает транзакт на указанный блок.
Синтаксис. TRANSFER [A],B
Операнд | Назначение | Значение | Значение по умолчанию |
A | Вероятность Р продолжения движения транзакта по треку | Число / СЧА | Режим безусловной передачи |
B | Номер или метка блока, куда переходит транзакт с вероятностью (1-Р) | Имя / число / СЧА | Нет |
Особенности выполнения.
-
Режим статистической передачи
В этом режиме активный транзакт переходит к блоку, заданному в операнде В, с вероятностью, обратной заданной в операнде А. Операнд А может быть положительной дробью, меньшей единицы или целым положительным числом. Если операнд А - целое число, оно интерпретируется как доля от тысячи. С вероятностью, заданной в операнде А, транзакт продолжает движение по треку.
Пример
TRANSFER 0.3,LAB1
Транзакт с вероятностью 0.3 продолжает движение дальше по треку, с вероятностью 0.7 – поступает на блок, помеченный меткой LAB1.
-
Режим безусловной передачи
Когда операнд А отсутствует, блок TRANSFER функционирует в режиме безусловной передачи. В этом режиме активный транзакт всегда переходит к блоку, заданному в операнде В.
Пример
TRANSFER ,NO_SERV
При входе транзакта в блок TRANSFER, он передается в блок с меткой NO_SERV.
Полное изложение синтаксиса блока помещено в приложении.
Блок TEST
Назначение. Блок выполняет навигацию транзакта в зависимости от результата операции отношения, заданной в этом же блоке.
Синтаксис. TEST X A,B[,C]
Операнд | Назначение | Значение | Значение по умолчанию |
X | Операция отношения (см.выше) | Условная операция отношения | Обязательный операнд |
A | Левая часть отношения | Имя / число / СЧА | Обязательный операнд |
B | Правая часть отношения | Имя / число / СЧА | Обязательный операнд |
C | Метка или номер блока, в который будет передан транзакт | Имя / число / СЧА | Режим отказа |
Особенности выполнения.
Блок TEST функционирует в двух режимах:
-
Если операнд С не используется, блок TEST функционирует в режиме отказа. Когда транзакт пытается войти в блок TEST, работающий в режиме отказа, и заданное условие не выполняется, транзакт блокируется, и ему не позволяется войти в блок TEST, проверка повторяется до тех пор, пока условие не будет выполнено. После выполнения заданного условия активный переходит к следующему по порядку блоку.
-
Если операнд С используется, блок TEST функционирует в режиме передачи транзакта. Когда транзакт пытается войти в такой блок TEST и проверяемое условие не выполняется, транзакт переходит к блоку, указанному в операнде С. Если проверяемое условие выполняется, активный транзакт входит в блок TEST и затем переходит к следующему по порядку блоку.
Примеры.