logo
Чтоесть / Мое / Конспект лекций Для студентов специальности 080801

4.27. Команды gpss World

Команды необходимы, как для построения программы модели, так и для интерактивного взаимодействия с моделью. Они включают операторы описания данных, операторы управления, которые вклю­чены в стандартный GPSS [10, 13], и команды, которые используются только в языке GPSS World.

Операторы описания данных и команды управления:

Команда START. Используется для инициации начала модели­рования. Его формат:

START A,[B],[C],[D]

В операнде А задается значение счетчика завершений, опреде­ляющего момент окончания прогона модели. Операнд А может быть только положительным целым числом.

Операнд В - операнд вывода статистики. Этот операнд может принимать значение «NP» или быть опущенным. Задание «NP» в операнде В приводит к блокированию вывода статистики. По умол­чанию выводится стандартная статистика.

Операнд С не используется и сохранен для совместимости с предыдущими версиями GPSS.

Операнд D задает необходимость вывода содержания СТС и СБС. Операнд D может быть положительным целым. Если операнд D не равен 0, то СТС и СБС выводятся.

Моделирование продолжается до тех пор, пока счетчик завер-s шения, определенный операндом А, не достигнет нулевого значения. Для уменьшения значения счетчика используется блок TERMINATE (подробнее см. в параграфе 4.4).

Стандартный числовой атрибут, который связан с этой коман­дой, TG1 - текущее значение счетчика завершения.

Оператор INITIAL. Позволяет задавать начальные значения сохраняемых величин (Savevalue), элементов матриц (Matrix) и логи­ческих ключей (Logicswitch). Имеет такой формат:

INITIAL A[,B|

Значения операндов:

А - СЧА сохраняемых величин, элементов матриц или логиче­ских ключей. В операнде могут стоять:

LS<положительное целое>, LS$<имя> - имя логического ключа;

Х<положительное целое>, Х$<имя> - имя сохраняемой вели­чины;

МХ<положительное целое>( ) или МХ$<имя>() - имя элемен­та матрицы.

В - устанавливаемое значение. По умолчанию равно единице. Операнд может быть числом, строкой, именем или UNSPECIFIED.

При выполнении оператора INITIAL значение, обусловленное операндом В, назначается логическому ключу, сохраняемой величине или элементу матрицы, определенному в операнде А.

Если операнд А определен как логический ключ, то операнд В может быть только нулем или единицей.

Если в операнде В использовано ключевое слово UNSPECIFIED, то сохраняемая величина, матрица или элемент мат­рицы устанавливается в «неопределенное» состояние. Обычно это ключевое слово используется, чтобы указать на отсутствие данных в матрице результатов, которая должна быть в дальнейшем проанали­зирована библиотечной процедурой ANOVA. Если матрица имеет размерность больше двух, то для установки ее в состояние UNSPECIFIED надо использовать язык PLUS.

С оператором INITIAL связаны блоки LOGIC, SAVEVALUE и MSAVEVALUE.

Пример 4.62

INITIAL Х88Д2000

Значение 12000 записывается в сохраняемую величину с номе­ром 88.

INITIAL MX3(2,4),33

Значение 33 записывается в элемент (2, 4) матрицы 3.

INITIAL X$Quote,"Now is the time ... "

Этот оператор назначает строчную константу сохраняемой ве­личине Quote.

INITIAL MX$Inventory(Part_39,Stocklevel),200

Значение 200 записывается в строку Part_39 столбца Stocklevel матрицы Inventory. Именам Part_39 и Stocklevel должны быть пред­варительно назначены соответствующие целые числа в командах EQU.

INITIAL MainResult,UNSPECIFIED

Предварительно определяется матрица для экспериментов с именем MainResult, которая может не иметь данных.

Команда RESET. Сбрасывает в ноль статистику и СЧА систе­мы, но не удаляет транзакты из модели. Она используется для по­вторных экспериментов с моделью и сброса статистических данных переходного периода имитационного процесса. Имеет такой формат:

RESET

Действия команды RESET:

1) значение относительного модельного времени (С1) устанав­ливается в ноль;

2) значение абсолютного модельного времени (АС1) остается без изменений;

3) все датчики псевдослучайных чисел остаются неизменными;

4) значения сохраняемых величин и матриц, а также состояния логических ключей не изменяются;

5) счетчики числа входов в блоки (Nj) сбрасываются в ноль;

6) временные интегралы* устройств устанавливаются в ноль;

7) временные интегралы содержимого МКУ** устанавливаются в ноль;

8) счетчики числа входов в МКУ (SCj) и максимального содер­жимого МКУ (SMj) остаются неизменными;

9) временные интегралы всех очередей*** сбрасываются в ноль, счетчики вхождений в очередь (QCj) и максимального содержимого очереди (QMj) устанавливаются равными текущей длине очереди;

10) в таблицах стираются накопленные статистические данные;

11) временные интегралы СП устанавливаются в ноль, счетчики числа вхождений в списки (CCj) и максимального содержимого спи­сков (CMj) устанавливаются равными текущей длине списка.

Команда CLEAR. Сбрасывает всю накопленную статистику, удаляет все транзакты из модели и устанавливает отсчет (нумерацию) транзактов, сгенерированных блоками GENERATE, начиная с еди­ницы.

Формат записи команды CLEAR:

CLEAR [A|

Действия команды CLEAR:

1) все транзакты удаляются из модели;

2) содержимое всех блоков устанавливается в ноль;

3) текущие счетчики блоков (Wj) сбрасываются в ноль;

4) общие счетчики блоков (Nj) сбрасываются в ноль;

5) системное время (С1 и АС1) устанавливается в ноль;

6) устройства становятся незанятыми и доступными;

*Временной интеграл устройства - сумма длин всех интервалов времени, на протяжении которых устройство было занято.

**Временной интеграл содержимого МКУ рассчитывается так. В начале моделирования его значение равно нулю. При выполнении подпрограммы блоков ENTER и LEAVE вычисляются интервал вре­мени, на протяжении которого содержимое МКУ не менялось, и соответствующее этому интервалу значение содержимого МКУ. Текущее значение временного интеграла содержимого МКУ увеличива­ется на значение произведения этих величин.

***Временной интеграл очереди рассчитывается так. В начале моделирования его значение равно нулю. При выполнении подпрограммы блоков QUEUE и DEPART вычисляется интервал времени, на про­тяжении которого содержимое очереди не менялось, и соответствующее этому интервалу значение содержимого очереди. Текущее значение временного интеграла содержимого очереди увеличивается на значение произведения этих величин.

7) МКУ становятся свободными и доступными;

8) временные интегралы устройств, МКУ, очередей и СП уста­навливаются в ноль;

9) максимальные значения содержимого очередей, СП и МКУ устанавливаются равными их текущему значению;

10) состояние датчиков псевдослучайных чисел не изменяется;

11) внутренний счетчик транзактов, генерируемых в блоках GENERATE, устанавливается в ноль;

12) из всех числовых групп удаляются их члены;

13) содержимое всех сохраняемых величин и матриц принимает нулевое значение;

14) логические ключи сбрасываются.

Если используется CLEAR OFF, выполняется все перечислен­ное выше за исключением последних двух пунктов. То есть, если операнд A=OFF, то логические ключи, сохраняемые величины и мат­рицы остаются без изменений.

После выполнения всех названных операций команды CLEAR GPSS-модель просматривается интерпретатором в поиске блоков GENERATE. В каждом выявленном блоке GENERATE создается новый транзакт так же, как при первой интерпретации блока GENERATE. Заново вычисляется время начальной задержки и мак­симальное число транзактов, которые будут образованы в блоках GENERATE.

Команда RMULT. Моделирование часто требует нескольких различных последовательностей случайных чисел. Эти последова­тельности выдаются генераторами случайных чисел, которые дейст­вуют независимо друг от друга. При каждом запуске системы генера­торы выдают одну и ту же последовательность чисел. Команда RMULT позволяет изменять такую последовательность путем изме­нения начальных множителей.

В системе GPSS World генераторы случайных чисел создаются по мере необходимости, их явное определение не обязательно. Не­сколько генераторов случайных чисел используются GPSS World для блоков GENERATE, ADVANCE и TRANSFER. Они определяются в пункте меню Edit/Setting/Random Numbers (случайные числа) на­строек модели.

Формат команды RMULT:

RMULT [A],[B],[C],[D],[E],[F],[G]

В операнде А задается начальный множитель для первого гене­ратора случайных чисел RN1.

В операнде В задается начальный множитель для второго гене­ратора случайных чисел RN2.

В операнде С задается начальный множитель для третьего гене­ратора случайных чисел RN3.

В операнде D задается начальный множитель для четвертого ге­нератора случайных чисел RN4.

В операнде Е задается начальный множитель для пятого генера­тора случайных чисел RN5.

В операнде F задается начальный множитель для шестого гене­ратора случайных чисел RN6.

В операнде G задается начальный множитель для седьмого ге­нератора случайных чисел RN7.

Стандартный числовой атрибут, связанный с этой командой, - RN<номеp генератора>. Он возвращает случайное целое число из интервала от 0 до 999.

Операнды должны быть положительными целыми числами. В этом операторе должен быть задан хотя бы один операнд.

Пример 4.63

RMULT 875,1237,„319

Устанавливаются начальные состояния множителей генераторов случайных чисел 1, 2 и 5. Остальные значения остаются без изменений.

Оператор EQU. Предназначен для присвоения числовых значе­ний именам, которые используются в модели (аналог #defme в языке программирования Си). Оператор имеет такой формат:

Таблица 4.49

Когда интерпретатор обрабатывает оператор EQU, он вычисляет выражение, заданное операндом А, после чего создает или переопре­деляет имя переменной. Имени присваивается результат вычисленного выражения. Полученное значение заменяет ссылки на это имя в операндах или выражениях, используемых в модели.

Значения имен могут использоваться как внутренние значения переменных пользователя, или они могут определять объекты, такие как метка. Именам, используемым как метки объектов, значения обычно не назначаются. Интерпретатор автоматически назначает ин­дивидуальные значения именам, если они еще не появились в опера­торе EQU, в выражениях или операндах. Имена могут использоваться для определения объекта в СЧА.

Выражения, содержащиеся в операторе EQU, вычисляются со­гласно правилам для выражений и могут включать запросы к пользо­вательским или библиотечным процедурам PLUS. Выражения могут использовать любые из арифметических и логических операторов. Если в выражении используются параметры, они вычисляются для активного транзакта.

Имена, которым не были явно назначены значения, не могут ис­пользоваться в выражении. Необходимо назначить значение для име­ни прежде, чем будет вычислено выражение. Переменные пользова­теля могут быть заданы операторами EQU или в процедуре PLUS.

Если значение имени определено, то оно сохраняет свое значе­ние на протяжении всего прогона модели. Имена переменных пользо­вателя могут быть переопределены:

1) повторным определением и вводом новых операторов EQU в очереди команд;

2) в процедуре PLUS;

3) при выполнении интегрирования с помощью команды INTE­GRATE.

Значение метки блока не может быть изменено (переопределено после трансляции) оператором EQU. Если имя было определено для объекта, а затем переопределено, например, оператором EQU, то нет возможности обратиться к первоначальному имени.

Переменные FVARIABLE и BVARIABLE используют одну и ту же область имен.

Если необходимо использовать числовое имя для объекта, то оно должно быть назначено оператором EQU до определения объекта.

Пример 4.64

Mechanic EQU 1 Mechanic STORAGE 100

В СЧА и операндах блоков этого МКУ теперь может использо­ваться число 1 или имя Mechanic.

Пример 4.65

Рассмотрим модель одноканальной системы обслуживания:

10 GENERATE 30,6 20 SEIZE DEVICE 30 ADVANCE 25,4 40 RELEASE DEVICE 50 TERMINATE 60 GENERATE 24000 70 TERMINATE 1 START 1

В этом случае статистика по устройствам имеет такой вид:

FACILITY ENTRIES UTIL. AVE.TTME AVAIL. OWNER PEND INTER RETRY DELAY DEVICУ 802 0.830 24.86 1 803 0 0 0 0

Используем оператор EQU:

10 GENERATE 30,6 20 SEIZE DEVICE 30 ADVANCE 25,4 40 RELEASE DEVICE 50 TERMINATE 60 GENERATE 24000 70 TERMINATE 1 DEVICE EQU 1 START 1

Теперь статистика по устройствам имеет такой вид:

FACILITY ENTRIES UTIL. AVE.TTME AVAIL. OWNER PEND INTER RETRY DELAY 1 802 0.830 24.86 1 803 0 0 0 0 0

Кроме рассмотренных выше, к операторам описания объектов относятся:

BVARIABLE - определяет булеву переменную;

FUNCTION - определяет функцию;

FVARIABLE - определяет действительную переменную с фиксированной точкой;

MATRIX - определяет матрицу;

QTABLE - определяет таблицу для очереди;

STORAGE - определяет МКУ;

TABLE - определяет таблицу;

VARIABLE - определяет переменную.

Все эти операторы были рассмотрены ранее. Отметим только, что в GPSS World возможности работы с матрицами расширены (уве­личена максимальная размерность матрицы с 2-х до 6). Поэтому опе­ратор MATRIX имеет следующий формат:

NAME MATRIX A,B,C,[D],[E],[F][,G]

Метка NAME определяет имя матрицы.

Операнд А не используется (оставлен для совместимости с предыдущими версиями GPSS). Все остальные операнды должны быть только положительными целыми числами и задают размерность мат­рицы по соответствующему измерению:

В - задает максимальное значение индекса для первой размерности;

С - задает максимальное значение элементов для второй раз­мерности;

D - задает максимальное значение элементов для третьей раз­мерности;

Е - задает максимальное значение элементов для четвертой раз­мерности;

F - задает максимальное значение элементов для пятой размер­ности;

G - задает максимальное значение элементов для шестой раз­мерности.

Только к первым двум размерностям матрицы можно обращать­ся в блоке MSAVEVALUE. В этом случае все отсутствующие раз­мерности предполагаются равными единице. Процедуры PLUS могут обращаться ко всем элементам любой матрицы. Если необходимо ис­пользовать матрицу размерностью больше, чем 2, надо создать одну или несколько процедур PLUS для обращения к ним. Матрица, опре­деленная в операторе MATRIX, имеет глобальную область действия, т.е. доступна всем процедурам PLUS. Кроме того, может быть созда­на ^ременная матрица с локальной областью действия (доступна только в процедуре PLUS, в которой она объявлена).

Матрицы никогда не удаляются из модели, однако, они могут быть переопределены другим оператором MATRIX.

Когда матрица создается впервые или когда используется ко­манда CLEAR ON, всем элементам задаются значения 0. При необ­ходимости можно использовать оператор INITIAL для задания элементам матрицы неопределенного состояния - UNSPECIFIED. Это полезно для сохранения результатов эксперимента. Когда такая мат­рица результатов передается библиотечной процедуре ANOVA, эле­менты UNSPECIFIED будут обработаны как отсутствующие данные, вместо нулевых значений.

Максимальный размер памяти, выделяемый для матриц, опреде­ляется в настройках параметров системы GPSS World.

Команда EXIT (ВЫХОД). Предназначен для завершения рабо­ты с системой GPSS World. Имеет следующий формат: EXIT [A]

В результате выполнения команды EXIT система немедленно завершает работу. Операнд А является необязательным и использует­ся для управления сохранением модели и результатов моделирования. Он может принимать следующие значения:

0 или не указан - в окне сообщений появляется запрос на сохра­нение для каждого вновь созданного или измененного в сеансе моде­лирования файла;

1 - все файлы сохраняются без запроса;

-1 - не сохраняются никакие файлы.

Диалоговые команды GPSS World. Могут быть включены в модель или введены в диалоговом окне команд - Command (в этом случае они называются диалоговыми командами). Любая имитация связана очередью команд. После трансляции модели при моделиро­вании все команды выстраиваются в очередь команд и выполняются одна за другой, пока этот процесс не будет приостановлен или пока не будут выполнены все команды.

Команды могут быть немедленными или поставленными в оче­редь. Немедленные команды, как HALT и SHOW, выполняются, как только они получены в процессе моделирования, другие команды ставятся в очередь. Они помещаются в конце списка команд, которые еще не были выполнены. Если при моделировании нет немедленных команд, то выполняется следующая команда из очереди команд. Если имитация выполняется и получена немедленная команда, то моделирование временно приостанавливается для выполнения немедленной команды.

Команда HALT - особый случай. Мало того, что она немедленная команда, но она также удаляет все оставшиеся команды из очереди команд. После выполнения команды HALT моделирование пре­кращается.

Обычно удобно поместить список часто используемых команд в текстовый файл. Тогда можно использовать команду INCLUDE (ВКЛЮЧИТЬ) для посылки объекту моделирования целой последо­вательности команд. Еще проще, можно загружать в функциональ­ную клавишу команду INCLUDE и выполнять целый список команд одиночным нажатием соответствующей клавиши.

Команда CONDUCT (ПРОВЕСТИ) начинает эксперимент. Ее формат:

CONDUCT [A]

Операнд А задает имя вызываемой процедуры эксперимента, написанной на языке PLUS. Операндом может быть только имя PLUS-процедуры. Данный операнд является необязательным.

Команда CONDUCT - немедленная команда, которая может быть послана только приостановленному процессу моделирования.

Эта команда запускает эксперимент и передает параметры к предварительно организованному эксперименту на языке PLUS для объекта моделирования. Если при моделировании используется толь­ко одиночный эксперимент без параметров, операнд А не требуется.

Пример 4.66

CONDUCT MyExperiment(NumberOfTellers, StartingReplicateNumber)

В этом примере PLUS-эксперимент MyExperiment запускается точно так же, как любая другая процедура. Глобальные переменные пользователя NumberOfTellers и StartingReplicateNumber исполь­зуются для того, чтобы определить, где эксперимент начинается или возобновляется при прогоне модели. Параметры вычисляются в гло­бальном контексте и передаются вызываемому эксперименту.

Как только начался эксперимент с командой CONDUCT, диало­говые возможности взаимодействия с выполняемой моделью ограниче­ны. Можно только отображать часы модельного времени с помощью меню View/Simulation Clock, Если в процессе моделирования возникла необходимость взаимодействия с моделью, то эксперимент необходимо остановить командой HALT. Команда CONDUCT не может быть за­пущена обращением к процедуре DoCommand. В ходе эксперимента доступны только команда HALT и библиотечная процедура Do-Command. С командой CONDUCT не связаны никакие СЧА.

Команда CONTINUE (ПРОДОЛЖИТЬ) возобновляет процесс моделирования, который был ранее прерван либо остановлен коман­дой STOP.

Формат команды:

CONTINUE

Моделирование считается остановленным, когда встречается условие, установленное командой STOP или STEP. Команда продолжает процесс моделирования, но не исключает повторные условия останова. Условие останова может быть исключено из модели опцией OFF команды STOP или в окне блоков.

Команда CONTINUE может использоваться после команды HALT, которая удаляет все команды из очереди команд. Только ко­манда CONTINUE может продолжить процесс моделирования, если счетчик завершения остался положительным числом. В этом случае продолжается планирование появления транзактов в модели. В противном случае процесс моделирования прекращается, появление транзактов не планируется, генераторы случайных чисел в начальное состояние не сбрасываются.

Команда CONTINUE может быть выполнена с помощью «горя­чих клавиш» [Ctrl+Alt+C], если активно окно GPSS World.

Команда INCLUDE (ВКЛЮЧИТЬ) транслирует файл операто­ров модели.

Формат команды:

INCLUDE A

Операнд А обязательный, он определяет подключаемый допол­нительный файл модели или файл со списком команд. Операнд представляет собой строку символов и определяет путь к файлу.

Пример 4.67

INCLUDE "examplel.txt"

Когда транслятор получает команду INCLUDE, он считывает текст модели из файла с именем example_l.txt. Так как путь к файлу не указан, то предполагается, что файл находится в каталоге проекта модели. Команда INCLUDE является немедленной командой. При получении этой команды транслятор начинает транслировать под­ключаемый файл GPSS-модели example_l.txt так, как будто подключаемая модель заменила строку с командой INCLUDE. Допускается подключение не более пяти файлов.

Пример 4.68

INCLUDE "A:\prim_l.txt"

В этом примере указан полный путь к подключаемому файлу, который находится на дискете в дисководе А.

1 Система GPSS World работает только с файлами, имеющими расширение «.txt». В этих файлах может находиться либо неоттранслированная модель GPSS-программы, либо последовательность команд. При попытке подключения с помощью этой команды оттранслированной моде­ли с расширением «.gps» транслятор выдает сообщение о том, что подключаемый файл должен быть только с расширением «.txt».

Команда HALT прерывает моделирование и очищает очередь команд. Формат команды:

HALT

Команда HALT - немедленная команда и поэтому не помещает­ся в очередь команд объекта моделирования. Она выполняется не­медленно, переводя процесс моделирования в приостановленное со­стояние и удаляя любые оставшиеся команды из очереди команд. Моделирование может быть продолжено позже командой CONTINUE. Только после этой команды можно использовать ко­манду GROUPS.

Команда HALT может быть выполнена с помощью «горячих клавиш» [Ctrl+Al+H], если активно окно GPSS World.

Команда INTEGRATE устанавливает интегрирование и пороги непрерывной переменной. Формат команды:

NAME INTEGRATE A,[B],C,[D],[E]

NAME - имя переменной пользователя.

Значение операндов:

А - производная. Операндом А может быть имя, число, строка, выражение в скобках или СЧА.

В - первое пороговое значение (порог). Операндом В может быть имя, число, строка, выражение в скобках или СЧА.

С - первая метка. Операндом С может быть имя, положительное целое число, выражение в скобках или СЧА. Операнды В и С: или оба используются, или оба не используются.

D - второе пороговое значение (порог). Операндом D может быть имя, число, строка, выражение в скобках или СЧА.

Е - вторая метка. Операндом Е может быть имя, положительное целое число, выражение в скобках или СЧА. Операнды D и Е: или оба используются, или оба не используются.

Когда объект моделирования принимает команду INTEGRATE, он размещает ее в конце очереди команд.

При выполнении команд INTEGRATE переменная пользователя автоматически интегрируется с течением системного времени. Для интегрирования используется модифицированный метод Рунге-Кутта-Фельберга пятого порядка с переменным размером шага.

Всем переменным пользователя, используемым в интегрирова­нии, до выполнения моделирования должны быть даны начальные значения. Это можно сделать с помощью операторов EQU или опера­торов присваивания в PLUS-процедуре.

Операнд А команды INTEGRATE используется для производ­ной переменной пользователя по времени. Он может быть очень про­стым или весьма сложным. В последнем случае можно определить процедуру PLUS и разместить команду вызова в вводимом выраже­нии, используемом для операнда А.

Каждая команда INTEGRATE может иметь ноль, один или: два числовых порога. Операнды В и С могут использоваться для определения первого порога, и (или) операнды D и Е могут использоваться для определения второго порога. В любом случае, первый операнд пары определяет значение порога, второй указывает метку блока, ко­торый принимает генерируемые транзакты.

Если в течение интегрирования значение интегрируемой пере­менной достигает значение порога (с любого направления), создается новый транзакт. Этому транзакту устанавливается приоритет 0, и он переходит в блок, связанный с этим порогом в команде INTEGRATE. Время входа транзакта в модель определяется линей­ной интерполяцией. Для увеличения точности при приближении к порогу шаг интегрирования уменьшается. Транзакты, генерируемые при пересечении порога, могут использоваться для того, чтобы изме­нить значение порога.

Оба порога равноправны, нет необходимости определять один как нижний, а второй как верхний. Новый транзакт генерируется при пересечении любого порога с любой стороны. Если направление пе­ресечения важно для функционирования модели, то нужно следить за значением переменной либо проверять направление пересечения.

Интегрирование начинается автоматически в активном или «разрешенном» состоянии. Во время выполнения моделирования можно включать или выключать интегрирование, используя один или несколько блоков INTEGRATION.

Чтобы настроить автоматическое интегрирование переменной, необходимо:

1) объявить командой INTEGRATE интегрируемую переменную;

2) присвоить начальные значения используемым переменным.

Пусть имеется простое дифференциальное уравнение вида y=f(Θ), где Θ- это выражение, в которое входят некоторые пере­менные и (или) значение системного времени (СЧА АС1). По опреде­лению f(Θ) - это производная переменной у по времени. Итак, для настройки интегрирования нужно:

1) объявить командой INTEGRATE интегрируемую перемен­ную Y_ (не забыв при этом заключить выражение производной в скобки):

Y_ INTEGRATE (f(Θ))

2) присвоить переменной Y_ начальное значение, например,

Y_ EQU 100.3

3) присвоить начальные значение всем переменным, входящим в выражение 0 (с помощью операторов EQU или операторов присваи­вания в PLUS-процедурах).

Производная показывает, как быстро изменяется переменная во времени. Она указывает, на какую величину GPSS World автоматиче­ски увеличивает числовое значение интегрируемой переменной в процессе моделирования.

Пусть, например, некоторый склад строится со скоростью 2 бло­ка в минуту, а единица модельного времени равна одной секунде [20]. В этом случае настройка автоматического интегрирования осуществляется так:

Inventory INTEGRATE (2.0/3600) Inventory EQU 100

Естественно, переменной Inventory может быть придано любое другое начальное значение.

Вычисление производной требует большего времени, чем вы­числение аналитического выражения. В таком простом примере, как )тот, где переменная вычисляется как функция от времени, гораздо быстрее просто посчитать значение переменной во время моделиро­вания, чем интегрировать переменную.

Интегрирование должно использоваться в случаях, когда не из­вестно решение дифференциального уравнения.

Этот пример определяет систему из двух дифференциально-разностных уравнений первого порядка, точное решение которой та­ково:

Выражения в командах INTEGRATE используются как произ­водные по времени. Начальные значения непрерывных переменных установлены командами EQU.

В процессе моделирования интегрирование автоматически вы­полняется между моментами дискретного времени. Порог установлен для пользовательской переменной Х_*. Когда эта переменная пересе­кает значение 0,707 (с любого направления), создается новый тран­закт и направляется в блок, помеченный меткой WAKE_UP.

* Обозначение X используется для СЧА сохраняемых величин и не может использоваться как имя переменной, поэтому в данной модели используется имя Х_.

При использовании интегрирования моделирование выполняется поочередно в непрерывных и дискретных стадиях. В процессе имитации при планировании событий выполняется дискретная стадия моделирования. В этом случае часы модельного времени продвигаются от события к событию. Между моментами наступления событий выполняется непрерывная стадия моделирования, в течение которой интегрирование осуществляется с маленькими приращениями времени, называемыми минишагами. График переменной интегрирования выводит промежуточные значения в концах минишагов. Когда происходит пересечение порога, генерируется транзакт и моделирование переходит в дискретную стадию. Непрерывная и дискретная стадии могут взаимодействовать. Например, интегрируемым переменным пользователя в дискретной стадии могут быть назначены новые значения. Это можно сделать, используя операторы EQU или вызывая предназначенные для этого PLUS-процедуры.

Пример 4.69

Пусть PLUS-процедура определена следующим образом:

PROCEDURE SetPop(PopLevel) BEGIN

Foxes=PopLevel;

END;

Можно повторно инициализировать переменную пользователя, введя, например, блок PLUS в модель

PLUS (SetPop (200))

или используя ввод выражения, которое вызывает SetPop() в некото­ром другом блоке.

Уравнения высокого порядка [20]. При необходимости ис­пользования в модели дифференциального уравнения высокого по­рядка, необходимо уменьшить его порядок до первого. Для этого нужно переписать это уравнение как систему уравнений первого порядка. Это выполняется достаточно просто путем ввода новой переменной для каждой промежуточной производной.

Например, пусть имеем дифференциальное уравнение третьего порядка:

Для уравнений еще большего порядка нужно продолжить введение новых переменных. После подстановки новых переменных в на­чальное уравнение получим дифференциальное уравнение первого порядка:

25v'-6u + y = 0.

Теперь у нас есть следующая система дифференциальных урав­нений:

В системе Grab World это будет выглядеть так:

Y_ INTEGRATE U_

U_ INTEGRATE V_

V_ INTEGRATE ((6/25) # U_-(1/25)#Y_)

Y_ EQU 10.0

U_ EQU 1.0

U_ EQU 1.0

Начальные значения для U_, V_ и Y_, определенные при помо­щи оператора EQU, задаются в зависимости от начальных условий моделирования.

Пример 4.70 [20]

Постановка задачи «Хищник-Жертва». На маленьком острове бесконтрольно растет популяция кроликов. Проблема стоит так ост­ро, что местные фермеры прикладывают значительные усилия, чтобы прекратить увеличение популяции кроликов. Для контроля над си­туацией они хотят завести популяцию лис.

Для моделирования этого явления используется модель «хищ­ник - жертва». При моделировании изучается такой вопрос: «Что произойдет, если выпустить 80 лис?».

******************************************************************

* Модель Lotka-Volterra Хищник-Жертва

* Действия:

* График "Лисы и Кролики": X 12000; Y 0-3000

* START 1

******************************************************************

*

* Не забывайте выражения производных заключать в скобки Foxes INTEGRATE (FoxRateQ)

Rabbits INTEGRATE (RabbitRateQ)

*

* Начальные условия

*

Foxes EQU 80

Rabbits EQU 1000

*

* Параметры модели

*

K_ EQU 0.2000 ; Эффективность хищников А_ EQU 0.0080 ; Уровень смертности хищников В_ EQU 0.0002 ; Фактор охоты С_ EQU 0.0400 ; Уровень рождаемости кроликов

*

* Управляющий сегмент дискретного моделирования

*

GENERATE 10000

TERMINATE 1

PROCEDURE FoxRateO BEGIN

*

* Скорость роста популяции лис

*

TEMPORARY BirthRate, Death Rate, TotRe3(» =

* Граничные значения для переменной *

IF (Foxes < 0) THEN Foxes = 0;

IF (Foxes > 10e50) THEN Foxes = 10e50 ;

BirthRate = K_ # B_ # Foxes # Rabbits;

DeathRate = A_ # Foxes;

TotRate = BirthRate - DeathRate;

RETURN TotRate; END;

*

PROCEDURE RabbitRateQ BEGIN

*

* Скорость роста популяции кроликов

*

TEMPORARY BirthRate, DeathRate, TotRate;

* Граничные значения для переменной

IF (Rabbits < 0) THEN Rabbits = 0;

IF (Rabbits > lOeSO) THEN Rabbits = 10e50 ;

BirthRate = C_ # Rabbits;

DeathRate = B_ # Foxes # Rabbits ;

TotRate = BirthRate - DeathRate;

RETURN TotRate; END;

На рис. 4.15 представлен отчет по результатам моделирования при условии, что начальное значение количества лис равно 80. На рис. 4.16 дан график изменения размеров популяций кроликов и лис для этого начального значения.

Команда REPORT. Выводит стандартный статистической отчет о работе модели.

Формат команды:

REPORT [A][,B]

Операнд А не используется (оставлен для совместимости с пре­дыдущими версиями).

Операнд В - признак немедленного создания стандартного от­чета. Может иметь значение NOW.

Пример 4.71

REPORT

Эта команда немедленно создает стандартный отчет.

REPORT ,NOW

Этот формат команды сохранен для совместимости с версией GPSS/PC. Как и в предыдущем случае, она немедленно создает стан­дартный отчет.

Команда REPORT ставится в конец очереди команд. Способ выдачи информации в стандартный отчет может быть настроен в па­раметрах системы Edit/Settings/Report. Если в параметрах указан вы­вод в окно «In Windows», то стандартный отчет создается в новом окне и может быть сохранен в файле. В противном случае стандарт­ный отчет создается, ему присваивается последовательный номер, и он автоматически помещается в файл.

Команда REPORT больше не использует операнд А и всегда предполагает, что операнд В имеет значение NOW. Она игнорирует параметр «Создать стандартный отчет» (Create Standard Report), ко­торый используется для автоматического создания отчета, и операнд В команды START, используемой для текущей имитации. Обычно нет необходимости использовать команду REPORT, так как отчет создается автоматически в соответствии с параметрами настройки отчета, которые задаются в меню Edit/Settings/Report.

Команда SHOW. Отображает значение выражения в строке со­стояния в окне модели. Эта команда выполняется немедленно, как только получена системой.

Формат команды:

SHOW <выражение>

Выражения в команде SHOW бывают арифметического и логи­ческого типа (см. параграф 4.12).

Пример 4.72

SHOW LOG(Q$BARBER)

Указанная команда вычисляет натуральный логарифм от СЧА Q$BARBER и выводит результат на экран дисплея.

SHOW X$PROFIT- X$expense

Если X$PROFIT - суммарный доход, a X$EXPENSE - суммар­ные затраты, то команда SHOW выведет их разность в окне модели в строке состояния.

Копия сообщения о выполнении этой команды с результатом вычисления посылается в окно журнала сессии. Если нет активных транзактов, т.е. имитация не выполнялась, или именам, используе­мым в команде SHOW, не были назначены значения, то выдается со­общение об ошибке. Эта команда отображает до 38 цифр или знаков.

Команда STEP. Задает возможность прерывания процесса мо­делирования при прохождении указанного количества блоков. Формат команды:

STEP A

Операнд А - счетчик прохождения блоков. Операнд может быть положительным целым.

Команда STEP не является немедленной командой, а становится ; в конец очереди команд. Когда процесс моделирования прерывается, модель переходит в «приостановленное» состояние. В окне журнала сессии появляется сообщение трассировки. Когда используется ко­манда STEP, в модели должен быть активный транзакт (то есть мо­дель перед этим может быть запущена командой START).

Модель, которая стартовала с использованием команды STEP, не может быть завершена при нулевом счетчике завершения. Моде­лирование завершается при прохождении указанного в операнде А команды STEP количества блоков.

Если команда STEP выполняется, то счетчик завершения не ус­танавливается; блоки при необходимости перенумеровываются; все блоки, генерирующие транзакты, приводятся в исходное состояние; генераторы случайных чисел в начальное состояние не сбрасываются.

Пример 4.73

STEP 1

Процесс моделирования останавливается при прохождении од­ного блока модели.

Команду STEP используют для трассировки модели. Для этого необходимо выполнить следующие действия:

1. К тексту модели прибавить последовательность команд:

START 1

STEP 1

Моделирование начнется после команды START (счетчик завершения или длительность прогона модели выбирают так, чтобы на момент завершения моделирования в модели уже был активный транзакт). Активный транзакт после команды STEP продвинется к сле­дующему блоку.

2. Перейти в диалоговое окно блоков Blocks Window»). В окне можно проследить движение каждого транзакта по блокам модели. В окне журнала сессии появится информация, подобная следующей:

3. Нажать «мышкой» на поле STEP в меню команд окна блоков. Выполнится команда

STEP 1

и активный транзакт продвинется на один блок вперед.

4. Пункт 3 выполнить столько раз, сколько это необходимо. Для выполнения команды STEP можно использовать комбина­цию клавиш [Ctrl+Alt+1].

Команда STOP. Устанавливает или снимает условие останова моделирования.

Формат команды:

STOP [A],[B][,C]

Операнд А - номер транзакта, может быть положительным це­лым. Если операнд опущен, то любой транзакт удовлетворяет усло­вию останова.

Операнд В - номер блока. Если операнд опущен, то любой блок удовлетворяет условию останова. Операнд может быть положитель­ным целым или именем.

Операнд С - флажок состояния команды (может быть ON или OFF). По умолчанию - ON.

Пример 4.74

STOP 1000,50

Эта команда задает условие останова модели при входе транзак­та с номером 1000 в блок с номером 50.

Команда STOP без операндов вызывает немедленный останов процесса моделирования, а с опцией ON устанавливает условие оста­нова моделирования, но не стартует модель. Для запуска моделиро­вания используют последовательность операторов и команд START, STEP, CONTINUE

Команда CONTINUE позволяет выйти из состояния останова и продолжить моделирование, однако, условие останова, введенное ра­нее командой STOP, остается включенным. Для отключения условия останова необходимо выполнить в команду STOP с флагом OFF. Условия останова могут быть заданы в окне блоков.