Введение
Язык системы моделирования – язык программирования. Общая система моделирования (GPSS) – это язык моделирования, используемый для дискретно-событийного моделирования. Он особенно полезен при моделировании систем обслуживания, где большое количество статистических данных собирается автоматически. Типичное моделирование состоит в генерации транзакций в системе (обычно через определенные интервалы времени), выполнении ими заданного набора операций (например, использование ресурса, ожидание, передача данных) и удалении из моделирования.
a programming language
General Purpose Simulation System (GPSS) is a simulation language used for discrete event simulations. It is especially useful in the modelling of queuing systems, with many statistics being collected automatically. The typical simulation consists of Transactions being generated in the system (usually at a certain interval), performing a defined set of rules (like use a resource, wait, transfer), and being removed from the simulation.
История
GPSS был разработан в 1960-х годах Джеффри Гордоном, сотрудником подразделения IBM по разработке передовых систем (ASDD). Это подразделение активно занималось исследованиями в области проектирования систем телеобработки, стремясь достичь экономической эффективности использования компьютерных ресурсов и общих линий связи между серверными терминалами. Симуляционная система, тогда известная как симулятор Гордона, приобрела большую популярность при изучении систем телеобработки в рамках ASDD. Впоследствии она была окончательно оформлена и задокументирована 25 октября 1960 года во внутреннем меморандуме IBM. В период с зимы по лето 1961 года группа из трех программистов (включая Гордона) переписала систему моделирования с использованием нового алгоритма и новых типов блоков. Официальный релиз программы, поддерживаемой IBM, состоялся 27 сентября 1961 года и включал 25 типов блоков. После этого Гордон перестал участвовать в разработке системы моделирования. В 1963 году был выпущен GPSS II с 32 типами блоков. Он ввел системные числовые атрибуты, позволявшие отслеживать текущее содержимое памяти, длину очереди или текущее время. В 1965 году был выпущен GPSS III, доступный для систем IBM 7090/94 и 7040/44. В 1967 году GPSS/360 был выпущен для работы на недавно представленной System 360. В 1970 году был выпущен GPSS V с 49 типами блоков. В 1980-х годах были выпущены GPSS/VAC и GPSS/PC. По-видимому, это были последние официальные релизы под маркой IBM до того, как язык стал свободно распространяемым. Впоследствии были созданы версии для IBM 360, Univac 1108 и CDC. Со временем были разработаны другие реализации для систем, включая VAX от DEC, специализированную версию APL для крупномасштабных систем Univac и Macintosh. В 2001 году была выпущена программа GPSS World для Windows, включающая новые возможности GPSS, такие как скриптинг с использованием PLUS (языка, подобного Pascal), графическое отображение состояния системы, построение графиков и проведение оптимизационных экспериментов. В 2009 году был разработан графический инструмент на основе Java под названием JGPSS (Java General Purpose Simulation System) для обучения языку моделирования GPSS.
Описание
Моделирование в GPSS выполняется на "языке блок-схем" в стиле ассемблера, используя множество специализированных команд ("блоки") для управления потоком транзакций, сбора статистики и переменных. Симуляции имеют точки входа транзакций через команду GENERATE, например, когда клиент заходит в магазин. Далее выполняются действия, такие как захват ресурсов/хранилищ (например, кассира), ожидание, сохранение статистики и т.д. В конечном итоге, смоделированная транзакция завершает симуляцию через команду TERMINATE. Каждый оператор команды называется "управлением". Блоки могут быть ориентированы на ресурсы (например, станки в цехе) или на транзакции (например, незавершенное производство, сигналы в электронных компонентах или документы в бюрократической процедуре). GPSS автоматически ведет учет статистики для отображения в отчете. Сущности можно классифицировать на ресурсы, вычислительные сущности и статистические сущности. Ресурсы, такие как ресурсы и хранилища, представляют собой ограниченные ресурсы. Вычислительные сущности, такие как ампер-переменные (переменные), функции и генераторы случайных чисел, используются для представления состояния транзакций или элементов их окружения. Статистические сущности, такие как очереди или таблицы (гистограммы), собирают интересующую статистическую информацию.
Сделки
ПрефиксЗначениеPjПараметр текущей транзакции, обрабатываемой программой. M1Время прохождения текущей транзакции. MPjПромежуточное время прохождения текущей транзакции. PRПриоритет текущей транзакции (0–127).
Цепи
ПрефиксЗначениеCHjТекущий счетчик, представляющий собой номер транзакции в указанной цепочке пользователей. CAjСреднее количество транзакций в цепочке пользователей j. CCjОбщее количество записей в цепочке пользователей j. CTjСреднее время на транзакцию в цепочке пользователей j.
Блоки
ПрефиксЗначениеNjСчетчик количества транзакций, поступивших в указанный блок на блок-схеме. Этот счетчик автоматически поддерживается программой. Пример: N$SAM для счетчика поступлений в блоке SAM. Этот счетчик не включает транзакцию, находящуюся в данный момент в обработке в текущем блоке. WjСчетчик ожидания, представляющий собой количество транзакций, ожидающих в данный момент в указанном блоке блок-схемы. Этот счетчик также автоматически поддерживается программой. Пример: WSHOLD для текущего счетчика ожидания в блоке HOLD. Этот счетчик также не включает транзакции, находящиеся в данный момент в обработке в текущем блоке.
Количество
ПрефиксЗначениеKjУказание на то, что целое число является константой. Пример K3276 для целого числа 3276 или KO для целого числа ноль. RN(x)Вычисленное случайное число (1<=x<=8). Значение числа – целое число от 0 до 999 включительно, если только данная величина не используется в качестве независимой переменной функции. В этом случае число является дробью, большей или равной нулю, но меньшей единицы. В любом случае все значения в указанном диапазоне считаются равновероятными. C1Текущее значение системного времени симулятора. Эта величина автоматически поддерживается программой.
Хранение
ПрефиксЗначениеSj Содержимое указанного хранилища в блок-схеме. Количество может быть изменено блоками ENTER и LEAVE. Пример: S2 для содержимого хранилища (номер) 2. Rj Количество свободных единиц пространства в указанном хранилище. Это количество может быть изменено блоками ENTER и LEAVE. Пример: R195 для оставшегося пространства в хранилище 195. SRj Заполненность хранилища j в частях на тысячу, то есть, если заполненность была 0,65, вычисленное значение будет 650. SAj Среднее содержимое хранилища j (усеченное). SMj Максимальное содержимое хранилища j. Это количество автоматически поддерживается программой. SCj Количество записей в хранилище J. Это количество автоматически поддерживается программой. STj Среднее время, в течение которого каждая транзакция использовала хранилище j (усеченное).
Объекты
ПрефиксЗначениеFjСтатус указанного объекта в блок-схеме. Это значение равно нулю, если объект доступен; в противном случае — единице. Это значение может быть изменено блоками SEIZE, RELEASE, PREEMPT и RETURN. Пример: F20 – статус объекта 20. FRjУтилизация объекта j в промилле, то есть, если утилизация составляла 0,88, значение FRj будет 880. FCjКоличество обращений к объекту j. FTjСреднее время использования объекта j каждой транзакцией (округленное).
Группы
ПрефиксЗначениеGjТекущее количество участников группы j.
Очереди
ПрефиксЗначениеQjДлина указанной очереди на блок-схеме. Это значение может быть изменено блоками QUEUE и DEPART. Пример: Q50 для содержимого очереди 50. QAjСреднее количество элементов в очереди j (усеченное). QMjМаксимальное количество элементов в очереди j. Это значение автоматически поддерживается программой. QCjКоличество элементов в очереди j. Автоматически поддерживается. QZjКоличество элементов в очереди j. Автоматически поддерживается. QTjСреднее время, в течение которого каждая транзакция находилась в очереди j (включая случаи с нулевым количеством элементов). При обращении значение будет усечено до целого числа. QXjСреднее время, в течение которого каждая транзакция находилась в очереди j (исключая случаи с нулевым количеством элементов). Усеченное.
integer. QXjAverage time each transaction was on queue j (excluding zero entries). Truncated.
Таблицы
ПрефиксЗначениеTBjВычисленное среднее значение для таблицы указанного типа гистограммы, определяемой пользователем. Блок TABULATE используется для ввода значений в одну из таких таблиц. Хотя вычисленное среднее может содержать дробную часть, она не сохраняется, если вычисленное среднее не используется в качестве независимой переменной функции. Пример: TB42 для вычисленного среднего значения таблицы 42. TCjКоличество элементов в таблице j. TDjВычисленное стандартное отклонение таблицы j.
Сохранить значения
ПрефиксЗначениеXjСодержимое полного сохранения j. XHjСодержимое полуслова j. MXj(a,b)Содержимое матрицы полного сохранения j, строка a, столбец b. (a и b могут быть любыми другими SNA) MHj(a,b)Содержимое матрицы полуслова сохранения j, строка a, столбец b.
Вычислительные атрибуты
ПрефиксЗначениеFNjA вычисленное значение функции. Сохраняется только целая часть, за исключением случаев использования в качестве модификатора функции в блоках GENERATE, ADVANCE или ASSIGN. VjАрифметическая комбинация стандартных числовых атрибутов, называемая переменным выражением и определяемая пользователем. Сохраняется только целая часть. (См. главу 4.)BVjВычисленное значение (1 или 0) булевой переменной j.