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

Бычков Программирование в системе моделирования ГПСС-2010

.pdf
Скачиваний:
61
Добавлен:
16.08.2013
Размер:
562.49 Кб
Скачать

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

Рассмотрим эти возможности на примерах.

Пример:

SPLIT 6,BLO1,10

После прохождения блока SPLIT транзактом, который имеет не менее 10 параметров, будет создано 6 его копий. Если при входе в блок SPLIT 10-й параметр порождающего транзакта имел значение N, то при выходе он получит значение N+1. Значение этого параметра у первой копии будет N+2, у второй - N+3 и т.д.

Пример:

SPLIT 6,BLO7,,4

Этот блок порождает 6 копий исходного транзакта, каждая из которых имеет 4 параметра вне зависимости от того, сколько параметров было у порождающего транзакта. Значения параметров порожденных транзактов копируются лишь для тех параметров, номера которых имеются и в исходном транзакте.

Как сам транзакт, так и его копии могут проходить через

произвольное число блоковSPLIT.

 

“Семейство” (“ансамбль”) транзактов

существует в

модели до тех пор, пока не исчезнет последний его член. Основателем семейства может быть только транзакт, порожденный блоком GENERATE.

Важно отметить, что транзакты, принадлежащие к одному семейству, движутся в модели независимо, однако их движение может быть синхронизировано блоками MATCH, ASSEMBLE и GATHER, которые описаны в следующем разделе.

2.8. Синхронизация транзактов.

БлокиASSEMBLE, МATCH и GATHER

Для имитации различных сборочных операций удобно применять блок ASSEMBLE, действие которого состоит в том, что он собирает определенное количество транзактов

31

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

ASSEMBLE:

“Собрать семейство транзактов” [Метка] ASSEMBLE Счетчик_сборки Пример: через блок

ASSEMBLE 10

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

Замечания:

1.Имеется возможность косвенного задания счетчика сборки при помощи указания параметра первого транзакта, значение которого заносится в счетчик сборки данного блока

ASSEMBLE – ASSEMBLE P3;

2.Один блок ASSEMBLE может одновременно собирать транзакты, принадлежащие разным семействам.

Согласовать, синхронизировать движение двух транзактов, которые принадлежат к одному семейству и двигаются в модели по различным маршрутам, можно с помощью блоковMATCH:

“Синхронизировать транзакты”

Метка MATCH Метка_сопряженного_блока

При поступлении транзакта на блок MATCH интерпретатор производит следующие действия:

1.Просматривает транзакты, задержанные на другом блоке MATCH, метка которого указана в поле А первого блока (этот блок называется сопряженным первому);

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

32

Примеры:

 

 

Метка

Операция

A, B, C, D, E, F, G

BLO1

MATCH

ВLO2

пара сопряженных

 

 

 

ВLO2

MATCH

BLO1

блоковMATCH

В примере любой из транзактов, попавший в блоки BLO1

или ВLO2,

будет пропущен дальше только при условии, что в

сопряженном ему блоке задержан транзакт из того же семейства.

Один блок MATCH может синхронизировать движение нескольких пар транзактов из различных семейств.

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

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

Блок ASSIGN

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

Основным средством для задания и изменения значений

параметров транзактов является блок ASSIGN:

“Присвоение параметру транзакта значения”

[Метка]

ASSIGN

Номер_параметра_транзакта[+|-

],Значение [,Имя_функции или Номер_функции]

Пример:

ASSIGN

3,4

Блок присваивает 4 третьему параметру проходящего через него транзакта.

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

33

только сложение и вычитание.

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

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

ADVANCE.)

В приводимых примерах показаны типичные случаи применения блока ASSIGN. Необходимые пояснения в виде присваиваний приведены в поле комментария.

Пример:

 

 

Метка

Операция

A, B, C, D, E, F, G

 

ASSIGN

1,149

P1:=149

 

ASSIGN

11+,10

P11:=P11+10

 

ASSIGN

8-,P17

P8:=P8-P17

 

ASSIGN

7,100,4

P7:=100*FN4

2.10. Отметка времени. Блок MARK

Каждый транзакт, двигающийся в модели, имеет специальный параметр, называемый “Отметкой времени” (параметр транзакта M1), с помощью которого можно определить время пребывания транзакта в модели. Начальное значение отметки времени транзакта равно времени входа этого транзакта в модель из блока

GENERATE.

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

Эта разность может быть получена обращением к стандартному атрибуту М1. Текущее время (абсолютное) системы является одним из стандартных числовых атрибутов и обозначается через С1.

Блок MARK позволяет записывать текущее системное время в отметку времени проходящего через него транзакта

34

или в один из его параметров.

Для записи текущего времени в отметку времени применяется блок MARK без операндов. Если текущее время нужно записать в параметр транзакта, то его номер указывается в поле А.

“Записать отметку времени”

[Метка] MARK [Номер_пераметра_транзакта]

Если аргумент отсутствует, то текущее системное время записывается в параметр М1 вошедшего в блок транзакта.

Пример: MARK 15

Блок записывает текущее время системы в 15-й параметр проходящего блок MARK транзакта.

2.11. Приоритеты транзактов. Блок PRIORITY

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

“Установить приоритет транзакта”

[Метка] PRIORITY Значение_приоритета

Пример: PRIORITY 23

Каждый транзакт, который проходит через этот блок, получает значение параметра PR=23.

Приоритет транзакта может быть в пределах 0-127. Его начальное значение задается при генерации транзакта блоком GENERATE.

В процессе моделирования значение приоритета может быть неоднократно изменено в большую или меньшую сторону.

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

Блок TRANSFER

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

35

блоки, которые непосредственно не следуют за данным блоком. Для выполнения таких передач в GPSS используется блок TRANSFER.

Этот блок может работать в нескольких режимах передачи транзактов.

“Направить транзакт на другую часть модели” [Метка] TRANSFER “пусто” |BOTH|Вероятность

[,Метка1][,Метка2] Режим передачи определяется операндом, указанным в

поле А этого блока. Поле А блока содержит три варианта: “пусто”, BOTH и значение вероятности.

Метки блоков-преемников записываются в полях B и С. Если при выполнении блока нужно передать транзакт на “Метка2”, а параметр С отсутствует, то выполняется передача транзакта на следующий блок за TRANSFER. Аналогично с параметром В.

Рассмотрим наиболее часто используемые режимы работы блока TRANSFER. В режиме безусловного перехода блок TRANSFER передает все поступающие на него транзакты на метку, указанную в поле В.

Поле А блока должно быть при этом пустым.

Пример: TRANSFER ,LABL2

Все транзакты, которые вошли в этот блок, будут всегда (безусловно) передаваться на метку LABL2.

Одним

из режимов

условной передачи транзакта

является

режим ВОТН (ОБА). Для задания этого режима в

поле А блока TRANSFER записывается слово ВОТН, а в поля В и С – метки некоторых блоков.

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

меткой в поле С.

 

Если транзакт не может войти и в этот блок,

то

происходит его задержка в блоке TRANSFER до тех пор, пока

не освободится один из блоков, указанных в полях В и С.

 

Если в режиме ВОТН одно из полей В или С опущено,

то

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

36

блок выполняется каждую единицу системного времени.

Пример:

 

 

Метка

Операция

A, B, C, D, E, F, G

 

TRANSFER

BOTH,DISK,CPU

 

 

DISK

SEIZE

WERK3

 

 

CPU

SEIZE

COMP

В примере транзакт, поступивший в блок TRANSFER, сначала пытается войти в блок, помеченный меткой DISK. Если устройство WERK3 занято, то выполняется попытка входа в блок с меткой CPU. Если она оканчивается неудачей, то транзакт задерживается в блоке TRANSFER до момента освобождения хотя бы одного из устройств WERK3 или СOMP. Режим BOTH не является равновероятной передачей транзактов на две метки.

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

Такой режим работы блока TRANSFER, в котором производится случайный выбор между двумя блоками, получил название вероятностного.

Пример:

TRANSFER .400,TAPE,DISK

будет случайным образом передавать 40 % поступающих на него транзактов на блок DISK, а 60 % – на блок TAPE.

2.13. Таблицы. БлокиTABULATE и TABLE

Таблицы в GPSS являются удобным средством исследования распределений случайной величины аргумента таблицы.

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

Блок TABLE является описательным его нет при выполнении модели. Для заполнения таблицы необходимо, чтобы транзакты прошли через блок TABULATE, который

37

ссылается на блок TABLE. “Описать таблицу”

Имя_таблицы TABLE Табулируемое_значение, Правая_граница_первого_интервала,Ширина_интервала,

Количество_интервалов “Записать в таблицу”

[Метка] TABULATE Имя_таблицы

Пример:

TABL11 TABLE M1,10,20,7

TABULATE TABL11

В таблице с именем TABL11 табулируется величина М1 (время пребывания транзакта в системе). Таблица состоит из семи интервалов, которые имеют ширину 20 (кроме последнего), правая граница первого интервала – 10. Значение в интервале (по оси Y) – число попаданий в интервал значений М1 (рис. 2.1). В примере в интервал от 0 до 10 попало 25 значений, в интервал от 11 до 30 попало 35 значений, в интервал от 31 до 50 попало 75 значений, в интервал от 51 до 70 попало 85 значений, в интервал от 71 до 90 попало 95 значений, в интервал от 91 до 110 попало 105 значений, в последний интервал от 111 попало 42 значения.

120

 

 

 

 

 

100

 

 

 

 

 

80

 

 

 

 

 

60

 

 

 

 

Время в системе

40

 

 

 

 

 

 

 

 

 

20

 

 

 

 

 

0

 

 

 

 

 

10

30

50

70

90

110

Рис. 2.1. Пример работы блоков TABULATE и TABLE

В процессе прохождения транзакта через блок TABULATE интерпретатор обновляет содержимое таблицы,

38

указанной в его поле А, увеличивая на число, записанное в поле В, счетчик числа попаданий того интервала, внутрь которого попало значение аргумента. (Если В пусто, то это эквивалентно записи 1 в этом поле.)

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

2.14. Пример модели. Модель порта

Рассмотрим простую модель порта, в котором имеется причал для разгрузки судов, которые прибывают в порт с

интервалами от 27 до 37

часов, и для разгрузки каждого

судна требуется от 25 до 35

часов.

В результате

моделирования нужно определить

распределение времени пребывания судов в порту. (В это время включается время ожидания в очереди и время разгрузки у причала.)

Будем считать, что устройство PORT изображает в модели причал, а очередь OSYD – очередь судов, ждущих разгрузки, тогда модель порта может быть описана с помощью следующей программы:

Метка

Операция

A, B, C, D, E, F, G

 

SIMULATE

 

 

GENERATE

32,5 генерация

* транзактов, изображающих суда, прибывающие в порт

QUEUE OSYD прибывшее

* судно встает в очередь, ее длина увеличивается на 1

SEIZE

PORT судно занимает

* причал, когда он освободится

 

DEPART

OSYD если судно

*заняло причал, то, значит, оно покидает очередь и

*ее длина уменьшается на 1

ADVANCE

30,5

разгрузка судна

RELEASE

PORT после разгрузки

* судно освобождает причал

 

 

TABULATE

TAB

фиксирует время

* пребывания судна в таблице TAB

 

TERMINATE

1 судно покидает порт

39

*описание таблицы, имеющей 9 интервалов шириной 5

*с левой границей 23

TAB

TABLE

M1,23,5,9

 

START

480 моделирование

*продолжается до тех пор, пока 480 судов не покинут

*порт

END

В конце моделирования будет выдана информация о содержимом таблицы ТАВ, на основании чего можно судить о распределении времени пребывания судов в порту, а также информация о средней длине очереди OSYD, ее максимальной длине и среднем времени пребывания судов в

очереди, количестве судов,

прошедших

очередь без

задержки.

 

 

Последние данные

автоматически

собираются

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

3.ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ СИСТЕМЫ GPSS

3.1.Организация цикла. Блок LOOP

Для организации циклического прохождения транзакта

в модели могут быть использованы блоки TRANSFER и LOOP.

“Организовать цикл”

[Метка] LOOP Номер_параметра_транзакта, Метка_начала_цикла

Поле А блока LOOP трактуется как номер параметра транзакта, в котором записано значение счетчика цикла.

Когда транзакт входит в блок LOOP, значение указанного параметра транзакта уменьшается на единицу.

Далее выполняется проверка. Если полученное значение равно нулю, то транзакт проходит через блок LOOP на следующий за ним блок. Если после вычитания это значение не равно нулю, то транзакт передается на метку, которая указана в поле В блока LOOP.

Пример:

Метка Операция A, B, C, D, E, F, G

40