Математическое моделирование
Блок GENERATE
GENERATE - блок, через который транзакты входят в модель (порождаются). В одной модели может быть несколько различных таких блоков. Необходимую для данного блока информацию задает разработчик с помощью операндов. Сведения об этих операндах сведены в табл.3.1.
Операнды А и В в блоке являются основными (их наличие обязательно),операнды С, D и E - дополнительными. Все эти операнды не обязательно должны быть заданы явно. Но когда операнды заданы в виде констант, то они должны быть неотрицательными целыми числами. В некоторых версиях системы для операндов А и В допускаются также и вещественные числа. Целые числа должны иметь максимум 5 цифр, вещественные - 8 цифр, причем значение операнда A не должно быть меньше В.
Таблица 3.1
Операнды блока GENERATE
| Операнд |
Значение |
Значение по умолчанию |
| А |
Средний интервал времени порождения (среднее время между последовательными приходами транзактов в блоке GENERATE) |
Ноль |
| B |
Половина поля допуска равномерно распределенного интервала (половина размаха интервалов времени прибытия) |
Ноль |
| C |
Смещение интервалов (момент времени,в который в блоке должен появиться первый транзакт) |
Смещение отсутствует |
| D |
Ограничитель (граничное значение общего числа транзактов, которые могут войти в модель через данный блок в течение времени моделирования. Когда это число достигнуто, данный блок GENERATE перестает быть активным) |
Бесконечность |
| E |
Уровень приоритета (уровень или класс приоритета каждого из транзактов, входящих в модель через данный блок. Всего существует 128 уровней, которые задаются числами от 0 до 127) |
Ноль |
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. Операнд В не используется. Тогда захват происходит, когда обслуживаемый транзакт сам не является захватчиком |
Пример использования операторов 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.