
- •Лекции по сим gpss
- •Средства формализации
- •Общие сведения о блоках
- •Транзакты
- •Сохраняемые величины.
- •Возможности собственных вычислений в gpss-моделях.
- •Gpss- функции
- •Моделирование псевдослучайных величин в gpss- моделях
- •Сбор статистики в gpss-моделях.
- •Вывод результатов моделирования в gpss‑модели
- •Управляющие карты gpss-модели
Транзакты
Транзакты вводятся в модель через блоки GENERATE и могут выводиться из модели через блоки TERMINATE.
В самом начале моделирования в блок‑схеме модели нет ни одного транзакта, все они находятся в пассивном буфере, который организован по правилам стека.
Число транзактов, первоначально находящихся в пассивном буфере, ограничено и определяется основной памятью используемой ЭВМ.
В процессе функционирования модели в ней может находиться одновременно достаточно большое число транзактов. Все они постепенно берутся с вершины пассивного буфера, а при выводе из модели туда же и возвращаются. Таким образом, некоторые транзакты могут неоднократно задействованы в модели, другие же, находящиеся ближе ко дну пассивного буфера, могут ни разу не участвовать в работе модели.
Направления, по которым осуществляется перемещение транзактов, отображаются конфигурацией блок‑схемы. Существует целый ряд блоков, управляющих движением транзактов по блок‑схеме в зависимости от выполнения некоторого условия, проверяемого в блоке, или реализации некоторого случайного события. Прохождение транзактом такого блока может изменить движение транзакта: определить его передачу не в следующий по расположению в блок-схеме блок, а в другой блок, имя или номер которого определяется логикой работы пройденного блока, управляющего движением транзакта.
Из всех транзактов, находящихся в блок‑схеме, в каждый момент модельного времени лишь один транзакт является активным (движущимся), все остальные пассивны. При входе его в очередной блок интерпретатор вызывает на выполнение фрагмент программы, соответствующий этому блоку.
Начав свое движение по блок‑схеме, активный транзакт продолжает его, до тех пор, пока не произойдет одно из трех событий:
транзакт входит в блок, функцией которого является задержка транзакта на некоторый интервал времени, в общем случае случайный;
транзакт входит в блок TERMINATE и выводится из блок‑схемы;
транзакт пытается войти в следующий блок, но блок отказывается принять его (например, прибор занят, или многоканальное устройство полностью заполнено, или переключающее устройство закрыто и т.п.). Реализуется так называемое условие блокировки. В этом случае транзакт остается в предыдущем блоке, и периодически будет повторяться попытка дальнейшего его продвижения. Оно становится возможным, если состояние ИМ изменится и условие блокировки будет снято.
После завершения движения активного транзакта, он становится пассивным, а новый транзакт становится активным. Порядок активизации транзактов определяется логикой работы интерпретатора.
Для рассмотрения этой логики используется следующая запись, характеризующая состояние транзакта:
[N, T, NTB, PR, NSB], где
N – номер транзакта (в соответствии с первоначальной нумерацией транзактов в пассивном буфере),
T – время, на которое запланировано дальнейшее движение транзакта (для транзактов, попавших в условие блокировки, на этом месте используется аббревиатура КМР – как можно раньше);
NTB – номер текущего блока нахождения транзакта;
PR – приоритет транзакта (значения приоритета – целые числа от 0 до 127: чем больше значение, тем больше приоритет). Значения приоритета могут определяться при входе транзакта в ИМ из блока GENERATE (по умолчанию – приоритет 0), изменяться при прохождении блока PRIORITY. Параметр транзакта, определяющий его приоритет, используется для моделирования относительного приоритета заявок в моделях СМО;
NSB – номер следующего блока для движения транзакта.
В дополнение к параметру PR каждый транзакт может иметь до 100 параметров. С помощью них, в частности, может моделироваться неоднородность заявок СМО: эта неоднородность может задавать логику движения транзакта в СМО, временные характеристики воздействия блоков на транзакт и др.
При перемещении транзакта по модели его параметры могут устанавливаться и изменяться и использоваться в соответствии с логикой моделирования. Использоваться в определенный момент работы имитационной программы могут только параметры активного транзакта.
Основные правила определения параметров транзакта:
Число используемых параметров транзакта определяется операндом F блока GENERATE;
СЧА параметров транзакта определяется Pj, где Р- групповое имя, j – номер параметра (символическое имя не используется);
Значениями параметров транзакта могут быть целые числа со знаком и без знака. Формат параметров определяется операндом G блока GENERATE, из которого он вышел (H- полуслово (
), F- слово (
).
При входе в модель все параметры транзакта имеют нулевые значения
Устанавливаться и изменяться могут при прохождении блока ASSIGGN
Использоваться параметры транзакта могут:
в качестве операндов блоков,
в качестве аргументов GPSS-функций,
описания арифметического выражения.
Описание некоторых блоков
Блок GENERATE – ввод транзактов в модель
Операнды: А, В – используются для моделирования интервала модельного времени между транзактами. Если заданы числами, то А- определяет мат. ожидание ЗРПВ, В – определяет половину интервала области определения.
С- смещение момента входа в модель 1-го транзакта;
D- ограничитель числа транзактов (по умолчанию ∞);
Е- уровень приоритета транзактов (по умолчанию 0);
F – число используемых параметров;
G – формат используемых параметров.
Блок TERMINATE- вывод транзактов из модели
Операнды: А- указатель уменьшения счетчика завершений и счетчика снимков (по умолчанию =0).
Счетчик завершений (СЗ) – это ячейка памяти, в которую первоначально с помощью управляющей карты START заносится целое положительное число. Это значение уменьшается на величину А при прохождении транзактом блока TERMINATE с операндом А. Как только значение СЗ станет ≤ 0, то процесс моделирования завершается. Счетчик снимков действует аналогично (см. вывод результатов моделирования).
Блоки SEIZE (занять прибор) и RELEASE (освободить прибор)
Операнд А – символическое или числовое имя прибора (обязательный операнд). Если прибор занят, то для следующего транзакта возникаент условие блокировки.
СЧА прибора:
Fj или F${имя} = 0 – прибор не занят, 1 – занят;
FC – количество занятий прибора
FA – загрузка прибора, FT –средняя задержка транзактов на приборе.
Блок ADVANCE – реализация задержки транзакта.
Операнды А, В – используются аналогично соответствующим операндам блока GENERATE.
Блоки QUEUE и DEPART – регистраторы очередей
Используются для сбора статистики по очереди.
Блок QUEUE регистрирует вход транзакта в очередь с именем, определяемым операндом А, а блок DEPART –выход из соответствующей очереди. Операнд В определяет число мест в очереди, занимаемых одним транзактом (по умолчанию =1).
СЧА регистраторов очередей:
Qj или Q${имя} – текущая длина очереди,
QA – средняя длина очереди, QC – число входов в очередь, QM – максимальная длина очереди, QT – среднее время пребывания в очереди с учетом нулевых входов, QX- без учета нулевых входов, QZ – число нулевых входов.
Блоки ENTER – вход в МКУ, LEAVE- выход из МКУ
Операнды А – имя МКУ, В –число каналов МКУ занимаемых (освобождаемых) транзактом (по умолчанию =1).
Исходное число каналов МКУ задается картой описания
STORADGE
(имя МКУ1, емкость МКУ1/… символическое
имя начинается с $).
Групповые имена СЧА МКУ: R – текущая емкость незаполненной части, S – емкость заполненной части, SA – среднее число занятых каналов, SC- число входов, SM- максимальное число занятых каналов, SR – загрузка МКУ, ST – среднее время пребывания транзактов в МКУ.
Блок PRIORITY – изменение уровня приоритета транзакта.
Операнд А – новый уровень приоритета транзакта (по умолчанию 0).
Блок ASSING – блок определения и изменения параметров транзакта.
Операнд А – определяет номер модифицируемого параметра транзакта (например, если А=3, определяется параметр №3; если А=Р3, определяется параметр транзакта, номер которого записан в параметре №3 транзакта; если А=4+, увеличивается параметр №4 транзакта; если А=Р2-, то уменьшается параметр транзакта, номер которого записан в параметре №23 транзакта);
Операнд В – величина, используемая для определения или модификации параметра транзакта.
Возможен режим работы блока с использованием GPSS- функций. В этом режиме используются операнды А, В, С. Операнд С определяет № GPSS- функции, участвующей в определении или модификации параметра транзакта; операнд В- величина, на которую умножается вычисленное значение GPSS- функции.
Блоки, управляющие движением транзактов
Блок TRANSFER – передача транзакта в зависимости от режима работы:
а) режим безусловной передачи (TRANSFER,В).
Операнд А – не используется, операнд В – имя (метка) блока безусловной передачи;
б) режим условной передачи (TRANSFER ВOTH,В,C)
Операнд А – слово «BOTH», операнд В – имя (метка) следующего блока, операнд С – имя блока, куда передается транзакт, если следующий блок отказывается его принимать;
в) режим передачи по вероятности (TRANSFER .A,В,C).
Операнд А – мантисса десятичного числа, начинающаяся с точки и определяющая вероятность передачи транзакта в блок, имя которого определяет операнд С, операнд В – имя (метка) следующего блока.
Блок TEST – передача транзакта в зависимости от сравнения двух СЧА.
Операнды А и В – имена сравниваемых СЧА, операнд С – имя блока, куда передается транзакт, если условия сравнения не выполняются.
Вспомогательный операнд Х определяет используемое условие сравнения СЧА: X={G, GE, L, LE, E, NE}.
Блок LOOP – организация циклического прохождения транзакта через блок-схему.
Операнд А- номер уменьшаемого на 1 параметра транзакта при прохождении этого блока, операнд В – имя блока, куда передается транзакт, если значение его уменьшаемого параметра еще не 0.
Блок GAТE – логический переключатель.
Определяет дальнейшее движение пришедшего в него транзакта.
Используется в следующих режимах:
а) режим работы с логическим переключателем,
Операнд А - имя логического переключателя (ЛП). Блок управления изменением состояния логического переключателя реализуется в другом, предназначенном для этого сегменте.
Вспомогательный операнд Х – проверяемое состояние ЛП:
Х={LS(ЛП -установлен), LR(ЛП - сброшен)}.
Операнд В - имя блока, куда передается транзакт, если проверяемое состояние логического переключателя является ложным. Если он не задан, то возникает состояние блокировки (режим отказа).
б) режим работы с прибором или МКУ. В свою очередь режим работы с прибором или МКУ может реализоваться в виде двух подрежимах:
(отказа и условной передачи)
Операнд А - имя прибора или МКУ, с которым работает блок GAТE.
Операнд В - имя блока, куда передается транзакт, если проверяемое состояние прибора (МКУ) является ложным ( в подрежиме отказа операнд В не определяется и для транзакта возникает условие блокировки).
Вспомогательный операнд Х определяет тип элемента (прибор или МКУ) и проверяемое его состояние:
Х={U (прибор занят), NU (прибор не занят), SF- МКУ полностью заполнено, SNF – МКУ заполнено не полностью, SE – МКУ пусто, SNE – МКУ не пусто}.
Блок LOGIC – блок управления состоянием логического переключателя (он, как правило, находится в другом сегменте блок-схемы по отношению к блоку GAТE).
Операнд А – имя логического переключателя, вспомогательный операнд
Х= {R (сбросить), S(установить), I(инвертировать)}.
Начальное состояние всех ЛП по умолчанию – «сброшен».
Начальное состояние ЛП «установлен» определяется картой описания
INITIAL LS2/LS4/LS$MARK (установлены ЛП с номерами 2 и 4 и именем MARK).
Блок SELEKT – выбор элемента блок-схемы GPSS-модели и определение в соответствии с этим выбором направления дальнейшего движения транзакта.
Операнды: А- номер параметра транзакта, в который заносится найденный в результате выбора номер элемента модели;
В, С – минимальный и максимальный номера элементов рассматриваемого типа, из которых производится выбор;
D- значение, с которым при выборе идет сравнение;
Е – групповое имя СЧА, участвующее в сравнении (определяет тип рассматриваемого элемента и его переменную состояния, по которой осуществляется выбор);
Х – вспомогательный операнд, определяющий тип операции сравнения (X={G, GE, L, LE, E, NE, min, max}). В операциях min, max операнд D не используется.
Для блока SELEKT возможен логический режим, в котором осуществляется выбор среди приборов или МКУ.
Операнды D и Е в этом режиме не используются.
Вспомогательный операнд принимает следующие значения:
Х={LS (ЛП- установлен), LR (ЛП – сброшен), U (прибор занят), NU (прибор не занят), SF- МКУ полность заполнено, SNF – МКУ заполнено не полностью, SE – МКУ пусто, SNE – МКУ не пусто}.
Примеры типовых конструкций из блоков в GPSS-моделях.
Одноканальная СМО с двумя входными потоками и соответствующими им неограниченными регистрируемыми очередями
СМО с двумя входными потоками и одной неограниченной регистрируемой очередью
3. Одноканальная СМО с ограниченной по числу мест очередью
4. СМО с многоканальным устройством обслуживания и неограниченной по числу мест регистрируемой очередью
5. СМО с тремя ветвями обслуживания и одним входным потоком с выбором каждой очередной заявкой первого свободного канала, а при его отсутствии – ветви с очередью наименьшей длины
6. СМО с семичасовым рабочим днем и часовым перерывом
7. Сегмент задания времени прогона GPSS-модели
Логика работы интерпретатора GPSS-модели.
Теоретические положения
Таймер GPSS–модели регистрирует только целые значения модельного времени. Единица времени, с которой работает таймер, определяется разработчиком и задается в неявном виде в форме параметров временных данных (значений операндов блоков), вводимых в модель и выраженных в единицах модельного времени. Выбор единицы модельного времени осуществляется с учетом динамики моделируемых процессов и точности их отображения.
Интерпретатор реализует логику метода модельных событий с помощью двух списковых структур:
цепь будущих событий (ЦБС);
цепь текущих событий (ЦТС).
Эти две структуры определяют положение транзакта в модели с точки зрения продвижения модельного времени и правил активизации транзактов.
ЦБС (является аналогом СБС в ММС) состоит из транзактов, движение которых по модели запланировано на некоторый момент в будущем:
а) планируется выход транзакта из блока GENERATE. В момент успешного выхода транзакта из этого блока соответствующая запись из ЦБС удаляется, но тут же, после выхода интерпретатор заносит в ЦБС следующую запись, соответствующую последователю этого транзакта в блоке GENERATE.
б) транзакт попал в блок ADVANCE (блок задержки).
Транзакты в ЦБС упорядочены по увеличению модельного времени, на которое запланировано их дальнейшее движение. При совпадении времени (узел событий) они располагаются в порядке занесения в ЦБС.
ЦТС состоит из транзактов (а точнее – соответствующих им записей), для которых продвижение в модели планируется в текущий момент модельного времени или в течение ближайшего времени.
В ЦТС транзакты упорядочены по приоритетам (больший приоритет вперед). Если приоритет одинаков, то — в порядке занесения в ЦТС.
ЦБС фактически эквивалентна списку будущих событий в методе модельных событий, а ЦТС используется интерпретатором для реализации процессно‑ориентированной логики обработки критических событий.
Логика работы GPSS‑интерпретатора включает 3 фазы:
Фаза ввода – выполняется однократно в начале работы ИМ и состоит в последовательном просмотре блоков модели, выявлении блоков GENERATE и в формировании для каждого блока записи в ЦБС для первого транзакта, который должен выйти через этот блок в модель.
Фазы КТМВ и ПЦТС выполняются итеративного до окончания моделирования.
Фаза коррекции таймера модельного времени заключается в переносе транзакта (транзактов) с наименьшим временем планируемого начала движения из ЦБС в ЦТС и соответствующем скачкообразном увеличении модельного времени.
Фаза просмотра ЦТС соответствует одному моменту модельного времени, определенному в предыдущей фазе, и заключается в последовательном продвижении транзактов, находящихся в ЦТС через возможно большее число блоков. Возврат на начало ЦТС осуществляется в том случае, когда при очередном перемещении транзакт проходит блок, снимающий условие блокировки (например, блоки RELEASE, LIAVE и др.).
Осуществление этой фазы реализует так называемую процессно-ориентированную логику обработки событий в ИМ.
В GPSS предусмотрен специальный механизм задания времени прогона ИМ с помощью так называемого «счетчика завершений». Начальное значение этого счетчика определяется разработчиком ИМ через операнд А управляющей карты START, а затем может быть организовано периодическое уменьшение этого значения в специальном сегменте модели, составленном из блоков GENERATE и TERMINATE. Как только счетчик завершений обнуляется, прогон ИМ завершается.
В GPSS используются два понятия и, соответственно, измерения модельного времени: абсолютное модельное время, измеряемое с самого начала работы имитационной программы, и относительное время, измеряемое с момента сброса в нулевое состояние собранной статистики (это делается после обработки интерпретатором специальной управляющей карты RESET и необходимо для отсечения переходных процессов при оценке статистических характеристик стационарных эргодических процессов).
Иллюстрация на примере
Постановка задачи.
Построить GPSS-модель одноканальной СМО с неограниченной очередью.
Цели моделирования: исследовать загрузку КО и длину очереди.
Исходные данные:
ЗР интервалов времени между заявками во входном потоке ЗРПВ [18,6];
ЗР времени обслуживания – ЗРПВ [16,4].
Время прогона ИМ – 480.
Блок-схема такой GPSS-модели имеет вид:
Рассмотрим функционирование GPSS-модели в предположении следующей численной реализации случайных величин:
-
интервал между заявками входного потока;
-
время обслуживания заявки;
и соответствующей реализации следующих переменных:
-
время входа заявки в систему,
-
время начала обслуживания заявки,
- время окончания
обслуживания заявки.
№ заявки |
|
|
|
|
|
1 |
14 |
14 |
18 |
14 |
32 |
2 |
13 |
27 |
12 |
32 |
44 |
3 |
17 |
44 |
14 |
44 |
58 |
4 |
15 |
59 |
- |
- |
- |
Графики, отражающие динамику работы СМО в соответствии с этими цифрами, имеют следующий вид:
Таблица, отражающая логику работы GPSS-интерпретатора для рассматриваемого примера ([N, T, NTB, PR, NSB])
№ Стр. |
Модельное время |
Цепь текущих событий |
Цепь будущих событий |
1 |
до ф. ввода |
пусто |
пусто |
2 |
после ф. ввода |
пусто |
[1,14,Нет,0,1], [2,480,Нет,0,8] |
3 |
после ф.КТМВ t=14 |
[1,КМР,Нет,0,1] |
[2,480,Нет,0,8] |
4 |
после ф. ПЦТС t=14 |
пусто |
[3,27,Нет,0,1], [1,32,5,0,6], [2,480,Нет,0,8] |
5 |
после ф.КТМВ t=27 |
[3,КМР,Нет,0,1] |
[1,32,5,0,6], [2,480,Нет,0,8] |
6 |
после ф. ПЦТС t=27 |
[3,КМР,2,0,3] |
[1,32,5,0,6], [4,44,Нет,0,1], [2,480,Нет,0,8] |
7 |
после ф.КТМВ t=32 |
[3,КМР,2,0,3], [1, КМР,5,0,6] |
[4,44,Нет,0,1], [2,480,Нет,0,8] |
8 |
после ф. ПЦТС t=32 |
пусто |
[4,44,Нет,0,1], [3,44,5,0,6], [2,480,Нет,0,8] |
9 |
после ф.КТМВ t=44 |
[4,КМР,Нет,0,1], [3, КМР,5,0,6] |
[2,480,Нет,0,8] |
10 |
после ф. ПЦТС t=44 |
пусто |
[4,58,5,0,6], [1,59,Нет,0,1], [2,480,Нет,0,8] |
Для напоминания о соответствии номеров и имен блоков:
1-G; 2-Q; 3- S; 4- D; 5-A; 6 – R; 7 – T; 8- G; 9 – T.