Рефераты. Механизм генерации транзактов в модели

где j и имя - номер и имя параметра соответственно. Такая ссылка возможна

только в том случае, если параметр с указанным номером или именем

существует, т.е. в него занесено какое-либо значение.

Для присваивания параметрам начальных значений или изменения этих

значений служит блок ASSIGN, имеющий следующий формат: имя ASSIGN A,B,C

В поле A указывается номер или имя параметра, в который заносится

значение операнда B. Если в поле A после имени (номера) параметра стоит

знак + или -, то значение операнда B добавляется или вычитается из текущего

содержимого параметра. В поле С может быть указано имя или номер функции-

модификатора, действующей аналогично функции-модификатору в поле B блока

GENERATE.

Например, блок ASSIGN 5,0 записывает в параметр с номером 5 значение 0,

а блок ASSIGN COUNT+,1 добавляет 1 к текущему значению параметра с

именем COUNT.

Для записи текущего модельного времени в заданный параметр транзакта

служит блок MARK, имеющий следующий формат:

имя MARK A

В поле A указывается номер или имя параметра транзакта, в который

заносится текущее модельное время при входе этого транзакта в блок MARK.

Содержимое этого параметра может быть позднее использовано для определения

транзитного времени 0пребывания транзакта в какой-то части модели с помощью

СЧА с названием MP.

Например, если на входе участка модели поместить блок MARK MARKER, то

на выходе этого участка СЧА MP$MARKER будет содержать разность между

текущим модельным временем и временем, занесенным в параметр MARKER блоком

MARK. Если поле A блока MARK пусто, то текущее время заносится на место

отметки времени входа транзакта в модель, используемой при определении

резидентного времени транзакта с помощью СЧА M1.

Для изменения приоритета транзакта служит блок PRIORITY, имеющий

следующий формат: имя PRIORITY A,B

В поле A записывается новый приоритет транзакта. В поле B может

содержаться ключевое слово BU, при наличии которого транзакт, вошедший в

блок, помещается в списке текущих событий после всех остальных транзактов

новой приоритетной группы, и список текущих событий просматривается с

начала. Использование такой возможности будет рассмотрено ниже.

Для удаления транзактов из модели служит блок TERMINATE, имеющий

следующий формат: имя TERMINATE A

Значение поля A указывает, на сколько единиц уменьшается содержимое так

называемого счетчика завершений при входе транзакта в данный блок

TERMINATE. Если поле A не определено, то оно считается равным 0, и

транзакты, проходящие через такой блок, не уменьшают содержимого счетчика

завершений.

Начальное значение счетчика завершений устанавливается управляющим

оператором START, предназначенным для запуска прогона модели. Поле A этого

оператора содержит начальное значение счетчика завершений. Прогон модели

заканчивается, когда содержимое счетчика завершений обращается в 0. Таким

образом, в модели должен быть хотя бы один блок TERMINATE с непустым полем

A, иначе процесс моделирования никогда не завершится. Текущее значение

счетчика завершений доступно программисту через системный СЧА TG1.

Участок блок-схемы модели, связанный с парой блоков GENERATE-ТERMINATE,

называется сегментом. Простые модели могут состоять из одного сегмента, в

сложных моделях может быть несколько сегментов.

Например, простейший сегмент модели, состоящий всего из двух блоков

GENERATE и TERMINATE, в совокупности с управляющим оператором START

моделирует процесс создания случайного потока транзактов, поступающих в

модель со средним интервалом в 100 единиц модельного времени, и уничтожения

этих транзактов

GENERATE 100,40

TERMINATE 1

START 1000

Если необходимо управлять продолжительностью прогона по модельному

времени, то в модели используется специальный сегмент, называемый сегментом

таймера.

GENERATE 100,40

TERMINATE

GENERATE 100000

TERMINATE 1

START 1

Например, в модели из двух сегментов, приведенной на рис. 2, первый

(основной) сегмент выполняет те же функции, что и в предыдущем примере.

Заметим, однако, что поле A блока TERMINATE в первом сегменте пусто, т.е.

уничтожаемые транзакты не уменьшают содержимого счетчика завершений. Во

втором сегменте блок GENERATE создаст первый транзакт в момент модельного

времени, равный 100000. Но этот транзакт окажется и последним в данном

сегменте, так как, войдя в блок TERMINATE, он обратит в 0 содержимое

счетчика завершений, установленное оператором START равным 1. Таким

образом, в этой модели гарантируется завершение прогона в определенный

момент модельного времени, а точное количество транзактов, прошедших через

модель, непредсказуемо. В приведенных примерах транзакты, входящие в модель

через блок GENERATE, в тот же момент модельного времени уничтожались в

блоке TERMINATE. В моделях систем массового обслуживания заявки

обслуживаются приборами (каналами) СМО в течение некоторого промежутка

времени прежде, чем покинуть СМО. Для моделирования такого обслуживания,

т.е. для задержки транзактов на определенный отрезок модельного времени,

служит блок ADVANCE (задержать), имеющий следующий формат:

имя ADVANCE A,B

Операнды в полях A и B имеют тот же смысл, что и в соответствующих

полях блока GENERATE. Следует отметить, что транзакты, входящие в блок

ADVANCE, переводятся из списка текущих событий в список будущих событий, а

по истечении вычисленного времени задержки возвращаются назад, в список

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

вычисленное время задержки равно 0, то транзакт в тот же момент модельного

времени переходит в следующий блок, оставаясь в списке текущих событий. В

приведенном ниже сегменте транзакты, поступающие в модель из блока GENERATE

через случайные интервалы времени, имеющие равномерное распределение на

отрезке [60;140], попадают в блок ADVANCE. Здесь определяется случайное

время задержки транзакта, имеющее равномерное распределение на отрезке

[30;130], и транзакт переводится в список будущих событий. По истечении

времени задержки транзакт возвращается в список текущих событий и входит в

блок TERMINATE, где уничтожается. Заметим, что в списке будущих событий, а

значит и в блоке ADVANCE может одновременно находиться произвольное

количество транзактов.

GENERATE 100,40

ADVANCE 80,50

TERMINATE 1

В рассмотренных выше примерах случайные интервалы времени подчинялись

равномерному закону распределения вероятностей. Для получения случайных

величин с другими распределениями в GPSS/PC используются вычислительные

объекты: переменные и функции.

Транзакты могут входить в модель не только через блок GENERATE, но и

путем создания копий уже существующих транзактов в блоке SPLIT, имеющем

следующий формат: имя SPLIT A,B,C

В поле A задается число создаваемых копий исходного транзакта

(родителя), входящего в блок SPLIT. После выхода из блока SPLIT транзакт-

родитель направляется в следующий блок, а все транзакты-потомки поступают в

блок, указанный в поле B. Если поле B пусто, то все копии поступают в

следующий блок. Транзакт-родитель и его потомки, выходящие из блока SPLIT,

могут быть пронумерованы в параметре, имя или номер которого указаны в поле

C. Если у транзакта-родителя значение этого параметра при входе в блок

SPLIT было равно k, то при выходе из блока оно станет равным k+1, а

значения этого параметра у транзактов-потомков окажутся равными k+2, k+3 и

т.д.

Например, блок SPLIT 5,MET1,NUM создает пять копий исходного транзакта

и направляет их в блок с именем MET1. Транзакт-родитель и потомки

нумеруются в параметре с именем NUM. Если, например, перед входом в блок

значение этого параметра у транзакта-родителя было равно 0, то при выходе

из блока оно станет равным 1, а у транзактов-потомков значения параметра

NUM будут равны 2, 3, 4, 5 и 6.

В приведенных выше примерах транзакты, выходящие из любого блока,

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

необходимость направления транзактов к другим блокам в зависимости от

некоторых условий. Эту возможность обеспечивают блоки изменения маршрутов

транзактов.

Блок TRANSFER служит для передачи входящих в него транзактов в блоки,

отличные от следующего. Блок имеет девять режимов работы, из которых

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

блок имеет следующий формат: имя TRANSFER A,B,C смысл операндов в полях A,

B и C зависит от режима работы блока.

В режиме безусловной передачи поля A и C пусты, а в поле B указывается

имя блока, к которому безусловным образом направляется транзакт, вошедший в

блок TRANSFER. Например: TRANSFER ,FINAL

В режиме статистической передачи операнд A определяет вероятность, с

которой транзакт направляется в блок, указанный в поле C. С вероятностью 1-

A транзакт направляется в блок, указанный в поле B (в следующий, если поле

B пусто). Вероятность в поле A может быть задана непосредственно десятичной

дробью, начинающейся с точки. Например, блок TRANSFER .75,THIS,THAT

с вероятностью 0,75 направляет транзакты в блок с именем THAT, а с

вероятностью 0,25 - в блок с именем THIS. Если же поле A начинается не с

десятичной точки и не содержит одного из ключевых слов - признаков других

режимов работы блока, то его значение рассматривается как количество

тысячных долей в вероятности передачи. Например, предыдущий блок TRANSFER

можно записать также в следующем виде: TRANSFER 750,THIS,THAT

В режиме логической передачи в поле A записывается ключевое слово BOTH.

Транзакт, поступающий в блок TRANSFER, сначала пытается войти в блок,

указанный в поле B (или в следующий блок, если поле B пусто), а если это не

удается, т.е. блок B отказывает транзакту во входе, то в блок, указанный в

поле C. Если и эта попытка неудачна, то транзакт задерживается в блоке

TRANSFER до изменения условий в модели, делающего возможным вход в один из

блоков B или C, причем при одновременно возникшей возможности предпочтение

отдается блоку B. Например: TRANSFER BOTH,MET1,MET2

Блок TEST (проверить) служит для задержки или изменения маршрутов

транзактов в зависимости от соотношения двух СЧА. Он имеет следующий

формат: имя TEST X A,B,C. Вспомогательный операнд X содержит условие

проверки соотношения между СЧА и может принимать следующие значения: L; LE;

E; NE; GE; G. Поле A содержит первый, а поле B - второй из сравниваемых

СЧА. Если проверяемое условие A X B выполняется, то блок TEST пропускает

транзакт в следующий блок. Если же это условие не выполняется, то транзакт

переходит к блоку, указанному в поле C, а если оно пусто, то задерживается

перед блоком TEST. Например, блок TEST LE P$TIME,C1 не впускает транзакты,

у которых значение параметра с именем TIME больше текущего модельного

времени. Блок TEST L Q$LINE,5,OUT направляет транзакты в блок с именем OUT,

если текущая длина очереди LINE больше либо равна 5.

Для задержки или изменения маршрута транзактов в зависимости от

состояния аппаратных объектов модели служит блок GATE, имеющий следующий

формат: имя GATE X A,B. Вспомогательный операнд X содержит код состояния

проверяемого аппаратного объекта, а в поле A указывается имя или номер

этого объекта. Если проверяемый объект находится в заданном состоянии, то

блок GATE пропускает транзакт к следующему блоку. Если же заданное в блоке

условие не выполняется, то транзакт переходит к блоку, указанному в поле B,

а если это поле пусто, то задерживается перед блоком GATE. Операнд X может

принимать следующие значения: U; NU; I; NI; SE; SNE; SF; SNF; LS; LR.

Например, блок GATE SNE BUF3 отказывает во входе транзактам, поступающим в

моменты, когда в МКУ с именем BUF3 все каналы обслуживания свободны. Блок

GATE LR 4,BLOK2 направляет транзакты в блок с именем BLOK2, если в момент

их поступления ЛП с номером 4 включен.

Страницы: 1, 2



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.