Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Обработка данных / Томашевский_Имитационное моделирование в среде GPSS_2003.doc
Скачиваний:
189
Добавлен:
31.05.2015
Размер:
13.56 Mб
Скачать

4.25. Организация вывода временных рядов изGpss-модели

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

Для формирования временного ряда по результатам моделиро­вания в GPSS-программу вставляют специальные строки для запоми­нания этого ряда и вывода его в файлGPSS-отчета. Ниже приведена программа моделиCMOвидаM/M/1, в которую добавлены стро­ки 11, 71-73, 91-94 для проверки модели на наличие циклов регенера­ции. Начало цикла регенерации отмечается флагом 1111 (если есть циклы регенерации). Цикл регенерации начинается, когда вновь при­бывший транзакт застаетCMOпустой (в ней нет транзактов). Про­верка этого условия осуществляется в строке 71GPSS-программы. В результате прогона модели формируется столбец из сохраняемых ве­личин, который может считываться (например, пакетом статистики). Это позволяет использовать полученные данные для построения параметрической модели и формирования функции распределения для выходных данных имитационной модели.

Пример 4.61

4.26. Краткая характеристика языкаPlus

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

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

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

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

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

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

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

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

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

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

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

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

1) строковые константы;

2) вещественные константы;

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

4) имена;

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

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

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

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

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

Таблица 4.48

Оператор

Действие

Результат

Унарный/бинарный (количество операндов)

Отрицание

Аддитивная инвер­сия

Унарный

^

Возведение в степень

Арифметический показатель степени

Бинарный

NOTили

Инверсия

1 (TRUE) или О (FALSE)

Унарный

AND

Логическое И

1 (TRUE) или О (FALSE)

Бинарный

OR

Логическое ИЛИ

1 (TRUE) или О (FALSE)

Бинарный

G или >

Больше

1 (TRUE) или О (FALSE)

Бинарный

Lили <

Меньше

1 (TRUE) или О (FALSE)

Бинарный

Еили =

Равно

1 (TRUE) или О (FALSE)

Бинарный

NE или /=

Не равно

1 (TRUE) или О (FALSE)

Бинарный

LE или <=

Меньше или равно

1 (TRUE) или О (FALSE)

Бинарный

GEили =>

Больше или равно

1 (TRUE) или О (FALSE)

Бинарный

# или *

Умножение

Арифметическое произведение

Бинарный

/

Деление

Арифметическое частное

Бинарный

\

Целочис­ленное де­ление

Целочисленное ча­стное

Бинарный

@

Деление по модулю

Целочисленный ос­таток

Бинарный

+

Сложение

Арифметическая сумма

Бинарный

Вычитание

Арифметическая разность

Бинарный

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

Перенастройку некоторых операторов можно выполнить через пункт меню Edit/Setting.. /Simulation.

К операторам языка 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-процедур. Суще­ствует два типа библиотек:библиотека пользователя, представ­ляющая собой совокупность процедур пользователя, ивстроенная библиотека GPSSWorld, содержащая готовые к использованию строковые и математические процедуры. Для того, чтобы процедуру можно было использовать вPLUS-выражении, она должна находить­ся в библиотеке процедур.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

SIN(Expression) – синус;

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

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

Вероятностные распределения процедуры теоретических вероятностных распределений (см. параграф 4.13).

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

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) –возвращает время входа транзакта в систему.