Пособие Моделирование1234 (538757), страница 9
Текст из файла (страница 9)
Очереди имеют следующие стандартные числовые атрибуты:
Q$j - текущая длина очереди j;
QM$j - максимальная длина очереди j;
QA$j - средняя длина очереди j;
QC$j - число входов в очередь j;
QZ$j - число входов в очередь с нулевым временем пребывания (транзакт
прошел через блок QUEUE, не задерживаясь в очереди);
QT$j - среднее время пребывания в очереди], включая нулевые входы;
QX$j - среднее время пребывания в очереди], без нулевых входов.
1.8 ТАБЛИЦЫ
Для сбора статистических данных о различных отчетах модели и их представления в стандартной табличной форме используют таблицы. Занесение информации в таблицу осуществляется блоком TABULATE в момент входа очередного транзакта в этот блок. Описание структуры таблицы и типа заносимых данных (СЧА) осуществляется картой TABLE.
Стандартные числовые атрибуты таблиц:
TB$j - среднее значение фиксируемой в таблице переменной;
TC$j - число входов в таблицу];
TD$j - стандартное среднеквадратическое отклонение табулируемой переменной.
1.9 ЯЧЕЙКИ
Для записи в процессе моделирования текущих значений СЧА используют ячейки. Занесение информации в ячейку осуществляет блок SAVEVALUE. При входе транзакта в этот блок требуемое значение СЧА фиксируется в ячейке, номер которой определяется операндом блока SAVEVALUE. Ячейки имеют различные форматы (слово, полуслово, с плавающей точкой),которым соответствуют следующие СЧА:
Х$] - текущее значение, записанное в ячейке j формата слово;
XH$j - текущее значение, записанное в ячейке j формата полуслова;
XL$j - содержимое ячейки с плавающей точкой.
Изменение содержимого ячеек может осуществляться блоками SDECREMENT и SINCREMENT. Блок SDECREMENT вычитает заданное значение из величины, содержащейся в ячейке. Блок SINCREMENT добавляет требуемое приращение к содержимому ячейки.
1.10 ФУНКЦИИ И ПЕРЕМЕННЫЕ
Функции служат для отображения зависимостей между двумя (СЧА. В GPSS/PC имеется два типа функций: непрерывные (С) и дискретные (D). Функцию задают набором пар точек - координат. Непрерывная функция воспроизводится в виде ломаной кривой, отрезки которой соединяют соседние точечные значения.
Дискретная функция имеет вид ступенчатой кривой. На рис. 1.3 представлены непрерывная (а) и дискретная (б) функции, соответствующие одному и тому же набору точек ,
;
,
;
,
;
,
, где X означает аргумент, а Y - значение функции.
Функцию описывают картой FUNCTION. За ней помещают одну или несколько карт, содержащих координатные точки.
Карта описания функции задает ее тип, количество пар точек ( ,
) и СЧА, используемый в качестве аргумента. Формат этой карты имеет следующий вид:
НОМЕР FW[CTION] A,B
Где: НОМЕР - номер функции, задаваемый программистом;
А - аргумент (любой СЧА);
В - тип функции.
Тип функции указывают как - для непрерывной и
- для дискретной функции, где n - число пар точек (
,
).
Карты, содержащие точки ( ,
), имеют следующий вид:
,
/
,
/.../
,
/.../
,
причем обязательно
<
<...
<...<
.
В GPSS/PC существуют также операторы для описания переменных, составляемых из стандартных числовых атрибутов. Целочисленные переменные, а также булевы переменные описывают оператором VARIABLE. Переменные с плавающей точкой
описывают оператором FVARIABLE.
Операторы переменной имеют следующий формат:
ИМЯ VARIABLE SNA(oper)SNA(oper)... (FVARIABLE)
где:
SNA - допустимые стандартные числовые атрибуты;
(орег) - арифметические и логические операции:
"+" - сложить;
"-" - вычесть;
"/" - разделить;
"@" - разделить по модулю;
"()" -скобки;
"1" - логическое "И";
" " - логическое "ИЛИ";
"=" - равенство;
"о" - не равно;
"<" - меньше;
">=" - больше чем или равно;
"<=" - меньше чем или равно;
">" - больше.
2 ФОРМАТЫ ОПЕРАТОРОВ GPSS/PC
Операторы GPSS/PC имеют следующий формат:
Метка Операция Операнды ;Комментарии
Знак "_" указывает пробел, знак ";" объявляет начало поля комментариев.
Метка, если она имеется, должна начинаться с первой колонки и содержать не более пяти алфавитно-цифровых символов, начинающихся с буквы.
Звездочка (*) в первой колонке означает строку комментариев.
Поле операции содержит название блока или служебного оператора (карты). Это поле может начинаться со второй колонки и должно быть отделено от метки пробелом. Длина поля операции не менее четырех символов (начальные символы блоков или карт).
Поле операндов отделяют от поля операции пробелом. Между операндами должны стоять запятые.
Пример:
^FACILITY DESCRIPTION
FAC SEIZE 1 ;CPU
ADVAN 10,5 ;MSEC
RELEASE 1
MAC TRANSFER 3,FAC
Карты описания таблиц, функций, переменных и памятей должны иметь в поле метки число от 1 до 32767 (2Л15 - 1) или предварительно определенный символ.
Примеры:
^ ENTITIES DESCRIPTION
1 STORAGE 1280 ;MAIN
4 TABL М1Д10ДО
В полях операндов могут быть использованы следующие обозначения.
Константа - целое число от 1 до 32767 или предварительно определенная последовательность символов.
СЧА $ const -стандартный числовой атрибут, номер которого определяется
константой const.
* const -значение параметра, номер которого определяется константой const
СЧА1*СЧА2 $ const - косвенная адресация с использованием стандартного -числового атрибута 1 (СЧА1), номер которого задан значением стандартного числового атрибута 2 (СЧА2), определяемого константой const.
СЧА%СЧА $ const - косвенная адресация через стандартные числовые атрибуты.
Примеры:
XF*V$2
Содержимое полнословной ячейки, номер которой определяется значением переменной 2.
FN*P$1 Значение функции,номер которой определяется содержимым параметра 1.
ХЩ2 Содержимое полусловной ячейки номер два.
*TERM
Значение параметра, номер которого определен константой TERM. В описательной части программы значение константы TERM должно быть определено оператором EQU, например: TERM EQU 10 при этом *TERM означает содержимое десятого параметра.
Ниже дано полное описание форматов блоков, а также служебных и управляющих операторов GPSS/PC.
2.1 БЛОКИ
2.1.1 ADVANCE (ЗАДЕРЖАТЬ)
ADVANCE - задерживает транзакт.
Формат: ADVA[NCE] A,B
А - среднее время задержки (константа, если В не задано);
В - разброс относительно среднего значения, должен быть меньше или равен А.
Блок ADVANCE моделирует временную задержку транзакта в течение определенного интервала. Значение задержки по умолчанию равно нулю. Если поле В не является FN$, то время задержки является случайным числом, распределенным равномерно на интервале от (А+В) до (А-В). Если поле В является функцией FN$, то время задержки определяется произведением поля А на значение функции в поле В. Функция может быть использована для задания времени задержки с определенным средним значением и отклонением, зависящими от А.
Примеры:
ADVANCE 75
Транзакт будет оставаться в блоке ADVANCE в течение 75 единиц модельного времени.
ADVANCE 12,5
Транзакт будет оставаться в блоке от 7 до 17 единиц времени.
ADVANCE 5,FN$1
Время задержки равно произведению значения функции FN$1 на число пять.
См.также:
GENERATE
2.1.2 ASSEMBLE (СОЕДИНИТЬ)
ASSEMBLE - объединение транзактов, принадлежащих одному семейству (или ансамблю).
Формат: ASSE[MBLE] A
А - число объединяемых транзактов.
Первый транзакт семейства, достигнув блока ASSEMBLE, задерживается в нем до тех пор, пока остальные члены семейства не поступят в этот блок. Когда транзакты, число которых указано в поле А, поступят в этот блок, они будут удалены из модели, а первый прибывший транзакт продолжит движение.
Пример:
ASSEMBLE 3
После того, как 3 транзакта одного семейства войдут в блок, один (первый) выйдет из блока и продолжит движение, остальные будут уничтожены.
См.также:
GATHER
MATCH
SPLIT
2.1.3 ASSIGN (ПРИСВОИТЬ)
ASSIGN - изменяет значение параметра транзакта.
Формат: ASSI[GN] A,B
А - номер изменяемого параметра (+, -);
В - новое значение параметра.
Если за полем А следует знак "+" или "-", то значение поля В соответственно добавляется или вычитается из А. Если знаки "-" или "+" не указаны, то значение поля В становится текущим значением параметра.
Примеры:
ASSIGN 2,8
Присваивает параметру 2 значение 8.
ASSIGN 3+,V$5
Добавляет значение переменной 5 к параметру 3.
См.также:
DECREMENT INCREMENT
2.1.4 BUFFER (ВОЗОБНОВИТЬ ПРОСМОТР СПИСКА)
BUFFER - возобновляет просмотр списка текущих событий.
Формат: BUFF[ER]
Не имеет операндов.
Останавливает процесс движения транзакта и заново начинает просмотр списка текущих событий. Не связан с временем задержки.
Пример:
BUFFER Возобновляет просмотр списка текущих событий.
См.также:
PRIORITY
2.1.5 DECREMENT (УМЕНЬШИТЬ ЗНАЧЕНИЕ)
DECREMENT - уменьшает значение параметра транзакта.
Формат: DECREMENT] A,B
А - номер изменяемого параметра;
В - значение для вычитания.
Величина, указанная в поле В, вычитается из значения параметра, номер
которого указан в поле А.
Примеры:
DECREMENT 3,7
Вычитается число 7 из значения третьего параметра текущего транзакта.
DECREMENT XH$6,V$4
Значение переменной 4 вычитается из параметра, номер которого задан ячейкой 6 формата полуслово.
См.также:
ASSIGN INCREMENT
2.1.6 DEPART (ПОКИНУТЬ ОЧЕРЕДЬ) DEPART - удаляет транзакт из очереди.
Формат: DEPA[RT] A,B
А - номер (имя) очереди;
В - число удаляемых из очереди элементов.
Удаляет текущий транзакт из очереди, указанной в поле А, и уменьшает содержимое очереди на значение поля В. Транзакт может находиться одновременно в двух различных очередях.
Примеры:
DEPART 5
Текущий транзакт удаляется из очереди 5, а длина очереди уменьшается на единицу.
DEPART P$3,7
Транзакт удаляется из очереди, номер которой определен параметром 3, длина очереди уменьшается на 7 элементов.
См.также:
QUEUE
2.1.7 ENTER (ВОЙТИ В ПАМЯТЬ) ENTER - помещает транзакт в память.
Формат: ENTE[R] A,B
А - имя памяти символическое или числовое;
В - число занимаемых единиц памяти (по умолчанию единица).
Проверяется наличие свободного объема памяти, номер которой определен в поле А. Если имеется свободная память, то транзакт входит в блок ENTER. При этом занятый объем памяти увеличивается на значение поля В. Если транзакт не может войти в блок ENTER, он задерживается в предыдущем блоке.
Примеры:
ЕNTER 1
Войти в память 1, занимая единицу ее объема.
ENTER Р$1ДО
Войти в память, номер которой определяется параметром 1, занимая 10 единиц памяти.
См.также:
LEAVE STORAGE
2.1.8 GATE (ВПУСТИТЬ)
GATE - вспомогательный блок, проверяющий состояния устройств, памятей, логических ключей.
Формат: GATE_R A,B
Внутренний операнд R определяет проверяемое условие в виде стандартного
логического атрибута и может принимать следующие значения:
U - устройство занято;
NU - устройство не занято;
I - устройство прервано;
N1 - устройство не прервано;
SF - память заполнена;
SNF - память не заполнена;
SE - память пустая;
SNE - память не пустая;
LR - ключ выключен;
LS - ключ включен;
М - транзакт находится в состоянии синхронизации;
MN - транзакт не находится в состоянии синхронизации.
Если проверяемое условие для объекта, номер которого определяется полем А, выполняется (СЛА "ИСТИНА"), то транзакт входит в блок GATE. Если условие "ЛОЖЬ", то возможны два случая:
-
если поле В задано, то транзакт идет в блок, номер которого указан в поле В;
-
если в поле В пробел, то транзакт ждет в предыдущем блоке, пока не
выполнится условие.
Примеры:
GATE_SF 1
Если память номер 1 полна, то транзакт входит в блок GATE, в противном случае ждет ее заполнения.
GATE_NU P$2,MET
Если устройство, номер которого определен параметром Р$2, не занято,то транзакт входит в блок GATE, в противном случае он идет в блок с именем МЕТ.
2.1.9 GATHER (СОБИРАТЬ)
GATHER - накапливает транзакты, являющиеся
членами семейства.
Формат: GATHER_A
А - счетчик транзактов, которые должны быть накоплены.
Транзакты одного семейства задерживаются в блоке GATHER до тех пор, пока их число не станет равным значению поля А. Когда последний транзакт войдет в блок GATHER, все они одновременно выходят из него в том порядке, в котором поступили. Состояние блока GATHER может быть проверено блоком GATE.
Пример:
GATHER 6
Транзакты накапливаются в этом блоке до тех пор, пока в нем не соберутся шесть транзактов из одного семейства, после чего все они смогут продолжать движение.
См.также:
ASSEMBLE
MATCH
SPLIT
2.1.10 GENERATE (ГЕНЕРИРОВАТЬ)
GENERATE - вводит транзакты в модель.
Формат: GENE[RATE] A,B,C,D,E,F,G
А - среднее значение интервала времени;
В - разброс или модификатор среднего значения (по умолчанию ноль);
С - время появления первого транзакта;
D - общее число генерируемых транзактов;
Е - уровень приоритета каждого транзакта; (от 0 до 127, знач. по умолчанию 0);
F - число параметров (по умолчанию 12);
G - тип параметра (F -полнословный,
Н -полусловный -по умолчанию).
Вводит транзакты в модель, посылая их в следующий по порядку блок. Если в поле В не указана функция, то интервал между поступлением транзактов определяется случайным числом, равномерно распределенным в диапазоне от (А-В) до (А+В). Если поле В является функцией (FN$), то этот интервал определяется произведением поля А на значение функции, заданной в поле В.
Примеры:
GENERATE 15,3,25
Генерируются транзакты с интервалом прихода от 12 до 18 единиц времени, первый из которых поступает в момент времени 25 единиц.
GENERATE 5,FN$2,,15
Генерируются транзакты с приоритетом 15, интервалы времени между ними определяются произведением числа 5 на значение функции FN$2.
См.также:
ADVANCE TERMINATE
2.1.11 PREEMPT (ПРЕРВАТЬ)
PREEMPT - переводит устройство в прерванное состояние.
Формат: PREE[MPT] A
А - номер прерываемого устройства.
Транзакт получает в пользование устройство, указанное в поле А, если это устройство не было прервано другим транзактом. Если предьщущий транзакт захватил устройство через блок PREEMPT, текущий транзакт блокируется.
Пример:
PREEMPT P$l
Если устройство, номер которого задан параметром Р1, не было переведено в состояние прерывания, то транзакт, входящий в этот блок, захватывает его.
См.также:
SEIZE
RELEASE
RETURN
2.1.12 PRINT (НАПЕЧАТАТЬ)
PRINT - печатать до семи значений СЧА.
Формат: PRIN[T] SNAI,SNA2,...,SNA7
SNA - любые допустимые стандартные числовые атрибуты.
Печатается список от 1 до 7 СЧА при каждом входе транзакта в этот блок. Значения СЧА не изменяются.
Примеры:
PRINT P$1,P$2,P$3,P$4
Печать значений параметров 1,2,3,4.
PRINT XH$3,XH$4,V$2,FR$8,P$9,P$10
Печать значений ячеек 3 и 4, переменной 2, коэффициента использования прибора 8 и содержимого параметров 9 и 10.
-
PRIORITY (НАЗНАЧИТЬ ПРИОРИТЕТ)
PRIORITY - изменяет уровень приоритета транзакта.
Формат: PRIOfRITY] A,BUFFER
А - новый приоритет (целое число в диапазоне от 0 до 127); [BUFFER] - указывает возобновление процедуры просмотра списка текущих событий.
Устанавливает приоритет входящему транзакту в соответствии со значением поля А. Если операнд BUFFER отсутствует, продолжается обработка текущего транзакта. Если операнд BUFFER указан, то текущий транзакт помещается в список текущих событий и возобновляется просмотр списка.
Примеры:
PRIORITY 4
Назначить транзакту уровень приоритета 4, попытка продвинуть транзакт в следующий блок.
PRIORITY XF$1,BUFFER
Назначить транзакту приоритет, равный значению ячейки 1, поместить транзакт в список текущих событий и возобновить его просмотр.
См.также:
BUFFER GENERATE
2.1.13 QUEUE (СТАТЬ В ОЧЕРЕДЬ) QUEUE - помещает транзакт в конец очереди.
Формат: QUEU[E] А,В
А - номер очереди (числовое или символьное имя очереди); В - число добавляемых к очереди элементов (по умолчанию 1).
Увеличивает текущее содержимое очереди, указанной в поле А, на значение в поле В. Если поле В не определено, увеличивает содержимое очереди на единицу. Транзакт может находиться в двух различных очередях одновременно.
Примеры:
QUEUE 5
Присоединить транзакт к очереди 5,увеличив ее длину на единицу.
QUEUE P$l,3
Стать в очередь, указанную в параметре 1, и увеличить ее длину на 3.
См.также:
DEPART
-
RELEASE (ОСВОБОДИТЬ)
RELEASE - освобождает устройство.
Формат: RELE[ASE] A
А - номер устройства (числовое или символьное имя освобождаемого устройства).
Устройство, указанное в поле А, освобождается и становится доступным для других транзактов. Освобождать устройство должен тот же транзакт, который его занимал.
Примеры:
RELEASE 10
Освободить устройство 10.
RELEASE P$2
Освободить устройство, указанное в параметре 2.
См.также:
PREEMPT
RETURN
SEIZE
2.1.15 TABULATE (ЗАНЕСТИ В ТАБЛИЦУ)
TABULATE - заносит значение в таблицу.
Формат: TABULATE] A,B А -номер таблицы;
В - вес, указывающий сколько раз значение должно быть занесено в таблицу (по умолчанию 1).
Транзакты, входящие в блок TABULATE, осуществляют занесение данных в таблицу, указанную в поле А. Поле В определяет весовой фактор, который используется, если данные заносятся во взвешенную таблицу. Описание структуры таблицы осуществляется картой TABLE.
Примеры:
TABULATE 4 Занести значение в таблицу 4 с весом 1 (т.е один раз).
TABULATE P$3,5
Занести наблюдаемую величину с весом 5, т.е 5 раз, во взвешенную таблицу, указанную в параметре.
2.1.16 TERMINATE (ЗАВЕРШИТЬ)
TERMINATE - удаляет транзакт.
Формат: TERMINATE] A
А - величина, вычитаемая из содержимого счетчика завершений (поле А карты
Транзакт удаляется из модели и поступает в пассивный буфер. Если в поле А пробел, воздействия на счетчик завершений не происходит, в противном случае его значение уменьшается на величину, указанную в поле А.
Примеры:
TERMINATE Транзакт удален, но значение счетчика завершений не изменяется.
TERMINATE 2 Значение счетчика завершений уменьшается на 2.
См.также:
GENERATE
2.1.17 TEST (ПРОВЕРИТЬ) TEST - сравнивает два стандартных числовых атрибута.
Формат: TESTj A,B,C
г - внутренний операнд, принимающий значения:
Е - равно;
NE - не равно;
L - меньше чем;
LE - меньше чем или равно;
G - больше чем;
GE - больше чем или равно;
А - стандартный числовой атрибут;
В - стандартный числовой атрибут;
С - номер альтернативного блока.
Значения стандартных числовых атрибутов, указанных в поле А и В, сравниваются отношением, определяемым операндом г. Если условие выполняется, транзакт вводится в блок. Если условие не выполняется и определено поле С, транзакт переходит в указанный блок, если же С не задано, транзакт задерживается в предыдущем блоке.
Примеры:
TEST_E P$1,2,LABEL
Если значение первого параметра равно двум, транзакт войдет в блок TEST и продолжит движение в следующий блок. Если значения не равны, транзакт перейдет в блок с меткой LABEL.
TEST_L FN$2,P$2
Если функция 2 меньше, чем параметр 2, транзакт входит в блок TEST, в противном случае он становится заблокированным.
2.1.18 TRANSFER (ПЕРЕДАТЬ)
TRANSFER - изменяет движение транзакта в модели.
Формат: TRANSFER] A,B,C,D
А - режим передачи (пробел,. ДЬЬЗОТН,Ж,Р,Р1СК,8ВК,81М);
В - следующий блок;
С - следующий блок;
D - значение индекса, используемое в режиме ALL.
Транзакт направляется в блок, определяемый в соответствии с режимом передачи, указанным в поле А.
Режимы передачи поля А:
-
Пробел - транзакт передается в блок, определяемый полем В.
-
"." - статистический режим: в поле А указано десятичное число,
выражающее вероятность перехода в блок С; его дополнение до единицы указывает вероятность перехода в блок В.
3. ALL - транзакт последовательно пытается перейти в блоки, определяемые
значениями В, B+D, B+2D,...,C.
4. BOTH - транзакт последовательно пытается войти в блок В, затем в блок С,
до тех пор, пока один из них станут доступным.
5. FN - функциональный режим: поле В является номером функции;
следующий блок определяется суммой значения этой функции поля С.
6. Р - параметрический режим: поле В является номером параметра;
следующий блок определяется суммой значения этого параметра и поля С.
7. PICK - выборочный режим: блок выбирается с равной вероятностью из
блоков с номерами: В, В+1,..., С.
8. SBR - режим перехода к подпрограмме: номер текущего блока помещается
в параметр, указанный в поле С, а транзакт передается в блок, номер которого указан в поле В.
9. SIM - одновременный режим: проверяется одновременное выполнение условий
беспрепятственного движения транзактов в задерживающих блоках. Если условие выполняется, транэакт передается в следующий блок, в противном случае транзакт переходит на блок С.
Примеры:
TRANSFER ,NEXT Безусловная передача в блок с меткой NEXT.
ТRANSFER .400,FACI,FAC2
С вероятностью 0.6 транзакты будут переданы в блок FACI и с вероятностью 0.4 в блок FAC2,
49