Улан-Удэ

Федеральное агентство по образованию

ВОСТОЧНО-СИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ

Институт экономики и права

Кафедра «Макроэкономика, экономическая информатика и статистика»

«ИМИТАЦИОННОЕ МОДЕЛИРОВАНИЕ

ЭКОНОМИЧЕСКИХ ПРОЦЕССОВ

На языке GPSS»

Теоретическая часть

Составитель

А.Л. Хилтухин

Издательство ВСГТУ

Улан-Удэ


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

Система GPSS/PC предназначена для имитационного моделирования сложных дискретных систем.

Имитационное моделирование обеспечивает возможность испытания, оценки и проведения экспериментов с предлагаемой системой без каких-либо непосредственных воздействий на нее. При имитационном моделировании проводится эксперимент с программой, которая является моделью системы. Несколько часов, недель или лет работы исследуемой системы могут быть промоделированы на ЭВМ за несколько минут. В большинстве случаев модель является не точным аналогом системы, а скорее ее символическим изображением. Однако такая модель позволяет производить измерения, которые невозможно произвести каким-либо другим способом.

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


ОГЛАВЛЕНИЕ

1. "Внесение транзактов в модель. Блок GЕNЕRАТЕ (ГЕНЕРИРОВАТЬ)". 4

2. "Строки, соответствующие блокам GPSS". 8

3. "Удаление транзактов из модели. Блок ТЕRМINАТЕ (ЗАВЕРШИТЬ)". 9

4. "Элементы, символизирующие обслуживающие приборы". 12

5. "Занятие свободных приборов. 13

Блоки SЕIZЕ (ЗАНЯТЬ) и RELEASE (ОСВОБОДИТЬ)". 13

6. "Реализация задержки во времени. Блок АDVANСЕ (ЗАДЕРЖАТЬ)". 15

7. "Ожидание обслуживания: где при каких условиях происходит ожидание транзакта" 17

8. "Сбор статистики при ожидании. Блоки QUEUE (СТАТЬ В ОЧЕРЕДЬ) и DЕРАRТ (ПОКИНУТЬ ОЧЕРЕДЬ)" 18

9. "Логика работы интерпретатора". 27

10. "Переход транзактов в блок, отличный от последующего. Блок ТRАNSFЕR (ПЕРЕДАТЬ)" 29

11. "Моделирование многоканальных устройств". 31

12. "Использование параллельно работающих каналов. Блоки ЕNТЕR (ВОЙТИ) и LEAVE (ВЫЙТИ)" 31

13. "Многоканальная система массового обслуживания с очередью". 34

14. "Управляющие карты GPSS. Карта RESET (СБРОСИТЬ)". 37

15. "Описание стандартов для записи примеров моделирования". 39

СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ... 41


1. "Внесение транзактов в модель. Блок GЕNЕRАТЕ (ГЕНЕРИРОВАТЬ)"

GENERATE - это блок, через который транзакты входят в модель. Не существует ограничений на число различных блоков GЕNЕRАТЕ в одной модели. Интервал времени между последовательными появлениями транзактов блока GENERAТЕ называют интервалом поступления.

Способ реализации прихода транзактов в модель GPSS является идентичным тому способу, который изложен в модели при писании процесса прихода заявок. Это означает, что когда транзакт входит в модель через блок GENERАТЕ, интерпретатор планирует время поступления последователя транзакта путем розыгрыша случайного числа в соответствии с распределением интервалов времени поступления с последующим добавлением разыгранного значения к текущему значению таймера. При достижении этого значения времени следующий транзакт вводится в модель через блок GENERАТЕ и т. д.

В системе обслуживания разработчик должен был построить логическую схему, необходимую для реализации процедуры планирования. При использовании GPSS интерпретатор автоматически выполняет требуемые шаги для реализации блока GENERАТЕ. Это дает возможность разработчику уделить больше внимания тем деталям моделирования, которые вызывают у него наибольшие трудности.

Все разработчики должны задавать спецификацию распределения интервалов времени поступления в блоке GENERАТЕ. Информация, необходимая для данного блока, задается операндами А и В. Все возможные виды распределения интервалов времени прибытия в GPSS делят на равномерно распределенные и все другие виды распределения.

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

Блок GENERАТЕ вместе с операндами А и В изображен на рис. 1.1.


Рис. 1.1

Блок GENERATE (ГЕНЕРИРОВАТЬ) с операндами А и В:
Операнд Значение Значение по умолчанию
А Средний интервал времени Ноль
В Половина поля допуска равномерно распределенного интервала Ноль

Операнд А определяет среднее время между последовательными приходами транзактов в блоке GENERАТЕ.

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


Рис. 1.2. Блок GENERATE (ГЕНЕРИРОВАТЬ)
с конкретными значениями операндов А и В.

На рис. 1.2 показан пример использования блока GENERАТЕ. Операндами А и В являются соответственно 5 и 3. Интервалом времени прибытия, таким образом, является случайное число со средним значением, равным 5, и полем допуска, равным 6, т. е. интервал прихода может быть выражен целыми числами 2, 3, 4, 5, 6, 7 и 8.

Напомним, что таймер GPSS регистрирует только целые значения, поэтому транзакты могут быть внесены в модель только в целые значения моментов времени. Это объясняет, почему запись 5 - 3 описывает замкнутый интервал целых значений от 2 до 8, а не непрерывный интервал между 2 и 8.

В данном примере интервалы прихода заявок могут принимать только одно из семи различных значений. Поскольку значения распределены равномерно, каждое из чисел может появляться с относительной частотой 1/7.

Для иллюстрации планирования событий предположим, что транзакт входит в блок GENERАТЕ, представленный на рис.1.2, в момент модельного времени 15. После того, как этот транзакт попадет в следующий блок модели, интерпретатор GPSS разыграет случайное значение времени из распределения интервалов времени, равного 5-3.Пусть разыгранным значением является число 7. Тогда интерпретатор планирует приход следующего транзакта в блок GENERАТЕ в момент времени 15 + 7,или 22. В момент, когда этот транзакт появляется в блоке GENERАТЕ и идет к следующему блоку, планируется время прихода его последователя. Эта техника аналогична той, которую использовали для планирования прихода заявок в системе обслуживания с одним прибором и очередью.

Операнды А и В в блоке GENERАТЕ не обязательно должны быть заданы. Когда одно (или оба) из этих значений не указано, по умолчанию предполагается нулевое значение.


Рис. 1.3. Блок GЕNERАТЕ с заданием по умолчанию операнда В.

На рис. 1.3 показано, как может быть задано значение операнда В для блока GENERАТЕ по умолчанию. Операнд А равен 10. Поскольку для В предполагается нулевое значение, то интервалы времени распределены равномерно в соответствии с записью 10 - О. Иначе говоря, интервал времени прихода равен в точности 10. Это пример того, как может быть задано детерминированное (т.е. неслучайное) значение интервалов времени.

Теперь мы рассмотрим еще три дополнительных операнда. Они показаны в табл. 1.1.

Таблица 1.1. Значения операндов С, D и Е блока GENERАТЕ.

Значения операндов C, D, и E блока GENERATE
Операнд Значение Значение по умолчанию
C Смещение интервалов Смещение отсутствует
D Ограничитель Бесконечность
E Уровень приоритета Ноль

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

Когда операнд С не используется, все приходы в блок GENERАТЕ определяются операндами А и В.

Операнд D задает граничное значение общего числа транзактов, которые могут войти в модель через данный блок GENERАТЕ в течение времени моделирования. Когда это число достигнуто, данный блок GENERАТЕ перестанет быть активным. Если не определено граничное значение, блок GENERАТЕ остается активным в течение всего времени моделирования.

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

Всего при моделировании на GPSS существует 128 различных уровней приоритетов. Эти уровни задают с помощью чисел от 0 до 127. Чем больше число, тем выше приоритет. Следовательно, наименьшим приоритетом является ноль. Как показано в табл. 1.1, транзакту присваивается именно этот наименьший приоритет, если в блоке GENERАТЕ не используется в явном виде операнд Е.

На рис. 1.4 показаны примеры блоков GENERАТЕ, в которых значения операндов С, В и Е указаны в явном виде. На рис.1.4,а моментом первого прихода является значение 10. После этого интервалы времени прибытия находят из равномерного распределения 3-3, иначе говоря, от 0 до 6 включительно. Однако только первые пять транзактов должны войти в модель через этот блок GENERАТЕ.

Рис. 1.4. Дополнительные примеры блока GENERATE:

а - с операндами A-D; б - с заданными операндами А и С; в - с заданными значениями операндов А, В и Е.

На рис.1.4,б время первого прибытия задано числом 2.После этого приход новых транзактов будет осуществляться через каждые пять единиц времени.

2. "Строки, соответствующие блокам GPSS"

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

Таблица 2.1. Поля строк, в которые записывают информацию блоков.

Поля строк, в которые записывают информацию блоков
Информация блока  
Имя блока  
Операция  
Операнды  

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

Комментарии отделяются знаком «;» и не являются обязательным полем записи.

Рис. 2.2. Дополнительные примеры блока GENERATE:

а - с операндами A-D; б - с заданными операндами А и С; в - с заданными значениями операндов А, В и Е.

3. "Удаление транзактов из модели. Блок ТЕRМINАТЕ (ЗАВЕРШИТЬ)"

Транзакты удаляются из модели, попадая в блок ТЕRМINАТЕ (ЗАВЕРШИТЬ). Блоки ТЕRМINАТЕ всегда позволяют выйти всем транзактам, которые пытаются это сделать. В модели может быть любое число блоков ТЕRМINАТЕ.

Рис.3.1. Блок ТЕRМINАТЕ (ЗАВЕРШИТЬ) с операндом А.

На рис. 3.1 изображен блок ТЕRМINАТЕ с операндом А в обычной записи. Операнд А является указателем уменьшения счетчика завершений. Иначе говоря, он задает величину, которая должна вычитаться из специального счетчика, называемого счетчиком завершений, каждый раз, когда транзакт входит в блок ТЕRМINАТЕ. Если разработчик не желает задавать операнд А блока ТЕRМINАТЕ, то по умолчанию подразумевается значение О. Вход транзакта в такой блок ТЕRМINАТЕ не вызывает уменьшения содержания счетчика завершений.

Что же такое счетчик завершений? Эта такая ячейка памяти ЭВМ, которая хранит положительное целое значение, записанное в начале моделирования. В процессе моделирования транзакты попадают в блоки ТЕRМINАТЕ, и таким образом происходит уменьшение содержания счетчика. При достижении содержанием счетчика нуля моделирование завершается.

Обратите внимание на тот факт, что хотя в модели может быть много блоков ТЕRМINАТЕ, счетчик завершений только один. Это и есть тот самый счетчик завершений, из которого происходит вычитание при вхождении транзакта в любой блок ТЕRМINАТЕ. Как уже указывалось, счетчик завершений содержит заданное значение в начале моделирования.

Интерпретатор GPSS начинает моделирование, когда встречается управляющая карта SТАRТ (НАЧАТЬ) в перфокарточном варианте модели. Для определения начального значения счетчика завершения используется операнд А карты SТАRТ.

Слово SТАRТ записывается в поле операции строки. Рассмотрим теперь пример, в котором блок ТЕRМINАТЕ и карта SТАRТ используются для управления процессом моделирования.

Предположим, что разработчик выбрал в качестве единицы времени 1 мин. Он хочет промоделировать поведение системы в течение 8 ч, затем моделирование должно быть закончено.

Он сможет сделать это следующим образом.

1. В модель включают сегмент из двух блоков, изображенных на рис. 3.3.


Рис.3.3. Сегмент из двух блоков, обеспечивающих завершение моделирования в момент модельного времени, равный 480 (выполнение двух других условий подразумевается).

2. Во всех прочих блоках ТЕRМINАТЕ в модели подразумевается использование операнда А по умолчанию. Это означает, что завершение моделирования, определяемое счетчиком завершений, не будет зависеть от других блоков ТЕRМINАТЕ.

3. В карте SТАRТ в качестве операнда А должна быть использована единица.

Единичное значение операнда А карты SТАRТ вызывает запись в счетчик завершений интерпретатора единицы в качестве начального значения. В процессе моделирования завершения движений транзактов, которые происходят время от времени в других блоках ТЕRMINАТЕ, не оказывают воздействия на счетчик завершений. Следовательно, в момент модельного времени, равный 480, транзакт попадет в блок GЕNЕRАТЕ, изображенный на рис. 3.3. Он сразу же перейдет в следующий блок ТЕRМINАТЕ, вызывая тем самым подпрограмму ТЕRМINАТЕ. Поскольку операнд этого блока содержит единицу, то из счетчика завершений вычитается единица. Это уменьшает значение счетчика от единицы до нуля. В результате интерпретатор прекращает моделирование.

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

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

1. он вставляет в модель двухблочный сегмент, изображенный на рис. 3.4;


Рис.3.4. Другой вид сегмента из двух блоков, вызывающий завершение моделирования в момент времени, равный 480 (выполнение двух других условий подразумевается).

2. во всех прочих блоках ТЕRМINАТЕ модели подразумевается использование операнда А по умолчанию;

3. в качестве операнда А карты SТАRТ используется число 480.

Заметим, что в блоке GЕNЕRАТЕ (рис.3.4) в качестве интервала времени задана единица. Иначе говоря, транзакты появляются здесь в моменты времени 1, 2, 3, 4,..., 478, 479 и 480.Каждый из этих транзактов попадает в последующий блок ТЕRMINАТЕ, где из счетчика завершений вычитается единица при удалении транзакта. Когда в блок ТЕRMINАТЕ войдет 480-й транзакт, значение счетчика завершений уже будет равно единице. 480-й транзакт вызывает уменьшение его от единицы до нуля, и моделирование завершается.

Метод завершения моделирования, представленный в первом примере, является более предпочтительным, хотя в логическом смысле они равнозначны, так как последний пример требует 480 выполнений обработки блоков GENERАТЕ и ТЕRMINАТЕ. Так как обработка каждого блока требует времени ЭВМ, то последний пример по крайней мере в 480 раз дороже предыдущего. При втором способе завершения моделирования интерпретатор GPSS пройдет все фиксированные моменты времени, поскольку таймер должен принимать значения 1, 2, 3, 4,..., 478, 479 и 480 из-за того, что транзакты входят в модель через блок GENERATE, изображенный на рис.3.4. Это в значительной степени увеличивает число приращений значений времени к таймеру в процессе моделирования, что способствует еще большему увеличению времени моделирования.

4. "Элементы, символизирующие обслуживающие приборы"

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

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

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

1. Каждый прибор в любой момент времени может обслуживать только одно требование.
Если в процессе обслуживания появляется новое требование, то оно должно либо подождать своей очереди обслуживания, либо пойти куда-нибудь в другое место. Существует также третья возможность. Если новое требование является достаточно важным, оно может прервать протекающее обслуживание до его завершения. Такое средство прерывания также можно моделировать на GPSS.

2. Когда на прибор поступает требование в модели, надо пропустить время, необходимое для его обслуживания. Такое время называется временем обслуживания.

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

Если приборам присваивают числовые имена, числа должны быть положительными целыми. Наибольшим разрешенным номером является максимальное число приборов, допустимое в модели. Это число зависит от объема памяти, доступной этой модели. Например, в GPSS таким числом приборов при использовании памяти на 64К байт (т. е. 64 000 байт) является 35; при использовании 128К байт - 150; при использовании 256К байт - 300. Следовательно, при моделировании с памятью 64К, наибольший допустимый номер прибора не должен превышать 35.

5. "Занятие свободных приборов.

Блоки SЕIZЕ (ЗАНЯТЬ) и RELEASE (ОСВОБОДИТЬ)"

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

1. Ожидаем своей очереди, если это необходимо. Естественно, что ожидание требует некоторого интервала времени.

2. Когда подходит наша очередь, занимаем прибор. Событие "занятие прибора" происходит в некоторой точке времени.

3. Прибор остается в состоянии занятости, пока не закончится обслуживание. Для обслуживания требуется также некоторый интервал времени.

4. Когда обслуживание заканчивается, мы освобождаем прибор. Событие "освобождение прибора" также происходит в некоторой точке времени.

Подобная последовательность шагов выполняется и при моделировании использования прибора в GPSS. Реализация шагов 2 и 4 в GPSS будет рассмотрена нами сейчас; реализация шага 3 и возможности сбора статистики при выполнении шага 1 будут рассмотрены в следующих параграфах.

В GPSS элементами, которые требуют обслуживания, являются транзакты. Мы знаем, что для транзактов характерно перемещение по модели блок за блоком. Предположим, что в какой-то момент активности транзакт занимает прибор. Для этого транзакт входит (или пытается войти) в соответствующий блок, описывающий этот прибор. Блок должен обладать следующими свойствами:

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

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

Блок, который обладает этими свойствами, является блоком SEIZE (ЗАНЯТЬ). Этот блок вместе с операндом А показан на рис. 5.1.


Рис. 5.1.

Блок SEIZE (ЗАНЯТЬ) и его операнд А:
Операнд Значение Значение или результат по умолчанию
А Имя (символическое или числовое) занимаемого прибора Ошибка

Вход транзакта в блок SEIZЕ моделирует занятие прибора, вход того же транзакта в другой блок моделирует освобождение прибора. Назначением этого другого блока является изменение состояния ранее занятого прибора с "занято" в "незанято". Этим блоком является блок RELЕАSЕ (ОСВОБОДИТЬ), который с операндом А показан на рис. 5.2.


Рис. 5.2.

Блок RELEASE (ОСВОБОДИТЬ) и его операнд А:
Операнд Значение Значение или результат по умолчанию
А Имя (символическое или числовое) освобождаемого прибора Ошибка

Блок RELЕАSЕ никогда не запрещает вход транзакта. В то же время было бы не логично пытаться освободить свободный прибор. Если делается такая попытка, то интерпретатор GPSS печатает сообщение об ошибке и прекращает выполнение. Подобным же образом, если транзакт пытается освободить прибор, занятый другим транзактом, печатается сообщение об ошибке и прекращается моделирование.

При моделировании нет необходимости определять соответствующий прибор для интерпретатора GPSS перед тем, как использовать блок SEIZЕ. Тот факт, что блок SEIZЕ используется, вызывает установление факта существования данного прибора. Здесь можно напомнить, что когда мы обсуждали вопрос появления транзакта, ничего не было сказано о необходимости указания интерпретатору на его существование до тех пор, пока транзакт не входил в модель. Короче говоря, интерпретатор автоматически обеспечивает возникновение транзактов и приборов.

6. "Реализация задержки во времени. Блок АDVANСЕ (ЗАДЕРЖАТЬ)"

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

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

Было указано, что обслуживание длится некоторый период времени. В течение этого времени транзакт должен прекратить двигаться по модели. Только по истечении времени обслуживания он должен попасть, в блок RЕLЕАSЕ для освобождения прибора.

В GPSS существует блок АDVANCЕ (ЗАДЕРЖАТЬ) для реализации задержки продвижения транзакта в течение некоторого интервала времени. Обычно этот интервал задается случайной переменной. Опыт показывает, что время обслуживания обычно меняется от одного обслуживания к другому.

Информация, необходимая для описания соответствующего времени обслуживания и его распределения, задается операндами А и В блока АDVANCЕ.

Возможные варианты распределения времени обслуживания делятся на две категории: равномерное распределение интервала обслуживания; прочие распределения интервалов обслуживания.

Как и при использовании блока GENERАТЕ, особо рассматривается равномерное распределение. Применение более сложных видов распределения требует использования функций. Поскольку описание функций отложено, здесь мы будем рассматривать только равномерное распределение.

На рис. 6.1 показан блок АDVANСЕ вместе с операндами А и В. Как и ранее, операнд А используют для определения среднего времени, которое транзакт, входящий в блок, проведет в нем. Операнд В используют для указания половины поля допуска.


Рис. 6.1

Блок ADVANCE (ЗАДЕРЖАТЬ) операндами А и В:
Операнд Значение Значение или результат по умолчанию
А Задержка на время обслуживания Ноль
В Половина поля допуска равномерно распределенного интервала времени задержки Ноль

На рис.6.2 показан блок АDVANСЕ со значениями операндов А и В, равными 30 и 5 соответственно. Для каждого транзакта, входящего в этот блок, возможные значения интервалов времени находятся в пределах 25 - 35 включительно. Предположим, что транзакт входит в блок в момент времени, равный 134, а разыгранным значением из распределении 30 ± 5 является 31. Тогда транзакт будет оставаться в этом блоке до момента времени, равного 134 + 31, или 165. В этот момент интерпретатор попытается продвинуть его в следующий блок модели. Блок АDVANCE никогда не препятствует входу транзакта. Любое число транзактов может находиться в этом блоке одновременно. Когда транзакт попадает в такой блок, выполняется соответствующая подпрограмма и вычисляется время пребывания транзакта в нем. Вновь прибывший транзакт никак не влияет на уже находящийся в блоке транзакт.

Рис. 6.2.

7. "Ожидание обслуживания: где при каких условиях происходит ожидание транзакта"

В зависимости от значений операндов А и В блока АDVANСЕ может так случиться, что время пребывания транзакта в блоке окажется равным нулю. Например, в блоке АDVANСЕ 12,12 время пребывания в блоке, равное нулю, может возникать в 4% всех случаев. Когда это происходит, вместо задержки транзакта в блоке АDVANСЕ интерпретатор сразу же пытается переместить этот транзакт в следующий блок. Иногда, если это удобно, можно использовать блок АDVANCЕ в качестве "фиктивного" блока. Этого можно добиться, не указывая значения операндов блока. При этом обеспечивается нулевое значение задержки по умолчанию. Позднее мы рассмотрим ситуации, когда это необходимо сделать.

Классический случай использования последовательности SЕIZЕ - АDVANCЕ - RELЕАSЕ показан на рис.7.1.

Рис.7.1. Пример последовательности SЕIZЕ - АDVANСЕ - RЕLЕАSЕ
(ЗАНЯТЬ - ЗАДЕРЖАТЬ - ОСВОБОДИТЬ).

Транзакт, двигающийся по этой цепочке, займет устройство с символическим именем JОЕ, задержится там на 16-4 единицы времени и затем покинет его. После того, как транзакт войдет в блок RЕLЕАSЕ и соответствующая подпрограмма закончится, интерпретатор попытается продвинуть транзакт в следующий блок. Вполне возможно, что транзакт задерживается в блоке после того, как обработана подпрограмма.

Этот тип входа с оставлением транзакта в блоке является вынужденным; транзакт предпочитает двигаться дальше по модели, если этому не противоречат условия моделирования. Сравните эту ситуацию с добровольным пребыванием транзакта в блоке АDVANCЕ.

Ответ на второй вопрос касается дисциплины обслуживания очереди. Дисциплиной обслуживания очереди является правило, в соответствии с которым прибор выбирает на обслуживание следующий транзакт, если таких транзактов больше, чем один. В обычном режиме мы используем дисциплину обслуживания "первым пришел - первым обслужен". Тот, кто ждет дольше других, будет первым. Эту дисциплину обслуживания используют в GPSS по умолчанию.

На самом деле дисциплина обслуживания, используемая по умолчанию в GPSS, является более сложной, чем "первым пришел - первым обслужен"; ее реализуют только для транзактов одного класса приоритетов.

Транзакту присваивается некоторый приоритет. Уровень приоритета ожидающих транзактов автоматически учитывается интерпретатором при выборе на обслуживание. В примере, следующем далее (пример 2С), показано, как используют эту дисциплину обслуживания.

В момент, когда закончится обработка программы RЕLЕАSЕ, следующий транзакт попытается использовать устройство, называемое JОЕ.

Из рис. 7.1 вовсе не следует, что блоки АDVANCЕ можно располагать только после блоков SEIZЕ или они должны предшествовать блокам RELЕАSЕ. Блоки АDVANCЕ можно располагать в любых местах моделей. Выбор места зависит от логических условий моделирования.

8. "Сбор статистики при ожидании.
Блоки QUEUE (СТАТЬ В ОЧЕРЕДЬ) и DЕРАRТ (ПОКИНУТЬ ОЧЕРЕДЬ)"

Блоки QUEUE (СТАТЬ В ОЧЕРЕДЬ) и DЕРАRТ (ПОКИНУТЬ ОЧЕРЕДЬ) обеспечивают в GPSS возможность автоматического сбора статистических данных, описывающих вынужденное ожидание, которое может происходить время от времени в различных точках модели. В первой части этого параграфа описаны блоки, предназначенные для реализации такой возможности. Далее описаны редко используемые возможности этих блоков. В конце прокомментированы два неверных представления о процессе сбора статистики.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: