Система GPSS World предназначена для имитационного моделирования систем с дискретными и непрерывными процессами. Языком моделирования в ней является язык GPSS, который построен в предположении, что модель сложной системы можно представить совокупностью элементов и логических правил их взаимодействия в процессе функционирования моделируемой системы, причем набор логических правил ограничен и может быть описан небольшим числом стандартных операций. Комплекс программ, описывающих функционирование объектов и выполняющих логические операции, является основой для создания программной модели системы. Кроме этого комплекса в составе системы GPSS World имеется специальная программа-планировщик, которая выполняет следующие функции:
- продвижения по заданным маршрутам заявок;
- планирование событий, происходящих в модели, путем регистрации времени наступления каждого события и выполнения их в нарастающей временной последовательности;
- регистрация статистической информации;
- продвижение модельного времени в процессе моделирования.
Чтобы обеспечить правильную последовательность обработки событий во времени, имеются системные часы, хранящие значения абсолютного модельного времени.
Характеристика объектов GPSS приведена в таблице 37.
Заявки являются динамическими объектами, которые создаются в определенных точках модели, продвигаются планировщиком через операторы, а затем уничтожаются. С каждой заявкой связаны параметры, которые нумеруются или именуются. Номера параметров и имена используются для ссылок на значения, присвоенные параметрам. Заявкам может присваиваться приоритет. Приоритет определяет предпочтение, которое получает заявка, когда она и другие заявки претендуют на один и тот же ресурс.
Объекты аппаратной категории – это абстрактные элементы, на которые может быть декомпозирована реальная система. Воздействуя на эти объекты, заявки могут изменять их состояние и влиять на движение других заявок. Ранее происходившие события в системе могут заблокировать, изменить движение заявок и наступление последующих событий. Например, один канал связи вышел из строя и все последующие заявки на передачу сообщений должны быть направлены на исправные каналы связи. Для моделирования таких ситуаций введены логические ключи. Заявка может устанавливать эти ключи в положение «включено» или «выключено». Впоследствии состояние ключей может быть проверено другими заявками для определения пути их дальнейшего следования.
Операционные объекты, т. е. операторы, задают логику функционирования модели системы и определяют пути движения заявок между объектами аппаратной категории. В операторах могут происходить события четырех основных типов:
1) создание или уничтожение заявок;
2) изменение числового атрибута объекта;
3) задержка заявки на определенный период времени;
4) изменение маршрута движения заявки в модели.
Версия GPSS, реализованная в системе GPSS World, содержит 53 оператора, которые можно объединить в следующие группы.
- генерирование и уничтожение заявок GENERATE (см. ЛР№3), SPLIT, TERMINATE (см. ЛР№3), ASSEMBLE;
- временная задержка ADVANCE (см. ЛР№3);
- синхронизация движения заявок MATCH и GATHER;
- изменение параметров заявки ASSIGN (см. ЛР№5), INDEX, MARK (см. ЛР№5), PLUS;
- изменение приоритета заявки PRIORITY (см. ЛР№5).
Операторы, изменяющие последовательность движения заявок (операторы передачи управления): DISPLACE (см. ЛР№6), TRANSFER (см. ЛР№4), LOOP, TEST (см. ЛР№5), GATE (см. ЛР№4).
Операторы, описывающие объекты аппаратной категории:
- одноканальные устройства (технические средства) SEIZE (см. ЛР№3), RELEASE (см. ЛР№3), PREEMPT (см. ЛР№5), RETURN (см. ЛР№5), FUNAVAIL (см. ЛР№6), FAVAIL (см. ЛР№6);
- многоканальные устройства (памяти) ENTER (см. ЛР№4), LEAVE (см. ЛР№4), SAVAIL (см. ЛР№6), SUNAVAIL (см. ЛР№6);
- ключи (логические переключатели) LOGIC.
Операторы, сохраняющие значения, необходимые для дальнейшего использования: SAVEVALUE (см. ЛР№6), MSAVEVALUE.
Операторы для получения статистических результатов:
- очереди QUEUE (см. ЛР№4), DEPART (см. ЛР№4);
- таблицы TABULATE.
Операторы для организации списка пользователя: LINK, UNLINK.
Специальные операторы: COUNT, SELECT.
Перечень, форматы и операнды основных операторов GPSS World приведены в Приложении 2.
Вычислительная категория служит для описания связей между компонентами моделируемой системы в виде математических (аналитических и логических) соотношений. В качестве объектов вычислительной категории введены арифметические и булевы переменные и функции.
Переменные представляют собой сложные выражения, которые включают константы, стандартные числовые атрибуты (СЧА), библиотечные арифметические функции, арифметические и логические операции. Выражения могут применяться в переменных и операторах GPSS. При применении в переменных выражения определяются командами GPSS. При применении в операторах GPSS выражения определяются как часть встроенного языка PLUS. Использование переменных – см. ЛР№6.
Стандартные числовые атрибуты. Каждому объекту соответствуют атрибуты, описывающие его состояние в данный момент времени. Они доступны для использования в течение всего процесса моделирования и называются стандартными числовыми атрибутами (СЧА). Например, объект вычислительной категории – генератор случайных чисел – имеет СЧА RNn, который соответствует числу, вычисляемому генератором равномерно распределенных случайных чисел номер n. У объекта динамической категории – заявки – несколько СЧА: PR – приоритет обрабатываемой в данный момент заявки; Pi – значение i-гo параметра активной заявки и др. Всего в GPSS World имеется свыше 50 СЧА (см. Приложение 3).
Имена СЧА зарезервированы. По способу определения имен СЧА можно разбить на три группы. Имя СЧА в первой группе состоит из двух частей. Первая часть указывает групповое имя, идентифицирующее тип объекта и тип информации об объекте. Вторая часть идентифицирует конкретного члена группы. Групповое имя состоит из одной-двух букв, фиксированных для информации об объектах определенного типа, например, Q – ссылка на текущее значение длины очереди, FR – коэффициент использования устройства, SR – коэффициент использования накопителя и т. д. Объекты GPSS могут быть идентифицированы с помощью числовых или символьных имен. Идентификация СЧА зависит от вида адресации, которых в GPSS предусмотрено две: прямая и косвенная.
Рассмотрим прямую адресацию. Если объект идентифицирован с помощью номера, то ссылка на его СЧА записывается как CЧAj, где j – номер объекта (положительное целое число). Например, Q3 – текущее значение длины очереди номер 3, FR2 – коэффициент использования устройства номер 2. При указании имени объекта ссылка на его СЧА записывается как СЧА$имя, где имя – имя объекта. Например, Q$Basa – текущее значение длины очереди с именем Basa, SR$Rem – коэффициент использования накопителя с именем Rem.
При косвенной адресации СЧА определяются как СЧА*параметр. Это означает следующее:
- CЧA*j, где j – номер параметра активной заявки (положительное целое число), содержащего номер нужного оператора;
- СЧА*имя, где имя – имя параметра активной заявки, содержащего номер нужного оператора.
Например, Q*3 – текущее значение длины очереди, номер которой является значением параметра 3 активной заявки, SR*Rem – коэффициент использования памяти, номер которой содержится в параметре с именем Rem активной заявки.
Вторую группу имен СЧА составляют матричные СЧА. Матричный СЧА MX может содержать до трех идентификаторов (косвенных адресов). Например MX*Result(*Stroka,*Stolbez) является ссылкой на матрицу, номер которой содержится в параметре активной заявки с именем Result, а элемент матрицы – номер строки и номер столбца – определяется значениями параметров с именами Stroka и Stolbez соответственно той же активной заявки.
Третью группу составляют следующие СЧА: A1, AC1, C1, M1, PR, TG1, XN1 и Z1. Эти СЧА, в отличие от СЧА первой и второй групп, не требуют указания номера или имени объекта.
СЧА по признаку доступности к ним пользователя можно разделить на две категории. Первую категорию составляют атрибуты, которые в части, касающейся их формирования, доступны только GPSS World, однако они могут быть использованы также и пользователем в выражениях, но не могут им изменяться в процессе моделирования. Эта группа содержит наибольшее число СЧА. Во вторую категорию входят СЧА вычислительных объектов, которые могут изменяться разработчиком модели и использоваться им в выражениях. К ним относятся:
- FNj (FN$Raspr) – вычисленное вещественное значение функции номер j (с именем Raspr);
- Vj (V$Ver) – вычисленное значение вещественной или целочисленной переменной номер j (с именем Ver);
- BVj (BV$Per) – вычисленное вещественное значение булевой переменной номер j (с именем Per).
Булевы переменные позволяют пользователю проверять в одном операторе GPSS одновременно несколько условий, исходя из состояния или значения других переменных, сохраняемых значений и/или атрибутов.
С помощью функций пользователь может производить вычисления непрерывных или дискретных функциональных зависимостей между аргументом функции (независимая величина) и зависимым значением функции. Все функции в GPSS задаются табличным способом с помощью команд описания функций. Как и переменные, функции не связаны с определенными операторами. Кроме библиотечных арифметических функций GPSS World имеет 24 встроенных генератора случайных чисел.
Объекты запоминающей категории обеспечивают обращения к сохраняемым значениям. Ячейки сохраняемых величин и матрицы ячеек сохраняемых величин используются для сохранения числовой информации. Например, значение, занесенное в ячейку, может представлять собой коэффициент использования устройства в какой-то момент времени. Любая активная заявка может инициировать запись информации в эти объекты. Впоследствии записанную в эти объекты информацию может считать любая другая заявка. Примеры использования ячеек – см. ЛР№7.
Матрицы могут иметь до шести измерений. Матрица должна быть предварительно описана. Команда описания матрицы имеет формат:
Name MATRIX А,В,С,[D],[E],[F],[G]
Метка Name определяет имя матрицы и должна быть именем (не может быть числом). Операнд А не используется, он оставлен для совместимости с более старыми версиями GPSS. Операнды В, С, D, E, F, G могут быть только целыми положительными числами. Операндом В задается число строк, операндом С – число столбцов матрицы. Операнды D, E, F, G задают максимальное количество элементов в третьем, четвертом, пятом и шестом измерениях соответственно. Например, команда
TraSr MATRIX ,5,7
определяет матрицу с именем TraSr, содержащую 5 строк и 7 столбцов. Матрицы имеют единственный СЧА с названием MX, с помощью которого можно обращаться к любому элементу матрицы. В качестве значений строк и столбцов могут использоваться только имена, целые числа и параметры заявок. Например:
- МХ6(13,5) – определяется элемент матрицы номер 6, находящийся на пересечении 13-й строки и 6-го столбца;
- MX$Tab2(P4,P$Nal) – для определения элемента матрицы с именем Tab2 используются значения параметра номер 4 и параметра заявки с именем Nal;
- MX$Spis(Usor,P3) – для определения элемента матрицы с именем Spis используются имя переменной пользователя и параметр заявки номер три (переменной пользователя предварительно должно быть присвоено целое положительное значение командой EQU).
Следует обратить внимание на то, что в первом примере матрица имеет не имя, а номер, хотя в команде определения матрицы в качестве метки Name может быть использовано только имя. Для присвоения матрице номера вместо имени нужно до записи команды определения матрицы использовать команду EQU. Например:
Ski EQU 6
Ski MATRIX ,10,7
В данном примере имя Ski матрицы заменено на номер 6, по которому МХб теперь и нужно обращаться к матрице. Если в команде MATRIX вместо имени Ski сразу записать число 6, то при трансляции возникнет останов по ошибке «Пропущена метка оператора».
Перед началом моделирования или выполнения команды CLEAR ON значения всех элементов матрицы устанавливаются равными нулю. Некоторым или всем элементам по желанию разработчика могут быть присвоены ненулевые значения или они могут быть переведены в неопределенное состояние командой INITIAL. Например:
- INITIAL MX5(2,6),-648.237 – элементу матрицы номер 5, находящемуся на пересечении второй строки и шестого столбца, присваивается начальное значение -648.237;
- INITIAL MX$Ntf(4,7),48 – элементу (4,7) матрицы с именем Ntf присваивается начальное значение 48;
- INITIAL MX$Avt(13,24),Koef – элементу (13,24) матрицы с именем Avt присваивается начальное значение переменной пользователя Koef;
- INITIAL Gros,48 – вместо операнда указано имя матрицы Gros, поэтому всем элементам этой матрицы присваивается значение 48;
- INITIAL Pult – вместо операнда А стоит имя матрицы Pult, но операнд В не используется, поэтому всем элементам матрицы присваивается значение 1;
- INITIAL MainResult,UNCPECIFIED – вместо операнда В записано ключевое слово UNCPECIFIED, поэтому все элементы предварительно созданной матрицы MainResult будут переведены в неопределенное состояние. Этим переводом матрица подготовлена для использования в эксперименте, в котором могут быть пропущенные, т. е. не полученные в ходе эксперимента данные. Неопределенное состояние элемента матрицы указывает на то, что данных нет. Если же элементы матрицы были бы переведены в нуль, то это бы воспринималось как получение данных эксперимента, равных нулю, что неверно.
Для записи в процессе моделирования значений в матрицы, а также для увеличения или уменьшения значений, записанных в матрицы, служит оператор MSAVEVALUE. Формат его записи следующий:
MSAVEVALUE A,B,C,D
В операнде А задается имя или номер матрицы. Крайним правым символом операнда может быть знак плюс (режим накопления) или знак минус (режим вычитания). В операнде В задается номер строки, в операнде С – номер столбца матрицы. Операнд D определяет значение, которое должно храниться, прибавляться или вычитаться. Все операнды являются обязательными. Они могут быть именем, положительным целым числом, выражением в скобках, СЧА или СЧА*параметр. Например:
- MSAVEVALUE 2,13,Р21,782.34 – при входе заявки в оператор MSAVEVALUE значение элемента матрицы номер 2, расположенного на пересечении строки 13 и столбца, номер которого содержится в параметре 21 вошедшей заявки, замещается числом 782.34;
- MSAVEVALUE X$Bba-,8,23,V$Hit – значение элемента на пересечении строки 8 и столбца 23 матрицы, номер которой содержится в сохраняемой ячейке с именем Bba, уменьшается на вычисленное значение арифметической переменной с именем Hit;
- MSAVEVALUE Rta+,11,(User#2+3),M1 – номер столбца находится как результат вычисления выражения в скобках (User#2+3), а затем значение определенного таким образом элемента матрицы Rta увеличивается на величину относительного времени M1 пребывания заявки в модели;
- MSAVEVALUE (Rra+Q$Rem)+,(Rra-5),12,P$Nht – номер матрицы и номер строки элемента определяются как результаты вычисления выражений в скобках (Rra+Q$Rem) и (Rra-5) соответственно. После этого значение найденного элемента увеличивается на величину, содержащуюся в параметре с именем Nht активной заявки.
- MSAVEVALUE 4,Stroka,Stolbez,"Dlina Mars" – элементу матрицы номер 4, находящемуся на пересечении строки и столбца, определяемых переменными пользователя Stroka и Stolbez, присваивается строка "Dlina Mars". Если переменным пользователя предварительно командой EQU не будут присвоены соответствующие значения, то возникнет останов по ошибке.
Останов по ошибке возникает и в том случае, если при входе заявки в оператор SAVEVALUE не будет найдена матрица с нужным именем или номером, или не будет найден элемент с соответствующими номерами строки и столбца. СЧА MX в операторе MSAVEVALUE при указании операнда А, как и СЧА X в операторе SAVEVALUE при указании операнда А, не используется. Ссылка на этот СЧА применяется также в выражениях, функциях, операторе INITIAL.
Из рассмотренного выше формата команды описания матрицы следует, что матрица GPSS может иметь до шести измерений. Однако, как видно из формата оператора MSAVEVALUE, он предоставляет возможность использовать только двумерные матрицы, т. е. в нем доступны только первые два измерения. Остальные индексы равны 1. Если нужно использовать матрицы более чем двух измерений, для этого следует создать одну или более PLUS-процедур. PLUS-процедуры имеют доступ ко всем элементам всех матриц. Матрицы, определенные командой MATRIX, являются глобальными и доступны всем PLUS-процедурам. На время выполнения PLUS-процедуры могут быть созданы временные матрицы с локальной областью видимости.
Статистические объекты. Кстатистическим объектам относятся очереди и таблицы. В любой системе движение потока заявок может быть задержано из-за недоступности устройств. В этом случае задержанные заявки ставятся в. Учет этих очередей составляет одну из основных функций планировщика, который автоматически накапливает определенную статистику относительно устройств и очередей. Кроме этого пользователь может собирать дополнительную статистическую информацию, указав специальные точки в модели.
Для облегчения табулирования статистической информации в GPSS предусмотрен специальный объект – таблица. Таблицы используются для получения выборочных распределений некоторых случайных величин. Таблица состоит из частотных классов (диапазонов значений), куда заносится число попаданий конкретного числового атрибута в каждый, тот или иной, частотный класс. Для каждой таблицы вычисляется также математическое ожидание и среднеквадратическое отклонение. В конце эксперимента с моделью результаты, содержащиеся в таблицах, могут выводиться либо на дисплей, либо на печать.
Объекты группирующей категории. К группирующей категории относятся три типа объектов: числовая группа, группа заявок и списки.
Заявки представляют собой объекты, характеризующиеся общими СЧА, которые обычно представляются как параметры заявок и меняются при прохождении заявок через оператор ASSIGN. Это неудобно в том случае, когда необходимо одновременно менять некоторые атрибуты всех заявок некоторого множества. Объекты группирующей категории предоставляют возможность пользователю обращаться к атрибутам заявок заданной группы. Они работают в одном из режимов: в режиме заявки или числовом. Режим определяется первым обращением к определенной группе. После того как он установлен, необходимо его поддерживать. В режиме заявки величины, поступающие в группу, представляются номерами по очереди заявок данной группы. В другом режиме поступающие величины представляются группой числовых значений.
При моделировании заявки хранятся в списках. Существует пять видов списков, только в одном из которых в любой момент времени может находиться заявка: 1) текущих событий; 2) будущих событий; 3) задержки обслуживающих устройств (ОУ); 4) отложенных прерываний ОУ; 5) пользователя.
В списке текущих событий (СТС) находятся заявки, соответствующие событиям, время наступления которых меньше (заявки, которые должны были начать продвижение по модели в некоторый момент в прошлом, но были заблокированы) или равно текущему времени. Заявки из СТС готовы к входу в операторы и должны войти в них до очередного изменения модельного времени. В СТС заявки расположены в порядке убывания приоритета. Заявки с одинаковыми приоритетами располагаются в порядке поступления их в список.
Список будущих событий (СБС) содержит заявки, соответствующие событиям, время наступления которых больше текущего времени, т. е. событиям, которые должны произойти в будущем. Такие заявки размещаются в списке строго в порядке возрастания времени начала движения. Приоритеты не влияют на порядок движения в этом списке.
В список повторных попыток помещаются заявки, для которых не выполнены условия входа в следующий оператор. Эти условия проверяются при попытке входа заявки в операторы GATE (см. ЛР№4), TEST (см. ЛР№5), TRANSFER ALL и TRANSFER BOTH (см. ЛР№4). Заявки из списка повторных попыток ожидают изменения СЧА. Когда СЧА изменяется, заявка активируется, проверяются условия ее входа в следующий оператор. Если условия выполняются, заявка входит в следующий оператор и автоматически исключается из списка повторных попыток.
Обслуживающее устройство имеет следующие списки:
- список отложенных прерываний – список заявок, ожидающих занятия ОУ по приоритету;
- список прерываний – список заявок, обслуживание которых данным ОУ было прервано;
- список задержки – список заявок, ожидающих занятия ОУ в порядке приоритета;
- список повторных попыток – список заявок, ожидающих изменения состояния ОУ.
Накопитель, моделирующий ограниченную очередь или память, имеет следующие списки:
- список задержки – список заявок в порядке приоритета, ожидающих возможность занять освободившиеся места в накопителе;
- список повторных попыток – список заявок, ожидающих изменения состояния накопителя.
Список синхронизируемых заявок имеют операторы ASSEMBLE, GATHER, MATH. Он содержит заявки, находящиеся в данный момент времени в состоянии сравнения.
Список пользователя содержит заявки, удаленные пользователем из списка текущих событий и помещенные в список пользователя как временно неактивные. Списки пользователя используются для организации очередей с дисциплинами, отличными от FIFO.
Арифметические, условные и логические операторы, используемые в моделях GPSS World, представлены в таблице 38.
Таблица 38
Оператор
Пример
использования
Описание
^
А^В
Возведение в степень.
#
А#В
Умножение (оператор «#» использован для операции умножения, т. к. оператор
«*» используется в косвенной адресации. Пользователь может менять значения операторов «#» и «*» в журнале настроек Settings на закладке Simulation).
/
А/В
Деление.
\
А\В
Целочисленное деление. Возвращает результат целочисленного деления А на В.
@
А@В
Целочисленный остаток. Возвращает целочисленный остаток от деления А на В.
-
A-В
Вычитание.
+
А+В
Сложение.
>= или 'GE'
А>=В
Возвращается 1, если А в цифровой форме больше или равно В, в противном случае возвращается 0.
<= или '@'
А<=В
Возвращается 1, если в. цифровой форме А меньше или равно В, в противном случае возвращается 0.
> или 'G
А>В
Возвращается 1, если в цифровой форме А больше В, в противном случае возвращается 0.
< или 'L'
А<В
Возвращается 1, если в цифровой форме А меньше В, в противном случае возвращается 0.
= или 'Е'
А=В
Возвращается 1, если в цифровой форме А равно В, в противном случае возвращается 0.
Продолжение таблицы 38
Оператор
Пример
использования
Описание
!= или 'NE'
А!=В
Возвращается 1, если в цифровой форме А отличается от В, в противном случае возвращается 0.
& или 'AND'
А&В
Возвращается 1, если А и В не равны нулю, в противном случае возвращается 0.
| или 'OR'
А|В
Возвращается 1, если А, или В, или оба не равны нулю, в противном случае возвращается 0.