Генерирование транзактов - GENERATE, Этот блок генерирует поток сообщений - транзактов, поступающих в систему. Программа составляется с учетом того, что в этот блок не могут входить транзакты. В простых программах эта обычно первый блок, временные интервалы между поступающими в систему транзактами определяются содержимым поля операндов. Подполя:
А - среднее время между поступлениями транзактов в систему (по умолчанию равно 1);
В - модификатор времени;
С - начальная задержка (время появления первого транзакта);
D - общее число транзактов, которое должно быть сгенерировано этим блоком (по умолчанию - неограниченное число транзактов);
Е - приоритет транзакта, может принимать значения от 0 до 127. Приоритет возрастает в соответствии с номером (по умолчанию равен 0);
F - число параметров (атрибутов) транзакта (по умолчанию равно 12).
В поле В может быть модификатор двух типов: модификатор-интервал и модификатор-функция. Если задан модификатор-интервал (просто число), то для каждого временного интервала поступления транзактов длительность определяется как значение случайной величины, равномерно распределенной на интервале [А - В, А + В].
|
|
Например, блок GENERATE 10,5 будет генерировать транзакты через интервалы времени, длительность каждого из которых выбирается случайно в пределах от 5 до 15. Необходимо помнить, что время в GPSS всегда целое. Поэтому в пределах от 5 до 15 минут могут выбираться только целые значения времени. Каждое из этих значений будет выбираться с одинаковой вероятностью. Таким образом, блок генерирует случайный поток транзактов, в котором время между транзактами равномерно распределено в диапазонеА±В и имеет среднее зкачение А.
При использовании модификатора-функции интервал времени между транзактами определяется произведением содержимого полей А и В. Функция определяется специальными блоками языка, которые будут рассмотрены чуть позже.
В программе может быть несколько блоков GENERATE. Все эти блоки работают параллельно и начинают генерировать транзакты одновременно с момента начала моделирования.
Необходимо помнить, что смысл единицы времени в языке GPSS (секунда, минута, час, день и т.д.) закладывает пользователь, поэтому при написании программы необходимо все операнды, связанные со временем, привести к единому масштабу.
Блок уничтожения транзактов - TERMINATE. Обычно для простых программ это последний блок программы. Транзакты попадающие в этот блок уничтожаются и больше не участвуют в процессе моделирования. Никаких других действий этот блок не выполняет, если единственный возможный операнд А, в блоке не задан. Если же операнд А, задан, то его значение вычитается из содержимого блока транзактов.
|
|
Первоначальная величина счетчика устанавливается специальным управляющим блоком START и пишется в поле А, этой карты. Когда в результате входа очередного транзакта в блок TERMINATE значение счетчика становится нулевым или отрицательным, симулятор прекращает моделирование и передает управление программе вывода, которая распечатывает накопленные симулятором данные о модели.
Например:
TERMINATE 1
START 100
через программу модели пропускается 100 транзактов. Если ни в одном блоке TERMINATE не задан операнд А, то моделирование будет продолжаться, пока программа не будет снята.
Если в программе несколько блоков TERMINATE, то обычно операнд А задается только в одном блоке, чаше всего - в блоке, относящемся к имитатору интервала времени моделирования (таймеру).
GENERATE 480
TERMINATE I
START 1
Таймер взаимодействует только с блоком START и никак не связан с содержательной стороной остальных фрагментов модели. Таймер служит для задания времени моделирования.
Задержка транзактов в блоках
Блок ADVANCE предназначен для задержки транзактов на определенные интервалы модельного времени.
Обязательный операнд А задает время задержки транзакта в блоке ADVANCE. Необязательный операнд В является модификатором-функцией или модификатором-интервалом. Значение операнда В используется здесь для модификации значения операнда А также, как в блоке GENERATE.
Любой транзакт входит в блок ADVANCE беспрепятственно. В нем транзакт задерживается на период модельного времени, величина которого определяется операндами А и В. После этого транзакт направляется к следующему блоку.
Например, в блоке
ADVANCE 10
транзакт будет задержан на 10 единиц модельного времени.
В блоке
ADVANCE 10,Р1
транзакт будет задерживаться на случайное время, выбранное издиапазона 10±значение первого параметра транзахта (следует помнить, что значений первого параметра при этом не должно превышать 10, т.к. время не может быть отрицательным).
Рассмотрим суммарную задержку в блоках
ADVANCE 10,10
ADVANCE 10,10
ADVANCE 10,10
ADVANCE 10,10
ADVANCE 10,10
ADVANCE 10,10
Задержка в каждом из них имеет равномерное распределение вероятностей на интервале (0,20). Следовательно, ее среднее значение составляет М = 20*(1/2) =10; дисперсия D =20*(1/2). Поэтому сумма шести таких задержек имеет среднее значение 6* М = 60 и среднее квадратическое отклонение √6*D≈14. По центральной предельной теореме теории вероятностей заключаем, что закон распределения суммарной задержки приблизительно нормальный. Поэтому ни в коем случае нельзя заменять эти пять блоков на один
ADVANCE 50,50,
т.к. этот блок будет определять задержку как равномерно распределенную величину.