Ana səhifə

Gpss general Purpose Simulation System (система моделирования общего назначения) является языком моделирования, используемым для построения моделей и проведения моделирования на ЭВМ


Yüklə 0.49 Mb.
səhifə1/3
tarix12.06.2016
ölçüsü0.49 Mb.
  1   2   3
ВВЕДЕНИЕ
GPSS - General Purpose Simulation System (система моделирования общего назначения) - является языком моделирования, используемым для построения моделей и проведения моделирования на ЭВМ. Модели на micro-GPSS компактны, часто состоят из меньшего числа операторов, чем такие же модели, написанные на процедурных языках (например, на Фортране или Бейсике). Это объясняется тем, что в micro-GPSS встроено максимально возможное число логических программ, необходимых для моделирующих систем. В него также входят специальные средства для описания динамического поведения систем, меняющихся во времени, причем изменение состояний происходит в дискретные моменты времени.

Micro-GPSS очень удобен при программировании, поскольку интерпретатор micro-GPSS (здесь и далее интерпретатором называется моделирующая часть системы micro-GPSS) многие функции выполняет автоматически. Например, micro-GPSS без специального на то указания пользователя собирает статистические данные, описывающие поведение модели, автоматически печатает итоговую статистику по завершении моделирования. Пользователю нет необходимости включать в модель операторы для сбора и накопления этих данных или задавать формат, указывающий, в каком виде должны быть распечатаны итоговые данные.

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

В следующей главе будет представлена на процедурном уровне модель системы обслуживания С ОДНИМ ПРИБОРОМ И ОЧЕРЕДЬЮ. Сначала описан способ функционирования этой системы и поставлена цель разработать модель на ЭВМ, которая промоделировала бы данную систему. Далее рассмотрены основные вопросы, связанные с созданием такой модели. При моделировании такой системы предполагается, что существует генератор случайных чисел. Считают, что обращение к генератору происходит как к функции, которая выдает значения случайных чисел, равномерно распределенных в интервале от 0,000000 до 0,999999 включительно.



ГЛАВА 1. ОСНОВЫ МОДЕЛИРОВАНИЯ СИСТЕМ МАССОВОГО ОБСЛУЖИВАНИЯ.
1.1. Система обслуживания с одним прибором и очередью.
Рассмотрим систему, состоящую из одного человека, выполняющего обслуживание определенного вида. Этот человек может быть кассиром, продающим билеты на станции, контролером в универсальном магазине, парикмахером в парикмахерской с единственным креслом. "Клиенты" приходят к такому "обслуживающему прибору" в случайные моменты времени, ждут своей очереди на обслуживание (если есть необходимость), их обслуживают по принципу "первый пришел - первым обслужен". После этого они уходят. Схематично эта ситуация показана на рис.1.1.
Приход _ _ _ Уход

-----------> ooooooooо -----> |_О_| ------------>

Очередь Прибор
Рис.1.1.
Здесь необходимо дать пояснения: на рисунке прямоугольник - это обслуживающий прибор, а кружок внутри него - заявка, находящаяся на обслуживании.
1.2. Основные понятия.
Для дальнейшего рассмотрения системы введем ряд определений:

ОЧЕРЕДЬ - это группа заявок, ожидающих обслуживания.

МОДЕЛЬНОЕ ВРЕМЯ - это промежуток времени между началом моделирования и его завершением.

СИСТЕМА МАССОВОГО ОБСЛУЖИВАНИЯ - это система, состоящая из обслуживающего прибора, заявки, находящейся на обслуживании, и ожидающих обслуживания заявок. Простая система массового обслуживания, изображенная на рис.1.1, характеризуется двумя независимыми случайными переменными:

- ИНТЕРВАЛ ПРИБЫТИЯ заявок - это интервал времени между последовательными моментами прибытия заявок в систему.

- ВРЕМЯ ОБСЛУЖИВАНИЯ - это время, требуемое прибору для выполнения обслуживания.

СИСТЕМНАЯ ВЕЛИЧИНА - это величина, зависящая от значения указанных двух независимых случайных переменных. Ниже перечислены некоторые из таких системных величин - они также являются случайными переменными:

1. Число заявок, прибывших на обслуживание за заданный промежуток времени.

2. Число заявок, которые попали на обслуживание сразу же по прибытии.

3. Среднее время пребывания заявок в очереди.

4. Средняя длина очереди.

5. Максимальная длина очереди.

6. Нагрузка прибора, являющаяся функцией времени, которое потрачено прибором на обслуживание в течение заданного промежутка времени.

Распределения этих системных величин и являются предметом исследования.

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

1. Случайные переменные ИНТЕРВАЛ ПРИБЫТИЯ и ВРЕМЯ ОБСЛУЖИВАНИЯ являются равномерно распределенными и принимают только целые значения.

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

3. В начале моделирования система "пуста", т.е. нет очереди и обслуживающий прибор свободен.



4. Моделирование продолжается до тех пор, пока не будет достигнуто значение модельного времени, заданное для этой модели в качестве одного из входных данных.
СОБЫТИЯ. При моделировании систем массового обслуживания совершаются некоторые действия. Все события, происходящие в системе (и, следовательно, в ее модели), должны быть каким-либо образом зафиксированы и должно быть учтено их воздействие на текущее состояние системы. Кроме того, необходимо определить, как нужно корректировать состояние системы в связи с воздействием на нее этих событий.
1.3. Алгоритмизация модели.
Мы рассмотрели различные элементы, из которых формируется модель системы обслуживания с одним прибором и очередью. Последним шагом является сбор этих элементов в единую общую модель. В общем виде логическую схему модели можно представить в виде блок-схемы на рис.1.2.
+------+

( Начать )

+------+

-------------------

/ Прочитать данные /

-------------------

+------------------+

| Инициализировать |

| переменные |

+------------------+

|

+---------------------------------->|<----------------------------------+

| +-----------------+ |

| |Определить время | |

| |ближайшего собы- | |

| | тия | |

| +-----------------+ |

| +------------------------------+ |

| | Продвинуть таймер до времени| |

| | ближайшего события | |

| +------------------------------+ |

| | |

| / \ |

| Завершить / \ |

| обслуживание / Каков \ Приход заявки |

| +----< тип этого >---+ |

| | \ события? / | |

| +---------------+ | \ / | +--------------------+|

| | Отработать ло-| | \ / | | Отработать логичес-||

+----| гическую схему|<-+ \ / +->| кую схему прихода ++

| конца обслужи-| | | заявки |

+---------------+ | +--------------------+

-----------------------

/ Записать результаты /

-----------------------

+---------+

(_Закончить_)
Рис.1.2.
Теперь наша задача состоит в создании машинной модели на ЭВМ, которая позволит изучить поведение системы в течение времени моделирования. Иначе говоря, нужно реализовать эту блок-схему на ЭВМ, используя блоки и операторы языка GPSS.

ГЛАВА 2. КОНЦЕПЦИЯ МОДЕЛИРОВАНИЯ НА micro-GPSS.
Micro-GPSS представляет собой язык и машинную программу. Как любой язык, он содержит словарь и грамматику, с помощью которых легко могут быть разработаны точные модели систем определенного типа. Машинная программа интерпретирует модель, написанную на языке GPSS, предоставляя тем самым пользователю возможность проведения экспериментов с этой моделью на ЭВМ. Эта машинная программа и называется интерпретатором. В этой главе будут рассмотрены свойства основного подмножества блоков GPSS. Это подмножество выбрано таким образом, чтобы можно было создавать законченные, относительно простые модели систем на micro-GPSS.
2.1. Динамические элементы моделей micro-GPSS.

Транзакты.
В гл.1, для того, чтобы показать пошаговое выполнение процедур, использовано символическое изображение передач управления в виде специальных фигур и линий (см. рис.1.2.). Управление передавалось от одного блока к другому (или от одного действия к другому). Однако в GPSS концепция "передачи управления от блока к блоку" имеет специфические особенности и требует более подробного рассмотрения. Конфигурация блок-схемы GPSS-модели отражает направления, по которым происходит движение перемещающихся элементов. Каждый такой элемент называется ТРАНЗАКТОМ. Транзакты являются динамическими (т.е. движущимися) элементами GPSS-модели. Работа этой модели заключается в перемещении транзактов от блоков к блокам. Некоторые примеры возможных аналогий между транзактами и элементами реальных систем представлены в табл.2.1.
Таблица 2.1.

________________________________________________________________

| Элементы систем, симво-

Системы | лизируемые транзактами

___________________________________|_____________________________

|

Большой универсальный магазин | Покупатель



Автомобильное шоссе | Автомобиль

Радиомастерская | Радиоприемник

Склад | Заявка

Парикмахерская | Клиент

___________________________________|_____________________________

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

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

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

Такое продвижение транзакта продолжается до тех пор, пока не произойдет одно из следующих возможных событий :

1. транзакт входит в блок, функцией которого является задержка транзакта на некоторое определенное время;

2. транзакт входит в блок, функцией которого является удаление транзакта из модели;

3. транзакт "пытается" войти в следующий блок в соответствии с блок-схемой, но блок "отказывается" принять его.

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

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

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

используемых для создания GPSS-моделей.
2.2.1. Внесение транзактов в модель.

Блок GENERATE (ГЕНЕРИРОВАТЬ).

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

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

Сведения об этих операндах сведены в табл.2.2.

Таблица 2.2.

---------------------------------------------------------------------------------

Значение по

Операнд Значение умолчанию

---------------------------------------------------------------------------------
А Средний интервал времени прибытия

(среднее время между последова- Ноль

тельными приходами транзактов в

блоке GENERATE)


В Половина поля допуска равномер-

но распределенного интервала Ноль

(половина размаха интервалов вре-

мени прибытия)


С Смещение интервалов

(момент времени, в который в блоке Смещение

должен появиться первый транзакт) отсутствует
D Ограничитель

(граничное значение общего числа

транзактов, которые могут войти в Бесконечность

модель через данный блок в течение

времени моделирования. Когда это

число достигнуто, данный блок GENE-

RATE перестает быть активным)
Е Уровень приоритета

(уровень или класс приоритета каж-

дого из транзактов, входящих в мо- Ноль

дель через данный блок. Всего су-

ществует 128 уровней, которые за-

даются числами от 0 до 127)

---------------------------------------------------------------------------------

Операнды А и В в блоке являются основными (их наличие обязательно), операнды С, D и E - дополнительными. Все эти операнды не обязательно должны быть заданы явно. Но когда операнды заданы в виде констант, то они должны быть неотрицательными целыми числами. Для операндов А и В допускаются также и вещественные числа. Целые числа должны иметь максимум 5 цифр, вещественные - 8 цифр, причем А должно быть >= В.

Примеры использования блока GENERATE.

1. GENERATE 5,3 - здесь заданы операнды А и В (5 и 3 соответственно). Такая запись означает, что интервал времени прибытия равен 5 плюс-минус 3. Т.е. интервалом времени прибытия является случайное число со средним значением, равным 5, и полем допуска, равным 6 (т.к. 3 - это половина поля допуска), т.е. интервал может быть выражен числами 2,3,4,5,6,7,8.

2. GENERATE 10 - здесь операнд В равен 0. Таким образом, интервал времени прихода равен 10 плюс-минус 0, иначе говоря, интервал равен в точности 10. Так может быть задано неслучайное значение интервалов времени.

3. GENERATE 3,3,10,5 - здесь не задан только операнд Е. В этом случае моментом первого прихода является значение 10. После этого интервалы времени прибытия находят из равномерного распределения 3 плюс-минус 3, иначе говоря, от 0 до 6 включительно. Однако только первые пять транзактов должны войти в модель через этот блок.

4. GENERATE 5,,2 - здесь заданы операнды А и С. То есть время первого прибытия задано числом 2. После этого приход транзактов будет осуществляться через каждые пять единиц времени. Так как никакое значение не использовано между двумя запятыми, это значит, что операнд В задан по умолчанию, а операнды D и Е отсутствуют. Наличие трех запятых подряд в данном примере говорило о том, что по умолчанию заданы операнды В и С, а операнд Е отсутствует.
2.2.2. Изменение приоритета транзакта.

Блок PRIORITY.

Для изменения приоритета транзакта используют операнд Е блока GENERATE. Но для этих целей существует и специальный блок.

Его формат: PRIORITY A. В операнде А задается значение приоритета, присваиваемого транзакту, которое выражается целым неотрицательным числом в интервале от 0 до 99999.
2.2.3. Удаление транзактов из модели.

Блок TERMINATE (ЗАВЕРШИТЬ).

Транзакты удаляются из модели, попадая в блок TERMINATE. В модели может быть любое число этих блоков. Информация для этого блока задается с помощью единственного операнда А - он определяет величину, которая вычитается из специального счетчика, называемого счетчиком завершений, каждый раз, когда транзакт входит в блок TERMINATE. Если операнд А не задан, то по умолчанию подразумевается значение 0. В этом случае вход транзакта в такой блок не вызывает уменьшения содержания счетчика. При достижении счетчиком значения 0 (ноль) моделирование завершается.

Исходное значение счетчика завершений задается в начале моделирования при помощи оператора START в его операнде А:

START A - значение операнда А соответствует значению счетчика.


simulate

generate 18,6 ! Интервал прибытия транзактов 12..24 мин.

terminate ! Удаление транзакта из модели

generate 480 ! Моделирование в течение 8 часов

terminate 1 ! Уменьшение счетчика завершений на 1

start 1


end
2.2.4. Задержка во времени.

Блок ADVANCE (ЗАДЕРЖАТЬ).

Предположим, что транзакт только что вошел в блок SEIZE, т.е. занял прибор. Обычно транзакт занимает прибор для того, чтобы немедленно началось обслуживание. В течение времени обслуживания транзакт должен прекратить двигаться по модели. В GPSS существует блок ADVANCE для реализации задержки продвижения транзакта в течение некоторого интервала времени. Обычно этот интервал задается случайной переменной. Информация, необходимая для описания времени обслуживания и его распределения, задается операндами А и В. Операнд А используют для определения среднего времени, которое транзакт, входящий в блок, проведет в нем. Операнд В используют для указания половины поля допуска. Значения этих двух операндов по умолчанию равны нулю. В блоке ADVANCE одновременно может находиться любое число транзактов.


Пример: ADVANCE 30,5

Такая запись означает, что для каждого транзакта, входящего в этот блок, возможные значения интервалов времени находятся в пределах 25-35 включительно. Например, транзакт вошел в блок в момент времени, равный 134, а разыгранным значением из распределения 30 плюс-минус 5 является 31. Тогда транзакт будет оставаться в этом блоке до момента времени, равного 134+31.


2.2.5. Занятие свободных приборов.

Блоки SEIZE (ЗАНЯТЬ) и RELEASE (ОСВОБОДИТЬ).

Предположим, что в какой-то момент активности транзакт занимает прибор.

Для этого транзакт входит (или пытается войти) в соответствующий блок, описывающий этот прибор.

Этот блок должен обладать следующими свойствами :

1. Если прибор уже используют, транзакт не может войти в блок, и он должен ждать в очереди.

2. Если прибор не используют, транзакт может войти в блок. В результате произойдет изменение статуса прибора из "незанято" в "занято".

Такими двумя свойствами обладает блок SEIZE.

Для этого блока обязательно должен быть указан операнд А. Значением операнда А является имя занимаемого прибора. Имя прибора может быть символическим или числовым. Если прибору присваивается символическое имя, то оно должно состоять из трех-пяти алфавитно-цифровых символов, причем первые три символа должны быть буквами. Если прибору присваивается числовое имя, то числа должны быть положительными и целыми. Наибольшим разрешенным числом является максимальное число приборов, допустимое в модели. Это число зависит от объема памяти, доступной этой модели. Например, при моделировании с памятью ЭВМ, равной 64К, наибольший допустимый номер прибора не должен превышать 35.

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

Если в качестве операнда В указан символ 'L', то блок становится ЛОГИЧЕСКИМ БЛОКОМ SEIZE. Это значит что если прибор А занят, то транзакт проходит через этот блок. Он не ждет перед блоком, как обычно, пока освободится прибор.

Примеры использования блока SEIZE:

1. SEIZE cpu

2. SEIZE sar4

3. SEIZE 23

Вход транзакта в блок SEIZE моделирует занятие прибора, вход того же транзакта в другой (парный данному) блок моделирует освобождение прибора, при этом происходит изменение состояния ранее занятого прибора с "занято" на "незанято". Таким блоком является блок RELEASE.

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


Замечания:

1). При моделировании нет необходимости определять имя прибора перед тем, как использовать эти два блока. Оно указывается непосредственно в блоке в качестве операнда А.

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

3) когда нужно получить информацию о средней длине очереди или о среднем времени ожидания транзактом, то используют символ "Q" в качестве операнда В.

Пример: SEIZE sal,Q

Это означает, что очередь не будет создаваться, а только собирается и распечатывается статистика.

simulate

generate 18,6

seize sal,Q ! Занятие прибора SAL

advance 25,5 ! Время обслуживания транзакта 20..30 мин.

release sal ! Освободить прибор SAL

terminate

generate 480

terminate 1

start 1

end
2.2.6. Сбор статистики при ожидании.



Блоки ARRIVE (стать в очередь) и DEPART (покинуть очередь).

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

Эта статистика должна дать ответ на следующие вопросы:

1. Сколько раз требования приходили в очередь?

2. Сколько пришедших требований присоединилось к очереди и сколько сразу заняли прибор?

3. Каково максимальное значение длины очереди?

4. Каково среднее число ожидающих требований?

5. Каково среднее время ожидания тех требований, которым пришлось ждать?


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

Регистраторов очередей может быть несколько. Их различают заданием имен. Условия для задания имен регистраторов такие же, как и для приборов.

Разработчик вносит регистратор очереди в модель с помощью двух блоков: ARRIVE и DEPART. Операнд А в этих блоках используют для указания имени соответствующей очереди. В конце моделирования автоматически распечатываются следующие элементы статистики (более подробно эти понятия рассмотрены в гл. 3):

"счетчик входов";

"максимальное содержимое";

"среднее значение содержимого";

"счетчик текущего содержимого";

"среднее время пребывания в очереди";

"счетчик нулевых вхождений"

Иногда (обычно крайне редко) возникает необходимость использовать в блоках ARRIVE и DEPART второй операнд - операнд В. Он указывает, на какую величину должен быть изменен счетчик содержимого очереди. По умолчанию для этого операнда подразумевается значение 1. Обычно это значение и используется.

Замечание: регистратор очереди необязательно использовать в модели везде, где могут возникать очереди. Если он не используется, то просто не собирается статистика.

Пример:


simulate

generate 18,6

arrive tim ! Транзакт становится в очередь с именем TIM

seize sal

advance 25,5

release sal

depart tim ! Tранзакт покидает очередь

terminate

generate 480

terminate 1

start 1

end
2.2.7. Переход транзактов в блок, отличный от последующего.



Блок GOTO (ПЕРЕЙТИ).

Блок GOTO можно использовать в одном из двух режимов :

1) в режиме безусловной передачи;

2) в режиме статистической передачи

Безусловный GOTO подобен оператору goto во многих языках программирования высокого уровня, но статистический GOTO имеет некоторые особенности.

Рассмотрим подробнее эти два режима.


1). Безусловная передача.

Иногда необходимо передать транзакт безусловным образом в блок, отличный от последующего. Это можно сделать с помощью блока GOTO, который в режиме безусловной передачи имеет вид:

GOTO А

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



Пример использования блока GOTO в режиме безусловной передачи:

simulate


generate ,,,4

begin advance 30,5

seize oven

advance 8,2

release oven

goto begin ! Перейти на метку (адрес) BEGIN, т.е. к блоку ADVANCE

generate 600

terminate 1

start 1

end
2). Статистическая передача.



Иногда бывает необходимо передать транзакт в один из блоков случайным образом. Это можно сделать, используя блок GOTO в режиме статистической передачи. Этот режим использует два операнда и следующий формат блока:

GOTO A,B


Здесь операнд А задает адрес блока. Операнд В задает частоту, с которой транзакт должен попадать в блок с адресом, указанным в операнде А. Операнд В - это число от 0 до 1 и может иметь максимум 4 цифры после запятой. Минимальное значение операнда В равно 0.0001, минимальное - 0.9999.
Пример использования блока GOTO для статистической передачи.

GOTO play,.25

В этом случае транзакты, входящие в этот блок, в 25% случаев будут передаваться в блок с адресом PLAY. В остальных 75% случаев они будут переданы в следующий блок (по порядку их записи в модели).

2.2.8. Захват прибора.

Блоки PREEMPT (ЗАХВАТИТЬ) и RETURN (ВЕРНУТЬ).

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

Формат: PREEMPT A,B

Операнд А (обязательный) указывает имя прибора, подлежащего захвату. Операнд В - необязательный, используется для указания условий, при которых разрешен захват; существуют две возможности:

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

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


Транзакт, захвативший прибор, может освободить его, (т.е. возвратить прибор ранее прерванному транзакту) только при дальнейшем вхождении в блок RETURN.

Формат: RETURN A

Операнд А этого блока указывает имя прибора, подлежащего освобождению.
Пример:

simulate


generate 120,30,,,1

arrive newsq !Встать в очередь

preempt sal !Захватить (отнять) прибор

depart newsq

advance 45,30

return sal ! Возвратить прибор

terminate

generate 360

terminate 1

start 1


end

2.2.9. Копии транзактов.

Блоки SPLIT и ASSEMBLE.

При необходимости можно сделать (или уничтожить уже имеющиеся) копии транзактов. Для создания копий транзактов, уже участвующих в моделировании, используется блок SPLIT. При этом создаются транзакты с точно такими же характеристиками (параметры, приоритет...), как и у оригинала. Формат блока: SPLIT A,B,C

Операнд А - положительное целое значение - число копий.

Операнд В - адрес блока, в который следует послать копию.

Операнд С - значение т.н. серийного параметра. Когда транзакт входит в блок SPLIT, значение этого параметра увеличивается на 1 для транзакта-оригинала, на 2 - для его копии, на 3 - для второй копии и т.д.

Все копии, которые были сделаны с одного транзакта-оригинала, уничтожает блок ASSEMBLE.

Формат: ASSEMBLE A, где

А - число транзактов-копий, которые должны быть уничтожены. Следует заметить, что если А=2, то уничтожится и копия, и оригинал. Поэтому в операнде А указывается число уничтожаемых копий плюс 1.

Пример.

simulate


generate ,,,100

seize mach1

arrive totti

advance 32,6

release mach1

split 1,mac3 !одну копию транзакта передать в блок с адресом mac3

seize mach2

advance 28,5

release mach2

goto mac4

mac3 seize mach3

advance 30,15

release mach3

mac4 assemble 2 !уничтожить сделанную копию

seize mach4

advance 22,9

release mach4

depart totti

terminate 1

start 100

end

2.3. Основные сведения об операторах GPSS, не являющихся блоками.
2.3.1. Оператор SIMULATE (МОДЕЛИРОВАТЬ).

Если разработчик намерен выполнить прогон модели, то обычно этот оператор ставят в начале программы. Оператор имеет операнд А, который может быть целым положительным числом, и указывает, сколько раз должна быть выполнена программа. Значение операнда по умолчанию равно 1. Обычно это значение и используется.


2.3.2. Оператор START (НАЧАТЬ).

Моделирование начнется только после того, как интерпретатором в модели будет найден этот оператор. Поэтому он должен стоять в конце программы. В общем случае, как операнд А должна быть помещена цифра 1. Вообще, операнд А задает начальное значение счетчика числа завершений. В качестве операнда В может использоваться запись 'NP'. В этом случае не будет распечатываться статистики по окончании моделирования.


2.3.3. Оператор END (ЗАКОНЧИТЬ).

В модели существует некоторая точка, перед которой помещены все команды управления прогонами модели. Это и есть оператор END. Он побуждает интерпретатор вернуть управление в операционную систему. Оператор END не имеет операндов и стоит после оператора START.


2.3.4. Оператор CLEAR (ОЧИСТИТЬ).

В некоторых случаях разработчику необходимо выполнить последовательно несколько прогонов модели, лишь слегка изменяя версию модели. Оператор CLEAR позволяет объединить все эти прогоны в один этап моделирования.

Например, нужно выполнить три прогона модели при различных значениях операнда С в блоке GENERATE. Для этого используют оператор CLEAR следующим образом:

KEY GENERATE ,,,4 KEY - символическое имя блока GENERATE

....

START 1 начать первый прогон



KEY GENERATE ,,,5 изменение для второго прогона

CLEAR очистка для второго прогона

START 1 начать второй прогон и т.д.

KEY GENERATE ,,,6

CLEAR

START 1


END

2.3.5. Оператор RESET (СБРОС).

Этот оператор устанавливает значения всех СЧА (см. п.3.1) обратно в их исходные значения. Исключение составляют :

- случайные числа

- абсолютное время

- текущий список каждого блока

- все С-величины (см. п.3.1)


2.4. Моделирование многоканальных устройств.
Прибор в micro-GPSS используют для моделирования единственного устройства обслуживания. Два или более находящихся рядом обслуживающих устройства могут быть промоделированы на GPSS двумя или более приборами, располагаемыми рядом, то есть параллельно. Этими приборами могут быть, например, два парикмахера, работающих рядом. Micro-GPSS предоставляет для моделирования однородных (обладающих определенными общими свойствами) параллельных приборов специальное средство (или элемент). Для этого используют название "многоканальное устройство", или аббревиатура МНУ. Схематично такая ситуация представлена на рис.2.1.
_ _

-->I_о_I--

/ \

Приход Очередь / _ _ \ Уход

------------> oooooooo ----->I_о_I-----> --------->

\ /

\ _ _ /

-->I_о_I--
Рис.2.1. Три параллельно работающих прибора.
В модели может быть несколько многоканальных устройств. Для того чтобы между ними было различие, им можно давать имена. Условия использования имен такие же, как и в случае приборов и очередей. Число приборов, которое моделируется каждым из многоканальных устройств, определяется разработчиком. Здесь употребляют термин "емкость многоканального устройства".
2.4.1. Определение емкости многоканальных устройств.

Оператор STORAGE.

Емкость многоканальных устройств определяется с помощью оператора STORAGE. У этого оператора может быть имя (символическое или числовое).

Операнд А задает емкость многоканального устройства. При определении емкости нескольких многоканальных устройств используют запись "S$имя,c", где "имя" является символическим или числовым именем многоканального устройства, емкость которого определяется, а с - его емкость. При использовании числового имени знак доллара не ставится. Символ "/" (разделить) используется для разделения подряд записанных основных единиц. Примеры использования оператора STORAGE:

1. MAIN STORAGE 5

2. STORAGE S$JOY,3/S5,10/S1,2/S$ERT,4
2.4.2. Использование параллельно работающих каналов.

Блоки ENTER (ВОЙТИ) и LEAVE (ВЫЙТИ).

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

1) транзакт ожидает своей очереди (если необходимо);

2) транзакт занимает устройство;

3) устройство осуществляет обслуживание;

4) транзакт освобождает устройство.

Как и в случае с прибором, разработчик применяет два блока. Блок ENTER приводит к состоянию "занято". Блок LEAVE приводит к состоянию "свободно". В этих блоках используются три операнда.

Операнд А - для указания имени многоканального устройства.

Операнд В - задает число приборов, которое должно быть занято ( или освобождено). Это значит, что транзакт может войти в МНУ, если его оставшаяся емкость больше или равна В. Этот операнд редко используется и его значение по умолчанию равно 1.

Операнд С - используется тогда, когда нужно собрать статистику об очереди. В этом случае пишется символ "Q".

В общем случае использование блоков ENTER и LEAVE аналогично использованию блоков ARRIVE и DEPART:

simulate


stor storage 2 ! Емкость МНУ stor = 2

generate 18,6

enter stor ! Занятие МНУ stor

advance 25,5

leave stor ! Освобождение МНУ

terminate

generate 480

terminate 1

start 1

end


  1   2   3


Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©kagiz.org 2016
rəhbərliyinə müraciət