
Дёмина / Лабораторная работа1
.docxЛабораторная работа № 1
РАЗРАБОТКА МОДЕЛЕЙ НА ЯЗЫКЕ GPSS
МОДЕЛИРОВАНИЕ ПОСЛЕДОВАТЕЛЬНЫХ ПРОЦЕССОВ
Цель работы - ознакомиться с основами языка GPSS, необходимыми для создания простых программ линейной структуры.
Программа на языке GPSS представляет собой последовательность блоков. С каждым из блоков связаны определенные действия. Действия, выполняющиеся в каждом из блоков программы, зависят от типа блока и операндов, указанных в полях операндов A, B, C, D, Е, F, G, H после ключевого слова блока. Количество операндов, в зависимости от типа блока, может быть различным. При запуске моделирующей программы эти действия инициируются только при появлении в блоке транзакта.
Транзакты – это динамические элементы модели. Транзакты генерируются в блоках GENERATE как непрерывный поток, подчиняющийся заданному в полях операндов блока закону, и затем последовательно продвигаются к следующим блокам. Каждому транзакту соответствует структура данных, в элементах которой отражаются номер транзакта , текущее модельное время, номер блока нахождения транзакта, приоритет транзакта, множество параметров транзакта. Каждый транзакт имеет множество параметров, обозначаемых буквой Р с номером (Р1, Р2, …) или именем.. Значения параметров можно изменять в процессе работы модели и использовать их для отображения различных свойств транзактов. Кроме параметров транзактов, в GPSS предусмотрено большое количество стандартных переменных, называемых системными числовыми атрибутами (СЧА), которые отражают свойства объектов. Системными СЧА, например, являются C1, TG1, PR и другие. C1 означает системное модельное время, TG1 – текущее значение счетчика завершений, PR - приоритет транзакта, обрабатываемого в данный момент. Значения параметров транзактов и СЧА используются в программе для управления процессом продвижения транзактов.
В качестве операндов блока GENERATE укаываются следующие значения в полях: A – среднеее время между появлением тразнактов,
B - половина ширины равномерно распределенного интервала,
C - смещение,
D – ограничение по количеству генерируемых транзактов,
Е - уровень приоритета генерируемого транзакта.
Уничтожение транзакта (вывод транзакта из модели) осуществляет блок TERMINATE. В этот момент память, выделенная системой под транзакт, освобождается. Если в поле А блока TERMINATE указано число, то уничтожение транзакта сопровождается уменьшением значения счетчика завершений на это число. Начальное содержимое счетчика завершений указывается в команде START . В момент обнуления этого счетчика работа модели прекращается. Это можно использовать для задания времени моделирования. Например, требуется обеспечить работу модели в течение 100 единиц модельного времени. Тогда в основных сегментах модели поле А блока TERMINATE должно быть нулевым, а для остановки работы модели в нужный момент к программе достаточно добавить следующий сегмент из трех блоков:
GENERATE 100 ; Генерация потока транзактов через 100 единиц времени
TERMINATE 1 ; Транзакт уничтожается, счетчик обнуляется
START 1 ; В начале работы счетчик завершений равен 1
Другой способ остановки работы модели – ограничение количества транзактов, когда модель прекращает работу после обработки заданного числа заявок. Рассмотрим пример модели на GPSS для решения следующей задачи..
Задача. 200 заявок должны быть обслужены последовательно одним устройством.. Время между появлением заявок распределено равномерно в интервале 15±5 секунд. Время обслуживания каждого транзакта распределено равномерно в интервале 10±5 секунд. Алгоритм программы представляет последовательную структуру и может быть представлен в виде схемы ( рис.1).
Генерация
заявок
отметка о занятие отметка о обслуживание освобождение уход из
входе
в устройства выходе из
заявки устройства
системв
очередь очереди
Рис.1.
Если отобразить этот алгоритм на языке GPSS, получим следующий программный сегмент:
GENERATE 15,5 ; Генерация потока заявок.
QUEUE och ; Заявка фиксируется в очереди. och
SEIZE ust ; Заявка претендует на занятие устройства ust
. DEPART och ; Заявка исключается из очереди och
ADVANCE 10,5 ; Обслуживание заявки
RELEASE ust ; Освобождение устройства. och
TERMINATE 1 ; Заявка покидает систему обслуживания
START 200 ; Счетчик обнулится после вывода 200 заявок
Здесь использованы следующие символические имена: och - для обозначения очереди, ust - для обозначения устройства. Устройство в GPSS - это объект, обслуживающий транзакты. В любой момент времени устройство может обслуживать только один транзакт. Один и тот же транзакт может занять одновременно более одного устройства. Занятие-освобождение, запрет на использование устройства моделируются с помощью блоков: SEIZE / RELEASE , PREEMPT / RETURN , FUNAVAL / FAVAIL.
SEIZE - занять указанное устройство. Остальные транзакты, претендующие
на занятие устройства, находятся в ожидании: реализуется принцип
обслуживания «первый пришел - первый обслужился».
RELEASE - освободить указанное устройство;
PREEMPT - захватить указанное устройство. Входящий в этот блок транзакт
является захватчиком. В этом случае, если устройство занято обслу-
живанием транзакта, не являющегося захватчиком, обслуживание
прерывается и устройство отдается транзакту-захватчику. Если в по-
ле B блока PREEMPT присутствует слово PR. То захват происходит
в случае, если в момент прихода захватчика обслуживается менее
приоритетный транзакт.
RETURN - освободить указанное устройство, занятое в блоке PREEMPT.
FUNAVAL - установить запрет на использование указанного устройства;
FAVAIL - снять запрет на использование указанного устройства.
Вместо символических имен для идентификации различных объектов (устройств, очередей и т.п.) в программе можно использовать номера. Тогда приведенный пример выглядит так:
GENERATE 15,5 ; Генерация потока заявок.
QUEUE 1 ; Заявка фиксируется в первой очереди.
SEIZE 1 ; Заявка претендует на занятие первого устройства
DEPART 1 ; Заявка исключается из первой очереди
ADVANCE 10,5 ; Обслуживание заявки
RELEASE 1 ; Освобождение первого устройства.
TERMINATE 1 ; Заявка покидает систему обслуживания
START 200 ; Счетчик обнулится после вывода 200 заявок
Блоки QUEUE (войти в очередь) и DEPART (покинуть очередь) обеспечивают выдачу данных об очередях при работе модели.
Блок ADVANCE обеспечивает задержку продвижения транзакта на некоторое время в соответствии с указанным в полях блока законом распределения. В примере время задержки имеет равномерное распределение в интервале 10±5 единиц модельного времени. Таким образом, блок ADVANCE моделирует процесс обслуживания заявки устройством в течение указанного промежутка времени.
Если необходимо использовать многоканальное (параллельное) обслуживание, в программе следует объявить и использовать многоканальные устройства (МКУ), или памяти. МКУ может одновременно хранить или обслуживать несколько транзактов. Емкость МКУ объявляется при программировании модели предложением следующего формата:
Идентификатор STORAGE константа
Идентификатор задает имя или номер объявляемой памяти (МКУ), константа – объем памяти ( максимально возможное количество одновременно обслуживаемых заявок). Тогда моделирование занятия/освобождения такого многоканального устройства одним транзактом обеспечивается блоками : ENTER и LEAVE, соответственно. При этом в поле А блоков указывается идентификатор памяти, куда входит/выходит транзакт, в поле В – количество занимаемых/ освобождаемых в памяти мест. По умолчанию поле В принимается равным 1.
Как упоминалось выше, для управления процессом продвижения транзактов в программе можно использовать значения параметров транзактов. В частности, значения параметров транзактов можно использовать для косвенной адресации. В этом случае перед именем параметра ставится символ «*», т.е. запись «*3» воспринимается как «содержимое третьего параметра транзакта». Значит, блок SEIZE *1 обеспечивает занятие устройства, номер которого равен значению первого параметра транзакта, вошедшего в блок SEIZE *1. Таким образом, если транзакты, попадающие в данный блок модели имеют различные значения первого параметра, то они будут претендовать на занятие разных устройств. Аналогично будет действовать блок SEIZE Р1.
Устанавливать или изменять значения параметров возможно с помощью блока ASSIGN . В поле А блока ASSIGN указывается номер или имя параметра, в поле В - число или СЧА, модифицирующее значение параметра. В поле С может быть указана функция (работа с функциями описана работе 3). После прохождения через блок ASSIGN параметру транзакта будет присвоено значение величины из поля В (режим замещения). В режиме увеличения или уменьшения значения параметра в поле А после номера (или имени) параметра указывается знак «плюс» или «минус», соответственно. Примеры:
ASSIGN 1, 3
ASSIGN 1+, 1
В первом случае в первый параметр транзакта заностится значение 3, во втором – значение первого параметра увеличивается на 1
Модель может содержать несколько программных сегментов. Каждый сегмент представляет некоторый процесс прохождения транзактами различных последовательностей блоков. Таким образом, осуществляется моделирование параллельных действий, причем транзакты, порожденные в различных сегментах, могут обслуживаться одними и теми же устройствами.
ЗАМЕЧАНИЕ! Запрещено направлять транзакты в блок GENERATE.
Для отладки и выполнения программ на языке GPSS предназначается пакет моделирования GPSSW. Интерфейс пользователя GPSSW устроен в соответствии с общепринятыми правилами. В начале работы с помощью редактора текста следует создать исходный модуль программы либо загрузить в рабочее окно уже сохраненную ранее программу. Текст программы может сопровождаться комментариями, которые начинаются с символа " ;" или «*». . Сохранение программы осуществляется в файле с расширением GPS по команде FILE / SAVE. Функциональная клавиша F10, как принято, переводит в меню команд.
Запуск модели происходит по команде меню COMMAND/CREATE SIMULATION. Если в программе обнаруживаются синтаксические или логические ошибки, следует проанализировать сообщения в окне JORNAL скорректировать программу. При удачной трансляции в окне REPORT выдается отчет.
Стандартный отчет формируется при любом прогоне модели и содержит информацию о результатах функционирования модели (в скобках приведены имена соответствующих СЧА, которые можно использовать в блоках программы). В первом разделе отчета содержится общая информация:
START TIME - начальный момент модельного времени;
END TIME - конечное время моделирования;
BLOCKS - количество блоков в модели;
FACILITIES - количество устройств в модели;
STORAGES - количество памятей в модели;
FREE MEMORY - число байтов свободной памяти.
Далее следует раздел, содержащий числовую информацию по блокам:
LINE - номер строки;
LOC - имя или номер блока;
BLOCK TYPE - тип блока;
ENTRY COUNT - число транзактов, входивших в этот блок;
CURRENT COUNT - число транзактов в блоке на момент окончания модели
рования ;
RETRY - число транзактов в состоянии ожидания, которое зависит от состоя
ния данного блока.
В следующем разделе отчета содержится информация об устройствах:
FACILITY - номер или имя устройства ( j );
ENTRIES - количество транзактов, входивших в устройство (FCj);
UTIL - коэффициент использования устройства (FRj);
AVE.TIME - среднее время пребывания транзакта в устройстве (FTj);
AVAILABLE - состояние доступности устройства (О - недоступно, 1- доступ
но) в момент завершения моделирования (Fj);
OWNER - номер последнего транзакта, .занявшего устройство;
PEND - количество прерванных в обслуживании в устройстве транзактов,
ожидающих занятия устройства по приоритету;
INTER - количество прерывающих устройство транзактов;
RETRY - число транзактов, ожидающих наступления специальных условий
DELAY - количество транзактов, ожидающих обслуживания.
Следующий раздел отчета дает информацию по очередям:
QUEUE - имя или номер очереди ( j );
МАХ - максимальное количество транзактов, входивших в очередь (QMj);
CONT - текущая длина очереди (Qj);
ENTRIES - количество транзактов, входивших в очередь (QCj);
ENTRIES(O) - количество «нулевых» входов в очередь с «нулевым» временем задержки (QZj);
AVE.CONT - средняя длина очереди ( QAj );
AVE.TIME - среднее время пребывания в очереди одного транзакта (QTj);
AVE.(-O) - среднее время пребывания в очереди одного транзакта без учета
«нулевых» входов (QXj);
RETRY - число транзактов, ожидающих наступления специальных условий.
Здесь в скобках после пояснений приведены имена СЧА. Символ j обозначает номер объекта. Например, FC1 – количество транзактов, входивших в устройство 1, Q3 - длина третьей очереди. Если для объектов в программе применены символические обозначения, то для обращения к соответствующим СЧА этих объектов после имени СЧА вместо номера указывается имя через символ «$» например, FC$ust - количество транзактов, входивших в устройство ust, Q$och - длина очереди och.
ЗАМЕЧАНИЕ. При назначении символических имен лучше выбирать имена длиной не менее 3-х символов, чтобы избежать путаницы, т.к. в GPSS большое количество стандартных числовых атрибутов с зарезервированными именами, состоящими из одного-двух символов.
Порядок выполнения работы
-
Изучить правила разработки моделей на языке GPSS, правила работы в среде GPSSW.
-
Разработать и отладить модель по заданию преподавателя. Проанализировать результаты модельного эксперимента.
-
Оформить и сдать отчет по работе.
Задания для лабораторной работы № 1
1. В кассе вокзала через каждые 103 мин появляются клиенты. На обслуживание клиента у кассира ухолит от 5 до 15 мин. (распределение времени равномерное). Через каждый час 5 мин. Кассир устраивает перерыв на 53 мин. Проанализировать работу кассы в течение рабочего дня.
2 Кладовщик выдает запчасти по запросам 2-х категорий. Механики 1 категории обращаются с интервалом 76 мин.и обслуживаются за 52 мин., механики 2-ой категории – за 6040 и 105 мин., соответственно. Запросы 2ой категории более приоритетные. Проанализировать работу в течение 8 часов, учитывая, что через 3 часа кладовщик уходит на перерыв на 1 час. Все временные интервалы распределены равномерно.
3. Врач ведет прием больных, которые приходят в поликлинику через каждые 3020 минут и ждут своей очереди. На осмотр пациента уходит 4020 минут. Через каждые 21 час приходит больной, требующий немедленного осмотра и направления на лечение в процедурный кабинет, где он принимает процедуры в течение 10.5 часа. Промоделировать работу на примере 60 больных. Определить коэффициенты загрузки врача и процедурного кабинета, длину всех очередей. Все времена подчиняются равномерному закону равномерной.
4. Построить модель потока из 150 деталей, поступающих с интервалом 91 мин., и обрабатываемых в течение 73 мин. Рабочий делает перерывы с выключением станка с периодом 6010 мин. Длительность перерыва 103 мин. Определить коэффициент занятости рабочего.
5. На заправочную станцию въезжают автомобили с интервалом 3-7 мин. На станции 4 колонки. После заправки бензином водители производят оплату в течение 10-14 минут. Время заправки автомобиля от 5 до 15 мин. Проанализировать работу за 6 часов. Распределение интервалов времени – равномерное. Скапливаются ли очереди на заправке?
6 Поток из 500 заготовок, поступающих с интервалом 10-20 сек. и обрабатываются одним из двух станков. Длительность обработки составляет 10-20 сек. Затем деталь маркируется. Маркировку выполняет 1 рабочий, который тратит на каждую деталь по 5-9 сек. Интервалы времени имеют равномерное распределение. Через каждый час маркировщик делает перерыв на 10 минут. Сколько времени необходимо для обработки партии?
Контрольные вопросы
-
Чему равно системное время при появлении самого первого транзакта?
-
Каким образом можно управлять временем работы модели?
-
Как будет работать программа, если ни в одном из блоков TERMINATE в поле A не указана константа?
-
Как изменится работа программы в примере, если в блоке TERMINATE константу 1 изменить на 2?
-
Чему равно среднее время обработки заявки в примере?
6. В чем отличие блоков SEIZE и PREEMPT?
7. Как повлияет на коэффициент занятости устройства блок FUNAVALE?
8. В каких случаях в программе следует использовать памяти?