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

2443

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

41

Для запуска программы на выполнение необходимо выбрать пункт меню Command/Create Simulation.

В среде моделирования различают объекты: модель – разрабатывается на языке GPSS, состоит из блоков, создаётся при помощи встроенного текстового редактора; процесс моделирования – результат трансляции модели, получаемый после команды Create Simulation, при наличии ошибок транслятор выдаёт список сообщений об ошибках в окне JOURNAL; отчёт по моделированию – автоматически создаваемый файл, содержащий статистическую информацию об объектах, накопленную в процессе моделирования.

3.2. Основные объекты языкаGPSS

Язык основан на схеме транзактов. Транзакт – это объект, который «путешествует» по системе, перемещаясь от блока к блоку, согласно логике передвижений, предписанной в модели. По пути он может задерживаться на определённое время вследствие своей обработки или занятости того или иного оборудования, создавать очереди, пропускать вперёд другие транзакты, согласно их приоритету и т. д. Транзакты имеют прямую аналогию с заявками в СМО. Каждый транзакт может обладать параметрами (до 100), которые могут меняться в соответствии с логикой модели. Параметры нумеруются или им даются имена. Транзактам может присваиваться приоритет, определяющий предпочтение, который может меняться в программе.

Язык GPSS связан с пошаговым выполнением операторов, называемых блоками (фактически, каждый блок – это отдельная подпрограмма). Каждое продвижение транзакта является событием в модели. Комплекс программ, обеспечивающих выполнение событий,

называется симулятором (планировщиком). Его функции:

обеспечить продвижение транзактов по заданным маршрутам;

регистрировать время наступления каждого события и выполнение их в нарастающей временной последовательности;

регистрировать статистическую информацию о функционировании модели;

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

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

Условно все объекты можно разделить на 7 категорий (табл. 3.1).

 

42

 

 

Таблица 3.1

 

Объекты языка GPSS

Категории

 

Типы объектов

Динамическая

 

Транзакты

Операционная

 

Блоки

Аппаратная

 

Одноканальные устройства,

 

 

многоканальные устройства (памяти),

 

 

логические ключи

Вычислительная

 

Функции, переменные, СЧА, генераторы

 

 

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

Статистическая

 

Очереди, таблицы

Запоминающая

 

Сохраняемые ячейки, матрицы ячеек

Группирующая

 

Списки, группы транзактов

Операционные объекты – блоки задают логику функционирования модели системы и определяют пути продвижения транзактов между объектами других категорий. В блоках происходят события четырёх основных типов:

создание и уничтожение транзактов;

задержка транзакта на определённое время;

изменение маршрута движения транзакта, группировкатранзактов;

изменение числового атрибута (параметра) транзакта.

Объекты аппаратной категории это объекты, в которых

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

Одноканальное устройство (ОКУ) – оборудование, которое может быть занято только одним транзактом. Например, один узел связи, один мастер, один пункт приёма услуг.

Многоканальные устройства (МКУ) – памяти предназначены для имитации оборудования, осуществляющего параллельную обработку, либо моделирования устройств ограниченной ёмкости (буферы, стоянки транспорта, складские помещения, конвейеры).

Логический ключ – объект, имеющий два состояния «включён» или «выключен», в зависимости от которых другие транзакты определяют пути их дальнейшего следования.

К статистическим объектам относятся очереди и таблицы. В

любой системе движение потока заявок может быть задержано из-за недоступности устройства. В этом случае транзакты становятся в очередь. Учёт очередей составляет одну из основных функций

43

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

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

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

Каждому объекту в GPSS соответствуют атрибуты, описывающие его состояние в данный момент. Они автоматически регистрируются и доступны для использования в течение всего процесса моделирования, называются системными числовыми атрибутами (СЧА). Всего существует более 50 СЧА, наиболее часто используемые приведены в табл. 3.2.

 

 

 

Таблица 3.2

 

Таблица

основных СЧА

Объект

СЧА

 

Назначение

Генераторы случайных чисел

RNi

 

Случайное число в диапазоне 0-999, при

 

 

 

использовании в качестве аргумента

 

 

 

функции в диапазоне [0;0.999]

Транзакт

Рi

 

Значение i-го параметра,

 

PR

 

Значение приоритета

 

M1

 

Время пребывания в модели активного

 

 

 

транзакта (от MARK до текущего времени)

 

MPi

 

Время прохождения транзактом некоторого

 

 

 

участка модели (вычисляется как разность

 

 

 

текущего абсолютного времени и значения

 

 

 

i-ого параметра транзакта, определяемого

 

 

 

блоком MARK i)

Очередь

Qi, Q$имя

 

Текущая длина i-ой очереди

 

 

44

 

 

 

 

Переменные

V$имя

 

Значение арифметической переменной

Сохраняемые ячейки

X$имя

 

Значение ячейки памяти

Функции

FN$имя

 

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

Памяти

S$имя

 

Количество занятых каналов в МКУ

 

 

 

Окончание таблицы 3.2

Объект

СЧА

 

Назначение

 

R$имя

 

Количество свободных каналов в МКУ

 

SF$имя

 

Занятость МКУ: 1– заполнена, 0 – нет

Одноканальные устройства

F$имя

 

Занятость МКУ: 1– занято, 0 – нет

Логический ключ

LS$имя

 

Состояние ключа: 1– установлен, 0 – нет

Например, Р1 – СЧА, обозначающий значение первого параметра транзакта; Q$och – СЧА, обозначающий длину очереди с именем och. Если используется символьное имя, то между СЧА и именем ставится знак $.

К группирующей категории относятся группы транзактов и списки. Существует 5 видов списков: текущих событий, будущих событий, задержки ОКУ или МКУ, отложенных прерываний и пользователя.

3.3.Основныеблоки языка GPSS

Вотличие от PLUS-операторов, которые могут содержать несколько строк, операторы GPSS записываются в отдельной строке и имеют следующий вид:

[метка] имя блока[операнды] ;комментарии

Обязательным является только поле имя блока, остальные поля могут отсутствовать. Метка является именем-идентификатором блока, определяемым разработчиком. Имена должны начинаться с буквы, могут содержать цифры и символы подчёркивания. Имя метки не должно совпадать с ключевыми словами GPSS. GPSS присваивает меткам номера, начиная с 10 000. Количество обязательных операндов зависит от блока, они отделяются запятыми, для пропуска одного из подполей ставится подряд несколько запятых.

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

3.3.1. Поступление транзактов в модель

GENERATE (генерировать) – блок, в котором «рождаются» транзакты (заявки на обслуживание) и входят в процесс

45

моделирования. В любой блок GENERATE не могут входить транзакты. Поэтому в простых программах это первый блок. Имеет формат:

GENERATE [A],[B],[C],[D],[E]

Скобки [ ] означают, что данный операнд является необязательным.

Операнд A задаёт средний интервал времени между моментами поступления последовательных транзактов в модель. Если этот интервал постоянен, то операнд B не используется. Если же интервал поступления является случайной величиной, то в операнде B указывается модификатор среднего значения, который может быть задан в виде модификатора-интервала или модификатора-функции. Модификатор-интервал позволяет задать равномерный закон распределения поступления транзактов. Запись GENERATE A,B означает, что время поступления транзактов будет распределено равномерно на отрезке [A–B, A+B]. Ясно, что В<А.

Например, блок GENERATE 100,40 создаёт транзакты через случайные интервалы времени, равномерно распределённые на отрезке [60;140]. Разыгрывается случайное число в этом интервале, например 78, рождается первый транзакт. Затем, разыгрывается новое случайное число в интервале [60;140], например 132, и второй транзакт попадает в модель в момент времени 78 + 132 = 210 и т. д.

Модификатор-функция используется, если закон распределения интервала поступления отличен от равномерного. В этом случае в операнде B должна быть записана ссылка на функцию (её СЧА), описывающую этот закон, и случайный интервал поступления определяется как целая часть произведения поля A (среднего значения) на вычисленное значение функции.

В операнде C задаётся момент поступления в модель первого транзакта. Если это поле пусто или равно 0, то момент появления первого транзакта определяется операндами A и B.

Операнд D задаёт общее число транзактов, которое должно быть создано блоком GENERATE. Если это поле пусто, то блок генерирует неограниченное число транзактов до завершения моделирования.

Операнд E задаёт приоритет, присваиваемый генерируемым транзактам. Число уровней приоритетов неограниченно, причём

46

самый низкий приоритет – нулевой. Если поле E пусто, то генерируемые транзакты имеют нулевой приоритет.

Операнд F задаёт число параметров транзакта, поумолчанию12. Нужно помнить, что смысл единицы времени (секунда, минута, час, день) закладывает разработчик (нигде не прописывая), поэтому нужно все операнды привести к единой единице измерения времени.

Примеры.

1)GENERATE 5;определяет время поступления транзактов ровно через 5 ед. времени;

2)GENERATE ,,,10;в момент времени 0 родится одновременно 10 транзактов;

3)GENERATE 2,,10,,1 ;первый родится в 10, затем в 12, 14 и т . д. с

приоритетом 1.

3.3.2. Уничтожение транзактов

Блок уничтожения транзактов (завершения) имеет формат:

TERMINATE [A]

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

Начальное значение счётчика завершений устанавливается управляющим оператором START А (начать), предназначенным для запуска прогона модели. Операнд A этого оператора содержит начальное значение счётчика завершений. Прогон модели заканчивается, когда содержимое счётчика завершений обращается в 0. Таким образом, в модели должен быть хотя бы один блок TERMINATE с непустым A, иначе процесс моделирования никогда не завершится.

Участок блок-схемы модели, связанный с парой блоков GENERATE-ТERMINATE, называется сегментом. Простые модели могут состоять из одного сегмента, в сложных моделях может быть несколько сегментов.

47

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

GENERATE 5,2,,100

………………………………

TERMINATE 1

START 100

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

Но чаще возникает необходимость провести процесс моделирования в течение конкретного времени, например, одного 8-часового рабочего дня. Если единица модельного времени минута, то необходимо, чтобы в момент 480 моделирование прекратилось. Для этого включаем сегмент – фиктивный блок времени:

GENERATE 5,2

………………………

TERMINATE

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

TERMINATE 1 START 1

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

3.3.3. Моделирование работы одноканальных устройств

Устройства используются при моделировании систем для имитации работы оборудования единичной ёмкости, например,

48

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

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

ждать очереди, если необходимо;

когда подходит очередь, занять устройство;

пропустить время, необходимое на обслуживание;

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

RELEASE.

Блок SEIZE (занять устройство) имеет следующий формат:

SEIZE A

Аргумент А задаёт номер или имя занимаемого устройства. Свободный блок SEIZE позволяет вошедшему в него сообщению занять указанное устройство. Блок SEIZE задерживает сообщение, если устройство занято или находится в состоянии недоступности. Сообщение, занявшее устройство, затем пытается перейти к следующему по номеру блоку. Устройство остаётся занятым до тех пор, пока занимающее его сообщение не войдёт в соответствующий блок RELEASE. Прежде чем освободить устройство, сообщение может пройти через

неограниченное число блоков.

Блок RELEASE (освободить устройство) имеет следующий формат:

RELEASE A

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

Транзакты обслуживаются устройствами в течение некоторого промежутка времени. Для моделирования такого обслуживания, т. е. для задержки транзактов на определённый отрезок модельного времени служит блок ADVANCE (задержать), имеющий следующий формат:

ADVANCE A,B

Операнды A и B имеют тот же смысл, что и в соответствующих полях блока GENERATE. Операнд А обязателен. Любой транзакт входит в блок ADVANCE беспрепятственно.

Пример.

49

GENERATE 5,2

SEIZE 1

ADVANCE 4,2

RELEASE 1

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

3.3.4.Моделированиеочередей

ВGPSS объекты типа "очередь" вводятся для сбора статистических данных. Необходимо понимать, что блоки очереди не влияют на реальное образование очередей транзактов (очереди образуются перед входами в устройства сами по себе), блоки являются регистраторами статистики. Статистика об очередях собирается в моменты входа транзакта в блок QUEUE (вход в очередь) или в блок DEPART (выход из очереди). Формат записи блока QUEUE:

QUEUE A,[B]

Операнд А задаёт номер или имя очереди. Может быть именем, положительным целым числом, СЧА. Поле В определяет число единиц, на которое увеличивается текущая длина очереди. Если поле В пусто, то по умолчанию прибавляется единица.

Когда транзакт входит в блок QUEUE, то ищется очередь с именем, определённым операндом А. Если необходимо, очередь создаётся. Значение текущей длины очереди хранится в СЧА Q$имя. Поскольку очередь обычно используется для измерения времени ожидания, за блоком QUEUE обычно следует такой блок, как SEIZE, который может задержать сообщение. Одно и то же сообщение может одновременно увеличить длину нескольких очередей, т. е. сообщение может войти в несколько блоков QUEUE перед тем, как войти в соответствующие блоки DEPART.

Блок DEPART имеет следующий формат:

DEPART A,[B]

Блок DEPART служит для уменьшения счётчика длины очереди. В поле В задаётся число единиц, на которое

50

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

Пример. Посетители приходят в кассу кинотеатра через 20 ± 10 сек, знакомятся с обстановкой 15 ± 15 сек и занимают очередь. Каждый посетитель приобретает билет у кассира в течении 20 ± 5 сек. Построить модель в течении 8 часов.

Запишем модель на языке GPSS.

SIMULATE

 

;управляющий блок на выполнение программы

GENERATE 20,10

;приход посетителей

ADVANCE

15,15

;знакомство с обстановкой

QUEUE 1

 

;очередь к кассиру

SEIZE KASSA

;занять кассира

DEPART 1

20,5

;освободить очередь

ADVANCE

; покупка билета

RELEASE

KASSA

;освободить кассира

TERMINATE

;уход из кассы

GENERATE 2880

;таймер времени

TERMINATE 1

 

START 1

 

 

При наборе блоков удобно пользоваться окном Insert GPSS blocks (вставить блок), которое вызывается в меню Edit/Insert GPSS blocks. Выбрав в нём нужный блок, заполняем последовательно поля ввода для каждого операнда. Здесь удобно вводить метки и комментарии.

3.3.5. Моделированиемногоканальных устройств (МКУ)

Многоканальное устройство (памяти) – особый объект языка для имитации разного рода накопителей, конвейеров, в которых одновременно могут находиться несколько транзактов. В отличие от одноканального устройства, для указания ёмкости (количества каналов) используется оператор описания памяти STORAGE. Как любой оператор описания он помещается между блоками SIMULATE и GENERATE. Формат оператора:

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