Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2443

.pdf
Скачиваний:
17
Добавлен:
07.01.2021
Размер:
9.06 Mб
Скачать

51

имя STORAGE А

Сначала определяется имя МКУ, А – ёмкость МКУ (количество каналов).

Блок ENTER (занять МКУ) позволяет вошедшему транзакту использовать многоканальное устройство. Транзакт может быть задержан на входе в блок, если многоканальное устройство заполнено, или имеющейся ёмкости недостаточно, или устройство в данный момент недоступно. Формат записи:

ENTER A,[B]

Операнд А указывается номер или имя МКУ, определённое блоком STORAGE. В необязательном поле В содержится число занимаемых каналов. Если поле В пусто, то по умолчанию занимается один канал. Одно и то же сообщение может входить в неограниченное число многоканальных устройств, а впоследствии освобождать их (или часть из них).

Блок LEAVE (покинуть устройство) имеет формат:

LEAVE A,[B]

Блок LEAVE освобождает определённое число единиц многоканального устройства, указанных в поле В. Если это поле пусто, по умолчанию предполагается равным 1. Число освобождаемых единиц не должно превышать текущее содержимое многоканального устройства. Транзакт не обязан освобождать столько же единиц каналов, сколько занимал. Поле А блока LEAVE определяет номер или имя многоканального устройства.

Пример. Машины подъезжают на СТО с интервалом 4±2 мин. и обслуживаются у одного из 3-х свободных мастеров в течении 60±4 – 5 мин., затем покидают станцию. Можно промоделировать следующим образом.

SIMULATE

CTO STORAGE 3

GENERATE 4,2

ENTER CTO

ADVANCE 60,45

LEAVE CTO

TERMINATE

3.3.6. Изменение маршрута движения транзактов

Блок TRANSFER (передавать) предназначен для передачи входящего в него транзакта в другой блок модели. Он имеет формат:

TRANSFER [A],[B],[C],[D]

52

Операнды В и С являются метками блоков, куда направляется транзакт. Операнд А задаёт режим выбора блока, к которому направляется транзакт, существует 9 режимов:

, – безусловный режим;

. – статистический, выбор одного из двух с заданнойвероятностью;

BOTH – последовательный выбор одного из двух блоков;

ALL – последовательный выбор одного из нескольких блоков;

PICK – выбор одного из нескольких случайным образом;

FN – функциональный режим, выбор по заданной функции;

Р – параметрический;

SBR – подпрограммный;

SIM – одновременный.

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

TRANSFER ,MET1

Встатистическом режиме значение операнда А, записываемое

после точки как трёхзначное десятичное число, показывает вероятность (долю) транзактов, которые должны быть отправлены в блок с меткой С, остальные в блок В или к следующему блоку, если операнд В опущен. Примеры:

TRANSFER

.7,MET1,MET2;70 % идёт на метку MET2, 30 % – на MET1

TRANSFER

.4,,MET2

;40 % идёт на метку, 60 % – в блок ниже

Если блоки с меткой MET1, MET2 заняты, то транзакт остаётся в блоке TRANSFER и повторяет попытку перехода в каждый следующий момент модельного времени.

Врежиме BOTH транзакт проверяет два пути: сначала возможность войти в блок с меткой В, затем в С, если оба заняты, то ждёт.

Врежиме ALL транзакт проверяет возможность войти в любой блок, начиная с блока, указанного в операнде В, и заканчивая блоком, указанным С. Операнд В определяет шаг изменения номера проверяемого блока.

Вфункциональном режиме вычисляется значение функции, имя которой указано в операнде В, берётся целая часть, полученное число складывается с С (может быть 0) и в блок с этим номером направляется транзакт.

3.3.7.Разработка модели и процесс моделирования

вGPSS.Пример создания модели

53

Рассмотрим процесс разработки модели на конкретном примере.

Пример. В парикмахерской два зала: причёсок и маникюрный. В маникюрном зале один мастер, в зале причёсок 2 мастера. Около 60 % приходящих клиентов пришли сделать причёску, из них 25 % затем хотят сделать маникюр. Если очередь к мастерам более одного человека, то клиент уходит. Поток клиентов простейший со средним значением 10 мин., время обслуживания в маникюрном зале 30 ± 10 мин, в зале причёски 60 ± 10 мин. Построить модель, имитирующую работу салона в течение 12-ти часов. Определить коэффициенты загрузки мастеров и количество ушедших клиентов.

Для моделирования простейшего потока воспользуемся встроенной библиотечной функцией exponential(a,b,c), задающей показательный закон распределения. Аргумент а означает номер генератора случайных чисел (любое число от 0 до 127), в определяет сдвиг, с – среднее значение. Для того чтобы различать клиентов, ушедших из-за очереди более 1 человека, введём два TERMINATE с разными метками. Для проверки очереди используем блок TEST и СЧА длины очереди Q$имя.

 

SIMULATE

;заводим 2 мастера причёсок

 

PRICH STORAGE 2

 

GENERATE (exponential(1,0,10)) ;генерируем клиентов

 

TRANSFER .6,Z_MAN,Z_PRICH

;60 % на причёску, 40 % – маникюр

Z_PRICH TEST L Q$OCHPRICH,2,NEOBS

;длина очереди меньше двух?

 

QUEUE OCHPRICH

;становимся в очередь

 

ENTER PRICH

;занимаем мастера причёсок

 

DEPART OCHPRICH

;покидаем очередь

 

ADVANCE 60,10

;обслуживаемся

 

LEAVE PRICH

;освобождаем мастера

Z_MAN

TRANSFER .75,,VYIHOD ;75 % уходят, 25 % пошли на маникюр, ниже

TEST L Q$OCHMAN,2,NEOBS

;проверяем очередь на маникюр

 

QUEUE OCHMAN

;занимаем мастера по маникюру

 

SEIZE MAN

 

DEPART OCHMAN

 

 

 

ADVANCE 30,10

 

 

VYIHOD

RELEASE MAN ;освобождаем мастера

TERMINATE

;все обслуженные клиенты уходят

NEOBS

TERMINATE

;здесь необслуженные клиенты

 

GENERATE 720

;фиктивный блок времени

 

TERMINATE 1

 

 

 

START 1

 

 

3.3.8. Управлениепроцессом моделирования

54

После набора текста и выбора команды Command/Create Simulation (создать процесс моделирования) транслятор проверяет на наличие синтаксических ошибок и выдаёт их в окне Journal. Для поиска ошибок и их исправления удобно пользоваться командой Seach/Next Еrror. При остановке по ошибке транслятор не создаёт список ошибок, тогда нужно самостоятельно найти строку, указанную в сообщении с помощью команды Seach/Go To Line. После исправления всех ошибок происходит процесс моделирования, запустить его можно с помощью команды Command/Start. В появившемся диалоговом окне можно установить нужное количество прогонов модели START n.

Для управления процессом моделирования можно пользоваться командами:

CONDUCT – запустить эксперимент;

HALT – остановить процесс и удалить все команды их очереди; CONTINUE – продолжить процесс моделирования;

CLEAR – сбросить накопленную статистику в ноль и удалить из модели все транзакты;

RESET – сбросить статистику в ноль без удаления транзактов, без сброса генераторов случайных величин и таймера модельного времени (удобно для сбора статистики в установившемся режиме).

В конце моделирования автоматически создаётся отчёт, содержащий накопленную статистику по всем объектам модели. Собственно это и есть то, ради чего происходил весь процесс моделирования. Элементы отчёта и их спецификации указаны в

приложении 1.

По отчёту для нашего примера (см. приложение 1) видно, что всего в салон пришло 69 клиентов, из них 27 покинули салон из-за очереди более одного человека, 26 человек обслуживаются в зале причёски, 18 – в маникюрном. Маникюрный мастер занят 80,1 % времени, зал причёсок – 93,6 %. Средняя длина очереди в оба зала равна 0,964 и 0,935 соответственно, и среднее время нахождения в очереди 26,6 и 37,4 мин., т. е. очередь в один человек практически всегда присутствует – салон не справляется с таким потоком посетителей и теряет треть клиентов. Можно сделать предложение об организации ещё одного места обслуживания в зале причёсок и возможно в маникюрном зале. Для этого необходимо провести моделирование при условии, что устройство PRICH будет трёхканальным, а после анализа полученной статистики посмотреть,

55

есть ли необходимость приглашать второго мастера на маникюр (делать 2-канальным устройство MAN).

3.4. Объекты вычислительной категорииязыка: переменные ифункции. Сохраняемые ячейки

Для того чтобы использовать в программе переменную, необходимо сначала её описать оператором VARIABLE или FVARIABLE. Формат описания:

имя VARIABLE А

Операнд А – арифметическое выражение, составляемое из стандартных арифметических операции: +, –, /, # (умножение), @ (остаток от деления), любого СЧА. Обратиться к переменной можно по её СЧА V$имя или Vi, где i – номер переменной. Например, переменная SUM VARIABLE N$NEOBS#250 и именем SUM подсчитывает убыток от необслуженныхклиентоввпримере3.3.1, вычисляемый как произведение числа транзактов, вошедших в блок с именем NEOBS на среднюю прибыль от одного клиента 250 рублей.

При вычислении переменной VARIABLE от всех СЧА и от результатов всех операций берётся целая часть, для FVARIABLE округление до целого делается только для окончательного результата.

Сохраняемые ячейки памяти служат для хранения некоторых постоянных или изменяющихся значений данных, обычно для организации разного рода счётчиков. Перед началом моделирования их значения равны 0, но могут быть заданы пользователем в операторе INITIAL A,[B] , где операнд А имеет вид X$имя или

Xi , i-номер.

Операнд В – присваиваемое значение. В процессе моделирования значение ячейки меняется в блоке SAVEVALUE (сохранить значение). Блок может быть использован как в режиме замещения старого значения новым, так и в режиме прибавления или уменьшения, тогда в операнде А добавляется знак + или – .

Примеры:

SAVEVALUE 1,(N$NEOBS#250) ;в ячейку 1 положить значение выражения, подсчитывающего убыток от необслуженных клиентов;

56

SAVEVALUE UBYITOK+,250 ; вошедший в блок транзакт прибавляет к ячейке с именем UBYITOK величину возможного убытка от одного клиента, в итоге в ячейке накопится общий убыток;

SAVEVALUE KOL+,1 ;заходящий в этот блок транзакт увеличивает значение ячейки на 1.

Обратите внимание, что обращаться к содержимому ячейки в программе нужно через её СЧА (приложение 2): X$UBYITOK,

X$KOL.

3.5. Определение и использование функций

Для применения в GPSS функций её предварительно надо описать в блоке FUNCTION , за которым следуют пары возможных значений аргумента и функции, фактически функция задаётся таблицей.

Имя FUNCTION A,Bn

Операнд А – аргумент функции, операнд В состоит из одной буквы, определяющей тип функции и n – положительного числа, задающего количество точек функции. В паре аргумент отделяется от значения запятой, пары друг от друга / (слэджем), пробелы недопустимы.

В GPSS есть 5 типов функций: D – дискретная числовая;

С – непрерывная числовая функция; Е – дискретная атрибутивная;

L – списковая числовая;

М – списковая атрибутивная.

При определении интервалов поступления заявок часто бывает необходимо разыгрывать случайные числа для неравномерных распределений. Рассмотрим пример такого розыгрыша для дискретной случайной величины и определим соответствующую функцию.

Пример. Пусть на АЗС 10 % клиентов заправляют по 10 литров бензина, 60 % – по 20 литров, 25 % – по 30 и тогда 5 % – по 40литров.

Имеем таблицу значений случайной величины:

Количество

10

20

30

40

литров

 

 

 

 

Вероятность

0,1

0,6

0,25

0,05

57

Чтобы понять как разыгрывается случайная величина (СВ), построим по таблице функцию распределения СВ (рис. 3.1), разбив ось на интервалы и найдя накопленные частоты попадания в интервал.

FN

40

30

20

10

0,1

0,7 0,95 1 RN1

Рис. 3.1. График дискретной функции распределения

Описание функции, соответствующей этому рисунку имеет вид:

KOL FUNCTION RN1,D4

.1,10/.7,20/.95,30/1,40

Итак, генератор случайных чисел RN1 разыгрывает число в интервале [0;.999], например 0,835. Это число попадает в интервал [.7;.95], значит значение функции – количество литров заливаемого бензина равно 30 (см. рис. 3.1), причём случайные числа из этого интервала будут появляться с заданной вероятностью 0,95 – 0,7 = 0,25.

Обратим внимание, что значение функции допускается не только в виде действительного числа, но и имени (т. к. имена нумеруются), что удобно использовать для перераспределения в блоке TRANSFER.

PER FUNCTION RN2,D4

.2,MET1/.5,MET2/.7,MET3/1,MET4

……………………………

TRANSFER FN,PER MET1………………… MET2………………… MET3………………… MET4…………………

При моделировании непрерывной функции происходит линейная интерполяция, узлами интерполяции

;в 1-й параметр кладем число 2;

58

являются заданные точки. Рассмотрим в качестве примера моделирование случайной переменной, равномерно распределенной на интервале [2; 5]. Зададим функцию:

INN FUNCTION RN2,C2 0,2/1,6

Так как максимальное значение, которое может выдать генератор случайных чисел, равно 0,999, то если в качестве второй точки укажем (1,5), значение 5 никогда не будет достигнуто. Поэтому необходимо указать пару (1,6). Если генератор выдаст число 0,999, то функция, которая показана на рисунке, примет значение 5,996, целая часть которого равна 5 (это и будет значением GPSS-функции INN). В случае, если генератор случайных чисел RN2 выдаст значение 0,4, GPSS-функция INN примет значение 3,6. Если необходимы целочисленные значения, то можно воспользоваться встроенной функцией INT – взятия целой части:

INT(FN$INN)

Из непрерывных функций, задающих известные распределения ранее часто встречалась функция XPDIS, теперь можно пользоваться библиотекой встроенных функций, см. [5, c.23-25].

Функции типа E, L, M расширяются возможности для значений функций, это могут быть СЧА, выражения в скобках, аргумент рассматривается как порядковый номер. Подробнее см. [2, c. 205].

3.6. Работа с параметрами транзакта,приоритеты

Каждый транзакт может иметь любое число параметров (атрибутов) до 100. В момент генерации все его параметры нулевые. Блок ASSIGN является основным средством для изменения значений параметров. Имеет формат: ASSIGN A,B,[C]

Операнд А определяет параметр, может быть номером, СЧА, выражением в скобках, СЧА*параметр (для косвенной адресации). Если значение параметра нужно увеличить или уменьшить в операнде А ставится знак + или –. Операнд В определяет значение, которое нужно положить в параметр или прибавить (отнять). Необязательный операнд С задаёт номер модификатора-функции (не нужно СЧА FN$), при его использовании значение функции в С умножается на В.

Примеры. ASSIGN 1,2

 

59

ASSIGN 1+,V$VAR1

;к 1-му прибавляемзначениепеременнойVAR1;

ASSIGN PODSCHOT, Q2

;в PODSCHOT кладём длину 2-ой очереди;

ASSIGN 3,250,2

;в 3 параметр кладём значение 2-ой функции,

 

умноженное на число 250.

Изменить значение параметра можно ещё блоком INDEX, который устроен также как ASSIGN, но работает только в режиме прибавления. Обычно его используют в сложных моделях для различия режимов замещения и накопления.

Блок MARK

В GPSS имеется блок MARK для работы с параметром, проходя через который в параметр заносится значение абсолютного модельного времени. Блок может иметь или не иметь операнд А. Значение операнда определяет номер или имя параметра, в который заносится абсолютное модельное время. Затем, в нужном месте модели обращаются к СЧА М1 или МРn, которое равно разности настоящего модельного времени и времени, запомненного при прохождении последнего MARK. Блок MARK используется, если необходимо определить время обработки транзакта в модели либо время прохождения определённого участка модели.

Приоритет транзакта может быть задан в GENERATE и изменяется в блоке PRYORITY n , где n – номер приоритета (от 0 до

127).

3.7.Применение вмоделях копий

иорганизация синхронизациидвижения транзактов

Вреальных системах при взаимодействии различных элементов модели может возникать необходимость синхронизации процессов во

времени. Например, при некотором технологическом швейном процессе могут параллельно обрабатываться разные части, детали одного изделия, а затем собираться в единое по мере готовности. Для организации таких процессов используют блоки SPLIT (создать копию), ASSEMBLE (объединить), MATCH (синхронизировать).

Блок GENERATE является основным средством создания транзактов. Каждый транзакт, вышедший из этого блока определяет собственное семейство, все они различны. Блок SPLIT создаёт заданное число копий транзакта, все они принадлежат тому же семейству, что и транзакт-оригинал. Формат блока:

60

SPLIT A,[B],[C]

Операнд А определяет число создаваемых копий. Операнд В – номер блока, к которому переходят копии, порождающий транзакт переходит в следующий блок. Операндом С задаётся номер параметра, в котором будут храниться последовательные номера копий, при этом порождающему присваивается номер 1, затем первой копии номер 2 и т. д.

Каждая новая копия становится членом семейства транзактов. Планировщик объединяет транзакты одного семейства в список. К семейству можно применять блоки, GATHER, MATCH.

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

ASSEMBLE A ,где А – число объединяемых транзактов. Первый транзакт какого-либо семейства, вошедший в блок,

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

Обратите внимание, что если в блоке SPLIT создалось n копий, то операнд А должен принять значение n + 1 (n копий и оригинал).

Блок GATHER имеет тот же формат, что и ASSEMBLE , отличие состоит в том, что транзакты после сборки не уничтожаются, а все одновременно направляются к следующему блоку.

Блок MATCH предназначен для синхронизации движения транзактов одного семейства, продвигающихся в модели по параллельным путям. В программе необходимо поместить два сопряжённых блока, каждый в одном из параллельных путей. Например:

MET1 MATCH MET2

MET2 MATCH MET1

При входе транзакта в один из блоков проверяется наличие транзакта данного семейства в сопряжённом блоке. Если его нет, то данный транзакт помещается в список синхронизации и будет ждать появления своего «брата» в сопряжённом блоке. Если он там есть, то оба транзакта одновременно пропускаются в следующие блоки и удаляются из списка синхронизации.

Рассмотрим пример. Техническое обслуживание (ТО) средств связи проводят в два этапа две группы специалистов. После поступления (190 мин) выполняется первый этап специалистами обеих групп параллельно (80 мин.

и

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]