Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Объекты GPSS, ввод транзактов в модель и вывод из модели.
Язык GPSS это язык декларативного типа, построенный по принципу объектно-ориентированного языка. Основными элементами этого языка являются транзакты и блоки, которые отображают соответственно динамические и статические объекты моделируемой системы.
Предназначение объектов системы различно. Выбор объектов в конкретной модели зависит от характеристик моделируемой системы. Каждый объект имеет некоторое число свойств, названых в GPSS стандартными числовыми атрибутами (CЧA)*. Часть СЧА доступна пользователю только для чтения, А на значение других он может влиять, используя соответствующие блоки.
Блоки и транзакты. Каждая GPSS-модель обязательно должна содержать такие объекты, как блоки и транзакты.
В GPSS концепция передачи управления от блока к блоку имеет специфические особенности. Последовательность блоков GPSS-модели показывает направления, в которых перемещаются элементы. Каждый такой элемент называется транзактом. Транзакты это динамические элементы GPSS-модели.
Блоки языка GPSS представляют собой подпрограммы, написанные на макроассемблере или на языке Си, и содержат набор параметров (операндов) для обращения к ним. Как и во всех языках моделирования в GPSS существует внутренний механизм передачи управления, который реализуется в модельном времени, что дает возможность отобразить динамические процессы в реальных системах. Передача управления от блока к блоку в GPSS-программах реализуется c помощью движения транзактов в модельном времени. Обращение к подпрограммам блоков происходит через движение транзактов.
Содержательное значение транзактов определяет разработчик модели. Именно он устанавливает аналогию между транзактами и реальными динамическими элементами моделируемой системы. Такая аналогия никогда не указывается транслятору GPSS, она остается в воображении разработчика моделей. В табл. 1 приведены примеры аналогий между транзактами и элементами реальных систем.
Таблица 1
Система |
Элементы систем, которые моделируются транзактами |
Магазин |
Покупатель |
Автомобильное шоссе |
Автомобиль |
Склад |
Заявка |
C точки зрения программы транзакт это структура данных, которая содержит такие поля: имя или номер транзакта; время появления транзакта; текущее модельное время; номер блока, в котором находится транзакт; номер блока, куда он продвигается; момент времени начала продвижения; приоритет транзакта; параметры транзакта: P1, P2, ...
В языке GPSS все транзакты нумеруются по мере их появления в модели. Параметры транзактов отображают свойства моделируемого динамического объекта. Например, если моделируется движение автомобилей на участке дороги, то параметрами транзакта (автомобиля) в зависимости от целей моделирования могут быть скорость, тормозной путь, габариты и др.
Каждый транзакт занимает некоторые объем памяти ЭВМ. После того, как он закончит свое движение по блокам модели, его необходимо уничтожать для освобождения памяти, чтобы избежать ее переполнения. Поскольку транслятору не известно, сколько траизактов одновременно будет находиться в модели, то память под транзакты выделяется динамически.
Таким образом, при начале моделирования в GPSS-модели нс существует ни одного транзакта. В процессе моделирования транзакты входят в модель в определенные моменты времени, соответствующие логике функционирования моделируемой системы. Таким же образом транзакты покидают модель в зависимости от специфики моделирования. В общем случае в модели существует несколько транзактов, но в каждый момент времени движется только один из них.
Если транзакт начал свое движение, он передвигается от блока к блоку по пути, указанному блок-схемой (логикой работы модели). В тот момент, когда транзакт входит в блок, вызывается соответствующая этому блоку подпрограмма. Далее транзакт (в общем случае) пытается войти в следующий блок. Его перемещение продолжается до тех пор, пока не выполнится одно из таких возможных условий:
1. Транзакт входит в блок, функцией которого является задержка транзакта на определенное время.
2. Транзакт входит в блок, функцией которого является удаление транзакта из модели.
3. В соответствии c логикой модели транзакт пытается войти в следующий блок, но блок не принимает этот транзакт. В этом случае транзакт остается в том блоке, в котором в данное время находится, но позже будет повторять попытки войти в следующий блок. Когда условия в модели изменятся, одна из таких попыток может быть успешной. После этого транзакт продолжит свое перемещение по модели. Подробнее это рассматривается в параграфе 22.
Если выполняется одно из указанных условий, транзакт остается на месте и в модели делается попытка перемещения другого транзакта.
Объекты типа «ресурсы». Аналогами обслуживающих устройств реальных систем в GPSS являются объекты типа «ресурсы». К объектам этого типа относятся устройства, многоканальные устройства* и логические ключи.
Как и в каждом объектно-ориентированном языке в GPSS каждый объект имеет свойства и методы, которые изменяют эти свойства. В GPSS свойства объектов называют стандартными числовыми атрибутами (СЧА).
Устройство (одноканальное устройство, прибор) представляет собой ресурс, который в любой момент времени может быть занят только одним транзактом. Интерпретатор автоматически вычисляет такие его СЧА, как общее время занятости устройства, число транзактов, который занимали устройство, коэффициент использования устройства, среднее время занятости устройства одним транзактом и т. п.
Многоканальные устройства (МКУ) (несколько параллельных одинаковых устройств) представляют собой объекты типа «ресурсы» для параллельной обработки. Они могут быть использованы несколькими транзактами одновременно. Пользователь определяет емкость каждого МКУ, который используется в модели, А интерпретатор ведет учет числа устройств, занятых в каждый момент времени. Интерпретатор также автоматически подсчитывает такие СЧА: число транзактов, которые вошли в МКУ; среднее число каналов, занятых одним транзактом; среднее время нахождения транзакта в устройстве и др.
Некоторые события в системе могут заблокировать или изменить движение транзактов. Например, кассир кинотеатра, идя на обед, ставит табличку «В другое окно», и все следующие клиенты на протяжении обеда обращаются в другую кассу. Для моделирования этих ситуаций введены логические ключи. Транзакт может устанавливать эти ключи в положение «Включено» или «Выключено». Через некоторое время состояние ключа может быть использовано другими транзактами для выбора одного из двух возможных путей движения или ожидания момента изменения состояния ключа. Состояние ключа может быть изменено любым транзактом.
Переменные. Арифметические переменные позволяют вычислять арифметические выражения, которые состоят из операций над СЧА объектов. В выражениях могут быть использованы функции (библиотечные или пользовательские). Булевы переменные позволяют пользователю одновременно проверять несколько условий, исходя из состояния объектов или значений СЧА.
Функции. Используя функции, пользователь может задавать непрерывную или дискретную функциональную зависимость между аргументом функции и ее значением. Функции в GPSS задаются табличным способом c помощью операторов описания функций.
Ячейки и матрицы сохраняемых величин. Ячейки сохраняемых величин и матрицы используются для хранения некоторой пользовательской числовой информации, запись в эти объекты выполняют транзакты. Записанную в этих объектах информацию может считывать любой транзакт. Таким образом, эти объекты являются глобальными и доступны из любой части модели.
Очереди. В любой системе движение потока транзактов может быть задержано из-за недоступности ресурсов (например, необходимые устройства или МКУ уже заняты). В этом случае задержанные транзакты становятся в очередь еще один тип объектов GPSS. Учет этих очередей составляет одну из основных функций интерпретатора. Пользователь может специально определить точки модели, в которых необходимо собирать статистику об очередях, то есть установить регистраторы очереди. Тогда интерпретатор будет автоматически собирать статистику об очередях (длину очереди, среднее время нахождения в очереди и т.п.). Вся эта информация является СЧА и доступна пользователю в процессе моделирования.
Интерпретатором автоматически поддерживается дисциплина обслуживания очереди FIFO («первым пришел первым обслужился»), и пользователь может получить стандартную статистическую информацию только об этих очередях. Если у пользователя возникает необходимость организовать очередь из транзактов с другой дисциплиной обслуживания (например, LIFO), то для этого используются списки пользователей. Эти списки также помогают осуществлять синхронизацию движения разных транзактов по модели.
Таблицы. Объект «таблица» предназначен для сбора статистики о случайных величинах, заданных пользователем. Таблица состоит из частотных классов, в которые заносится число попаданий конкретной величины (некоторого СЧА). Для каждой таблицы вычисляется математическое ожидание и среднеквадратическое отклонение.
Разные события реальных систем происходят в течение некоторого периода времени. Например, покупатели приходят в магазин, когда подходит их очередь, они попадают на обслуживание. Когда покупки сделаны, покупатели покидают магазин. Если все эти события представить в модели, то их возникновение должно происходить на фоне модельного времени. Интерпретатор автоматически обслуживает ЧАСЫ модельного времени.
В момент начала моделирования интерпретатор планирует появление первого транзакта. После этого ЧАСЫ модельного времени устанавливаются на значение времени, которое соответствует моменту появления первого транзакта в модели. Этот транзакт (и другие, если они приходят в этот же момент времени) входит в модель. Далее он передвигается через все возможные блоки модели, которые ему встречаются. События, которые возникают вследствие перемещения транзакта через блоки, планируются на дальнейшие моменты времени. Естественно, что в этот первый отмеченный момент времени ничего больше в системе не происходит. Интерпретатор GPSS продвигает дальше значения ЧАСОВ к тому значению времени, на которое запланировано следующее ближайшее событие. Если во второй, отмеченный ЧАСАМИ момент времени, нет транзактов, которые нужно перемещать. ЧАСЫ снова продвигаются вперед и т.д. Именно так, от события к событию, и происходит смена модельного времени.
Особенности ЧАСОВ GPSS:
1. ЧАСЫ в GPSS регистрируют целые значения (за исключением языка GPSS World, где время может иметь действительные значения), то есть события могут появляться только в целые моменты времени. Это сделано с целью ускорения процесса моделирования, поскольку целочисленная арифметика выполняется процессором ЭВМ быстрее и требует меньше памяти.
2. Единица модельного времени определяется разработчиком. Эту единицу времени интерпретатору не сообщают. Значение принятой единицы модельного времени выражают в неявном виде в форме временных данных модели. Так, если все данные выражены в минутах, то единицей времени будет минута, то есть масштаб времени в модели будет такой: одна единица модельного времени равна одной минуте реального времени. Если все данные выражены в миллисекундах, то единицей модельного времени будет миллисекунда. Разработчик может задавать такую единицу времени, которая ему удобна для того, чтобы правильно отобразить события реальной системы в модели.
3. Система GPSS является интерпретатором «следующего события». Иначе говоря, после того, как модель полностью скорректирована в данный момент дискретно изменяющегося времени, ЧАСЫ перемещаются к следующему моменту времени, на который запланировано следующее событие. Таким образом, ЧАСЫ модельного времени продвигаются от одного события к другому.
Операторы GPSS делятся на три типа:
1) блоки;
2) операторы описания данных;
3) команды GPSS.
Общие сведения о формате операторов GPSS. В GPSS для ссылки на числа, блоки и объекты используются имена (идентификаторы). Имя представляет собой алфавитно-цифровую последовательность длиной до 20 символов в GPSS/PC и до 250 символов в GPSS World, которая начинается c буквы. Допускается использование символов только латинского алфавита, цифр и знака подчеркивания.
Формат GPSS-блоков такой:
[Номер cmpoки] [< Метка >] < Операция > < Операнды > <; Комментарии >
Номер строки. Обязательное поле для GPSS/PC (в GPSS World игнорируется). Начинается c первой позиции строки. Представляет собой десятичное число.
Метка (имя блока). Содержимым поля является имя последовательность символов, начинающаяся c буквы. В некоторых операторах это поле является обязательным.
Операция. Операциями* блоков являются глаголы, которые описывают основные функциональные назначения блоков. Каждый из блоков характеризируется своим собственным предписанным ему глаголом.
Операнды. Блоки могут иметь операнды. Операнды блоков задают информацию, специфичную для действия данного блока. Число операндов блока зависит от типа блока. В блоках не может использоваться больше семи операндов. Операнды в общем случае обозначаются символами: А, В, C, D, E, F, G. Значения операндов определяются типом блока. Одни операнды некоторых блоков должны быть определены всегда, а другие могут задаваться или не задаваться (т.е. являются необязательными). Операнды следуют один за другим и отделяются запятыми или одним пробелом. Если операнд опущен, то вместо него ставится запятая. Между операндами не должно быть более одного пробела, так как это будет означать, что операнды закончились и интерпретатор прекращает чтение строки.
Комментарии. Необязательное поле. Комментарии отделяются от поля операндов символом «;». Допускается запись комментария c начала строки. В этом случае в первой позиции строки ставится символ «;» или «*». В GPSS/PC допускаются комментарии c использованием заглавных или строчных букв только латинского алфавита, в GPSS World также допускается использование символов кириллицы.
Строка описания блока может содержать до 79 символов в GPSS/PC и до 250 символов в GPSS World. При описании форматов квадратные скобки [ ] указывают на необязательность поля.
Именами и метками не могут быть названия или начальные символы названий блоков, операторов, команд и СЧА. Во избежание конфликтов c ключевыми словами рекомендуется в именах использовать символ подчеркивания.
Блок GENERATE (ГЕНЕРИРОВАТЬ) это блок, через который транзакты входят в модель. Не существует ограничений на количество разных блоков GENERATE в одной модели.
Интервал времени между последовательными появлениями транзактов из блока GENERATE называют интервалом поступления. Когда транзакт входит в модель через блок GENERATE. интерпретатор планирует время поступления следующего транзакта путем розыгрыша случайного числа c соответствующим распределением интервалов поступления на время, равное текущему значению ЧАСОВ плюс разыгранное значение. При достижении этого значения модельного времени следующий транзакт вводится в модель через блок GENERATE и т.д.
Разработчик должен задать функцию распределения интервалов поступления транзактов в блоке GENERATE.
Все возможные виды случайных распределений интервалов поступления транзактов в GPSS делятся на равномерное распределение и другие виды распределений. В нашем случае специально рассматривают самое простое из всех случайных нетривиальных распределений равномерное распределение. Использование других видов распределений требует задания функций, которые описаны ниже (см. параграф 13).
Формат блока:
GENERATE [A],[B],[C],[D],[E]
Ta6лица 2
Операнд |
Значение |
Значение по умолчанию* |
А |
Средний интервал времени (число, СЧА) |
0 |
В |
Половина поля допуска равномерно распределенного интервала (число, CЧА) |
0 |
С |
Смещение интервалов |
Смещение отсутствует |
D |
Ограничитель транзактов |
∞ |
Е |
Уровень приоритета транзакта. Возможные значения 0 127 |
0 |
* Если опущено поле операнда, транслятор проставляет значения по умолчанию или выдает ошибку.
Значение операндов:
А среднее значение интервала поступления;
В величина разброса возможных значений относительно среднего значения. (Если операнд В не задается, то интервал времени поступления детерминированная величина);
C момент времени, в который в блоке GENERATE должен появиться первый транзакт. (После этого первого прихода все остальные приходы транзактов возникают в соответствии c распределением, заданным операндами А и В);
D ограничитель общего числа транзактов, которое может войти в модель через данный блок GENERATE на протяжении времени моделирования. (Если это число достигнуто, данный блок GENERATE перестает быть активным);
Е уровень или класс приоритета каждого из транзактов. которые вводятся в модель через данный блок GENERATE. (Всего существует 128 разных уровней, которые задаются c помощью чисел от 0 до 127. Чем больше число, тем выше приоритет).
1. Транзакты не могут входить в блок GENERATE, так как он сам их генерирует.
2. Если в модели GPSS/PC встречаются подряд два или больше блоков GENERATE, то последний блок переопределяет операнды предыдущих блоков. В GPSS World транслятор выдает ошибку.
3. Операнды не могут быть отрицательными числами.
Операнды А, В, C целочисленные (в GPSS World могут быть действительными числами).
Пример 1
1. Задание равномерного закона распределения:
GENERATE 6,4
Операнды: A = 6, В = 4. Интервал времени поступления является случайным числом со средним значением 6 и полем допуска 8, то есть он может приобретать только одно из девяти разных значений: 2, 3,4,5,6,7,8,9, 10.
2. Задание детерминированного значения интервалов поступления:
GENERATE 10
Операнды: A = 10, В = 0 (по умолчанию). Транзакты входят в модель каждые 10 единиц модельного времени.
3. Генерирование одного транзакта.
GENERATE ,,,1
Операнды: A = В = C = 0 (по умолчанию), D = 1. В нулевой момент в модель входит один транзакт.
Блоки GENERATE являются основными средствами создания фанзактов и ввода их в модель. Кроме блока GENERATE, для ввода гранзактов в модель используется также блок SPLIT, который создаст заданное число копий транзактов, вошедших в блок.
Транзакты удаляются из модели, попадая в блок TERMINATE (ЗАВЕРШИТЬ). В этот момент освобождается память, выделенная под транзакт. Эти блоки всегда позволяют выйти всем транзактам, которые пытаются это сделать. В модели может быть любое количество блоков TERMINATE. Формат блока:
TERMINATE [A]
Операнд А является величиной уменьшения специального счетчика, который называется счетчиком завершения. Этот операнд задает величину, которая вычитается из счетчика каждый раз, когда транзакт входит в блок TERMINATE. По умолчанию A = 0. Вход гранзакта в блок TERMINATE c нулевым значением операнда А не вызывает уменьшения счетчика завершения.
Счетчик завершения это ячейка в памяти ЭВМ, которая хранит целое положительное число. Начальное значение этого счетчика устанавливается в начале моделирования. Оно равняется значению операнда А команды START (НАЧАТЬ). В процессе моделирования транзакты попадают в блок TERMINATE и, таким образом, уменьшают значение счетчика на величину операнда А. Моделирование заканчивается, когда значение счетчика становится равным нулю или отрицательному числу.
1. В модели может быть много блоков TERMINATE, но счетчик завершения один, c начальным значением, указанным в команде START.
2. Не путать ограничитель транзактов в блоке GENERATE и счетчик завершения. Ограничитель задает число транзактов, которые войдут в модель, А счетчик число транзактов, которые выйдут из модели. По окончании моделирования транзакты могут оставаться в модели.
Интерпретатор начинает моделирование по команде START. Ее формат:
В операнде А задается начальное значение счетчика завершения. О назначении остальных операндов будет рассказано в параграфе 27.
Управление продолжительностью процесса моделирования.
В языке GPSS продолжительностью процесса моделирования можно управлять двумя способами:
1) завершать моделирование после того, как модель покинет заданное число транзактов определенного типа;
2) завершать моделирование по истечению заданного интервала времени.
Первый способ:
1. В команде START операнду А присваивается значение заданного числа транзактов.
2. Во всех блоках TERMINATE, через которые транзакты заданного типа покидают модель, операнду А присваивается значение «1» или другое, отличное от нуля (соответственно содержательному значению транзактов).
3. Во все других блоках TERMINATE используется значение операнда А по умолчанию (A = 0). Значение счетчика завершения не будет зависеть от этих блоков.
Первый способ позволяет закончить моделирование, когда через модель пройдет заданное количество транзактов, например 1000:
Второй способ:
Пусть разработчик выбрал за единицу модельного времени 1 мин и хочет смоделировать поведение системы на протяжении 8 часов. Это можно сделать таким образом:
1. Ввести в модель таймер-сегмент, состоящий из двух блоков:
2. Во всех других блоках TERMINATE в модели использовать значение операнда А по умолчанию (A = 0). Это означает, что прекращение моделирования, определяемое счетчиком завершения, не будет зависеть от других блоков TERMINATE.
3. В команде START операнд А должен равняться единице.
Таким образом, в процессе моделирования завершение движения транзактов в других блоках TERMINATE не влияет на счетчик завершения. В момент времени 480 транзакт выйдет из блока GENERATE и сразу же перейдет в блок TERMINATE. Счетчик завершения уменьшится на единицу, и интерпретатор завершит моделирование.
Задания