Имя generate A, B, C, D, e

Операнд A задает среднее значение интервалов поступления транзактов в модель, в качестве которого может быть задан любой СЧА, в том числе и ссылку на функцию. Если этот интервал постоянен (детерминированный поток), то операнд B не используется. Если же интервалы поступления являются случайными величинами, то операнд B определяет модификатор среднего значения, который может быть задан в виде модификатора-интервала или модификатора-функции.

Если интервалы поступления транзактов распределены по равномерному закону, то используется модификатор-интервал, который должен быть положительным целым числом и в частности в поле В может быть задан любой СЧА, кроме ссылки на функцию. В этом случае операнд B задает половину поля допуска равномерного распределения, и соответственно интервалы прихода транзактов распределены равномерно на отрезке [А-В, А+В]. Например, блок GENERATE 70,20 генерирует транзакты через интервалы времени, распределенные равномерно на отрезке [50,90].

Если закон распределения интервалов поступления отличен от равномерного, то используется модификатор-функция. В этом случае в поле операнда B должна быть задана ссылка на функцию, описывающую этот закон, и случайный интервал поступления транзакта определяется, как целая часть произведения значения операнда A (среднее значение) на вычисленное значение функции.

Следует обратить особое внимание на то, что транзакты генерируются с заданным (операндами А и В) законом распределения в том и только в том случае, если в модели блок, следующий за блоком GENERATE, никогда не препятствует выходу транзактов из блока GENERATE. Это обусловлено тем, что интерпретатор GPSS/PC планирование прихода каждого следующего транзакта производит в момент выхода текущего транзакта из блока GENERATE (в этот же момент он входит в следующий блок).

По умолчанию, когда операнды А и В не заданы, значения их равны 0, соответственно, и все интервалы поступления транзактов также равны 0. Однако в этом случае интерпретатором GPSS/PC интервал поступления (а значит, и момент прихода) первого транзакта принудительно принимается равным 1. Такой блок GENERATE будет генерировать транзакты до тех пор, пока не использует все транзакты, которые могут быть активными в какой-то определенный момент времени. Чтобы предупредить это, следует либо задать предел генерации (операнд D), либо за блоком GENERATE должен следовать блок, который вызывает блокирующее условие.

Операнд C задает смещение интервалов – это момент поступления в модель первого транзакта. Если этот операнд не задан, то он равен 0 и момент прихода первого транзакта определяется операндами A и B. Например, через блок GENERATE 70,,300 первый транзакт войдет в модель в момент времени 300, а последующие – через каждые 70 единиц модельного времени.

Операнд D (ограничитель) задает максимальное число транзактов, которые могут войти в модель через данный блок GENERATE. Например, через блок GENERATE,,,12 войдут 12 транзактов (все в момент времени 1), после чего данный блок становится пассивным. Если операнд D не задан, то блок остается активным и генерирует транзакты до завершения моделирования.

Операнд E задает уровень приоритета, присваиваемый каждому из генерируемых транзактов. Число уровней приоритетов неограниченно, причем самый низкий приоритет – нулевой и чем выше значение Е, тем выше приоритет. Если операнд Е не задан, то генерируемые транзакты имеют нулевой приоритет. Например, блок GENERATE 70,,200,,1 (операнды В и D не заданы) генерирует транзакты через каждые 70 единиц МВ с уровнем приоритета 1, причем момент прихода первого транзакта равен 200.

Транзакты имеют ряд стандартных числовых атрибутов. Например, СЧА с названием PR позволяет ссылаться на приоритет транзакта. СЧА с названием M1 содержит так называемое резидентное время транзакта, т.е. время, прошедшее с момента входа транзакта в модель через блок GENERATE. СЧА с названием XN1 содержит номер транзакта, который является уникальным и позволяет всегда отличить один транзакт от другого. Ссылка на СЧА транзакта всегда относится к активному транзакту, т.е. к транзакту, обрабатываемому интерпретатором в данный момент.

Для удаления транзактов из GPSS-модели (т.е. для моделирования процесса ухода заявок из СМО) служит блок TERMINATE (завершить), который является безотказным блоком и имеет следующий формат:

имя TERMINATE A

Значение единственного операнда A задает число, которое вычитается из содержимого специального счетчика – счетчика завершений каждый раз, когда транзакт входит в данный блок TERMINATE. Если операнд A не задан, то его значение считается равным 0 и транзакты, удаляемые из модели через такой блок, не уменьшают содержимого счетчика завершений.

Счетчик завершений – это целое положительное число, которое задается в начале моделирования и предназначено для управления продолжи- тельностью моделирования. Начальное значение счетчика завершений устанавливается управляющим оператором START (начать), предназначенным для запуска прогона модели. Поле A данного оператора и задает начальное значение счетчика завершений (см. раздел 6). Прогон модели заканчивается, когда содержимое счетчика завершений становится меньше или равным 0. Таким образом, в модели должен быть хотя бы один блок TERMINATE с ненулевым операндом A, иначе процесс моделирования никогда не завершится (или завершится по реальному времени оператора SIMULATE).

Текущее значение счетчика завершений доступно пользователю через системный атрибут TG1.

Фрагмент GPSS-модели, ограниченный парой блоков GENERATE-ТERMINATE, называется сегментом. В общем случае модель может быть из нескольких сегментов и их взаиморасположение при этом не имеет значения.

На рис.1 приведен простейший сегмент модели, состоящий всего из двух блоков GENERATE и TERMINATE в совокупности с управляющим оператором START. Этот сегмент моделирует процесс поступления транзактов в модель через случайные интервалы времени со средним значением в 70 единиц и удаления этих транзактов из модели. Начальное значение счетчика завершений равно 1000. Каждый транзакт, входящий в блок TERMINATE, вычитает из счетчика завершений единицу, и таким образом моделирование завершится, когда тысячный по счету транзакт войдет в данный блок. При этом точное значение таймера времени в момент завершения прогона модели непредсказуемо. Следовательно, в приведенном примере продолжительность моделирования устанавливается не по времени, а по количеству транзактов, ушедших из модели.

GENERATE 70,20

TERMINATE 1

START 1000

Рис. 1.

Если необходимо управлять длительностью моделирования по времени, то в модели используется специальный сегмент – сегмент таймера времени.

Например, в модели из двух сегментов, приведенной на рис. 2, первый сегмент выполняет те же функции, что и в предыдущем примере. Однако в этом сегменте операнд A блока TERMINATE не задан и удаляемые данным блоком транзакты не уменьшают содержимого счетчика завершений. Во втором сегменте через блок GENERATE первый транзакт поступит в модель в момент времени, равный 10000. Но этот транзакт в данном сегменте окажется и последним, так как, войдя в блок TERMINATE, он обратит в 0 содержимое счетчика завершений, установленное исходно оператором START равным 1. Таким образом, в этой модели гарантируется завершение моделирования в определенный момент модельного времени, а точное количество транзактов, прошедших при этом через модель, непредсказуемо.

GENERATE 70,20

TERMINATE

GENERATE 10000

TERMINATE 1

START 1

Рис. 2.

В приведенных примерах транзакты, входящие в модель через блок GENERATE, в тот же момент времени удалялись из модели блоком TERMINATE. Однако в СМО заявки обслуживаются приборами системы в течение некоторого промежутка времени (длительность обслуживания) прежде, чем покинуть систему. Для задержки транзактов на определенный интервал времени, т.е. для моделирования процесса обслуживания заявок, используется блок ADVANCE (задержать), имеющий следующий формат:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: