Seize (завладеть), release (освободить) 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Seize (завладеть), release (освободить)



 

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

Формат:< SEIZE А>,где А - имя (или номер) устройства.

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

Формат: <RELEASE А>,где А - имя (или номер) устройства.

 

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

 

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

 

FUNCTION (функционировать)

 

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

<label FUNCTION A,B,[C]               основной формат

X1,Y1/X2,Y2/,…/Xn,Yn>          точки функции

Label – ярлык употребляется в обязательном порядке и служит для идентификации функции.

А - не имеет значения по умолчанию, определяет независимую переменную функции (аргумент), например, если используется равномерное распределение и БСВ берётся с 3-го генератора, то запись будет иметь вид RN3 (randomnumber). Операнд может кодироваться дополнительным выражением. Единственным ограничением является то, что аргумент не может прямо или косвенно ссылаться на функцию для которой он является независимой переменной. Значения функции могут задаваться числом с плавающей точкой.

B - не имеет значения по умолчанию, состоит из двух символов (без пробела), первый из которых представляет собой обозначение типа функции, вида: C- непрерывная числовая, D – дискретная числовая, L - список числовых значений, E - дискретная символьная, M – список дискретных символов, S- селектор объектов; второй символ представляет собой целое число связанных пар значений функции, которые представляют собой точки функции и приводятся во второй строке описания формата. Если используется символ S, то он уточняется операндом С, используемым только в этом случае.

С - по умолчанию равен 0, применяется для перечисления типов объектов, если используются объекты разных типов, то приводятся их символы, разделяемые запятой без пробелов.

Рассмотрим пример записи функции:

SERVTIME FUNCTION RN7,D5

2,4/.55,7.5/.7,10.5/.8,13.5/1,16.5


STORAGE (Запомнить)

 

Используется для определения ёмкости одной или нескольких памятей. Исполнение STORAGE (впрочем, как и всех рассмотренных) происходит только после успешного завершения процесса компиляции, при этом вводится в действие оговорённое число ресурсовSTORAGE. STORAGE в силу своей специфики должен располагаться в модуле описания, до того как началось движение транзактов, так как после компиляции программа последовательно исполняет все, стоящие до первого START. Формат STORAGE может быть представлен двумя способами:

<label STORAGE A >,

Label - не имеет значения по умолчанию, отсутствие ярлыка приводит к ошибке компиляции. Ярлык является идентификатором памяти, ёмкость которой определяется. При этом формате можно определить только одну память.

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

Приведём примеры записи:

1. SAM STORAGE 10,

2. 3     STORAGE 5.

В первом примере памяти SAM определяется ёмкость 10, во втором примере памяти за номером 3 определяется ёмкость 5. 

Используя многоканальное обслуживание можно не определять STORAGE, в этом случае ёмкость по умолчанию практически равна бесконечности (а именно, 2147483647).

При записи во втором формате - <STORAGESname1,A/Sname2, B/Sname3,C … > - можно определять несколько памятей сразу. Определитель памяти представляет пары обозначений, разделённых запятой, между собой пары отделяются слешем. Вначале пишется символ памяти, а затем её имя – первый член пары, после запятой пишется операнд А,В, характеризующий ёмкость памяти второй член пары. Символ S может быть отделён от имени памяти символом $ или имя может быть включено в круглые скобки, памяти одинаковой ёмкости могут записываться через тире.

Рассмотрим пример GPSS-ной модели и текст программы на языке GPSS, соответствующий этой модели.

1 Представим модель графически (рисунок 2.1)

 

 


B1          B2             B3

     
 

 


    - генератор

                            -накопитель

 

 

     - устройство

 

Рисунок 2.1

 

Опишем сеть аналитически.

Количество узлов – 5.

1 узел - для источника (генератора) заявок.Закон поступления заявок -равномерный;

2 узел - обслуживающее устройство. Закон обслуживания – экспоненциальный;

3 узел - обслуживающее устройство. Закон обслуживания – экспоненциальный;

4 узел - обслуживающее устройство. Закон обслуживания – экспоненциальный;

5 узел - приемник. Поглощает по 1 заявке.

 

Матрица переходов для примера сети представлена на рисунке 2.2

 

- 1 2 3 4 5
1 0 1 0 0 0
2 0 0 1 0 0
3 0 0,9 0 0,1 0
4 0,9 0 0 0 0,1
5 0 0 0 0 1

 

Рисунок 2.2 Матрица переходов для примера сети.

 

Модель на языке GPSSдолжна выглядеть так:

 

GENERATE 10

L3 QUEUE 1

SEIZE B1

DEPART 1

ADVANCE (EXPONENTIAL(1,0,2.1))

RELEASE B1              

 

L1 QUEUE 1

SEIZE B2

DEPART 1

ADVANCE (EXPONENTIAL(1,0,6))

RELEASE B2

TRANSFER 0.9,L2,L1

   

L2 QUEUE 1

SEIZE B3

DEPART 1

ADVANCE (EXPONENTIAL(1,0,10))

RELEASE B3

TRANSFER 0.9,L4,L3

L4 TERMINATE 1

START 1000

 

Занесём данный текст в программу GPSS WORLD и получим стандартный отчёт.

В отчете собираются следующие статистические данные:

- START TIME – начальное значение времени моделирования;

- END TIME – конечное значение времени моделирование;

- BLOCKS – число блоков, использованных при моделировании;

- FACILITIES – число устройств, использованных при моделировании;

- STORAGE – число многоканальных устройств, использованных при моделировании.

Информация об устройствах содержит следующие колонки:

- FACILITY - имя устройства;

- ENTRIES - количество транзактов, входивших в устройство;

- UTIL. - коэффициент загрузки устройства;

- AVE.TIME - среднее время пребывания транзакта в устройстве;

- AVAILABLE - состояние устройства в момент окончания моделирования (1 - устройство доступно, 0 - недоступно);

- OWNER - номер последнего транзакта, вошедшего в устройство;

- PEND - количество транзактов, ожидающих выхода устройства из режима прерывания;

- INTER - количество транзактов, пребывание которых в устройстве было прервано;

- RETRY - количество транзактов, ожидающих каких-либо условий, зависящих от состояния данного устройства;

- DELAY - количество транзактов, ожидающих возможности входа в устройство (обычно это транзакты, находящиеся в очереди);

Информация об очередях содержит следующие колонки:

- QUEUE - имя очереди;

- MAX - максимальная длина очереди (т.е. количество транзактов в ней) за время моделирования;

- CONT.- длина очереди в момент окончания моделирования;

- ENTRIES - количество транзактов, входивших в очередь;

- ENTRIES(0) - количество транзактов, которым не потребовалось ждать в данной очереди (нулевые входы);

- AVE.CONT.- средняя длина очереди;

- AVE.TIME - среднее время пребывания транзактов в очереди;

- AVE.(-0) - среднее время пребывания транзактов в очереди без учета нулевых входов (т.е. без учета транзактов с нулевым временем пребывания в очереди);

- RETRY - количество транзактов, ожидающих каких-либо условий, зависящих от состояния данной очереди.


Проектирование системы

 

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

С ростом объёма программы становится невозможным удерживать в памяти все детали, и становится необходимым структурировать информацию, выделять главное и отбрасывать несущественное. Этот процесс называется повышением степени абстракции программы.

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

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

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

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

- Класс FuncStandart содержит описание всех стандартных функций, определённых языком имитационного моделирования GPSS.

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

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

- Класс GPSSText описывает сгенерированный текст языка имитационного моделирования GPSS. Во-первых, метод класса Matrix, выводит на консоль запрос об операторах узлов, содержащихся в имитационной модели и о движении транзакта по соответствующим узлам. В зависимости от полученных данных генерируется матрица переходов. Во-вторых, в методе Programma, по матрице переходов совершается соответствующий вызов метода классаGPSSOperatori. В конечном итоге, результат работы программы записывается в файл GPSStext.txt. Этот файл содержит окончательно сгенерированный текст программы на языке имитациооного моделирования GPSS.

Идея классов является основой объектно-ориентированного программирования.

Основными свойствами ООП является инкапсуляция, наследование и полиморфизм.

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

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

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

В нашей программе используется первые два свойства ООП.

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

Представим иерархию классовнашей программы (рисунок 3.1)

 

 

 


Рисунок 3.1


РЕАЛИЗАЦИЯ СИСТЕМЫ

 

Как ранее уже описывалось, программа состоит из трёх классов:

- Класс FuncStandart содержит описание всех стандартных функций, определённых языком имитационного моделирования GPSS.

- Класс GPSSOperatori содержит описание операторов языка имитационного моделирования GPSS.

- Класс GPSSText описывает сгенерированный текст языка имитационного моделирования GPSS.

 

Класс FuncStandart

-

- Метод stringfBETA() задает параметры функцииBETA(Stream,Min,Max,Shape1,Shape2) и возвращает строку содержащую описание этой функции с уже заданными пользователем параметрами.

- Метод stringfBINOMIAL()задает параметры функции BINOMIAL(Stream,TrialCount,Probability) и возвращает строку содержащую описание этой функции с уже заданными пользователем параметрами.

- Метод stringfDUNIFORM()задает параметры функции DUNIFORM(Stream,Min,Max) и возвращает строку содержащую описание этой функции с уже заданными пользователем параметрами.

- Метод stringf_1() задает параметры функций EXPONENTIAL(Stream,Locate,Scale), EXTVALA(Stream,Locate,Scale), EXTVALB(Stream,Locate,Scale), LAPLACE(Stream,Locate,Scale), LOGISTIC(Stream,Locate,Scale)и возвращает строку содержащую описание этих параметров с уже заданными пользователем значениями.

- Методstring f_2() задаетпараметрыфункцийGAMMA(Stream,Locate,Scale,Shape), INVGAUSS(Stream,Locate,Scale,Shape), INVWEIBULL(Stream,Locate,Scale,Shape), OGLAPLACE(Stream,Locate,Scale,Shape), LOGLOGIS(Stream,Locate,Scale,Shape),LOGNORMAL(Stream,Locate,Scale,Shape),PEARSON5(Stream,Locate,Scale,Shape),WEIBULL(Stream,Locate,Scale,Shape)ивозвращаетстрокусодержащуюописаниеэтихпараметровсужезаданнымипользователемзначениями.

- Метод stringfGEOMETRIC()задает параметры функции GEOMETRIC(Stream,Probability) и возвращает строку содержащую описание этой функции с уже заданными пользователем параметрами.

- Метод stringfNEGBINOM()задает параметры функции NEGBINOM(Stream,SuccessCount,Probability) и возвращает строку содержащую описание этой функции с уже заданными пользователем параметрами.

- Метод stringfNORMAL()задает параметры функции NORMAL(Stream,Mean,StdDev) и возвращает строку содержащую описание этой функции с уже заданными пользователем параметрами.

- Метод stringfPARETO()задает параметры функции PARETO(Stream,Locate,Scale) и возвращает строку содержащую описание этой функции с уже заданными пользователем параметрами.

- Метод string fPEARSON6()задает параметры функции PEARSON6(Stream,Locate,Scale,Shape1,Shape2) и возвращает строку содержащую описание этой функции с уже заданными пользователем параметрами.

- Метод stringfPOISSON()задает параметры функции POISSON(Stream,Mean) и возвращает строку содержащую описание этой функции с уже заданными пользователем параметрами.

- Метод stringfTRIANGULAR()задает параметры функции

- TRIANGULAR(Stream,Min,Max,Mode) и возвращает строку содержащую описание этой функции с уже заданными пользователем параметрами.

- Метод stringfUNIFORM() задает параметры функции UNIFORM(Stream,Min,Max) и возвращает строку содержащую описание этой функции с уже заданными пользователем параметрами.

 

Класс GPSSOperatori

 

- Описываются переменные целого типа nF, nST, nFas, nQ, ответственные за номер используемой функции, номер многоканального устройства, номер одноканального устройства, номер очереди соответственно.

- МетодGENERATE задаёт параметры оператора GENERATE и возвращает строковое значение этого оператора с заданными пользователем значениями параметров.

На первом этапе определяется промежуток времени между появлениями транзактов. Он может быть: постоянным, случайным, заданным функцией, зависящим от функции, а также не задан.

При промежутке времени между появлениями транзактов заданном функцией или зависящем от функции, определяется, какой будет функция: стандартной или пользовательской, в зависимости от этого вызываются функцииFStandи FUNCTIONсоответственно.

На втором этапе определяется время задержки появления первого транзакта. Оно может быть: задано или не задано.

На третьем этапе определяется предельное число транзактов.Оно так же может быть: задано или не задано.

На четвёртом этапе определяется приоритет транзактов. Он может быть: задан или не задан.

- Метод ADVANCE задаёт параметры оператора ADVANCE и возвращает строковое значение этого оператора с заданными пользователем значениями параметров.

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

При времени задержки транзакта заданном функцией или зависящем от функции, определяется, какой будет функция: стандартной или пользовательской, в зависимости от этого вызываются функцииFStandи FUNCTIONсоответственно.

- Метод ENTER возвращает строку содержащую операторы языка имитационного моделирования GPSS, описывающие многоканальное устройство.

На первом этапе в файл GPSStext.txt (файл для записи сгенерированного текста программы на языке имитационного моделирования GPSS) записывается описание многоканального устройства, то есть его имя и количество каналов.

На втором этапе определяется, на каком шаге программы пользователь желает получить статистику: нахождение транзакта в очереди перед ОУ, нахождение транзакта в ОУ, общее время обработки транзакта, а также возможен вариант без сбора статистики.

На третьем этапе записывается оператор захвата многоканального устройства с названием этого устройства и количеством захвачиваемых каналов.

На четвёртом этапе происходит переход на генерацию текста оператора ADVANCE.

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

- Метод SIZE возвращает строку содержащую операторы языка имитационного моделирования GPSS, описывающие одноканальное устройство.

На первом этапе определяется, на каком шаге программы пользователь желает получить статистику: нахождение транзакта в очереди перед ОУ, нахождение транзакта в ОУ, общее время обработки транзакта, а также возможен вариант без сбора статистики.

На втором этапе записывается оператор захвата одноканального устройства с названием этого устройства.

На третьем этапе происходит переход на генерацию текста оператора ADVANCE.

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

- Метод FUNCTION задаёт параметры оператора FUNCTION и возвращает строковое значение этого оператора с заданными пользователем значениями параметров.

В файл GPSStext.txtна первом этапе записывается номер генератора случайного числа; на втором этапе тип функции; на третьем число точек и их координаты.

- Метод Fstandartопределяет, какая стандартная функция будут вызываться, то есть обращается в класс FuncStandart, и возвращает строку, содержащую описание этой функции.

 

Класс GPSSText

 

- Переменные oper, ukazat, matrix типа vectorнаходящиеся в области private,определяют операторы принадлежащие узлам, указатели на узлы, матрицу переходов от одного узла к другому соответственно.

- Метод Matrix генерирует матрицу переходов от одного узла к другому, а также определяет, какие операторы принадлежат узлам.

На первом этапе определяется оператор на соответствующем узле.

На втором этапе в соответствии с номером узла, определяется, какая строка будет генерироваться в матрице.

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

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

Если узел является терминатором, то в соответствующую строку записываются все нули.

Причем, при каждом описании узла, в вектор operзаписывается оператор, соответствующий узлу.

- Метод Programma окончательно генерирует текст программы, написанной на языке имитационного моделирования GPSS.

На первом этапе вызывается метод Matrix, который заполняет матрицу переходов и вектор операторов.

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

На третьем генерируется программа в соответствии с матрицей, операторами и указателями.

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

 



Поделиться:


Последнее изменение этой страницы: 2020-03-02; просмотров: 172; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.147.65.65 (0.077 с.)