Смекни!
smekni.com

Методические указания по курсовому проектированию по курсу «Исследование систем управления» кафедра информационных технологий в экономике и бизнесе (стр. 8 из 20)

3.3.1. Операторы блоков (исполнения)

GENERATE (Генерировать, произвести, родить)

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

Формат:< GENERATE A,[B,C,D,E,F,G,H,I]>, где

А - среднее значение интервала времени;

В - разброс или модификатор среднего значения (по умолчанию - ноль);

С - время появления первого транзакта;

D - общее число генерируемых транзактов;

Е - уровень приоритета каждого транзакта (по умолчанию - ноль).

F,G,H,I – параметры транзакты.

Примечание: при курсовом проектировании будут использоваться четыре или пять первых операндов.

GENERATE 2,1,,10

Эта запись читается следующим образом:

«Генерируется транзакт, распределенный по равномерному закону со средним значением 2 и модификатором 1, всего будет произведено 10 таких транзактов».

Как видно из формата, по умолчанию закон распределения временных интервалов - равномерный с управляемым средним и разбросом, что позволяет, в том числе, моделировать потоки с равными интервалами. Также в GPSS/H предусмотрена возможность задавать более сложные распределения. В том случае, когда используются встроенные функции (см. ниже), любая встроенная функция ставится на место операнда А, а операнд В отсутствует. Например:

GENERATE RVNORM(1,1,0.5),,1,4

Эта запись читается следующим образом:

«Генерируется случайное число (Random Value-RV), распределенное по нормальному закону, взятое с первого генератора случайных чисел - ГСЧ

( первое число в скобках), со средним значением равным 1 и стандартным отклонением 0.5; пришедшее в систему в первую единицу времени. Всего с этого ГСЧ поступит 4 транзакта».

GENERATE RVEXPO(7,0.75),,,,5

Эта запись читается следующим образом:

«Генерируется случайное число, распределенное по экспоненциальному закону, взятое с седьмого ГСЧ с параметром потока 0.75, приходящее с приоритетом 5».

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

Оператор GENERATE не допускает входа транзактов в него! Любой транзакт, вошедший в оператор исполнения GENERATE, вызовет ошибку исполнения и прервет работу программы с выдачей предупреждения в листинге.

TERMINATE (Уничтожить, терминировать)

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

Формат: <TERMINATE [A]>, где:

А - величина, на которую будет уменьшен счетчик завершений. По умолчанию А=0. Операнд А может принимать любые значения в интервале от 0 до плюс бесконечности. Физический смысл числового значения операнда А заключается в задании веса терминирования. Например, на погрузочную площадку выходят двери 4 складов, большемерная фура занимает всю длину погрузочной площадки, и никакая другая машина не сможет производить погрузку. Окончание погрузки фуры (выход транзакта из системы) освобождает сразу 4 места. Эта цифра вычитается из числа стартов (счетчика завершений), подробнее см. в 3.5.

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

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

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

SEIZE (завладеть), RELEASE (освободить)

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

Формат:< SEIZE А>,

где А - имя (или номер) устройства.

Функция оператора RELEASE - моделировать освобождение устройства. Пройдя обслуживание в операторе ADVANCE, и исполнив, оператор RELEASE, транзакт переключает поименованное в операторе устройство из положения «занято» в положение «свободно» и разрешает вход в ADVANCE, первому из транзактов, ожидающих перед оператором SEIZE .

Формат: <RELEASE А>,

где А - имя (или номер) устройства.

ADVANCE ( продвижение вперед, успех)

Этот оператор моделирует задержку транзакта в устройстве (в терминах теории СМО - обработку заявки).

Формат:< ADVANCE A,[B]>, где

А - среднее время задержки,

В - разброс относительно среднего значения (модификатор).

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

Три описанных выше оператора составляют модель простейшей СМО на языке GPSS/H. Программа, в которой имеется такая последовательность операторов, будет отслеживать все статистические характеристики устройства.

ENTER ( войти), LEAVE (отпустить)

Эта пара операторов выполняет те же функции, что и SEIZE и RELEASE, но не для устройств, а для STORAGE - «хранилищ», то есть для ресурсов, к которым может обращаться более одного транзакта. Такие объекты могут быть полезны при моделировании, например, распараллеленного процесса: обработки потока деталей на нескольких одинаковых станках, выхода публики из театра через несколько дверей и т.д. Эти «хранилища», или устройства параллельной обработки, должны быть предварительно описаны в программе при помощи оператора описания STORAGE (см. ниже). По логике своей работы связки операторов SEIZE – ADVANCE – RELEASE; ENTER- ADVANCE- LEAVE; абсолютно одинаковы, но употребляются для разных объектов.

QUEUE ( образовать очередь), DEPART (выйти из очереди)

Помимо устройств, в которых происходит обработка заявок (задержка транзактов), необходимо собирать сведения о таких объектах, как очереди, образующиеся на входах устройств. В языке GPSS/H по умолчанию очередь образуется и функционирует нормально, но никаких сведений о ней не аккумулируется. Для организации сбора таких данных используется пара связанных операторов: QUEUE, который отмечает постановку заявки-транзакта в «хвост» очереди (в терминах модели это называется «конец очереди»), и DEPART, собирающий статистику об уходе транзактов из очереди при освобождении устройства. Эти два оператора ставятся по желанию пользователя, не влияют на основные статистические результаты листинга и могут быть поставлены для получения интересующей пользователя информации с любого объекта модели, где может происходить образование и накопление очереди. Они не препятствуют входу транзактов и имеют нулевое время входа. Последовательность постановки операторов:

QUEUE(имя)- SEIZE…. RELEASE- DEPART (то же самое имя).

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

Формат:< QUEUE А,[B]>, где

А - имя очереди (имена такого рода используются не только для удобства идентификации в процессе работы с моделью, но и для указания необходимых сведений при работе в оболочке);

В - число добавляемых в очередь элементов.

Строго говоря, оператор QUEUE увеличивает текущее содержимое очереди, определенной в поле А, на величину, указанную в поле В.

При прохождении оператора DEPART транзакт покидает указанную очередь, причем счетчик длины очереди уменьшается.

Формат: <DEPART A,[B]>, где

А - имя очереди,

В - число удаляемых из очереди элементов.

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

Пример

Предположим, в почтовое отделение приходят посылки приблизительно раз в три часа, независимо от времени суток. В зависимости от размеров посылки, ее «обслуживание» в отделении может с равной вероятностью занимать два, три или четыре часа. Ниже приведена простейшая программа (точнее, тело программы с опущенной нумерацией) на GPSS/H, моделирующая такой процесс:

GENERATE

3 Ввод в модель транзактов - посылок с интервалом в 3 часа

QUEUE

Q1 Постановка транзактов в очередь Q1

SEIZE

POST Занятие транзактом устройства POST (начало обработки посылки)

ADVANCE

3,1 Задержка транзакта на время от 2 до 4 часов

RELEASE

POST Освобождение устройства POST (окончание обработки посылки)

DEPART

Q1 Выход транзакта из очереди

TERMINATE

1 Вывод транзактов из модели по одному

Для облегчения процедуры сбора и анализа статистической информации об очередях в GPSS/H предусмотрены следующие стандартные числовые атрибуты очередей: