
- •Лекции по gpss
- •Блоки и транзакты
- •Транзакт входит в блок, функцией которого является удаление транзакта из модели.
- •Транзакт входит в блок, функцией которого является задержка транзакта на некоторое определенное в модели время.
- •Удаление транзактов из модели и завершение моделирования
- •Занятие и освобождение одноканального устройства
- •Когда транзакт поступает в устройство, он должен обслуживаться там некоторое время.
- •Сбор статистики
- •Управление продолжительностью моделирования
- •Логика работы интерпретатора
- •1. Он находится в каком-либо конкретном блоке.
- •2. Он находится (отмечен) в одном или нескольких цепях (списках) gpss.
- •1) Единица модельного времени определяется разработчиком модели, который задает все временные интервалы в одних и тех же, выбранных им, единицах;
- •Занятие и освобождение многоканального устройства (памяти)
- •Абсолютное и относительное время. Команды clear и reset
- •0 Относительное
- •Изменение значений параметров транзактов
- •Числовые и символьные имена. Команда equ
- •Блоки, изменяющие маршруты транзактов
- •Блок transfer
- •Блок test
- •Блок gate
- •Блок loop
- •Команды table и qtable. Таблицы. Блок tabulate
- •Сохраняемые величины и матрицы сохраняемых величин
- •Initial Xj, значение
- •Initial mXj( a,b), значение
- •Арифметические переменные. Команды variable (fvariable)
- •Генераторы случайных чисел
- •1. Разыгрывается случайное число, равномерно распределенное в диапазоне 0;1;
- •2. Полученное число преобразуется в эквивалентное ему значение, но уже принадлежащее интересующей нас выборке.
- •Функции gpssw. Команда function
- •Модель смо
- •Блоки для работы со списками пользователя
- •Моделирование сетей массового обслуживания
- •1,2 Узел – 1 канал,3 узел – 2 канала
- •1,2 Устройства – одноканальные, 3-4 канала
- •Моделирование захвата прибора
- •Логические переключатели
- •Булевские переменные. Команда bvariable
- •Обработка транзактов, принадлежащих одному ансамблю
Генераторы случайных чисел
В GPSSW розыгрыш случайных чисел происходит в два этапа:
1. Разыгрывается случайное число, равномерно распределенное в диапазоне 0;1;
2. Полученное число преобразуется в эквивалентное ему значение, но уже принадлежащее интересующей нас выборке.
СЧА RNj возвращает целое случайное число в интервале 0;999. При необходимости их можно привести к любому другому целочисленному диапазону, определив соответствующую переменную с помощью операции деления по модулю. Например
RN1@24 +40 lдает случайное число в интервале 40;63. Т.е. для получения случайного числа в интервале а;в надо написать
RNj@(b-a+1) +a
Например, RN1@GH@LINE дает с.ч. в интервале [0;длина очереди LINE -1)].
Еще пример
var1 FVARIABLE RN2@24+40
…………………………….
GENERATE …………
ASSIGN d1, V$var1 ; в параметр d1 записывается с.ч. [40;63]
Когда при моделировании необходимо исследовать один или несколько вариантов модели при различных потоках случайных чисел, можно использовать блок RMULT, позволяющий изменять начальные значения первых 7 датчиков случайных чисел;
RMULT [A], [B], [C], [D], [E], [F], [G]
Здесь A, B и т.д. – начальное значение множителя для генераторов случайных чисел под номером 1, 2, и.т.д.
Далее будем рассматривать функции GPSSW. Если случайное число используется в качестве аргумента функции, то СЧА RNj принимает значения от 0 до 0,999999 включительно.
Функции gpssw. Команда function
В GPSSW имеется возможность задавать отношение системных числовых атрибутов в виде их функциональной зависимости. Для этого используются функции.
Каждая функция связывает значение функции (СЧА FNимя) со значение независимой переменной.
Для определения функции служит команда FUNCTION, описание которой занимает несколько строк программы. Формат при этом следующий:
ИМЯ FUNCTION A, B
Здесь ИМЯ – имя функции, А – аргумент, В – буква, определяющая тип функции, и следующее за ней число, обозначающее количество заданных пар координат функции – значений аргумента и функции.
Типы функций могут быть следующие:
С – непрерывная, D – дискретная, L – табличная, Е – дискретная атрибутивная, М – табличная атрибутивная. Рассмотрим первые две.
Дискретная числовая функция. Функция типа D задается парами координат. Для всех значений аргумента X(I-1)<X<=X(I) функция равна Y(I) (значение функции в правом конце интервала). При X<X(1) Y=Y(1), а при X>X(N) Y=Y(N). Пример:
KOEF FUNCTION Q$OBRAB, D5
1,1/3,2/5,4/10,8/15,100
Аргументом функции является длина очереди с именем OBRAB. Если значение аргумента больше 5 и меньше или равно 10, то значение функции KOEF равно 8. Если дина очереди в момент вычисления функции равна 20, СЧА FN$KOEF возвращает значение 100.
Значениями функции могут быть не только целые или вещественные числа, но и символьные имена:
SWITH FUNCTION P$ADRES, D6
2, ADR1/4,ADR2/6,ADR3/8,ADR4/10,ADR5/12,ADR6
Если, например, обращение к этой функции выполнено из блока
TRANSFER FN, SWITH ,
то имя ADR5, полученное при вычислении функции SWITH, интерпретируется как имя блока, в который должен быть направлен транзакт. Таким образом, направление транзакта будет выбираться в зависимости от значения параметра ADRESS транзакта.
Отметим, что в данном примере приводится ранее не рассмотренный режим использования блока TRANSFER. Если в поле А задан указатель FN, то дальнейшее направление транзакта определяется значением функции, указанной в поле B.
Функция типа D может быть использована для описания распределения дискретной случайной величины, т.е. этой функцией может определяться вероятностное распределение. Например, необходимо имитировать поступление на передачу сообщений разной длины, среди которых сообщений первой длины 5%, второй – 20%, третьей – 40% и четвертой – 35%. Т.е. функция распределения длины сообщения имеет следующую таблицу;
Длина сообщения (условных единиц) |
Частота появления |
Суммарная частота |
Диапазон |
100 |
0.05 |
0.05 |
0 – 0.05 |
250 |
0.20 |
0.25 |
0.05 – 0.25 |
300 |
0.40 |
0.65 |
0.25 – 0.65 |
400 |
0.35 |
1.00 |
0.65 - 1 |
Тогда можем использовать функцию
DLINA FUNCTION RN2, D4
0.05, 1/0.25,2/0.65,3/1,4
Теперь можем использовать эту функцию, например, таким образом;
…………………………………
GENERATE 400, 20
ASSIGN 1, FN$DLINA
С поступлением транзакта в блок ASSIGN в первый параметр транзакта записывается значение длины сообщения в соответствии с распределением, заданным функцией DLINA.
Еще пример. Пусть имеем таблицу распределения дискретного времени обслуживания некоторого устройства:
Время 10 мин. 15 мин. 21 мин. 30 мин. 45 мин. 55 мин.
Вероятность 0.05 0.13 0.16 0.22 0.29 0.15
Тогда можно использовать эту функцию, например, в следующем участке программы:
PROCESS FUNCTION RN1, D7
0,0/0.05,10/0.18,15/0.34,21/0.56,30/0.85,45/1,55
……………………………..
GENERATE (Exponential (1,0,30))
ASSIGN 1, FN$PROCESS ; в Р1 заносится время выполнения
Приведем еще пример:
Построить модель одноканальной СМО, в которую поступает пуассоновский поток заявок с интенсивностью 12 заявок в час. Обслуживание имеет экспоненциальное распределение, но среднее время обслуживания зависит от числа заявок, которые находятся в очереди, в соответствии со следующей функцией:
Длина очереди |
0 |
1 или 2 |
3, 4 или 5 |
6 и более |
Среднее время обслуживания (мин.) |
5,5 |
5 |
4,5 |
4,0 |