183985 (630002), страница 2
Текст из файла (страница 2)
Переменные представляют собой сложные выражения, которые включают константы, системные числовые атрибуты (СЧА), библиотечные арифметические функции, арифметические и логические операции.
Выражения могут применяться в переменных и операторах GPSS. При применении в переменных выражения определяются командами GPSS. При применении в операторах GPSS выражения определяются как часть языка PLUS.
Каждому объекту соответствуют атрибуты, описывающие его состояние в данный момент времени. Они доступны для использования в течение всего процесса моделирования и называются системными числовыми атрибутами (СЧА). Например, объект вычислительной категории - генератор случайных чисел имеет СЧА RNn - число, вычисляемое генератором равномерно распределенных случайных чисел номер n; у объекта динамической категории - транзакта СЧА: PR - приоритет обрабатываемого в данный момент транзакта; Pi - значение i-го параметра активного транзакта и др. Всего в GPSS World имеется свыше 50 СЧА.
Булевы переменные позволяют пользователю проверять в одном блоке GPSS одновременно несколько условий, исходя из состояния или значения этих условий и их атрибутов.
С помощью функций пользователь может производить вычисления непрерывных или дискретных функциональных зависимостей между аргументом функции (независимая величина) и зависимым значением функции.
Кроме библиотечных арифметических функций GPSS World имеет 24 встроенных генератора случайных чисел.
Объекты запоминающей категории обеспечивают обращения к сохраняемым значениям. Ячейки сохраняемых величин и матрицы ячеек сохраняемых величин используются для сохранения некоторой числовой информации. Любой активный транзакт может произвести запись информации в эти объекты. Впоследствии записанную в эти объекты информацию может считать любой транзакт. Матрицы могут иметь до шести измерений.
К статистическим объектам относятся очереди и таблицы. В любой системе движение потока транзактов может быть задержано из-за недоступности устройств. В этом случае задержанные транзакты ставятся в очередь - еще один тип объектов GPSS. Учет этих очередей составляет одну из основных функций планировщика. Планировщик автоматически накапливает определенную статистику относительно устройств и очередей. Кроме этого пользователь может собирать дополнительную статистическую информацию, указав специальные точки в модели.
Для облегчения табулирования статистической информации в GPSS предусмотрен специальный объект - таблица. Таблицы используются для получения выборочных распределений некоторых случайных величин. Таблица состоит из частотных классов (диапазонов значений), куда заносится число попаданий конкретного числового атрибута в каждый, тот или иной, частотный класс. Для каждой таблицы вычисляется также математическое ожидание и среднеквадратическое отклонение.
К группирующей категории относятся три типа объектов: числовая группа, группа транзактов и списки.
При моделировании транзакты хранятся в списках. Существует пять видов списков, только в одном из которых в любой момент времени может находиться транзакт:
-
текущих событий;
-
будущих событий;
-
задержки ОКУ или МКУ;
-
отложенных прерываний ОКУ;
-
пользователя.
Одноканальное устройство имеет:
-
список отложенных прерываний - список транзактов, ожидающих занятия ОКУ по приоритету;
-
список прерываний - список транзактов, обслуживание которых данным ОКУ было прервано;
-
список задержки - список транзактов, ожидающих занятия ОКУ в порядке приоритета;
-
список повторных попыток - список транзактов, ожидающих изменения состояния ОКУ.
Многоканальное устройство имеет:
-
список задержки - список транзактов в порядке приоритета, ожидающих возможность занять освободившиеся каналы МКУ;
-
список повторных попыток - список транзактов, ожидающих изменения состояния МКУ.
Список пользователя содержит транзакты, удаленные пользователем из списка текущих событий и помещенные в список пользователя как временно неактивные. Списки пользователя используются для организации очередей с дисциплинами, отличными от дисциплины "первым пришел - первым обслужен".
1.2.2 Построение моделей с устройствами
Для представления собственно обслуживания используются определенные элементы. Такими элементами могут быть либо люди, либо какие-то предметы. Независимо от этого подобные элементы в GPSS называют объектами аппаратной категории, к которой относят одноканальные (ОКУ) и многоканальные устройства (МКУ) и логические ключи.
Рассмотрение методов построения моделей с устройствами начнем с имитации функционирования ОКУ.
При моделировании возможны следующие режимы организации функционирования ОКУ:
-
занятие ОКУ и его освобождение;
-
прерывание обслуживания ОКУ;
-
недоступность ОКУ и восстановление доступности.
1.2.2.1 Организация поступления транзактов в модель и удаления транзактов из нее
Потоки, существующие в реальных системах, в моделях имитируют транзакты.
1.2.2.1.1. Поступление транзактов в модель
GENERATE - это блок, через который транзакты входят в модель. Блок GENERATE имеет следующий формат записи:
GENERATE [A],[B],[C],[D],[E]
Скобки [ ] означают, что данный операнд является необязательным. Не существует ограничений на число различных блоков GENERATE в одной модели.
Интервалы времени между последовательными появлениями транзактов блока GENERATE называют интервалом поступления. Все разработчики должны задавать спецификацию распределения интервалов времени поступления в блоке GENERATE. Информация, необходимая для этого, задается операндами А и B. Все возможные виды распределения интервалов времени поступления в GPSS делят на равномерно распределенные и все другие виды распределения.
Операнд А - средний интервал времени между последовательными поступлениями транзактов в модель.
Операнд B - задает модификатор, который изменяет значения интервала генерации транзактов по сравнению с интервалом, указанным операндом А. Есть два типа модификаторов: модификатор-интервал и модификатор-функция.
С помощью модификатора-интервала задается равномерный закон распределения времени между генерацией транзактов.
Операнды А и B могут быть именем, положительным числом, выражением в скобках или непосредственно СЧА.
При вычислении разности значений (А-В), заданных операндами А и B, получается нижняя граница интервала, а при вычислении суммы (А+В) - верхняя граница. После генерации очередного транзакта выбирается число из полученного интервала, это и будет значение времени, через которое следующий транзакт выйдет из блока GENERATE.
Когда операнды А и B задают в виде констант (B - модификатор-интервал), они должны быть неотрицательными числами, т. е. интервал времени может быть выражен числами, например, 4.1,…,12.7. Предположим, что транзакт входит в модель - блок GENERATE - в момент модельного времени 25.6. После того, как этот транзакт попадет в следующий блок модели, планировщик GPSS разыграет случайное значение из распределения интервалов времени, равного 8.4±4.3.
Пусть разыгранным значением будет число 9.7. Тогда планировщик планирует приход следующего транзакта в блок GENERATE в момент времени 25.6+9.7=35.3.
Операнды А и В не обязательно должны быть заданы. Когда один или оба операнда не указаны, по умолчанию предполагается их нулевое значение. Например, А=16.4, В=0. Поскольку операнд В=0, то интервалы времени распределены равномерно, 16.4±0, т. е. интервал времени поступления равен 16.4. Это пример того, как может быть задано детерминированное значение интервалов времени.
Более сложные интервалы времени поступления транзактов (не по равномерному закону) могут быть заданы с использованием модификатора-функции или встроенных генераторов случайных чисел. Под действием модификатора-функции значение операнда А умножается на значение функции, заданной операндом В.
При любом способе вычисления интервала времени значение операнда В не должно превышать значения операнда А, в противном случае в блоке GENERATE может быть получен отрицательный интервал времени, который вызовет останов по ошибке "Отрицательное время задержки".
Рассмотрим три дополнительных операнда: С - смещение интервалов, D - ограничитель, Е - уровень приоритета.
Смещение интервалов (первоначальная задержка) С - это момент времени, в который в блоке GENERATE должен появиться первый транзакт. После этого первого прихода все остальные приходы транзактов возникают в соответствии с распределением интервалов времени, задаваемых операндами А и B. Операнд С можно использовать как для ускорения, так и для замедления прихода первого транзакта или для указания прихода в нужный момент времени. Начальная задержка может быть меньше, равна или больше среднего времени, заданного операндом А. Когда операнд С не используется, интервалы генерирования определяются операндами А и B (они не оказывают влияния на задержку). Операнд С может быть таким же как и операнды А и B.
Операнд D задает граничное значение общего числа транзактов, которые могут войти в модель через данный блок GENERATE в течение времени моделирования. Когда это число достигнуто, данный блок GENERATE перестает быть активным. Если не определено граничное значение (операнд D не используется), блок GENERATE остается активным в течение всего времени моделирования, т. е. по умолчанию ограничения на количество создаваемых транзактов нет.
Операнд Е устанавливает класс приоритета каждого из транзактов, входящих в модель через данный блок GENERATE. Для задания приоритетов c целью повышения эффективности работы GPSS World рекомендуется использовать последовательность целых чисел 0, 1, 2, 3,… вместо, например, 37, 43, 88, 122,... Чем выше число, тем выше приоритет. Если операнд Е не используется, по умолчанию приоритет генерируемых данным блоком GENERATE транзактов равен нулю.
Операнды D и Е могут задаваться также как и операнды А, B и С, но при этом принимать значения только целых положительных и целых чисел соответственно.
В любом блоке GENERATE должен быть обязательно задан либо операнд А, либо операнд D. Нельзя использовать в качествеоперанда параметры транзактов. Необходимо также помнить, что транзакт не должен входить в блок GENERATE. Если транзакт пытается это делать, возникает ошибка выполнения. Приведем примеры записи блоков GENERATE:
с операндом А
-
GENERATE 38.6
-
GENERATE X$IntPostTran
-
GENERATE MX$VrPost(3,6)
-
GENERATE V$Prom
-
GENERATE (Exponential(11,0,X$Mat))
-
GENERATE IntPostTran
с операндами А и B
-
GENERATE 73.25,X$Otk
-
GENERATE X$Sredne,FN2
-
GENERATE Sredne,FN4
-
GENERATE (V$Post+7.1),FN$Mod
с операндами А и C
-
GENERATE 7.3,,4.1
-
GENERATE 7.3,,X$VrSm
-
GENERATE V$IntP,,MX2(X$Stroka,X$Stolbez)
-
GENERATE (Normal(3,X$Sre,X$SreOtk)),,Sme
с операндами А, B, E
-
GENERATE 13.3,2.8,,,1
-
GENERATE (Normal(8,X$Sr,X$SrOtk)),Post,,1
-
GENERATE V$IntPostTran,(V1-12.3),,12
Приведенные примеры демонстрируют различные способы задания операндов блока GENERATE. Однако при этом нужно помнить следующее.
В начальный момент времени в каждом блоке GENERATE производится подготовка к выходу одного транзакта. На этой стадии модель еще полностью не инициализирована для выполнения, т. е. не все переменные получили значения. Но описанные в блоке GENERATE, должны быть уже определены - инициализированы. Поэтому в модели блоку GENERATE должны предшествовать команды определения EQU, INITIAL, FUNCTION, VARIABLE, FVARIABLE. Это делается для того, чтобы СЧА в блоке GENERATE, который ссылается на них, давали нужные для ввода транзактов в модель результаты.
Например:
SrIntPost EQU 47.2
StanOtkl EQU 28.6
INITIAL X$KolTrans,43
. . .
GENERATE SrIntPost,StOtk,,X$KolTrans
Как видно из примера, блоку GENERATE предшествуют присвоения командой EQU именам числовых значений и командой INITIAL начального значения сохраняемой ячейке с именем Kol-Trans.
1.2.2.1.2. Удаление транзактов из модели и завершение моделирования
Транзакты удаляются из модели, попадая в блок TERMINATE (завершить). Блоки TERMINATE всегда позволяют войти всем транзактам, которые пытаются это сделать. В модели может быть любое число блоков TERMINATE. Блок имеет следующий формат записи:
TERMINATE [A]
Значением операнда А является число единиц, на которое блок TERMINATE уменьшает содержимое счетчика завершения, определяющего момент окончания моделирования. Операнд А может быть именем, положительным целым числом, выражением в скобках, СЧА или СЧА*. По умолчанию значение операнда А равно нулю. В этом случае транзакт уничтожается, а значение счетчика завершения не меняется.