Блок GENERATE
GENERATE - блок, через который транзакты входят в модель (порождаются). В одной модели может быть несколько различных таких блоков. Необходимую для данного блока информацию задает разработчик с помощью операндов. Сведения об этих операндах сведены в табл.3.1.
Операнды А и В в блоке являются основными (их наличие обязательно),операнды С, D и E - дополнительными. Все эти операнды не обязательно должны быть заданы явно. Но когда операнды заданы в виде констант, то они должны быть неотрицательными целыми числами. В некоторых версиях системы для операндов А и В допускаются также и вещественные числа. Целые числа должны иметь максимум 5 цифр, вещественные - 8 цифр, причем значение операнда A не должно быть меньше В.
Таблица 3.1
Операнды блока GENERATE
Операнд | Значение | Значение по умолчанию |
А | Средний интервал времени порождения (среднее время между последовательными приходами транзактов в блоке GENERATE) | Ноль |
B | Половина поля допуска равномерно распределенного интервала (половина размаха интервалов времени прибытия) | Ноль |
C | Смещение интервалов (момент времени,в который в блоке должен появиться первый транзакт) | Смещение отсутствует |
D | Ограничитель (граничное значение общего числа транзактов, которые могут войти в модель через данный блок в течение времени моделирования. Когда это число достигнуто, данный блок GENERATE перестает быть активным) | Бесконечность |
E | Уровень приоритета (уровень или класс приоритета каждого из транзактов, входящих в модель через данный блок. Всего существует 128 уровней, которые задаются числами от 0 до 127) | Ноль |
Примеры использования блока GENERATE:
GENERATE 15,3
Здесь заданы операнды А и В (15 и 3 соответственно).Такая запись означает, что интервал времени прибытия равен 15 плюс-минус 3, то есть интервалом времени прибытия является случайное число со средним значением, равным 15, и полем допуска, равным 6 (так как 3 - это половина поля допуска),т.е. интервал может быть выражен числами 12, 13, 14, 15, 16, 17 и 18.
GENERATE 10
Операнд В равен 0. Интервал времени прихода равен 10 плюс–минус 0, иначе говоря, интервал равен в точности 10. Таким образом может быть задано неслучайное значение интервалов времени.
GENERATE 3,3,10,5
Здесь не задан только операнд Е. В этом случае моментом первого прихода является значение 10.После этого интервалы времени прибытия находят из равномерного распределения 3±3 (иначе говоря, от 0 до 6 включительно). Однако только первые пять транзактов должны войти в модель через этот блок.
GENERATE 5,,2
Здесь заданы операнды А и С. Время первого прибытия задано числом 2. После этого приход транзактов будет осуществляться через каждые пять единиц времени. Так как никакое значение не использовано между двумя запятыми, это значит, что операнд В задан по умолчанию, а операнды D и Е отсутствуют. Наличие трех запятых подряд в данном примере говорило бы о том, что по умолчанию заданы операнды В и С, а операнд Е отсутствует.
Блок и оператор LET для работы с C–величинами
В большинстве случаев при создании С-величн используют блок LET. При этом значение, данное каждой С-величине, остается таким же до конца моделирования, если только его не изменит какой-нибудь транзакт, вошедший через этот или другой блок, относящийся к данной С-величине. Имя С?величины записывается как X$n ,где n - символическое имя. В общем случае формат блока LET имеет вид:
LET A=B
В приведенной записи операнд А - имя С-величины (переменной), операнд В - значение, которое присваивается переменной, указанной в операнде А. Операнд В может быть константой, СЧА или выражением.
Блок LET может работать в нескольких режимах. Простейшим из них является режим назначения:
LET X$cost=27 ! С-величина X$cost принимает значение 27
LET X$fval=FN$val
*С-величина X$fval получает текущее значение функции val.
Блок LET может также использоваться для распечатки значений СЧА не в конце моделирования, как обычно, а в любой момент времени. В этом случае следует использовать следующую конструкцию:
GENERATE 80,,,1
LET X$stor80=S$.
TERMINATE
Используя такой сегмент, можно распечатать текущую емкость МНУ stor в момент времени 80
Блок LET (либо оператор LET) может использоваться в качестве счетчика. Так, например, запись
LET X$cvb=X$cvb+1
означает увеличение величины X$cvb на единицу. Однако для выполнения подобной операции в micro-GPSS предусмотрена более простая конструкция:
LET+ A,B
(или LET- A,B для уменьшения значения счетчика). В приведенной записи операнд А - это имя С-величины, а операнд В - величина, на которую изменяется значение счетчика. Таким образом, приведенное выше выражение может быть записано в виде:
LET+ X$cvb,1
Помимо работы в режиме назначения, блок LET может использоваться для работы с параметрами транзактов. Значения параметров транзактов назначаются и изменяются с использованием одного из следующих трех режимов блока LET.
1. Режим замещения - старое значение параметра заменяется новым независимо от того, каким было это значение. Формат:
LET A=B
В приведенной записи операнд А - номер модифицируемого параметра, который обозначается как Рj (j = 1...12); операнд В - значение, присваиваемое параметру А.
2. Режим приращения - новое значение параметра вычисляется путем сложения значения операнда В со старым значением параметра. Формат:
LET+ A,B
LET A=A+B
В приведенной записи операнд А - номер модифицируемого параметра Pj; операнд В - величина,на которую увеличивается текущее значение параметра Рj.
3. Режим уменьшения (аналогично режиму 2). Формат :
LET- A,B
LET A=A-B
LET может использоваться не только как блок, но и как оператор. Следует напомнить, что большинство СЧА, в том числе и С-величины, имеют в качестве начального значения «0». Иногда бывает необходимо, чтобы в начале моделирования С-величина (или другой СЧА) имела начальное значение, отличное от 0.Это можно сделать с помощью оператора LET. Формат оператора:
LET A,B
В приведенной записи операнд А - имя С-величины (или другого СЧА); операнд В в общем случае - положительная константа, которая присваивается С-величине в качестве начального значения. Так, присвоение C?величине cvx начального значения, равного 25, производится следующим образом:
LET X$cvx=25
Следует заметить,что оператор LET должен располагаться обязательно перед первым блоком GENERATE. Заметим также, что в этом случае операнд В не может быть выражением или СЧА, которые ранее нигде не были использованы.Это основное отличие между блоком LET и оператором LET.
Оператор LET используется, главным образом, в тех случаях, когда нужно запустить программу несколько раз с разными значениями некоторых величин.
Блок передачи транзактов GOTO
Блок GOTO (ПЕРЕЙТИ) используется для организации перехода транзактов в блок, отличный от последующего. Блок GOTO можно использовать в одном из двух режимов :
1) в режиме безусловной передачи;
2) в режиме статистической передачи.
Безусловный GOTO подобен аналогичному оператору во многих языках программирования высокого уровня. В режиме безусловной передачи блок GOTO имеет вид
GOTO А
В приведенной записи операнд А указывает адрес блока, в который транзакт должен сделать попытку входа. Адрес этого блока может задаваться либо символически (меткой), либо в виде номера блока. Обычно используют символическое имя. Пример использования оператора GOTO в режиме безусловной передачи:
BACK ADVANCE 30,5
SEIZE JVEN
...
...
GOTO BACK
Режим статической передачи используется для передачи транзакта в указанный блок с заданной вероятностью. Этот режим использует два операнда и имеет следующий формат блока :
GOTO A,B
Операнд В - частота, с которой транзакт должен попадать в блок с адресом, указанным в операнде А. Операнд В задается числом в диапазоне 0.0001 до 0.9999, которое может иметь не более четырех цифр после запятой. Операнд А задает адрес блока, на который осуществляется переход.
Пример использования блока GOTO в режиме статистической передачи.
simulate
generate ,,,4
begin advance 30,5
seize oven
advance 8,2
release oven
goto begin,.25 ! Перейти к метке begin
generate 600 ! в 25% случаев
terminate 1
start 1
end
Блок PRIORITY
Для назначения приоритета транзакта используется операнд Е блока GENERATE. Однако для этих целей может использоваться и специальный блок PRIORITY. Формат данного блока:
PRIORITY A
В приведенной записи операнд А - значение приоритета, присваиваемого транзакту, вошедшему в блок. Приоритет транзакта в блоке PRIORITY выражается целым неотрицательным числом в интервале от 0 до 99 999.
Блок TERMINATE
Транзакты удаляются из модели, попадая в блок TERMINATE. В модели может быть любое число этих блоков. Информация для этого блока задается с помощью одного операнда - операнда А. Операнд А задает величину, которая должна вычитаться из специального счетчика, называемого счетчиком завершений, каждый раз, когда транзакт входит в блок TERMINATE. Если операнд А не задан, то по умолчанию подразумевается значение 0. В этом случае вход транзакта в такой блок не вызывает уменьшения содержания счетчика. При достижении содержанием счетчика нуля моделирование завершается. Значение счетчика задается в начале моделирования при помощи оператора START следующим образом:
START A
В приведенной записи значение операнда А соответствует значению счетчика.
Пример конструкции на языке micro?GPSS, в которой использован блок TERMINATE, приведен ниже:
simulate
generate 18,6 ! Интервал генерации - 12...24 мин.
terminate ! Удаление транзакта из модели.
generate 480 ! Моделирование в течении 8 часов.
terminate 1 ! Уменьшение счетчика завершений на 1.
start 1
end
Блок задержки транзактов ADVANCE
Удобным средством моделирования различного рода обслуживания, длящегося некоторый промежуток времени, является задержка транзакта, которая выполняется в GPSS с помощью блока ADVANCE.
Транзакт занимает прибор (оператор SEIZE) для того, чтобы немедленно начать на нем обслуживание. В течение времени обслуживания транзакт должен прекратить двигаться по модели. Блок ADVANCE используется для задержки продвижения транзакта в течение некоторого интервала времени. Обычно этот интервал задается случайной переменной. Информация, необходимая для описания времени обслуживания и его распределения, задается операндами А и В.
Операнд А используют для определения среднего времени, которое транзакт, входящий в блок, проведет в нем. Операнд В используют для указания половины поля допуска. Значения этих двух операндов по умолчанию равны нулю. Постоянное время задержки указывается в поле А, операнд B при этом оставляется пустым. Пример программной конструкции, в которой используется блок задержки ADVANCE:
SEIZE Sbor1
ADVANCE 30,5
RELEASE Sbor1
Такая запись означает, что для каждого транзакта, входящего в этот блок, возможные значения интервалов времени находятся в пределах 25-35 единиц времени включительно. Например, транзакт вошел в блок ADVANCE (то есть занял прибор обслуживания Sbor1) в момент времени, равный 134, а «разыгранным» значением из равномерного распределения 30±5 является 31. В подобном случае транзакт будет оставаться в блоке ADVANCE до момента времени, равного 134+31=165. В течение этого времени прибор Sbor1 будет оставаться в состоянии «занято».
По достижении модельного времени, равного165, транзакт покинет блок ADVANCE и войдет в следующий блок RELEASE, в результате чего прибор Sbor1 будет освобожден и в него поступит на обработку следующая заявка из очереди (если очередь перед прибором в данный момент не пуста). Аналогичным образом блок ADVANCE может использоваться и с операторами PREETMP / RETURN:
PREETMP Robot
ADVANCE 130
RETURN Robot
В соответствии с правилами GPSS, в блоке ADVANCE одновременно может находиться любое число транзактов. Очевидно, такая ситуация возможна лишь в тех случаях, когда оператор ADVANCE используется вне парных блоков SEIZE / RELEASE и PREETMP / RETURN, которые применяются для моделирования приборов, обслуживающих один транзакт в единицу времени.
Возможны и более сложные случаи использования оператора ADVANCE . Так, в micro?GPSS может быть построена программная конструкция, которая определяет случайную задержку, время которой распределено по закону, отличному от равномерного. В этом случае время задержки определяется умножением числа, заданного в поле А, на значение функции, указанной в поле В. Эта функция определяет требуемый закон распределения случайных чисел.
Блоки ENTER и LEAVE
Как и в случае с приборами обслуживания (одноканальными устройствами), для моделирования работы МНУ используются два блока. Блоком, соответствующим состоянию «занято», является ENTER (ВОЙТИ). Блоком, соответствующим состоянию «свободно», является LEAVE (ВЫЙТИ).
В блоках ENTER и LEAVE используются три операнда. Операнд А используется для указания имени многоканального устройства.
Операнд В задает число приборов, которое должно быть занято (или освобождено) транзактом. Это значит, что транзакт может войти в МНУ, если его оставшаяся емкость больше или равна В. Этот операнд редко используется и его значение по умолчанию равно 1. Операнд С используется тогда, когда нужно собрать статистику об очереди. В этом случае в операнд C заносится символ «Q».
В общем случае использование блоков ENTER и LEAVE аналогично использованию блоков ARRIVE и DEPART.
Ниже представлен пример модели, в которой используется многоканальное устройство:
simulate
stor storage 2 ! Емкость МНУ stor = 2
generate 18,6
enter stor ! Занятие транзактом МНУ stor
advance 25,5 ! Задержка транзакта в МНУ
leave stor ! Освобождение МНУ
terminate
start 1
end
Блоки, описывающие работу оборудования
Для описания работы оборудования в языке GPSS используются блоки SEIZE и RELEASE (блоки занятия свободных обслуживающих аппаратов), PREETMP, RETURN (блоки захвата приборов), ADVANCE (блок задержки).
Блоки PREETMP и RETURN. Захват приборов обслуживания
С помощью блоков PREETMP и RETURN удобно описывается обслуживание с прерыванием, то есть такие ситуации, когда обслуживающий прибор временно прекращает обработку поступившей на него заявки и переходит на обслуживание «срочной» заявки. В это время замещенный (прерванный) транзакт либо может ждать, пока прибор не освободится вновь, либо может пойти куда-либо с намерением или без намерения вернуться впоследствии к прибору, с которого его сняли.
Транзакт может захватить прибор, только войдя в блок PREEMPT. Операнды этого блока и их значение показаны в табл. 3.2.
Таблица 3.2
Операнды оператора PREEMPT
Операнд | Значение | Значение по умолчанию |
А | Имя прибора, подлежащего захвату | Ошибка |
B | Необязательный операнд.Используется для указания условий,при которых разрешен захват. Существуют две возможности:
1. Операнд В используется. В нем должна стоять двухбуквенная последовательность PR. Тогда захват разрешен только в том случае, когда возможный захватчик имеет более высокий уровень приоритета. 2. Операнд В не используется. Тогда захват происходит, когда обслуживаемый транзакт сам не является захватчиком |
Транзакт, захвативший прибор, может освободить его (то есть возвратить прибор ранее прерванному транзакту) только при дальнейшем вхождении в блок RETURN. Операнд А этого блока указывает имя прибора, подлежащего освобождению.
Пример использования операторов PREEMPT и RETURN в программной конструкции:
simulate
generate 120,30,,,1
arrive newsq ! Встать в очередь
preempt sal ! Отнять прибор
depart newsq
advance 45,30
return sal ! Возвратить прибор
terminate 1
start 1
end
Блоки сбора статистики об ожидании: ARRIVE и DEPART
Блоки ARRIVE (СТАТЬ В ОЧЕРЕДЬ) и DEPART (ПОКИНУТЬ ОЧЕРЕДЬ) обеспечивают возможность автоматического сбора статистических данных, описывающих вынужденное ожидание, которое может происходить время от времени в различных точках модели. Например, на определенную операцию механической обработки поступает деталь. Если в момент ее поступления станок занят, то деталь «вынуждена» ждать своей очереди. Очень часто бывает необходимо собрать статистику, описывающую особенности протекания процесса ожидания. Эта статистика должна дать ответ на следующие вопросы :
1. Сколько раз заявки (транзакты) приходили в очередь?
2. Сколько пришедших требований присоединилось к очереди и сколько сразу заняли прибор?
3. Каково максимальное значение длины очереди?
4. Каково среднее число ожидающих транзактов?
5. Каково среднее время ожидания тех требований, которым пришлось ждать?
В GPSS сбор такого рода информации осуществляется с помощью регистратора очереди, который используется в тех точках модели, где возможно ожидание. Регистраторов очередей может быть несколько. Их различают заданием имен. Условия для задания имен регистраторов такие же, как и для приборов. Разработчик вносит регистратор очереди в модель с помощью двух блоков: ARRIVE и DEPART. Операнд А в этих блоках используется для указания имени соответствующей очереди. В конце моделирования автоматически распечатываются следующие элементы статистики:
1) «счетчик входов»;
2) «максимальное содержимое»;
3) «среднее значение содержимого»;
4) «счетчик текущего содержимого»;
5) среднее время пребывания в очереди ;
6) «счетчик нулевых вхождений»
Иногда ( обычно крайне редко) возникает необходимость использовать в этих блоках второй операнд - операнд В. Он указывает на какую величину должен быть изменен счетчик содержимого очереди. По умолчанию для этого операнда подразумевается единичное значение.
Ниже приведен пример использования блоков ARRIVE и DEPART:
simulate
generate 18,6
arrive tim ! Транзакт становится в очередь с именем TIM
seize sal
advance 25,5
release sal
depart tim ! Tранзакт покидает очередь
terminate
generate 480
terminate 1
start 1
end
Регистратор очереди не обязательно использовать в модели везде, где могут возникать очереди. Если он не используется, то очередь транзактов, в случае необходимости, создается и обрабатывается в соответствии с общими правилами GPSS, но об этой очереди не собирается статистика.
Блоки SEIZE и RELEASE. Занятие свободных приборов
В процессе перемещения по модели СМО транзакты занимают приборы (ОА). Для того, чтобы занять ОА, транзакт входит (или пытается войти) в соответствующий блок, описывающий этот прибор. Этот блок должен обладать следующими свойствами:
1. Если прибор уже используется (занят другим транзактом), транзакт не может войти в блок, и он должен ждать в очереди.
2. Если прибор не используется, транзакт может войти в блок. В результате произойдет изменение статуса прибора из «незанято» в «занято».
Для моделирования приборов подобного типа используется блок SEIZE. В результате входа транзакта в блок SEIZE указанное в нем устройство становится «занятым» данным транзактом и остается в этом состоянии до тех пор, пока этот же самый транзакт не пройдет через блок RELEASE, указывающий на это устройство. Один транзакт может занять любое число устройств, но каждое устройство в любой момент времени может быть занято лишь одним транзактом.
Для оператора SEIZE, использованного в программе, обязательно должен быть указан операнд А. Значением операнда А является имя занимаемого прибора. Имя прибора может быть символическим или числовым. Если прибору присваивается символическое имя, то оно должно состоять из трех-пяти алфавитно-цифровых символов, причем первые три символа должны быть буквами. Если прибору присваивается числовое имя, то числа должны быть положительными и целыми. Наибольшее разрешенное число приборов зависит от объема памяти, доступной системе GPSS.
В качестве операнда В оператора SEIZE могут быть указаны символы «Q» или «L». Символ «Q» используется в тех случаях, когда нужно, чтобы собиралась статистика о средней длине очереди или о среднем времени ожидания. Так, запись
SEIZE point,Q
означает, что очередь перед объектом «point» не будет создаваться, но в процессе моделирования будет собираться и раcпечатываться статистика. Если в качестве операнда В указан символ «L», то блок становится «логическим блоком» SEIZE. Это значит, что если прибор А занят, то транзакт проходит через этот блок. Он не ждет перед блоком, как обычно, пока освободится прибор.
Пример использования блока SEIZE:
SEIZE Stan1, Q ! Занять Stan1 (станок №1)
ADVANCE 10,5 ! Выполнить обработку
RELEASE Stan1 ! Освободить Stan1
SEIZE Stan2 ! Занять Stan2 (станок №2)
SEIZE Robot ! Занять робот
ADVANCE 14 ! Выполнить обработку
RELEASE Stan2 ! Освободить Stan2
RELEASE Robot ! Освободить робот
Прохождение транзактов через этот участок программы моделирует обслуживание заявок сначала прибором Stan1 в течение от 5 до 15 единиц времени, а затем одновременно двумя приборами Stan2 и Robot в течение 14 единиц времени.
При попытке освободить свободный прибор системой выдается сообщение об ошибке и процесс моделирования прерывается. То же самое происходит, если транзакт пытается освободить прибор, занятый другим транзактом.
Блоки создания и уничтожения транзактов
Для создания и уничтожения транзактов в системе micro?GPSS используются блоки GENERATE (порождение транзактов), TERMINATE (уничтожение транзактов), SPLIT и ASSEMBLE (управление копиями транзактов).
Блоки SPLIT и ASSEMBLE
При необходимости в программе можно создать (или уничтожить уже имеющиеся) копии транзактов. Для создания копий транзактов, уже участвующих в моделировании, используется блок SPLIT («расщепление» транзакта). При этом создаются транзакты с точно такими же характеристиками (параметры, приоритет и т.д.), как и у оригинала. Порожденная группа транзактов называется ансамблем. Формат оператора SPLIT:
SPLIT A,B,C
Операнд А - положительное целое значение (число копий транзакта). Операнд В - адрес блока, в который следует послать копии транзакта. Операнд С - значение так называемого серийного параметра. Когда транзакт входит в блок SPLIT, значение этого параметра увеличивается на 1 для транзакта–оригинала, на 2- для его копии, на 3 - для второй копии и т.д.
Для имитации различных сборочных операций удобно применять блок ASSEMBLE, действие которого состоит в том, что он «собирает» определенное количество транзактов одного ансамбля. Число собираемых транзактов называется «счетчиком сборки» и определяется полем А блока ASSEMBLE.
Пример: через блок
ASSEMBLE 10
пройдет только первый транзакт некоторого семейства, причем он будет задержан до тех пор, пока на этот блок не поступит еще 9 транзактов того же ансамбля. Эти 9 транзактов при этом уничтожаются. После этого первый транзакт пройдет блок ASSEMBLE.
Имеется возможность косвенного задания счетчика сборки при помощи указания номера параметра первого транзакта, значение которого заносится в счетчик сборки данного блока ASSEMBLE. Кроме того, один блок ASSEMBLE может одновременно собирать транзакты, принадлежащие к разным ансамблям.
Пример программной конструкции GPSS с операторами SPLIT и ASSEMBLE:
simulate
generate ,,,100
seize mach1
arrive totti
advance 32,6
release mach1
split 1, mac3 ! Cоздать одну копию транзакта и
seize mach2 ! послать ее в блок с адресом mас3
advance 28,5
release mach2
goto mac4
mac3 seize mach3
advance 30,15
release mach3
mac4 assemble 2 ! Уничтожить созданную копию транзакта
seize mach4
advance 22,9
release mach4
depart totti
terminate 1
*
start 100
end
Блоки условной передачи транзактов IF и WAITIF
Безусловная или вероятностная (статистическая) передача транзактов, как отмечалось выше, осуществляется в блоке GOTO. Однако в практике разработки сложных моделей часто возникает необходимость совершить переход с учетом какого-либо условия (условный переход). Для этого используется блок IF, который имеет два режима работы: SNA (режим отношения) и SERVER (режим присвоения).
В SNA-режиме, операнды А и В связаны заданным отношением. В зависимости от того, выполняется ли это отношение, осуществляется (или не осуществляется) передача транзакта. Формат блока IF в SNA?режиме:
IF A*B,C
В приведенной записи символом «*» обозначен знак проверяемого отношения между операндами А и В, которые являются константами или СЧА. Допустимые отношения: > (больше), >= (больше или равно), = (строгое равенство), <> (неравенство), < (меньше), <= (меньше или равно). Операнд С - это адрес блока, в который транзакт должен перейти, если проверка отношения дает результат «true» (истина), в противном случае транзакт переходит в следующий блок. Ниже приведен пример записи блока IF:
IF Q$lin=4,bye
Приведенная запись обозначает следующее: если в очереди lin есть 4 транзакта,то перейти к блоку с адресом (меткой) bye.
Отношение может быть выражено также одним из следующих кодов:
1. U (The facility is in Use - прибор занят).
2. NU (The facility is Not in Use - прибор не занят).
3. E (The storage is Empty - МНУ пустое).
4. NE (The storage is Not Empty - МНУ не пустое)
5. F (The storage is Full - МНУ заполнено)
6. NF (The storage is Not Full - МНУ не заполнено)
В случае использования этой группы отношений операнд А - это имя прибора или МНУ, операнд В содержит один из вышеперечисленных кодов и формат блока будет следующим :
IF A=код,C
Так, например, запись
IF sal=U,bye
означает следующее: если прибор sal занят, то перейти к блоку с меткой bye.
В SERVER? режиме ( режиме присвоения) имеется дополнительный операнд D. Формат блока определяется следующим образом:
IF A*B,C=D
В приведенной записи «*» - любое отношение, операнды А и В - константы или СЧА, операнд С - это S-величина или параметр, которой будет присвоено значение операнда D в случае,если проверка отношения между операндами А и В даст результат true (истина). Операнд D - константа, СЧА или выражение. В качестве примера использования блока IF в SERVER–режиме, может быть приведена следующая запись:
IF X$norm<0,X$norm=0
Приведенная запись означает следующее: если величина X$norm<0 (X$norm - сохраняемая величина с именем norm),то ее нужно установить в «0»,в противном случае она сохранит свое прежнее значение.
Блок WAITIF является разноидностью блока IF.Операнды А и В и отношения между ними задаются так же как и в блоке IF, но отсутствует операнд С. Смысл блока WAITIF может быть сформулирован в следующем виде: «ЖДАТЬ если условие выполняется, до тех пор, пока оно не перестанет выполняться». Так, например, запись
WAITIF stor=E
означает следующее: транзакт должен ждать до тех пор, пока МНУ с именем stor занято. Как только это условие перестанет выполняться (то есть МНУ освободится), транзакт переходит в следующий блок.
Дополнительные возможности micro GPSS
Помимо рассмотренных блоков и операторов языка micro?GPSS, в него включены дополнительные блоки и операторы, использование которых позволяет сделать процесс программирования более простым и эффективным. Значительная часть сервисных возможностей реализуется с помощью блока HELP, который вызывает внешнюю подпрограмму, указанную в операнде A и передает в не параметры B?H. Эта возможность позволяет при разработке программ на micro?GPSS использовать практически любые процедуры и функции, написанные на языках высокого уровня FORTRAT, C, PASCAL и т.д.
Информационные ресурсы сети Internet
7. http://k-221.newmail.ru/arch.html (файловый архив, содержащий различные версии систем GPSS/PC и SIMULA, а также учебные пособия МИФИ по моделированию систем; авторы учебных пособий - С.П.Бычков, А.А.Храмов).
8. http://ns.edison.ru/magazins/www.pcweek.ru/97_18/win/re7.htm
(Дорошенко А. GPSS - язык и система моделирования систем // PC Week/RE. - 1997. - №18).
9. http://vt.miem.edu.ru/main/documentation/programing/gpss/gpss.shtml (методические указания для слушателей ФПКП Московского технического университета связи и информатики по моделированию систем и сетей связи на GPSS/PC; составители Л.А.Воробейчиков, Г.К.Сосновиков).
10. http://webbgpss.hk-r.se (on?line версия и руководство по моделированию в системе micro?GPSS).
11. http://www.ecst.csuchico.edu/~mcleod/software.html (коллекция ссылок на информационные ресурсы Internet, посвященные вопросам математического моделирования).
12. http://www.hhs.se/secc/courses/1515English/gpss.htm (сервер Стокгольмской экономической школы, на котором расположена документация по
micro?GPSS).
13. http://www.idsia.ch/~andrea/simtools.html (обзор программных средств математического моделирования непрерывных и дискретных систем).
14. http://www.zamok.hotmail.ru/prog.html (персональная страница Дениса Лысова, on?line документация и приемы составления моделей на GPSS/PC).
15. http://wwwcdl.bmstu.ru/koi/cadsystems/develop/gpss2.html (сервер Центра дистанционного обучения МГТУ им. Н.Э.Баумана, документация по GPSS/PC и лабораторный практикум по моделированию СМО (разработчик - проф. И.П.Норенков).
Использование функций. Оператор FUNCTION
Оператор FUNCTION определяет функцию, имя которой записано в поле адреса (метки). Оператор имеет два операнда: операнд А - это СЧА, определенный как независимая переменная функции; операнд В - код, который состоит из двух частей:
1) буква - это символ «С» или «D», «С» используется при работе с непрерывной функцией, «D» - с дискретной.
2) цифра - число пар данных, используемых для определения функции.
В качестве примера рассмотрим следующую запись:
time FUNCTION RN2,D4
В приведенной записи time - имя функции (следовательно, значение .15,2/.35,5/.75,8/1,12 функции будет храниться в СЧА FN$TIME); RN2 - независимая переменная, случайное число, полученное вторым генератором случайных чисел; D4 - количество пар (4) дискретных (D) значений.
Данные, определяющие функцию, состоят из пар. Первое значение в паре - это независимая переменная, второе значение - значение функции. Оператор FUNCTION ставится перед первым блоком GENERATE, но после оператора SIMULATE. В качестве независимых переменных СЧА могут использоваться как С?величины. Так, например, программная конструкция
wer FUNCTION Q$road,c2
0,100/50,200
иллюстрирует задание функции, которая служит для определения времени транспортировки в зависимости от числа транзактов в очереди road (например, числа машин на дороге). Так, если переменная Q$road=0 (на данном участке нет машин), то этот участок можно проехать за 100 единиц времени. Если на участке максимальное число машин (Q$road=50), то время прохождения увеличивается до 200 единиц. В качестве незаисимых переменных могут использоваться следующие СЧА: Q$, S$, R$, N$, PR, W$, C1.
Использование таблиц. Блок TABULATE и оператор TABLE
С помощью таблиц могут быть собраны и автоматически табулированы статистические данные о работе модели. Это легко сделать, используя блок TABULATE и оператор TABLE.
Оператор TABLE используется при работе с таблицами. В модели может быть несколько таблиц. Каждая таблица сначала должна быть определена программно. Существует разновидность оператора TABLE - это оператор QTABLE, который отличается тем, что он используется для табулирования значений только об очереди. Для этих двух операторов справедливо следущее:
1) операторы TABLE и QTABLE (они имеют 4 операнда);
2) операнд В - число, являющееся первым (нижним) граничным значением. (обычно это «0»);
3) операнд С - ширина интервала табулирования (число единиц времени в интервале);
4) операнд D - общее число интервалов таблицы, включая левый и правый;
5) операторы TABLE и QTABLE записываются после оператора SIMULATE,но перед первым блоком программы.
Пункты 3-5 требуют некоторого пояснения. Значения, которые должны быть табулированы, в общем случае могут иметь размах от минус до плюс бесконечности. При использовании таблиц этот размах должен быть разделен (на оси действительных чисел) на ряд последовательных интервалов. Интерпретатором подсчитывается частота, с которой табулируемое значение попадает в каждый из этих интервалов. При определении таблицы указывается, в какой части оси действительных чисел нужно расположить эти интервалы. Заметим, что левый интервал включает значение от минус бесконечности до значения первой границы включительно. Правый интервал включает все значения, большие, чем последняя граница. В программе может быть несколько таблиц, и для того чтобы их различать, им дают имена. Имена записываются перед словом TABLE (QTABLE) в поле адреса (метки), причем для QTABLE это не обязательно, а для TABLE обязательно.
Главное отличие между этими двумя операторами заключается в операнде А. Для TABLE - это имя СЧА, который будет табулироваться (например, S$SAD, Q$lin). Для оператора QTABLE операнд А - это имя очереди, для которой составляется таблица.
Ниже приведен пример использования оператора QTABLE:
simulate
qtable sal,0,10,20 !
generate 18,6 !
В приведенном примере составляется таблица для очереди sal с шириной интервалов, равной 10, и имеющая 20 таких интервалов.
Для того, чтобы при прогоне модели собиралась статистика, вместе с оператором TABLE нужно использовать специальный блок TABULATE (а для оператора QTABLE блоки ARRIVE / DEPART). Формат блока :
TABULATE A
В приведенной записи операнд А - это имя таблицы, для которой собираются данные, указанное в поле адреса (метки) оператора TABLE.
Использование выражений. Оператор VARIABLE
Как уже говорилось выше, в программе могут использоваться арифметические выражения. Если выражение достаточно длинное и его нужно использовать несколько раз в разных местах программы, то имеет смысл использовать оператор VARIABLE, который определяет арифметическое выражение как переменную. Имя этой переменной указывается в поле адреса (метки) оператора. Оператор имеет только один операнд А, в качестве которого указывается нужное выражение. Так, например, запись
joe VARIABLE FN$norm*2+25
определяет переменную с именем joe, которая равна удвоенному значению функции norm, увеличенному на 25. При задании арифметических выражений с помощью оператора VARIABLE используется общепринятая система приоритетов арифметических операций (операции умножения и деления имеют более высокий приоритет, чем операции сложения и вычитания). Операции одного приоритета выполняются слева направо.
Литература
1. Автоматизация гибких производственных систем / Р.И. Сольницев, А. Е. Кононюк, Ф. М. Кулаков. - Л.: Машиностроение. Ленинградское отделение, 1990. - 415 с.
2. Норенков И.П. Разработка систем автоматизированного проектирования. Учебник для вузов. - М.: Издательство МГТУ им. Н. Э. Баумана. 1994. - 207 с.
3. Советов Б.Я., Яковлев С.А. Моделирование систем: Учебное пособие для вузов по специальности «Автоматизированные системы обработки информации и управления». - М.: Высшая школа, 1998. - 319 с.
4. Шрайбер Т.Дж. Моделирование на GPSS: Пер. с англ. — М.: Машиностроение, 1980.
5. Эддоус М., Стэнсфилд Р. Методы принятия решений / Пер. с англ. Под ред. член?корр. РАН И. И. Елисеевой. - М.: Аудит, ЮНИТИ, 1997. - 590 с.
6. GPSS/PC general purpose simulation. Reference Manual. - Minuteman software. P.O. Box 171. Stow, Massachusetts 01775, 1986.
Методы моделирования многоканальных устройств
Блоки, определяющие в micro-GPSS одиночный прибор, используются для моделирования единственного устройства обслуживания. Два или более находящихся рядом обслуживающих устройства могут быть промоделированы двумя или более приборами, располагаемыми параллельно. Micro-GPSS предоставляет для моделирования однородных (обладающих определенными общими свойствами) параллельных приборов специальное средство, которое называется «многоканальным устройством» (МНУ). Схема, иллюстрирующая работу многоканального устройства, представлена на рис.3.1.
Рис. 3.1. Схема СМО с многоканальным обслуживающим устройством
В модели СМО может быть несколько многоканальных устройств. Число приборов, которое моделируется каждым из многоканальных устройств, обозначается термином «емкость многоканального устройства».
Для того чтобы между МНУ, использованными в модели, было различие, им можно присваивать имена. Условия использования имен такие же, как и в случае приборов и очередей.
Общие принципы построения и исследования имитационных моделей в системах класса GPSS
В системах класса GPSS моделируемая система представляется с помощью набора абстрактных элементов, называемых объектами. Каждый объект принадлежит к одному из типов объектов.
Объект каждого типа характеризуется определенным способом поведения и набором атрибутов, определяемыми типом объекта. В теории массового обслуживания эти объекты называются приборами и заявками (обслуживающими аппаратами и транзактами). Когда обработка поступившего объекта заканчивается, он покидает систему. Если в момент поступления заявки прибор обслуживания занят, то заявка становится в очередь, где и ждет до тех пор, пока прибор не освободится. Очередь также можно представлять себе как объект, функционирование которого состоит в хранении других объектов.
Каждый объект может характеризоваться рядом атрибутов, отражающих его свойства. Например, прибор обслуживания имеет некоторую производительность, выражаемую числом заявок (транзактов), обрабатываемых им в единицу времени. Сама заявка может иметь атрибуты, учитывающие время ее пребывания в системе, время ожидания в очереди и т.д. Характерным атрибутом очереди является ее текущая длина, наблюдая за которой в ходе работы системы (или ее имитационной модели), можно определить ее среднюю длину за время работы ( или моделирования). В языке GPSS определены классы объектов, с помощью которых можно задавать приборы обслуживания, потоки заявок, очереди и т.д., а также задавать для них конкретные значения атрибутов.
Оператор CLEAR (ОЧИСТИТЬ)
В некоторых случаях разработчику необходимо выполнить последовательно несколько прогонов модели, лишь слегка изменяя ее параметры. Оператор CLEAR позволяет объединить все эти прогоны в один этап моделирования.
Допустим,нужно выполнить три прогона модели при различных значениях операнда С в блоке GENERATE. Использование оператора CLEAR выглядит следующим образом :
KEY GENERATE ,,,4 ! KEY - символическое имя блока
... ! полное описание модели
...
...
START 1 ! начать первый прогон
KEY GENERATE ,,,5 ! изменение для второго прогона
CLEAR ! очистка для второго прогона
START 1 ! начать второй прогон и т.д.
KEY GENERATE ,,,6
CLEAR
START 1
END
Оператор END (ЗАКОНЧИТЬ)
Оператор END размещается в последней строке программы, после указания всех команд управления прогонами модели. Он побуждает интерпретатор вернуть управление в операционную систему. Оператор END не имеет операндов и стоит после оператора START.
Оператор RESET (СБРОС)
Оператор RESET устанавливает значения всех стандартных числовых атрибутов (СЧА) в их исходные значения. Исключение составляют: случайные числа; абсолютное время; текущий список каждого блока; все С-величины (см. раздел 5).
Оператор SIMULATE (МОДЕЛИРОВАТЬ)
Если разработчик намерен выполнить прогон модели, то обычно оператор SIMULATE ставится в первой строке программы. Оператор имеет единственный операнд А (целое положительное число), которое указывает, сколько раз должна быть выполнена программа. Значение операнда по умолчанию равно1.
Оператор START (НАЧАТЬ)
Моделирование начнется только после того, как интерпретатором в тексте модели будет найден оператор START. Поэтому этот оператор должен быть помещен в конце программы (после полного определения модели). Операнд А задает начальное значение счетчика числа завершений (обычно принимается равным единице). В качестве операнда В может использоваться запись «NP». В этом случае по окончании моделирования не будет распечатываться статистика.
Оператор STORAGE
Емкость многоканальных устройств определяется с помощью оператора STORAGE. У этого оператора может быть символическое или числовое имя (метка). Операнд А задает емкость многоканального устройства. При определении емкости нескольких многоканальных устройств используют запись «S$имя,с», где «имя» является символическим или числовым именем многоканального устройства, емкость которого определяется, а «с» - его емкость. При использовании числового имени знак «$» не ставится. Символ «/» используется для разделения записанных подряд основных единиц.
Ниже представлены примеры использования оператора STORAGE:
Main STORAGE 5 ! Определено МНУ c именем Main
! и емкостью 5
STORAGE S$JOY,3/S5,10/S1,2/S$ERT,4
* Определены четыре многоканальных устройства:
* 1) с именем JOY (емкость равна трем)
* 2) с именем 5 (емкость равна десяти)
* 3) с именем 1 (емкость равна двум)
* 4) с именем ERT (емкость равна четырем)
Основы разработки имитационных моделей на языках micro GPSS и GPSS/PC
Micro-GPSS является языком моделирования, используемым для построения моделей и проведения моделирования на ЭВМ. Модели на micro?GPSS компактны, часто состоят из меньшего числа операторов, чем такие же модели, написанные на более полных (профессиональных) версиях языка GPSS и иных языках высокого уровня. Это объясняется тем, что в micro-GPSS встроено максимально возможное число логических программ, необходимых для моделирования систем.
Система micro-GPSS очень удобна при программировании, поскольку интерпретатор micro-GPSS (интерпретатором называется моделирующая часть системы) многие функции выполняет автоматически. Так, например, micro?GPSS без специального на то указания пользователя собирает статистические данные, описывающие поведение модели, автоматически печатает итоговую статистику по завершении моделирования. Пользователю нет необходимости включать в модель операторы для сбора и накопления этих данных или задавать формат, указывающий, в каком виде должны быть распечатаны итоговые данные. В язык включены и многие другие полезные элементы. Например, система micro-GPSS самостоятельно обслуживает таймер модельного времени, планирует события, которые должны произойти позднее в течение времени моделирования, вызывает их своевременное появление и управляет очередностью поступления.
Система GPSS/PC представляет собой более мощную, по сравнению с micro?GPSS, систему имитационного моделирования. Входной язык GPSS/PC включает в себя значительно большее количество операторов и команд управления, что позволяет создавать и исследовать имитационные модели значительно более сложных систем. Разработка и испытание программы в системе GPSS/PC2.0 производится с применением интегрированной среды разработки (IDE), что значительно облегчает общение пользователя с ЭВМ. Однако «обратной стороной» универсальности и гибкости языка GPSS/PC является его громоздкость и сложность для освоения.
Практически все операторы и команды языка micro?GPSS реализованы и в системе GPSS/PC (язык micro?GPSS является «подмножеством» языка GPSS/PC).
Это подмножество выбрано таким образом, чтобы можно было создавать законченные, относительно простые модели систем массового обслуживания на micro-GPSS. Таким образом, для первоначального освоения методов статистического имитационного моделирования достаточно изучения базовых возможностей данной системы.
С точки зрения составления программы, реализующей имитационную модель, и организации процесса моделирования, micro-GPSS представляет собой язык и машинную программу. Как любой язык, он содержит словарь и грамматику, с помощью которых легко могут быть разработаны точные модели систем определенного типа. В соответствии с правилами языка разрабатывается текст программы, который с помощью любого текстового редактора сохраняется на диске в формате ASCII?файла. Машинная программа (транслятор) выполняет модель, написанную на языке GPSS, предоставляя тем самым пользователю возможность проведения экспериментов с этой моделью на ЭВМ. Транслятор micro?GPSS является интерпретатором, то есть выполнение программы осуществляется одновременно с ее трансляцией (минуя создание объектного и/или исполняемого модуля программы).
Печать промежуточных результатов. Блок PRINT
Обычно все результаты моделирования, статистика о приборах, МНУ или очередях, а также значения переменных или СЧА распечатываются автоматически по завершении моделирования. Иногда нужно распечатать какую-либо информацию в процессе моделирования, не дожидаясь его окончания. Для этой цели служит блок PRINT. Этот блок можно использовать в одном из четырех режимов:
1) режим распечатки значения одного СЧА;
2) распечатка значения арифметического выражения;
3) распечатка текста, заключенного в парные символы " " или ' ';
4) распечатка общей статистики;
Если необходимо распечатать одно значение СЧА, используется формат
PRINT A
В приведенной записи операнд А - имя СЧА. Так, например, фрагмент кода
GENERATE 100
PRINT Q$sal
TERMINATE
приведет к тому, что длина очереди sal будет распечатываться в моменты модельного времени 100, 200, 300 и т.д. до завершения моделирования. Если нужно, чтобы распечатка была проведена только в момент времени 100, то в блоке GENERATE должен быть указан операнд D=1:
GENERATE 100,,,1
Для распечатки значения арифметического выражения используется формат блока PRINT, аналогичный приведенному выше, но операнд А в этом случае является арифметическим выражением. Арифметическое выражение ? это строка из 4...59 символов, содержащая, по крайней мере, один из следующих символов: (, ), +, -, *, /. В выражении могут использоваться СЧА. Так, например, можно получить и вывести на печать значение выражения:
PRINT 0.3*S$revn-X$capac*80
При использовании блока PRINT для распечатки текста текстовая строка, которая может включать в себя от 2 до 50 символов, заключается в парные или одиночные кавычки (" " или ' '). Вид, в котором будет распечатан текст, зависит от того, какой тип кавычек используется. Разницу между " " и ' ' рассмотрим на следующем примере. Предполагается, что распечатка происходит в момент модельного времени 100.
PRINT 'time is' ! Результат : time is
Последовательность выполнения модели
Каждый объект GPSS имеет имя и номер. Имена объектам даются в различных операторах исходной программы, а соответствующие им номера транслятор присваивает автоматически. Блокам присваиваются их порядковые номера в исходной программе. «Прогон» текущей модели, то есть собственно моделирование, выполняется с помощью специальной управляющей программы, которую называют симулятором (от английского SIMULATE — моделировать, имитировать). Работа GPSS-модели под управлением симулятора заключается в перемещении транзактов от одних блоков к другим, аналогично тому, как в моделируемой СМО перемещаются заявки, соответствующие транзактам.
В начальный момент времени в GPSS-модели нет ни одного транзакта. В процессе моделирования симулятор генерирует транзакты в определенные моменты времени в соответствии с теми логическими потребностями, которые возникают в моделируемой системе. Подобным же образом транзакты покидают модель в определенные моменты времени в зависимости от специфики моделируемой системы. В общем случае в модели одновременно существует большое число транзактов, однако в каждый момент времени симулятор осуществляет продвижение только какого-либо одного транзакта.
Если транзакт начал свое движение, он перемещается от блока к блоку по пути, предписанному блок-схемой. В тот момент, когда транзакт входит в некоторый блок, на исполнение вызывается подпрограмма симулятора, соответствующая типу этого блока, а после ее выполнения, при котором реализуется функция данного блока, транзакт «пытается» войти в следующий блок. Такое продвижение транзакта продолжается до тех пор, пока не произойдет одно из следующих возможных событий:
1) транзакт входит в блок, функцией которого является удаление транзакта из модели;
2) транзакт входит в блок, функцией которого является задержка транзакта на некоторое определенное в модели время;
3) транзакт «пытается» войти в следующий блок, однако блок «отказывается» принять его.
В этом случае транзакт остается в том блоке, где находился, и позднее будет повторять свою попытку войти в следующий блок. Когда условия в модели изменятся, такая попытка может оказаться успешной, и транзакт сможет продолжить свое перемещение по блок-схеме.
Если возникло одно из описанных выше условий, обработка данного транзакта прекращается, и начинается перемещение другого транзакта. Таким образом, выполнение моделирования симулятором продолжается постоянно.
Проходя через блоки модели, каждый транзакт вносит изменения в содержимое счетчиков блоков. Значения этих счетчиков доступны программисту через СЧА блоков. Каждое продвижение транзакта в модели является событием, которое должно произойти в определенный момент модельного времени. Для того, чтобы поддерживать правильную временную последовательность событий, симулятор имеет таймер модельного времени, который автоматически корректируется в соответствии с логикой, предписанной моделью.
Таймеры большинства версий GPSS имеют следующие особенности:
1) регистрируются только целые значения (все временные интервалы в модели изображаются целыми числами);
2) единица модельного времени определяется разработчиком модели, который задает все временные интервалы в одних и тех же единицах;
3) симулятор не анализирует состояние модели в каждый следующий момент модельного времени (отстоящий от текущего на единицу модельного времени), а продвигает таймер к моменту времени, когда происходит ближайшее следующее событие.
Значения таймера доступны программисту через системные СЧА.
Всякое изменение состояния модели, например, переход транзакта от одного блока к другому, рассматривается как некоторое событие, происходящее в определенный момент условного (системного) времени, задаваемого таймером системы Фактически, таймер в интерпретаторе GPSS - это целочисленная переменная, значение которой соответствует текущему моменту условного времени модели.
При построении модели пользователь должен задаться соотношением единицы системного времени, используемого в модели, к реальному времени, в котором происходит функционирование моделируемой системы. Следует отметить, что системное время никак не связано с машинным временем, затрачиваемым на выполнение моделирования.
Центральной задачей, выполняемой симулятором, является определение того, какой транзакт нужно выбрать следующим для продвижения в модели, когда его предшественник прекратил свое продвижение. С этой целью симулятор рассматривает каждый транзакт как элемент некоторого списка.
В относительно простых моделях используются лишь два основных списка событий: список текущих событий и список будущих событий.
Список текущих событий включает в себя те транзакты, планируемое время продвижения которых равно или меньше текущего модельного времени (к последним относятся транзакты, движение которых было заблокировано ранее). Он организуется в порядке убывания приоритетов транзактов, а в пределах каждого уровня приоритета —в порядке поступления транзактов.
Список будущих событий включает в себя транзакты, планируемое время продвижения которых больше текущего времени (то есть события, связанные с продвижением этих транзактов, должны произойти в будущем). Этот список организуется в порядке возрастания планируемого времени продвижения транзактов.
Симулятор GPSS помещает транзакты в зависимости от условий в модели в тот или иной список и переносит транзакты из списка в список, просматривает списки, выбирая следующий транзакт для обработки, корректирует таймер модельного времени после обработки всех транзактов в списке текущих событий. Таким образом, в процессе моделирования интерпретатор автоматически определяет правильную очередность наступления событий. В случае, если нужные действия в намеченный момент времени выполнены быть не могут (например, занято устройство, к которому обращается транзакт), интерпретатор временно прекращает обработку «застрявшего» транзакта, но продолжает следить за причиной, которая вызвала блокировку его обработки.Как только эта причина исчезает (например, освобождается занятое устройство), интерпретатор возвращается к обработке задержанного транзакта.
Программа на GPSS представляет собой последовательность предложений, изображающих объекты того или иного типа, а ее работу нужно представить как движение транзактов через блоки модели. Таким образом, в отличие от традиционных языков программирования, в GPSS программируется не последовательность вычислений, а структура системы массового обслуживания, а также правила генерации и обработки транзактов.
Правила оформления программы на GPSS
Исходная программа на языке GPSS, как и программа на любом языке программирования, представляет собой последовательность операторов. Операторы GPSS/PC записываются и вводятся в ЭВМ в следующем формате:
номер_строки МЕТКА операция операнды ; комментарии
В некоторых версиях системы (в том числе и в системе micro?GPSS) нумерация строк программы выполняется автоматически и в текст программы номера строк включать не требуется. Кроме того, в micro?GPSS комментарий отделяется от текста программной строки не точкой с запятой (символ «;»), а восклицательным знаком (символ «!»). Таким образом, строка программы на языке micro?GPSS имеет следующий формат:
МЕТКА операция операнды ! комментарии
Отдельные операторы могут иметь поле «МЕТКА» для ссылки на эти операторы в других операторах. Если такие ссылки отсутствуют, то этот элемент оператора не является обязательным.
В поле «операция» записывается ключевое слово (название оператора), указывающее конкретную функцию, выполняемую данным оператором. Это поле оператора является обязательным. У некоторых операторов поле операции включает в себя также вспомогательный операнд.
В полях «операнды» записывается информация, уточняющая и конкретизирующая выполнение функции, определенной в поле операции. Эти поля в зависимости от типа операции содержат до семи операндов, расположенных в определенной последовательности и обозначаемых обычно первыми буквами латинского алфавита от A до G. Некоторые операторы вообще не имеют операндов, а в некоторых операнды могут быть опущены, при этом устанавливаются их стандартные значения (по умолчанию). При записи операндов используется позиционный принцип: пропуск операнда отмечается запятой.
Поле «комментарии» является необязательным. В случае присутствия комментариев, они отделяются от поля операндов точкой с запятой (GPSS/PC) или восклицательным знаком (micro?GPSS). В системе GPSS/PC в текст комментариев не допускается включать символы кириллицы.
В случае, если комментарий занимает строку полностью (в строке нет операторов, которые должны выполняться при «прогоне» модели), в первой позиции строки ставится символ «*».Принимая во внимание, что программы на GPSS достаточно трудны для восприятия, при выполнении учебных заданий следует снабжать комментариями каждую включенную в программу конструкцию.
Пример фрагмента программы на языке micro?GPSS приведен ниже:
*Вся строка отведена под комментарий
MET1 GENERATE 10,5,,6 ! Дальше по строке идет комментаний
Операторы GPSS записываются, начиная с первой позиции, в свободном формате, то есть отдельные поля разделяются произвольным количеством пробелов. В ранних версиях языка GPSS применялась «бланковая» форма записи программ, то есть требовалось учитывать номера позиций («колонок»), в которых размещались различные элементы записи. При вводе исходной программы в интегрированной среде GPSS/PC размещение отдельных полей операторов с определенным количеством интервалов между ними производится автоматически.
Семейство языков моделирования GPSS
Одним из первых языков описания стохастических моделей дискретных процессов был язык блок-диаграмм разработанный в начале 60-х годов. На основе этого языка в 1961 году сотрудником компании IBM Дж. Гордоном был создан язык имитационного моделирования GРSS (General Рurрose Simulation System - система моделирования общего назначения). Система GPSS предназначена для написания имитационных моделей систем с дискретными событиями. Наиболее удобно в системе GPSS описываются модели систем массового обслуживания, для которых характерны относительно простые правила функционирования составляющих их элементов.
В настоящее время существует множество программных систем, реализующих различные диалекты языка GPSS. Как правило, различные версии систем класса GPSS поддерживают некоторое «базовое» подмножество элементов языка GPSS, совпадающее во всех диалектах, и группы команд (операторов, блоков), расширяющих возможности системы и различающихся в различных ее версиях (в частности, команды графического отображения результатов моделирования, факультативные возможности анимации процесса моделирования, команды сохранения промежуточных и окончательных результатов моделирования на внешних носителях и т.д.). Разработаны версии системы GPSS, предназначенные для работы на различных аппаратных платформах (IBM/360, Vax, PC, Macintosh). В числе программных комплексов, предназначенных для работы на платформе IBM PC могут быть названы системы GPSS/PC различных версий (Minuteman Software), GPSS/H (Wolverine и Meridian Marketing Group), micro?GPSS, GPSSV, GPSSS (GPSS?Simula). Система GPSS/PC является «стандартом де?факто» в области дискретного моделирования технических систем и распространена чрезвычайно широко. Версия 2.0 системы GPSS/PC (1986 г.) обладает расширенными графическими возможностями и реализована в виде интегрированной среды, облегчающей работу с системой. Большинство программных систем семейства GPSS рассчитаны на работу под управлением MS?DOS и предъявляют весьма низкие требования к системным ресурсам.
В данных методических указаниях излагаются правила разработки имитационных моделей технических систем на языках GPSS/PC и micro?GPSS (локализованная версия системы). Система micro?GPSS является «облегченной» версией GPSS. Количество операторов и команд, реализованных в системе micro?GPSS, является минимально достаточным для проведения моделирования и исследования поведения систем различной природы.
Системы обслуживания с несколькими приборами и несколькими очередями
Система обслуживания с несколькими приборами и очередями имеет несколько каналов обслуживания, перед которыми образуются отдельные очереди. Схематично такая система представлена на рис.3.2. Требования, входящие в систему обслуживания с НПО (НПО - несколько приборов и очередей), в простейшем случае выполняют одно из двух действий:
1. Если один из приборов в настоящий момент свободен, то требование занимает этот прибор.
2. Если все приборы заняты, требование присоединяется к наиболее короткой очереди и остается в ней до тех пор, пока не будет обслужено.
В GPSS есть блок, который может быть использован для просмотра множества элементов определенной группы для выяснения того, удовлетворяет ли хотя бы один из них определенному числовому условию. Независимо от того найден такой элемент или нет, транзакт продвигается по модели после завершения просмотра. Таким блоком является блок SELECT (выбрать).
Блок SELECT может использоваться в одном из двух режимов :
1) в режиме МАХ для поиска элемента с максимальным значением
2) в режиме MIN для поиска элемента с минимальным значением.
Рис. 3.2. Схема СМО с несколькими каналами и несколькими очередями
Режим МАХ используется относительно редко, поэтому подробно рассмотрим режим MIN. Блок SELECT в режие MIN может применяться, например, для выполнения следующих просмотров:
1. Просмотреть приборы и определить, находится ли хотя бы один из них в свободном состоянии
2. Просмотреть МНУ и определить, есть ли хотя бы одно устройство, нагрузка которого ниже 25%.
3. Просмотреть очереди и определить, есть ли хотя бы одна из них, у которой среднее время пребывания, исключая нулевые входы, не меньше 3.
Блок SELECT имеет следующий формат:
SELECT MIN A,B,C,D
Операнды блока SELECT в режиме MIN представлены в табл. 3.3.
Таблица 3.3
Операнды блока SELECT в режиме MIN
Операнд | Значение | Значение по умолчанию |
А | Номер параметра транзакта,в который записывается номер члена группы, указанной в операнде D | Ошибка |
B и С | Наименьший и наибольший номера из множества членов просматриваемой группы | Ошибка |
D | Просматриваемая группа. Этот операнд содержит символ «S», «F» или «Q»
S - для поиска минимального содержимого МНУ Q - для поиска минимальной длины очереди F - для поиска минимального текущего содержимого прибора |
Ошибка |
Пример использования блока SELECT представлен ниже:
SELECT MIN 1,1,6,Q
При выполнении блока производится просмотр очередей 1,2,...,6 для определения, есть ли среди них очередь с минимальным содержимым. Если такая очередь существует, то ее номер будет записан в параметр 1 (операнд A).
Стандартные числовые атрибуты и параметры транзактов
В предыдущих разделах для определения операндов блоков (кроме тех, которые задавались по умолчанию) использовались константы (числовые значения операндов указывались непосредственно в тексте программы). Существует также возможность определения значений операндов косвенным образом.
Источники косвенной спецификации значений всех операндов могут быть разделены на две категории - атрибуты системы и атрибуты транзактов. Атрибуты системы - это параметры, которые описывают состояние модели. Такие количественные показатели, как например, «текущее содержимое очереди» или «число единиц времени, в течение которых занят прибор» являются типичными системными атрибутами. Атрибуты, подобные указанным, автоматически поддерживаются интерпретатором micro?GPSS. Их называют стандартными числовыми атрибутами (СЧА). Их значения доступны пользователю. Доступ осуществляется при использовании специальных наименований этих атрибутов. При использовании этих наименований в качестве операндов, значениями последних становятся соответствующие текущие значения атрибутов.
В табл.4.1 приведены стандартные числовые атрибуты для приборов, МНУ и очередей. На все эти атрибуты можно ссылаться в процессе моделирования, используя их имена. Имя стандартного числового атрибута состоит из двух частей. Первая часть указывает групповое имя (то есть прибор, МНУ или очередь). Вторая часть идентифицирует конкретного члена группы (то есть какой именно прибор, какое МНУ, какая очередь).
Параметр транзакта - это СЧА , связанный с транзактом. У каждого транзакта может быть определенное число параметров. B micro-GPSS каждый транзакт может иметь до 12 параметров, которые обозначаются Р1, Р2,...Р12. В процессе перемещения транзакта по модели его параметры могут устанавливаться и модифицироваться в соответствии с заданной пользователем логикой. Эти значения можно использовать в качестве операндов блоков или аргументов функций. Могут быть указаны следующие особенности параметров транзактов :
1. Число параметров транзакта задается операндом F блока GENERATE, через который транзакт входит в модель.
2. Параметры не могут иметь символических имен, то есть, например, запись Р$КОВ недопустима.
3. Параметр транзакта имеет внутренний номер (неизвестный пользователю) в этом случае параметр транзакта записывается , например, как Р(3,2) и это значение хранится в так называемой матрице параметров. Запись Р(3,2) означает параметр Р2 для 3-го генерируемого транзакта. Когда транзакт входит в блок TERMINATE , значение внутреннего номера параметра теряется и это значение может использовать другой транзакт.
Таблица 4.1
Стандартные числовые атрибуты приборов, МНУ и очередей
Наименование |
Значение |
C1 |
Относительное время |
F$n |
Содержимое (емкость) прибора n |
FN$n |
Значение функции n |
N$n |
Число транзактов, вошедших в блок с адресом n |
Pj |
Значение j-го параметра (j = 1...12) |
PR |
Величина приоритета |
Q$n |
Длина очереди |
R$n |
Емкость незаполненной части МНУ n |
RNj |
Случайное число, сгенерированное j-м генератором случайных чисел (j = 1...8) |
S$n |
Емкость заполненной части МНУ n |
V$n |
Значение переменного выражения n |
W$n |
Число транзактов, входивших блок с адресом n |
X$n |
Сохраняемая величина (С-величина) |
1. Значение j по умолчанию равно 1.
2. n - символическое имя не более чем из пяти знаков (трех букв и двух букв или цифр).
3. Сохраняемая величина (далее просто С-величина) - это величина, не связанная ни с транзактом, ни с блоком, которая используется как обычная переменная, аналогичная переменным в языках программирования высокого уровня.
Типы операторов и объектов GPSS
Объекты программы GPSS описываются в тексте программы с помощью операторов. Каждый оператор GPSS относится к одному из четырех типов: операторы-блоки, операторы определения объектов, управляющие операторы и операторы-команды.
Операторы-блоки формируют логику модели. В GPSS/PC имеется около 50 различных видов блоков, каждый из которых выполняет свою конкретную функцию (в micro?GPSS - примерно вдвое меньше). За каждым из таких блоков стоит соответствующая подпрограмма транслятора, а операнды каждого блока служат параметрами этой подпрограммы.
Операторы определения объектов служат для описания параметров некоторых объектов GPSS. Примерами параметров объектов могут быть количество каналов в многоканальной системе массового обслуживания, количество строк и столбцов матрицы и т.п.
Управляющие операторы служат для управления процессом моделирования (прогоном модели). Операторы-команды позволяют управлять работой интегрированной среды GPSS/PC. Управляющие операторы и операторы-команды обычно не включаются в исходную программу, а вводятся непосредственно с клавиатуры ПК в процессе интерактивного взаимодействия с интегрированной средой.
После трансляции исходной программы в памяти ПК создается так называемая текущая модель, являющаяся совокупностью разного типа объектов, каждый из которых представляет собой некоторый набор чисел в памяти ПК, описывающих свойства и текущее состояние объекта. Объекты GPSS/PC можно разделить на семь классов: динамические, операционные, аппаратные, статистические, вычислительные, запоминающие и группирующие.
Динамические объекты, соответствующие заявкам в системах массового обслуживания, называются в GPSS транзактами. Они «создаются» и «уничтожаются» так, как это необходимо по логике модели в процессе моделирования. С каждым транзактом может быть связано произвольное число параметров, несущих в себе необходимую информацию об этом транзакте. Кроме того, транзакты могут иметь различные приоритеты.
Операционные объекты GPSS, называемые блоками, соответствуют операторам-блокам исходной программы.
Они, как уже говорилось, формируют логику модели, давая транзактам указания: куда идти и что делать дальше. Модель системы на GPSS можно представить совокупностью блоков, объединенных в соответствии с логикой работы реальной системы в так называемую блок-схему. Блок-схема модели может быть изображена графически, наглядно показывая взаимодействие блоков в процессе моделирования.
Аппаратные объекты GPSS — это абстрактные элементы, на которые может быть расчленено (декомпозировано) оборудование реальной системы. Кним относятся одноканальные и многоканальные устройства и логические переключатели. Многоканальное устройство иногда называют памятью.
Одноканальные и многоканальные устройства соответствуют обслуживающим приборам в СМО. Одноканальное устройство может обслуживать одновременно только один транзакт. На рис. 2.1 представлена схема простейшей системы массового обслуживания с одним обслуживающим аппаратом и очередью заявок.
Многоканальное устройство (МКУ) может обслуживать одновременно несколько транзактов. Логические переключатели (ЛП) используются для моделирования двоичных состояний логического или физического характера. ЛП может находиться в двух состояниях: включено и выключено. Его состояние может изменяться в процессе моделирования, а также опрашиваться для принятия определенных решений.
Статистические объекты GPSS служат для сбора и обработки статистических данных о функционировании модели. К ним относятся очереди и таблицы. Каждая очередь обеспечивает сбор и обработку данных о транзактах, задержанных в какой-либо точке модели, например, перед одноканальным устройством. Таблицы используются для получения выборочных распределений некоторых случайных величин, например, времени пребывания транзакта в модели.
К вычислительным объектам GPSS относятся переменные (арифметические и булевские) и функции. Они используются для вычисления некоторых величин, заданных арифметическими или логическими выражениями либо табличными зависимостями. Запоминающие объекты GPSS обеспечивают хранение в памяти ПК отдельных величин, используемых в модели, а также массивов таких величин.
К ним относятся так называемые сохраняемые величины и матрицы сохраняемых величин. К объектам группирующего класса относятся списки пользователя и группы. Списки пользователя используются для организации очередей с дисциплинами, отличными от дисциплины «раньше пришел — раньше обслужен» (дисциплина FIFO).
Каждому объекту того или иного класса соответствуют числовые атрибуты, описывающие его состояние в данный момент модельного времени. Кроме того, имеется ряд так называемых системных атрибутов, относящихся не к отдельным объектам, а к модели в целом. Значения атрибутов всех объектов модели по окончании моделирования выводятся в стандартный отчет GPSS. Большая часть атрибутов доступна программисту и составляет так называемые стандартные числовые атрибуты (СЧА), которые могут использоваться в качестве операндов операторов исходной программы.
Рис. 2.1. Схема простейшей системы массового обслуживания
Управляющие операторы micro GPSS
В языке GPSS существует ряд операторов, которые не используются для определения блоков. Операторы этого класса служат для задания режимов моделирования и управления работой интерпретатора micro?GPSS
Возможности моделирования сложных СМО в системе micro GPSS
В разделе 4 были рассмотрены основные принципы построения имитационных моделей в системах семейства GPSS. Изложенный материал, введенные блоки и операторы достаточны для построения относительно простых моделей. В данном разделе будут рассмотрены возможности micro?GPSS, позволяющие проводить построение и исследование более сложных моделей систем массового обслуживания.
Встроенные математические и логические функции
Существуют 15 встроенных функций micro?GPSS, объединенных в группы математических и логических функций. Любая из функций представляет собой СЧА, который имеет вид: FN$n(А), где n - символическое имя одной из встроенных функций, приведенных в табл. 4.3, операнд А - аргумент функции.
Приведенные в табл. 4.3. логические функции можно использовать в операторе IF. Например, вместо двух строк программы
IF S$stor>10,nov
IF order=U,nov
может быть использована единственная запись
IF FN$GT0(S$stor-10)+F$order>0,nov.
Таблица 4.3
Встроенные математические и логические функции micro?GPSS
Запись функции | Возвращаемое значение |
Математические функции | |
ABS | Абсолютное значение аргумента А. Если А<0,то FN$ABS(A)=-A, в противном случае FN$ABS(A)=A |
INT | Округление аргумента до целого числа. Так, FN$INT(2.23) будет равно 2 |
DEC | Отделение дробной части десятичной дроби от целой части. Так, FN$DEC(2.23)=0.23 |
EXP | Вычисление экспоненциального значения аргумента функции. Так, FN$EXP(1)=2.718 |
LOG | Вычисление натурального логарифма. Верно следующее равенство: FN$LOG(FN$EXP(A))=A |
SGN | Определение знака аргумента. При A<0 FN$SGN(A)=-1, при A=0 FN$SGN(A)=0, при A>0 FN$SGN(A)=1 |
SIN | Вычисление синуса аргумента, указанного в градусах. Так, FN$SIN(0)=FN$SIN(360)=0 |
SQR | Вычисление квадратного корня. Так,FN$SQR(0.64)=0.8 |
Логические функции | |
EQ0 | Определение равенства нулю аргумента. Так, если А=0,то FN$EQ0(A)=1, в противном случае FN$EQ0(A)=0 |
NOT | Отрицание (инверсия). Эта функция аналогична функции EQ0,но использует значение только 1 и 0.Так,FN$NOT(1)=0 и FN$NOT(0)=1 |
GT0 | Проверка условия А>0.Так,если A>0 ,то FN$GT0(A)=1, в противном случае FN$GT0(A)=0 |
GE0 | Проверка условия A>=0 |
LT0 | Проверка условия A<0 |
LE0 | Проверка условия A<=0 |
NE0 | Проверка условия A<>0 |
В функции вместо независимой переменной может использоваться адрес блока. В этом случае независимой переменной может быть любой СЧА, однако наиболее часто используется СЧА RNj. Так, например, запись
tre FUNCTION RN4,D3
.6,Stan1/.8,Stan2/1,Stan3
означает, что в 60% всех случаев переходить нужно в блок с адресом Stan1, в 20% - в блок с адресом Stan2 и в 20% - в блок с адресом Stan3 в зависимости от величины RN4.