Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Пучкова ( на печать).doc
Скачиваний:
24
Добавлен:
24.09.2019
Размер:
701.95 Кб
Скачать

Моделирование вероятностных функций распределения в gpss-World

В библиотеку GPSS-World включено 24 вероятностных распределения:

1. Beta - бета

2. Binomial - биномиальное

3. Gamma – гамма-распределение

4. Logistic - логистическое

5. Normal - нормальное

6. Poisson - пуассона

7. Uniform - равномерное

8. Exponential – экспоненциальное и т.д.

Большинство распределений имеют параметры:

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

Scale – изменяет масштаб функции распределения;

Shape – изменяет форму

Stream – аргумент функции (может быть выражение) обычно определяет номер генератора случайных чисел.

Пример. Для интеграции потока транзактов с параметром = 0,25 и использованием генератора случайных чисел rn 1 можно воспользоваться записью: generate (exponential (1, 0, (1/0,25)))

Табулирование результатов экспериментов

Для нахождения выборочных значений случайных величин и статистической обработки этих выборок используются таблицы.

Графическим аналогом этих таблиц является гистограмма выборочных значений случайной величины, которую можно просмотреть в окне таблицы. Прежде чем использовать таблицу, ее нужно определить, а потом задать собираемые выборочные значения. В модели могут быть несколько таблиц. Формат оператора задания таблицы имеет вид:

< метка > qtable A, B, C, D; где

А – СЧА, значение которого учитывается в таблице;

В – первое граничное значение (целое число);

C – ширина всех промежуточных интервалов;

D – общее число интервалов таблицы.

Для сбора статистических данных об очереди используем оператор qtable. Его формат совпадает с форматом оператора table за исключением того, что А задает имя очереди.

Для занесения данных в таблицу используется блок tabulate A, где

А – имя таблицы, в которой табулируется соответствующий СЧА.

Пример. Назовем таблицу fimserv:

fimserv table MP 3, 10, 5, 6 (A, B, C, D)

generate 100, 15

…………..

mark 3 (маркируем 3-й параметр)

…………..

tabulate fimserv (заносим в таблицу MP3)

В таблицу fimserv будет табулироваться частотное распределение случайной величины – времени пребывания транзакта между блоками mark и tabulate.

Блок mark измеряет время затраченное между контрольными точками, параметр А – номер параметра, в который записывается значение абсолютного времени.

Сча транзакты

Параметры транзакта – свойства транзакта, определенные пользователем. Множество параметров транзакта – это набор параметров СЧА, которые принадлежат транзакту.

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

Особенности параметров транзакта:

1. Доступ к параметрам транзактов осуществляется:

<номер> или P$ <имя>, где

Р – СЧА транзакта, определяющий его групповое имя, т.е. имя всех параметров транзакта.

2. Номера (имена) конкретных членов множества параметров задаются с помощью целых чисел или символьных имен. Например, Р22 – 22-й параметр транзакта или P$ color – параметр с именем color.

3. При входе транзакта в модель начальное значение всех его параметров устанавливается в 0.

4. Значения параметров транзактов и их изменения определяет пользователь.

5. Параметрами могут быть любые числа, в т.ч. отрицательные.

6. Транзакт может обращаться только к своим параметрам. Если необходимо получить доступ к параметрам других транзактов, то это можно сделать только через ячейки сохраняемых величин или используя группы транзактов.

7. Параметры можно использовать в качестве операндов блоков и аргументов функции.

Пример. Определить некоторую функцию

ААА function P3, D 3

- 3, 4 / 3,7 / 10,8

Advance fn $ AAA, 3

Выполнение блока advance предусматривает расчет функции ААА. Это в свою очередь требует определения значения аргумента функции, т.е. параметра транзакта Р3. Пусть значение третьего параметра транзакта, вошедшего в блок advance равно 4, следовательно, значение функции ААА будет равно 8. Время задержки равно 8 ± 3 по равномерному закону.

Изменение значений параметров

Для этого используется блок assign A [+, -], B [,C], где

A – номер или имя модифицируемого или задаваемого параметра (РПУ – ошибка);

В – величина, используемая для модификации (число или СЧА, РПУ – ошибка);

С – имя функции.

В режиме увеличения предшествующее значение параметра увеличивается на значение В.

assign A+, В (А = А + В)

assign A , В (А = А – В)

assign A , В – параметр А замещается параметром В.

При использовании операнда С значение В умножается на величину функции, указанной в операнде С.

Примеры: assign mest, 36 - параметру транзакта mest присваивается значение 36.

assign 3, 25 – параметру 83 транзакта присваивается значение 25.

assign Р4, FR$BB – параметру транзакта с номером, записанным в параметре Р4, присваивается значение величины загрузки устройства ВВ (оба операнда заданы косвенным образом), т.е. имеем косвенную адресацию

assign 4+, Q5 – параметр транзакта 4 увеличивается на значение, равное текущей длине очереди под номером 5.

assign Р2-, 7 – от значения параметра, номер которого задан параметром Р2 вычитается 7.

Организация циклов

С помощью параметров транзактов в программе можно организовать циклы. Для этого используется блок: loop А [, В]; где

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

В – метка (имя блока) начального блока цикла.

Когда транзакт входит в блок loop, параметр, указанный в операнде А, уменьшается на 1, а затем проверяется его значение на равенство 0. Если значение ≠ 0, то транзакт переходит в блок, указанный в операнде В. Если значение = 0, то транзакт переходит в следующий блок. Переменная блока loop может только уменьшаться.

Пример. assign 1,3 – параметру транзакта № 1 присваивается значение 3.

sis seize PC – заняли устройство под именем РС

…………..

release PC – освобождение устройства loop 1, sis

…………..

Цикл организован по первому параметру транзакта с начальным значением 3. После освобождения устройства проверяется значение первого параметра. Если оно ≠ 0, то транзакт возвращается к блоку с меткой sis, т.е. занимает устройство РС. Всего каждый транзакт будет занимать это устройство 3 раза.

Пример. Определение функции, значение которой зависит от текущего содержимого блока с именем РРР. Будем использовать СЧА Wj – текущее число транзактов, находящихся в блоке j. Вид зависимости задан таблично:

№ 1 – текущее содержимое блока с именем РРР

№ 1

0

1, 2 или 3

4 или 5

6

7 и более

Значение функции

1

4

2

4

5

Тогда функция имеет вид: FFF function W$PPP, D5 0,1/3,4/5,2/6,4/7,5

Пример. Определение функции, значения которой были бы вдвое больше текущей длины очереди alpha для значений 0, 1, 2, 3, 4. Для остальных значений содержимого очереди значение функции должно быть равно 10. это можно сделать 2-мя способами.

  1. с помощью дискретной функции, определяемой шестью значениями;

  2. с помощью непрерывной функции, определяемой двумя значениями.

1) long function Q$ alpha, D6

0,0 / 1,2 / 2,4 / 3,6 / 4,8 / 5,10

2) short function Q$alpha, С2

0,0 /5,10

Изменение приоритета транзакта

Для этого используется блок priority A [, B]; где

А – новое значение приоритета (целое число СЧА или косвенная адресация, РПУ – ошибка);

В – операнд, определяющий режим буферизации

Новое значение приоритета может быть меньше, равно или больше текущего значения приоритета. Приоритет влияет на порядок выбора транзакта.

Организация обслуживания прерывания

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

Для организации обслуживания в устройстве с прерыванием используют пару блоков preempt (выгрузить) и return.

Блок preempt имеет формат: preempt А, [B], [C], [D], [Е]; где

А – имя устройства, на котором генерируется прерывание;

В – задает приоритетный режим или В = P·R, или режим прерывания, если этот операнд опущен. При работе в приоритетном режиме транзакт, обслуживаемый в данном устройстве, может быть прерван только транзактом с более высоким приоритетом.

С – задает номер или имя блока, который должен попытаться войти в прерванный транзакт;

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

Е – задает либо не задает режим удаления (RE). В режиме удаления RE прерванный транзакт больше не претендует на использование устройства и пытается войти в блок, заданный операндом С.

СЧА, связанный с данным блоком – Fij, где j - номер устройства. Данный числовой атрибут представляет собой флоп прерывания. 1 – если устройство в состоянии прерывания, 0 – в противном случае.

Для освобождения ранее захваченного прерванного устройства используется блок return А, где А – имя устройства, с которого снимается прерывание.

Сохраняемые величины

В GPSS пользователю предоставляется возможность задать «свои» глобальные переменные, значения которых должны быть заданы перед моделированием и к которым можно обратиться из любого места модели и в любой момент. Их называют сохраняемыми величинами (ячейками). А совокупность логически связанных ячеек может образовывать матрицу.

СЧА Хj или X$ <имя> дает значение соответствующей сохраняемой величине. Например, Х2 – значение ячейки или X$ sag – значение ячейки sag.

С матрицами связан числовой атрибут MXj (m, n) – значение, записанное в строке m и столбце n матрицы j. Или MX$ <имя матрицы > (m, n), если матрица имеет символьное имя перед использованием матрица определяется оператором описания matrix.

Начальные значения ячеек и матриц можно задать с помощью оператора initial. Оператор описания matrix g появляется до момента использования матрицы так как и инициализация переменных.

Формат блока initial: Initial А, В, где

А - имя сохраняемой величины; В – начальное значение.

Примеры.

  1. X$ timer, 100000 - ячейке timer присваивается начальное значение 100000.

  2. initial Х 3, 25 – ячейке с № 3 присваивается значение 25.

  3. initial МХ 8 (2,4), - 54 - Величина (– 54) записывается во вторую строку, столбец 4 матрицы 8.

  4. Initial MX$ cost (26), 100 - Величина 100 записывается в строку 2, столбец 6 матрицы cost.

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

saveralue A [+, -], B, где

А – номер или имя сохраняемой величины;

В – величина, используемая для модификации.

Примеры.

1) saveralue p 5, V$ alpha - при входе транзакта в блок saveralue сначала вычисляется величина переменной alpha, а полученный результат присваивается сохраняемой величине, номер которой записан в параметре Р5.

2) saveralue 5+, х2 - при входе транзакта в этот блок величина х5 увеличивается на значение величины х2.

3) saveralue prof-, fn$ costol - при входе транзакта в блок сохраняемая величина х$ prof уменьшается на значение функции fn$ costol.

Для описания матриц используется оператор <метка> matrix А, В, С, где

А – не используется, оставлен для совместимости с более ранними версиями GPSS;

В – число строк матрицы (целое число);

С – число столбцов матрицы (целое положительное).

Для записи значения матрицы и для изменения ее элементов используется оператор msavevalue A [+, -], В, С, D, где

А – имя матрицы; В – номер строки; С – номер столбца; D – величина, используемая для модификации.

Проверка числовых выражений

Сравнить СЧА можно с помощью блока test_X_А, В, С, где

Х – вспомогательный оператор отношений, который может принимать значения:

g A > B ne A ≠ B

ge A ≥ B le A ≤ B

e A = B l A < B

A – СЧА, В – СЧА, С – имя блока, в который переходит транзакт при условии, что ответ на вопрос, подразумеваемый оператором отношения, отрицательный. При отсутствии операнда С проверку выполняют в режиме отказа.

Примеры.

1) test le Q1, Q2 - проверяющий транзакт будет задержан в предыдущем блоке до тех пор, пока длина очереди не станет меньше или равна длине второй очереди.

2) режим условного перехода: test le_Q1, Q2, zhvs

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

3) test l f$ scaner, x$ max – util, lll

seize scanner

……

Lll queue Q scaner

Если устройство scaner имеет коэффициент загрузки меньше, чем значение сохраняемой величины max util, то транзакт идет на обслуживание этим устройством. В противном случае переходит в устройство с меткой Lll.

4) пусть в точке перехода dispatcher необходимо удалить те транзакты, которые находились в модели больше чем 100 единиц модельного времени. Для этого можно использовать такие блоки:

generat 18,6 – генерирует транзакты которые 18 ± 6 (?)

dispatcher test l M1, 100 kill

kll terminate

Команда GPSS World

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

Команда Start A, [B], [C], [D], где

А – задает значение счетчика завершения;

В – операнд выбора статистики, если его значение = NP, то вывод статистики блокируется.

Команда reset – вбрасывает 0 в статистику и СЧА системы, но не удаляет транзакты из модели. Значение относительно модели времени устанавливается в 0.

С1 – атрибут модельного времени. С1 = 0. А значение абсолютного модельного времени изменяется.

clear – сбрасывает всю накопленную статистику, удаляет все транзакты из модели. Относительное и абсолютное = 0 .

Все изменяется, устройства не заняты и доступны.

<meta> equ А - Вычисляется выражение, заданное операндом А и присваивается переменной, время которой стоит в метке, его мы уже ранее применяли.