рефераты

рефераты

 
 
рефераты рефераты

Меню

Реферат: Моделирование на GPSS рефераты

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

      приводится к исходному состоянию,  как перед первым прогоном. Уста-

      навливаются в ноль сохраняемые величины и матрицы, что следует учи-

      тывать  при  использовании этих объектов для хранения исходных дан-

      ных.  Исключение составляют генераторы случайных чисел,  которые не

      возвращаются  к своим начальным значениям,  что позволяет повторить

      прогон модели на новой последовательности случайных чисел. Оператор

      не имеет операндов.

           Оператор CLEAR используется обычно для организации  нескольких

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

      чисел.  Перед повторением прогона можно при необходимости переопре-

      делить отдельные объекты модели,  например  емкости  многоканальных

      устройств.

           Пусть, например,  требуется повторить прогон модели, приведен-

      ной на рис.  17, три раза при емкости МКУ, равной 1, 2 и 3. Это мо-

      жет быть выполнено так,  как показано  на  рис.  20.  После  каждой

      очистки  модели оператором CLEAR оператор STORAGE устанавливает но-

      вое значение емкости МКУ с именем STO2.

  

         Оператор END  (закончить)  завершает  сеанс  0работы с GPSS/PC и

      возвращает управление в операционную  систему.  Оператор  не  имеет

      операндов.

        STO2   STORAGE     1

        EXP    FUNCTION    RN1,C24

        0,0/.1,.104/.2,.222/.3,.355/.4,.509/.5,.69/.6,.915

        .7,1.2/.75,1.38/.8,1.6/.84,1.85/.88,2.12/.9,2.3

        .92,2.52/.94,2.81/.95,2.99/.96,3.2/.97,3.5/.98,3.9

        .99,4.6/.995,5.3/.998,6.2/.999,7/.9998,8

                GENERATE    100,FN$EXP

                GATE SNF    STO2,WAIT

         ENT1   ENTER       STO2

                ADVANCE     160,FN$EXP

                LEAVE       STO2

                UNLINK      BUFER,ENT1,1

                TERMINATE   1

         WAIT   LINK        BUFER,FIFO

                START       10000

                CLEAR

         STO2   STORAGE     2

                START       10000

                CLEAR

         STO2   STORAGE     3

                START       10000

                              Рис. 20

           Как правило,  управляющие операторы не включаются  в  исходную

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

      непосредственно с клавиатуры ПК.


         4. НЕКОТОРЫЕ ПРИЕМЫ КОНСТРУИРОВАНИЯ GPSS-МОДЕЛЕЙ

                     4.1. Косвенная адресация

     В рассматривавшихся до сих пор примерах моделей ссылки на раз-

личные  объекты  GPSS/PC  производились  исключительно по данным им

произвольным именам.  Такая адресация объектов удобна,  когда  речь

идет о небольшом числе объектов каждого типа.  Если же число объек-

тов некоторого типа велико, то во избежание пропорционального роста

количества  блоков  в модели используют ссылки на эти объекты по их

номерам с использованием так называемой косвенной адресации.

     Идея косвенной  адресации заключается в том,  что каждый тран-

закт в некотором своем параметре содержит номер того или иного объ-

екта, а в полях блоков, адресующихся к объектам, записывается ссыл-

ка на этот параметр транзакта. Проиллюстрируем применение косвенной

адресации на примере следующей модели.

        EXP    FUNCTION    RN1,C24

        0,0/.1,.104/.2,.222/.3,.355/.4,.509/.5,.69/.6,.915

        .7,1.2/.75,1.38/.8,1.6/.84,1.85/.88,2.12/.9,2.3

        .92,2.52/.94,2.81/.95,2.99/.96,3.2/.97,3.5/.98,3.9

        .99,4.6/.995,5.3/.998,6.2/.999,7/.9998,8

         CLASS  FUNCTION    RN1,D3

        .333,1/.667,2/1,3

         MEAN   FUNCTION    P$TYPE,L3

        1,70/2,80/3,90

         PRIOT  VARIABLE    4-P$TYPE

         STO2   STORAGE     2

         WTIME  QTABLE      LINE,50,50,10

         TTIME  TABLE       M1,100,100,12

                GENERATE    100,FN$EXP

                ASSIGN      TYPE,FN$CLASS

                PRIORITY    V$PRIOT

                QUEUE       LINE

                QUEUE       P$TYPE

                ENTER       STO2

                DEPART      P$TYPE

                DEPART      LINE

                ADVANCE     FN$MEAN,FN$EXP

                LEAVE       STO2

                TABULATE    TTIME

                TERMINATE   1

                              Рис. 21

     Пусть на вход моделируемой многоканальной СМО с двумя каналами

обслуживания поступает пуассоновский поток заявок со средним интер-

валом поступления 100 единиц модельного времени.  Каждая  заявка  с

равной вероятностью  1/3 относится к одному из трех классов:  1,  2

или 3,  а среднее время обслуживания заявок каждого типа составляет

соответственно  70,  80 и 90 единиц модельного времени.  Чем меньше

среднее время обслуживания заявки, тем выше ее приоритет. Необходи-

мо  построить модель,  позволяющую оценить средние значения времени

ожидания заявок каждого типа,  а также распределения общего времени

ожидания в очереди и общего времени пребывания в системе. Такая мо-

дель имеет вид, показанный на рис. 21.

     Переменная PRIOT  служит  для  вычисления приоритета транзакта

как функции его класса,  содержащегося в параметре с  именем  TYPE.

Транзакты класса 1 (P$TYPE=1) получат приоритет 3, транзакты класса

2 - приоритет 2 и транзакты класса 3 - приоритет 1.

     В блоке  ASSIGN  в параметр TYPE транзактов записывается класс

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

PRIORITY с помощью переменной PRIOT определяется приоритет транзак-

тов, первоначально равный 0 (отсутствует поле E в блоке GENERATE).

     Далее каждый транзакт "отмечается" в блоках QUEUE в двух  оче-

редях.  Очередь  с  именем  LINE является общей для транзактов всех

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

ди с номером 1, 2 или 3 в зависимости от класса заявки, записанного

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

в блоках DEPART.  Таким образом,  в модели создается четыре объекта

типа "очередь":  одна очередь с именем LINE и три с номерами 1, 2 и

3.  При  этом  три  последние  очереди создаются одной парой блоков

QUEUE-DEPART! В этом и заключается эффект косвенной адресации.

     Как уже отмечалось ранее,  каждому имени объекта симулятор сам

ставит в соответствие некоторый номер. При ссылках на объекты одно-

го  и того же типа одновременно по именам и номерам,  как это имеет

место в рассматриваемом примере,  существует опасность параллельной

адресации к одному и тому же объекту вместо двух разных или, наобо-

рот,  к двум разным объектам вместо одного.  Так, в рассматриваемой

модели мы, вообще говоря, не знаем, какой именно номер поставит си-

мулятор в соответствие имени очереди LINE. Если этот номер будет от

1 до 3,  то это приведет к ошибке, так как в модели окажется не че-

тыре очереди, а три, причем в одну из них будет заноситься информа-

ция как обо всех транзактах, так и дополнительно о транзактах одно-

го из трех классов. Как избежать такой ситуации?

     К счастью,  в большинстве случаев об этом можно не заботиться,

поскольку симулятор ставит в соответствие именам объектов достаточ-

но  большие  номера,  начиная  с 10000.  При необходимости же можно

воспользоваться оператором EQU,  о котором уже говорилось  выше,  и

самостоятельно сопоставить имени объекта желаемый номер.  Например,

в рассматриваемой модели для того, чтобы очередь с именем LINE име-

ла номер 4, достаточно записать оператор:

                         LINE    EQU    4

               4.2. Обработка одновременных событий

     Так как модельное время в GPSS  целочисленно,  то  оказывается

вполне  вероятным одновременное наступление двух или более событий,

причем вероятность этого тем больше,  чем крупнее выбранная единица

модельного  времени.  В некоторых случаях одновременное наступление

нескольких событий,  или так называемый временной узел,  может  су-

щественно нарушить логику модели.

     Рассмотрим, например,  еще раз модель на рис.  14. Здесь может

образоваться временной узел между событиями "поступление  транзакта

на  вход  модели"  и  "завершение  обслуживания  в  МКУ".  Если не-

посредственно перед завершением обслуживания были заняты оба канала

МКУ,  то  обработка  временного  узла зависит от последовательности

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

     Предположим, что первым в списке расположен транзакт, освобож-

дающий канал МКУ. Тогда вначале будет обработан этот транзакт, т.е.

событие  "завершение обслуживания в МКУ",  причем условие "МКУ STO2

не заполнено", проверяемое в блоке GATE, станет истинным. Затем бу-

дет обработан транзакт,  поступивший на вход модели,  в блок GATE с

именем ENT1,  из блока GENERATE или из блока TRANSFER в безусловном

режиме. При этом транзакт будет впущен в блок ENTER, и МКУ в тот же

момент модельного времени снова окажется заполненным.  Такая ситуа-

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

     Предположим теперь, что первым в списке текущих событий распо-

ложен  транзакт,  поступающий на вход модели.  Так как условие "МКУ

STO2 не заполнено" ложно,  то блок GATE направит  этот  транзакт  в

блок с именем REFUS. Таким образом, в модели будет зафиксирован от-

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

обработки транзакта, освобождающего канал, МКУ станет доступным.

     Порядок расположения транзактов, соответствующих рассматривае-

мым событиям, в списке текущих событий случаен, и в среднем в поло-

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

В результате статистика, связанная с отказами, окажется искаженной.

     Для правильной обработки временного узла надо обеспечить такой

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

транзакт, освобождающий МКУ, всегда располагался первым. Этого мож-

но добиться, управляя приоритетами транзактов (рис. 22).

         STO2   STORAGE     2

         EXP    FUNCTION    RN1,C24

        0,0/.1,.104/.2,.222/.3,.355/.4,.509/.5,.69/.6,.915

        .7,1.2/.75,1.38/.8,1.6/.84,1.85/.88,2.12/.9,2.3

        .92,2.52/.94,2.81/.95,2.99/.96,3.2/.97,3.5/.98,3.9

        .99,4.6/.995,5.3/.998,6.2/.999,7/.9998,8

                GENERATE    100,FN$EXP

         ENT1   GATE SNF    STO2,REFUS

                ENTER       STO2

                PRIORITY    1

                ADVANCE     160,FN$EXP

                LEAVE       STO2

                TERMINATE   1

         REFUS  TRANSFER    .1,,OUT

                ADVANCE     250,FN$EXP

                TRANSFER    ,ENT1

         OUT    TERMINATE   1

                              Рис. 22

     Транзакты, поступающие в модель через блок GENERATE, имеют ну-

левой приоритет. Такой же приоритет имеют транзакты, получившие от-

каз в обслуживании, направленные в блок с именем REFUS и затем пов-

торно поступающие в блок с именем ENT1. Те же транзакты, что посту-

пают на обслуживание,  повышают приоритет до 1 в блоке PRIORITY,  и

после выхода из блока ADVANCE  возвращаются  из  списка  будущих  в

список текущих событий,  располагаясь в начале списка.  Таким обра-

зом, нужный порядок транзактов обеспечивается, и временной узел бу-

дет обработан правильно.

     Опасность неверной обработки временных  узлов  характерна  для

моделей со списками пользователя. Рассмотрим, например, еще раз мо-

дель на рис. 18. Здесь также возможен временной узел между события-

ми "приход транзакта" и "завершение обслуживания транзакта".

     Пусть первым в списке текущих событий располагается вновь при-

шедший транзакт. Так как устройство с именем SYSTEM занято, то блок

GATE направит этот транзакт в блок LINK, и он будет введен в список

пользователя с именем LINE.  Затем будет обработан транзакт,  осво-

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

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

событий,  где тот продвинется  в  блок  SEIZE,  занимая  устройство

SYSTEM.

     Если же первым в списке текущих  событий  располагается  тран-

закт,  освобождающий устройство,  то он выведет первый из ожидающих

транзактов из списка пользователя в список текущих событий, где тот

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

обработан вновь пришедший транзакт, который пройдет через блок GATE

и займет устройство "без очереди".  Транзакт-очередник, который был

выведен из списка пользователя,  "застрянет" перед блоком  SEIZE  и

после  очередного  освобождения устройства займет его,  нарушая,  в

свою очередь, логику работы модели.

     Проведенный анализ  показывает,  что  для правильной обработки

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

транзактов  в списке текущих событий,  чтобы первым всегда распола-

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

но добиться, используя блок PRIORITY с операндом BU (рис. 23).

     Перед освобождением  устройства  обслуженный транзакт проходит

через блок PRIORITY,  который,  оставляя неизменным приоритет тран-

закта PR,  переводит его в конец списка текущих событий.  При новом

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

тываться вновь поступивший транзакт. Так как устройство еще занято,

он направляется блоком GATE в список  пользователя.  При  повторной

обработке обслуженного транзакта тот освобождает устройство и выво-

дит очередной транзакт из списка пользователя.  Таким образом, пра-

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

        EXP    FUNCTION    RN1,C24

        0,0/.1,.104/.2,.222/.3,.355/.4,.509/.5,.69/.6,.915

        .7,1.2/.75,1.38/.8,1.6/.84,1.85/.88,2.12/.9,2.3

        .92,2.52/.94,2.81/.95,2.99/.96,3.2/.97,3.5/.98,3.9

        .99,4.6/.995,5.3/.998,6.2/.999,7/.9998,8

                GENERATE    100,FN$EXP

                ASSIGN      TSRV,80,EXP

                GATE NU     SYSTEM,WAIT

         SFAC   SEIZE       SYSTEM

                ADVANCE     P$TSRV

                PRIORITY    PR,BU

                RELEASE     SYSTEM

                UNLINK      LINE,SFAC,1

                TERMINATE   1

         WAIT   LINK        LINE,P$TSRV

                              Рис. 23

         5. КОМАНДЫ GPSS/PC И ТЕХНОЛОГИЯ РАБОТЫ С ПАКЕТОМ

                5.1. Загрузка интегрированной среды

     Пакет GPSS/PC  включает  в  себя  два основных модуля:  модуль

GPSSPC.EXE,  представляющий интегрированную среду, в которой произ-

водится ввод, редактирование, отладка и выполнение модели, и модуль

GPSSREPT.EXE,  предназначенный для  получения  стандартного  отчета

GPSS/PC. Загрузка обоих модулей производится обычным образом из ко-

мандной строки MS DOS или из программы-оболочки Norton Commander.

     После загрузки  интегрированной  среды  на  экране  появляется

"заставка" с названием пакета:  начинается так называемый сеанс ра-

боты с GPSS/PC.  Затем заставка гасится, и появляется экран, разде-

ленный на две части:  большая верхняя часть содержит так называемое

окно данных,  меньшая нижняя часть - окно команд. Окно данных в на-

чальный момент пусто,  в окне команд  в  верхней  командной  строке

высвечен  символ  "приглашения"  >,  сигнализирующий о готовности

системы принимать команды.

                      5.2. Ввод новой модели

     Если исходная программа с моделью еще не введена и не записана

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

командную строку. Сначала вводится номер строки очередного операто-

ра и нажимается клавиша Пробел. Курсор автоматически перемещается к

началу следующего поля - поля имени, и в позиции курсора высвечива-

ется  символ  L ,  сигнализирующий о том,  что вы находитесь в поле

имени (LABEL - метка).  Если оператор имеет имя,  необходимо ввести

его и нажать клавишу Пробел, в противном случае - сразу нажать кла-

вишу Пробел.  В любом случае курсор переходит к  началу  следующего

поля - поля операции,  о чем сигнализирует символ V (VERB - глагол)

в позиции курсора.  Необходимо ввести название оператора  и  нажать

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

не обязательно вводить полностью:  как только транслятор распознает

оператор по нескольким первым буквам, он после нажатия клавиши Про-

бел сам дополнит его до полного названия.

     При синтаксической  ошибке  в  операторе под командной строкой

Страницы: 1, 2, 3, 4, 5, 6, 7, 8