Краткая характеристика языка PLUS




Язык GPSS можно отнести к языкам высокого уровня. В силу этого он имеет довольно слабые алгоритмические возможности. Для устранения этого недостатка в систему GPSS World добавлен PLUS – язык низкого уровня. Выражения, процедуры и эксперименты PLUS можно использовать в GPSS-моделях.

Рассмотрим основные элементы языка PLUS.

Алфавит языка PLUS (GPSS World) содержит алфавитно-цифровые и специальные символы. Для задания имен используются алфавитно-цифровые символы (прописные буквы A-Z, строчные буквы a-z, цифры 0-9 и знак подчеркивания «_»). Для обозначения операторов и пунктуации используются специальные символы («#», «*», «&», «+», «-», «/», «\», «,», «;»). В комментариях допускается использование символов русского алфавита «А-Я ».

Имена – это созданные пользователем последовательности символов, используемые для обозначения объектов, переменных и процедур. Имя должно начинаться c буквы, в нем можно использовать от 1 до 250 алфавитно-цифровых символов. При этом имена не должны совпадать c ключевыми словами GPSS и c СЧА. Следует отметить, что GPSS World не различает регистр алфавита.

PLUS-выражение – это комбинация одного или нескольких элементов, называемых факторами. Выражения строятся c использованием операторов и вызовов процедур, обрабатывающих факторы. Выражения могут использоваться в PLUS-процедурах и в операндах операторов GPSS. Если выражение используется в операндах GPSS-блоков, то оно должно записываться в круглых скобках.

Типы данных. Переменные пользователя, элементы матриц, ячейки, параметры транзактов могут иметь значения различных типов данных. В GPSS World используются три основных типа данных:

­ целочисленный (Integer) – это 32-х битовые двоичные числа. Если при выполнении арифметической операции происходит переполнение целочисленного значения, производится автоматическое преобразование его в вещественное значение;


­ вещественный (Real) – это числа c плавающей точкой двойной точности. Для представления мантиссы используется 15 десятичных разрядов, А для порядка – значения в интервале от – 306 до 306;

­ строковый (String) – это последовательность символов ASCII; строки не ограничены в размерах (максимальная их длина определяется параметрами настройки Edit/Setting.../Simulation).

Выражения могут быть вычисляемыми, численно вычисляемыми, вычисляемыми в виде строки.

Факторы – это основные элементы выражений, которые в свою очередь используются в операндах операторов GPSS и PLUS-процедурах.

Факторами выражений GPSS могут быть:

­ строковые константы;

­ вещественные константы;

­ целочисленные константы;

­ имена;

­ элементы PLUS-матрицы;

­ обращения к процедурам (значения, возвращаемые процедурами);

­ стандартные числовые атрибуты.

Для объединения факторов в выражение используются операторы и вызовы процедур.

Операторы. В таблице 7 представлены арифметические операторы, используемые в выражениях GPSS World, перечисленные в порядке убывания их приоритетов.

 

Таблица 7 – Арифметические операторы языка PLUS

Оператор Действие Результат Унарный/бинарный (количество операндов)
Отрицание Аддитивная инверсия Унарный
^ Возведение в степень Арифметический показатель степени Бинарный
NOTили Инверсия 1 (TRUE) или 0 (FALSE) Унарный
AND Логическое И 1 (TRUE) или 0 (FALSE) Бинарный
OR Логическое ИЛИ 1 (TRUE) или 0 (FALSE) Бинарный
Gили > Больше 1 (TRUE) или 0 (FALSE) Бинарный
Lили < Меньше 1 (TRUE) или 0 (FALSE) Бинарный
Еили = Равно 1 (TRUE) или 0 (FALSE) Бинарный
NEили /= Не равно 1 (TRUE) или 0 (FALSE) Бинарный
LEили <= Меньше или равно 1 (TRUE) или 0 (FALSE) Бинарный
GEили => Больше или равно 1 (TRUE) или 0 (FALSE) Бинарный
# или * Умножение Арифметическое произведение Бинарный
/ Деление Арифметическое частное Бинарный
\ Целочисленное деление Целочисленное частное Бинарный
@ Деление по модулю Целочисленный остаток Бинарный
+ Сложение Арифметическая сумма Бинарный
Вычитание Арифметическая разность Бинарный

 

 

Все арифметические операторы автоматически преобразуют строковые операнды в числовые значения.

 

К операторам языка PLUS также относятся:

­ PROCEDURE – определяет PLUS-процедуру;

­ EXPERIMENT – определяет PLUS-эксперимент;

­ TEMPORARY – определяет и ограничивает область действия локальных переменных пользователя и локальных матриц (существующих только во время вызова конкретной процедуры);

­ BEGIN/END составной оператор, создает блок PLUS-операторов;

­ присваивание – предназначен для изменения значений переменных;

­ вызов процедуры – вызывает библиотечную процедуру;

­ помеченный оператор – класс операторов, начинающихся c метки;

­ IF/THEN – условный оператор, проверяет выражение и, если результат равен «TRUE» (истина), выполняет действие;

­ IF/THEN/ELSE – условный оператор проверяет выражение и в зависимости от результата производит то или иное действие;

­ WHILE/DO – оператор цикла, несколько раз выполняет действие;

­ GOTO – оператор безусловного перехода, передает управление к метке внутри процедуры;

­ RETURN – останавливает выполнение процедуры и возвращает результат ее выполнения (после чего память, используемая процедурой, освобождается).

 

Процедуры языка PLUS могут записываться в любом месте модели (кроме тела другой процедуры). Остальные операторы PLUS могут появляться только внутри оператора PROCEDURE.

Различают процедуры пользовательские и встроенные (библиотечные). Пользовательские процедуры обычно используются для изменения значений глобальных переменных и поименованных величин или для вычисления выражения и выдачи результата. В первом случае результат вычисления не требуется. Во втором – требуется, в этом случае обязательно наличие оператора возврата RETURN. Результат, выдаваемый PLUS-процедурой, используется в операндах или других PLUS-выражениях. Если в операторе RETURN не задано какое-либо выражение или в процедуре отсутствует оператор возврата RETURN, то возвращается значение 0.

Для определения PLUS-процедуры необходимо поместить оператор PROCEDURE в файл модели и выполнить транслирование оператора вместе c моделью или передать оператор PROCEDURE процессу моделирования в интерактивном режиме. После этого уже определенную PLUS-процедуру можно вызывать при вычислении выражений или в PLUS-операторах присваивания.

Если процедура используется более, чем в одной модели, то ее можно сохранить в исходном файле, называемом библиотекой процедур пользователя. Командой INCLUDE можно включать эту библиотеку в каждую модель, в которой будет использоваться данная процедура.

 

Эксперимент – это особая разновидность PLUS-процедуры пользователя. Для ее определения используется оператор EXPERIMENT. Эта процедура применяется для управления несколькими повторяющимися имитациями.

Эксперименты обычно используются совместно c библиотечной процедурой DoCommand() для управления процессом моделирования, А также c библиотечной процедурой дисперсионного анализа ANOVA для анализа результатов моделирования. Обычно результаты эксперимента записываются в глобальную матрицу, которая передается процедуре ANOVA. Существует возможность автоматически создавать отсеивающие и оптимизирующие эксперименты при помощи генераторов экспериментов.

Эксперимент вызывается только командой CONDUCT, которую можно загрузить c помощью функциональной клавиши.

Эксперименты и обыкновенные процедуры, непосредственно или косвенно вызываемые экспериментом, могут использовать библиотечную процедуру DoCommand() для выполнения операторов GPSS, включая команды и блоки.


 

Библиотека процедур – это множество PLUS-процедур. Существует два типа библиотек: библиотека пользователя, представляющая собой совокупность процедур пользователя, и встроенная библиотека GPSS World, содержащая готовые к использованию строковые и математические процедуры. Для того чтобы процедуру можно было использовать в PLUS-выражении, она должна находиться в библиотеке процедур.

Встроенная часть библиотеки содержит процедуры, которые могут быть разбиты на следующие группы:

1. Обслуживающие процедуры – процедуры, используемые для управления прогонами имитаций и анализа экспериментов:

§ Процедура DoCommand. Транслирует строку аргумента и передает результат трансляции выполняющейся модели. Эта процедура может вызываться только из экспериментов и процедур, вызванных из экспериментов.

§ Процедура ANOVA. Проводит многофакторный дисперсионный анализ, создает таблицу ANOVA, таблицу описательных статистик и выводит эти данные в журнал сессии.

§ Процедура Exit() завершает сеанс работы c GPSS World – останавливает процесс моделирования и закрывает все окна GPSS.

 

2. Файловые процедуры (процедуры потоков данных) – процедуры управления потоками данных внутри PLUS-процедуры. Потоки данных используются для чтения и записи файлов или для хранения и доступа больших объемов данных в памяти. Файловые процедуры выполняют следующие операции:

§ Open(DataStream, FileNameString) инициализирует поток данных;

§ Close(DataStream) – закрывает поток данных и извлекает код ошибки;

§ Read(DataStream) – считывает текстовую строку из потока данных;

§ Write(DataStream, String) – передает потоку данных текстовую строку;

§ Seek(DataStream, NewLinePosition) – устанавливает позицию текущей строки потока данных и извлекает предыдущую позицию строки.

 

3. Процедуры динамического вызова используются для вызова функций, хранящихся во внешних исполняемых файлах, включая динамически подключаемые библиотеки DLL. Соответствующие процедуры можно использовать для запуска функций, предоставляемых другими фирмами в отдельных исполняемых файлах и поддерживающих протокол CDECL.

 

4. Математические процедуры. К ним относятся:

§ ABS(Expression) – абсолютное значение;

§ ATN(Expression) – арктангенс (в радианах);

§ COS(Expression) – косинус;

§ EXP(Expression) – число e, возведенное в степень аргумента;

§ INT(Expression) – выделение целой части c отбрасыванием дробной части;

§ LOG(Expression) – натуральный логарифм;

§ SIN(Expression) – синус;

§ SQR(Expression) – квадратный корень;

§ TAN(Expression) – тангенс.

 

5. Вероятностные распределения процедуры теоретических вероятностных распределений. В GPSS World в библиотеку процедур включено 24 вероятностных распределений. При вызове вероятностного распределения требуется определить аргумент Stream (может быть выражением), который определяет номер генератора случайных чисел. При моделировании генераторы случайных чисел создаются по мере необходимости и их явное определение не обязательно. Большинство вероятностных распределений имеют некоторые параметры. Аргументы процедур, называемые обычно Locate, Scale и Shape, часто используются для этих целей. Аргумент Locate используется после построения применяемого распределения и прибавляется к нему. Это позволяет горизонтально перемещать функцию распределения по оси X. Аргумент Scale обычно меняет масштаб функции распределения, а Shape – ее форму.

Встроенная библиотека процедур содержит следующие вероятностные распределения:

1) бета (Beta);

2) биномиальное (Binomial);

З) Вейбулла(Weibula);

4) дискретно-равномерное (Discrete Uniform);

5) гамма (Gamma);

6) геометрическое (Geometric);

7) Лапласа (Laplace);

8) логистическое (Logistic);

9) логлапласово (LogLaplace);

10) логлогистическое (LogLogistic);

11) логнормальное (LogNormal);

12) нормальное (Normal);

13) обратное Вейбулла (Inverse Weibull);

14) обратное Гаусса (Inverse Gaussian);

15) отрицательное биномиальное (Negative Binomial);

16) Парето (Pareto);

17) Пирсона типа V (Pearson Type V);

18) Пирсона типа VI (Pearson Type VI);

19) Пуассона (Poisson);

20) равномерное (Uniform);

21) треугольное (Triangular);

22) экспоненциальное (Exponential);

23) экстремального значения A (Extreme Value А);

24) экстремального значения В (Extreme Value В).

 

ПРИМЕР 31.

Для генерации потока транзактов можно использовать библиотечную процедуру экспоненциального распределения c параметром λ = 0,25 и вызовом генератора случайных чисел RN1:

GENERATE (Exponential(l,0,(l/0.25)))

 

6. Строковые процедуры выполняют операции со строками:

§ Align(InsertString, SourceString, Offset) – вставляет одну строку в другую c выравниванием по правому краю;

§ Catenate(Stringl, String2) – производит объединение строк;

§ Copies(SourceString, Count) – создает одну строку из нескольких копий исходной;

§ Datatype(Datum) – возвращает строку, содержащую тип данных аргумента;

§ Find(TestString, SourceString) – вычисляет смещение одной строки, содержащейся в другой строке;

§ Left(SourceString, MaxCount) – возвращает левую часть заданной строки;

§ Length(SourceString) – возвращает количество символов в строке;

§ Lowercase(SourceString) – переводит все прописные буквы в строке в строчные;

§ Place(InsertString, SourceString, Offset) – вставляет одну строку в другую c выравниванием по левому краю;

§ PolyCatenate(Stringl, Stringl,...) – производит объединение двух или более строк;

§ Right(SourceString, MaxCount) – возвращает правую часть заданной строки;

§ String(Datum) – преобразует данные в их строковый эквивалент;

§ StringCompare(Stringl, String2) – сравнивает две строки;

§ Substring(SourceString, Offset, MaxCount) – возвращает подстроку заданной строки;

§ Trim(SourceString) – удаляет начальные и конечные пробелы;

§ Uppercase(SourceString) – – переводит все строчные буквы в строке в прописные;

§ VaIue(Datum) – возвращает числовой эквивалент строки;

§ Word(SourceString, WordNumber) – возвращает заданное слово строки.

§ Процедуры запроса возвращают информацию о состоянии транзакта, находящегося в модели. К ним относятся такие процедуры:

§ QueryXNExist(TransactionNumber) – возвращает 1, если транзакт существует в модели, иначе – 0;

§ QueryXNParameter(TransactionNumber, Parameter) – возвращает значение параметра транзакта. Если искомого параметра не существует, происходит останов по ошибке;

§ QueryXNAssemblySet(TransactionNumber) – возвращает номер семейства, к которому принадлежит транзакт;

§ QueryXNPriority(TransactionNumber) – возвращает приоритет транзакта в виде целого числа;

§ QueryXNMl(TransactionNumber) – возвращает время входа транзакта в систему.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2021-01-31 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: