А. Амперпеременные. Введение амперпеременных - АМП (от названия амперсанд - &) расширило вычислительные возможности языка и его связь с внешним миром. Имеется пять типов АМП:
- целочисленные и вещественные АМП схожи с такими же переменными в фортраноподобных языках и представляют собой целочисленные (вещественные) скалярные значения или одномерные матрицы (массивы),
- СНАR*n - символьная АМП с фиксированной длиной n.
Например, СНАR*5 - &5STRING, определяется как символьная АМП с фиксированной длиной 5 символов, а &Х(10) как символьный АМП - массив размером 10 элементов, каждый из которых имеет 5 символов,
- VCHAR*n- символьная АМП с максимальной длиной n.
- внешние АМП, обеспечивающие связь с подпрограммами, написанными на языках, совместимых с ФОРТРАН, например
EXTERNAL &WEIBULL
АМП начинается с & и непосредственно следующего за ним символьного имени, начинающегося с буквы длиной от 1 до 8 символов, первый символ может совпадать с именем объекта (табл. 4.4), & указывает на возможность изменения величины, перед которой он стоит в процессе моделирования. Все АМП должны быть определены до их первого применения.
|
|
Б. Арифметические выражения. Арифметическая переменная включает в себя различные СЧА, СЛА, АМП, другие переменные и знаки операций арифметических операций «+, -, *, /, @ (деление по модулю)». Оператор описания помещается в первом модуле программы и имеет формат:
< n VARIABLE A > для фиксированной точки и < n FVARIABLE A > для плавающей точки, где:
n - номер переменной, A - арифметическое выражение, например
2 FVARIABLE 10 (11/3) = 36, 2 VARIABLE 10(11/3) = 30
В. Булевские переменные используются для проверки логических условий при проведении операций трёх видов: логических, условных и булевских (см. табл. П.6). Формат имеет вид < n BVARIABLE ХХХ< имя >>, где XXX - символ логической операции, например 3 BVARIABLE SF2 - ВVЗ равняется единице, если память 2 заполнена.
Г. Функции. Пример записи функций дан выше, необходимо только понимать, что язык позволяет в качестве аргумента функции использовать различные аналитические выражения, поэтому операнд В, кроме непрерывной и дискретной функции (С, D) содержит также индексы L - список (list) числовых величин, Е- дискретные аттрибуты, М - список аттрибутов. Вводится также обозначение S - селектор объектов. При использовании S используется третий операнд С, в котором содержится либо имя объекта (табл. 5.4), либо формат записи транзакта, либо с индексом Z используемая функция. Рассмотрим кратко эти отличия. Вычисление значений L - типа производится следующим образом: аргумент функции оценивается и преобразуется в целое число, используемое как индекс, значения Х при этом заменяются на этот индекс, например:
|
|
FUNCLE FUNCTION PH1,L3
1,20/2,200/3,2000
При вычислениях Е - типа каждое значение функции определяется в записи функции как инструкция и отличается от записи дискретной функции тем, что значение Y может быть выражением, например
RANDE FUNCTION RN5,E3
0.4,XH (SAM) / 0.7,XL3 /1.0, (PH1+5)
При вычислениях М - типа каждое значение Y даётся как член выражения или в скобках всё выражение, например:
FUNCM FUNCTION PF1,M2
1,(X(LOW)+1) /2,X(HIGH)
При вычислениях S - типа каждое значение Y воспринимается как символ, каждый из символов представляет собой объект одной или разных категорий, которые записываются в операндах и являются основанием для компиляции, например:
FUNCS FUNCTION RN6,S2,F,Q
0.25,DISK1/1.0,DISK2
символы в записи функции являются основанием для компиляции
Д Генерация псевдо-случайных чисел. Эта проблема достаточно подробно рассмотрена в главе 3, поэтому рассмотрим только специфику GPSS/H. В языке используются 8 независимых генераторов, выдающих некоррелированные 32-х разрядные последовательности. По умолчанию начальное количество чисел таково, чтобы в 20 последовательных выборках не наступало повторений. С помощью оператора управления RMULT или блока BRMULT можно изменять количество чисел в последовательности до 106 и более и установить начальную точку потока чисел. Качество случайных чисел контролируется в итоговом отчёте с использованием хи-квадрат распределения
Е. Встроенные функции. Значительным достижением языка является
появление встроенных математических выражений и функций, что позволяет проводить сложные аналитические расчеты, чего не допускали предыдущие версии. Встроенные блоки являются СЧА и могут быть содержанием операнда.
Е1. Математические выражения: геометрические, логарифмические функции, извлечение корня и получение абсолютного значения. В случае извлечения квадратного корня и получения значения логарифма к Х предъявляются следующие требования: Х не может быть отрицательным и должен быть машинно-определимым. Формат записи:
SQRT, LOG, SIN и т.д. (см П.7)
SQRT- операция извлечения квадратного корня, х- аргумент.
Е2. Дискретные и непрерывные функции. Перечень части встроенных функций приведен в П.7. Отметим, что язык имеет 26 встроенных функций, включающих в себя большинство известных законов распределения. В качестве примера рассмотрим формат записи нормального и экспоненциального распределений <RVNORM (rnj, m[х], σ)>, <RVEXPO(RNj, λ)> где:
RNj- номер генератора БСВ, М[х] - математическое ожидание, σ - СКО,
λ - параметр потока событий. Рассмотрим примеры записи встроенных функций:
GENERATE RVEXPO(1,100.0)
SAMPL SAVEVALUE STIME,RVNORM(2,10.0,2.0),XL