Использование операнда В в блоках QUEUE и DЕРАRТ.
В блоках QUEUE и DEРАRТ существует возможность использования операнда В. На рис. 8.3 повторен рис. 8.1, но с использованием операнда В. Операнд В указывает на какую величину должен быть модифицирован счетчик содержимого очереди. По умолчанию для этого операнда подразумевается значение 1.
Рис.8.3. Блоки QUEUE и DEPART с операндами А и В:
Операнд | Значение | Значение или результат по умолчанию |
А | Имя (символическое или числовое) очереди | Ошибка |
В | Число элементов, на которое должно измениться значение счетчика содеожимого очереди | Еденица |
На рис.8.2 именно это значение и используется. Лучше всего проследить влияние операнда В при рассмотрении поведения интерпретатора во время выполнения подпрограмм блоков QUEUE и DЕРАRТ. При выполнении подпрограммы QUEUE происходит следующее: Увеличивается значение счетчика входов сооветствующей очереди на число, равное значению операнда В. Увеличивается значение счетчика содержимого очереди на число, равное значению операнда В. Транзакту приписывается имя очереди. Транзакту приписывается текущее значение модельного времени. Пп. 3 и 4 были пояснены ранее. Пп. 1 и 2 показывают влияние использования операнда В на значение содержимого очереди. Очевидно, что если в блоке QUEUE использован операнд В, отличный от 1, то значение счетчика входов не будет равно числу транзактов, вошедших в этот блок. Подобным образом, содержимое очереди не будет совпадать с числом транзактов, которые привязаны к данной очереди. Например, когда транзакт переходит в блок "QUEUE LINE,2", то и счетчик входов и счетчик содержимого очереди, названной LINЕ, увеличивается на 2, но суммарное число транзактов, присоединившихся к очереди, увеличивается только на 1,и число транзактов, находящихся в очереди, также увеличивается на 1.
Рассмотрим теперь выполнение подпрограммы DЕРАRТ.
Значение счетчика содержимого очереди уменьшается на число, определяемое операндом В. Используя значение времени, приписанное транзакту при вхождении в блок QUEUE, определяют, является ли данный транзакт транзактом с нулевым вхождением.
Если транзакт вызвал нулевое вхождение в очередь, то счетчик нулевых вхождений увеличивается на число, определяемое операндом В блока DЕРАRТ. Связь транзакта, показывающая принадлежность к данной очереди, разрывается.
Для иллюстрации п. 2 предположим, что транзакт входит в блок "QUEUE QUEUE,5"
и что в то же значение модельного времени он проходит в блок "DЕРАRТ QUEUE,5". По определению транзакт вызывает нулевое вхождение в очередь. Следует помнить, что интерпретатор обрабатывает элементы информации очереди в единицах содержимого, а не в транзактах. Следовательно, в этом примере число нулевых вхождений в очередь увеличится на 5, а не на 1. В операндах В блоков QUEUE и DЕРАRТ
значения, отличные от 1, употребляются в специальном случае. Очевидно, что собираемые статистические данные должны соответствующим образом быть интерпретирозаны. При печатании таких данных, как число входов, максимальное и среднее содержимое, текущее содержимое, а также число нулевых вхождений делается ссылка не на число транзактов, а на число элементов содержимого. В заключение скажем, что существует однозначное точное соответствие между счетчиком содержимого очереди и числом транзактов, рассматриваемых как элементы очереди только в том случае, если операнд В блоков QUEUE и DЕРАRТ равен 1 (заданный в явном виде или по умолчанию). Необходимость использования операнда В возникает крайне редко, поэтому почти всегда существует точное однозначное соответствие. В этой книге нет случаев возникновения необходимости использования операнда В в блоках QUEUE и DЕРАRТ.
"Использование параллельно работающих каналов. Блоки ЕNТЕR (ВОЙТИ) и LEAVE (ВЫЙТИ)"
В первой части параграфа описаны блоки, соответствующие многоканальным устройствам, рассмотрены основные методы их использования и дополнительные возможности этих блоков. Далее объяснены два метода определения емкости многоканальных устройств. И, наконец, обсуждено основное различие между такими элементами, как прибор и многоканальное устройство с емкостью, равной единице.
Использование снимков
Кроме счетчика завершений в GPSS существует счетчик снимков. Его исходное значение определяется операндом С карты START. При чтении интерпретатором этой карты заносится исходное значение в счетчик завершений и счетчик снимков в соответствии со значениями операндов А и С соответственно. В процессе моделирования каждый раз при вычитании из счетчика завершений некоторой величины такая же величина вычитается из счетчика снимков.
Главная
Содержание главы 1
Использование в блоках ЕNТЕR и LEAVE операнда В
В блоках ЕNТЕR и LЕАVЕ можно использовать операнд В. На рис.22.2 дано повторение рис. 22.1 с добавлением использования операнда В. Как показано на рисунке, операнд В задает число приборов, которое должно быть занято в блоке ЕNТЕR или должно быть освобождено в блоке LЕАVЕ. Значением операнда В по умолчанию является 1, что означает, что занят только один прибор.
Рис.22.2. Блоки ENTER и LEAVE с операндами А и В:
Операнд | Значение | Значение или результат по умолчанию |
А | Имя (символическое или числовое) многоканального устройства | Ошибка |
В | Число занимаемых приборов | 1 |
Представляется вполне естественным, что допускается занятие нескольких приборов единственным транзактом в блоке ЕNТЕR (и аналогично освобождение нескольких приборов единственным транзактом в блоке LЕАVЕ). Предположим, что транзакт моделирует корабль, а многоканальное устройство моделирует причал в порту. В зависимости от размера корабль может потребовать использования нескольких причалов.
GPSS по отношению к блоку ЕNТЕR реализует подход "все или ничего". Транзакт не может занимать приборы один за другим, пока не займет требуемое число приборов. Когда транзакт пытается войти в блок ЕNТЕR, интерпретатор проверяет, больше или равна доступная емкость многоканального устройства значению операнда В. Если результат проверки отрицателен, транзакт остается в том блоке, где он находился, и позднее снова будет пытаться войти в блок ЕNТЕR.
Рассмотрим теперь влияние параметра В на статистические данные, собираемые интерпретатором относительно многоканальных устройств. Когда транзакт входит в блок ЕNТЕR, для которого используется операнд В, интерпретатор проделывает следующие действия: "счетчик входов" многоканального устройства увеличивается на значение операнда В; "текущее содержимое" многоканального устройства также увеличивается на значение операнда В; "доступная емкость" многоканального устройства уменьшается на значение операнда В.
Подобным образом, при использовании операнда В в блоке LЕАVЕ и входе транзакта в этот блок выполняются следующие действия:
"текущее содержимое" многоканального устройства уменьшается на значение операнда В; "доступная емкость" многоканального устройства увеличивается на значение операнда В.
Независимо от того, используется или нет значение операнда В, отличное от единицы в блоках ЕNТЕR и LЕАVЕ, надо помнить,что статистика по многоканальным устройствам собирается интерпретатором относительно приборов, а не транзактов.Следовательно, "число входов" является полным числом приборов, занимаемых в течение моделирования (некоторые,а может быть и все они занимались не один раз); "среднее содержимое" - это число приборов, занятых в настоящее время, а "максимальное содержимое" - это максимальное число приборов, находившихся в занятом состоянии в какой-то момент времени.Соотношения "один к одному" между приборами и транзактами,использующими или нет приборы, выполняются только тогда, когда операнд В в блоках ЕNТЕR и LЕАVЕ
равен единице.
"Элементы, символизирующие обслуживающие приборы"
Рассмотрим теперь, какие элементы можно использовать для представления собственно обслуживания. Такими элементами могут быть либо человек, либо какой-то предмет. Например, людьми, производящими обслуживание, являются: парикмахер, заправщик на бензоколонке,водопроводчик, страховой агент, плотник.
Подобным образом, предметами, которые могут обслуживать, являются: авторучка,стоянка автомобилей, театральный бинокль, подъемный кран.
Независимо от того, люди это или предметы, подобные элементы мы будем называть приборами. Приборы характеризуются двумя основными свойствам:
Каждый прибор в любой момент времени может обслуживать только одно требование.
Если в процессе обслуживания появляется новое требование, то оно должно либо подождать своей очереди обслуживания, либо пойти куда-нибудь в другое место. Существует также третья возможность.
Если новое требование является достаточно важным, оно может прервать протекающее обслуживание до его завершения. Такое средство прерывания также можно моделировать на GPSS. Когда на прибор поступает требование в модели, надо пропустить время, необходимое для его обслуживания. Такое время называется временем обслуживания.
Поскольку в различных точках системы может быть много приборов, для различия между ними приборам могут быть даны имена. Имена задает разработчик модели. Имена могут быть либо числовыми, либо символическими.
Если приборам присваивают числовые имена, числа должны быть положительными целыми. Наибольшим разрешенным номером является максимальное число приборов, допустимое в модели. Это число зависит от объема памяти, доступной этой модели. Например, в GPSS/360 таким числом приборов при использовании памяти на 64К байт (т. е. 64 000 байт) является 35; при использовании 128К байт - 150; при использовании 256К байт - 300. Следовательно, при моделировании с памятью 64К, наибольший допустимый номер прибора не должен превышать 35. В приложении Р показано допустимое число различных элементов GPSS.
Если приборам присваивают символические имена, то для образования этих имен используют те же правила, что и для составления символических имен блоков.
Как было указано ранее, символические имена состоят из трех - пяти алфавитно-цифровых символов, первыми тремя символами должны быть буквы. Примеры составления правильных и неправильных символических и числовых имен приведены в табл. 4.1. Таблица 4.1. Примеры правильных н неправильных имен приборов
Правильно | Неправильно |
GRANE | IT |
26 | 26KEY |
CPU | OS |
SURVR | -5 |
1 | 94528 |
Карты определения емкости многоканальных устройств
Емкость различных многоканальных устройств в модели определяется картами определения емкости многоканальных устройств. Допустимы две формы использования этих карт. Первая форма требует использования одной карты для одного многоканального устройства (табл.22.1).
Таблица 22.1.
Поле | Информация в поле |
Имени | Имя (символическое или числовое) многоканального устройства |
Операции Операндов | Записываается слово STORAGE |
А | Емкость многоканального устройства |
Как и большинство других карт, карта определения емкости разделена на поле имени, поле операции и поле операндов. В поле имени записывают имя (символическое или числовое) многоканального устройства. В поле операции записывают слово SТОRАGЕ (МНОГОКАНАЛЬНОЕ УСТРОЙСТВО).Операнд А специфицирует емкость многоканального устройства. Форма строки определения емкости одного многоканального устройства Имя Операция Операнды Не используется SТОRАGЕ S имя1, с1/S имя2, с2/.../S имяn, сn В таб.22.4 (в конце страницы) представлены примеры определения емкости многоканальных устройств, по нескольку определений на одной карте.
В первом из этих примеров показано, что необязательно располагать определения в порядке возрастания или убывания номеров многоканальных устройств.
Второй пример демонстрирует смешанное определение емкости многоканальных устройств, заданных номерами и символическими именами.
Из третьего примера следует, что многоканальные устройства с номерами 4, 5 и 6 имеют емкость по пять элементов. Если необходимо определить емкость многоканальных устройств,номера которых представляют собой непрерывный список целых чисел, то допускается компактная запись вида <Si- Sk, с>, где i и k являются соответственно наименьшим и наибольшим номерами многоканальных устройств, а с общим для них значением емкости. В четвертом примере как раз использована такая компактная запись.
Далее (хотя это вовсе необязательно) мы будем пользоваться картами определения емкости в самом начале колоды карт после карты SIМULATE (МОДЕЛИРОВАТЬ) до первой карты, определяющей блок.
Если разработчик забудет задать значение емкости для какого-либо многоканального устройства в модели, интерпретатор по умолчанию присвоит ему емкость в 2^31- 1 (т.е. 2 147 483 647).
Существует возможность переопределения емкостей многоканальных устройств при необходимости выполнения нескольких прогонов за один этап моделирования. Это делается введением в колоду между картами SТАRТ предыдущего прогона и SТАRТ следующего прогона карт нового определения емкостей. Эта процедура будет продемонстрирована в следующем примере моделирования ( см. рис. 2Е.З).
При переопределении емкостей многоканальных устройств следует избегать появления ошибок.В частности, ошибка может возникнуть, если емкость переопределяемого многоканального устройства становится меньше,чем это было раньше, и если в момент переопределения "текущее содержимое" многоканального устройства превышает значение вновь определяемой емкости. Если перед переопределениеи емкости многоканального устройства поставить карту СLЕАR, то "текущее содержимое" многоканальных устройств устанавливается в ноль, и, следовательно, ошибка не возникает.
"Логика работы интерпретатора"
В предыдущих параграфах мы описали операции, выполняемые интерпретатором. Это описание, тем не менее, не является достаточным. Например, нами был рассмотрен вопрос о движении транзактов от блока к блоку. Все еще не ясно, какой транзакт интерпретатор выберет следующим для продвижения в модели, когда другой транзакт прекратил двигаться, или в чем заключается cyть дисциплины обслуживания очереди "первым пришел - первым обслужен внутри одного приоритетного класса". На эти вопросы можно будет дать удовлетворительный ответ только после того, как будет рассмотрена логика, на которой основана работа интерпретатора.
В основном логика работы интерпретатора становится понятной из рассмотрения механизма отслеживания пути транзактов, движущихся в модели. Интерпретатор рассматривает каждый транзакт как элемент одной или нескольких цепей. Каждый транзакт может быть представлен как звено в цепи. Цепи являются открытыми, а не замкнутыми, следовательно, они имеют два конца, начальный и конечный. В качестве элемента цепи транзакт занимает определенное положение относительно начала цепи. Положение транзакта в цепи тесно связано с тем, как скоро транзакт должен снова вернуться в модель для продолжения движения. Последовательность обработки, в свою очередь, тесно связана с временем возникновений событий при выполнении моделирования.
Существуют цепи: текущих событий; будущих событий; пользователя; прерывания; парности.
Имеется только одна цепь текущих и одна цепь будущих событий. В общем случае может существовать более чем одна цепь пользователя, цепь прерывания и цепь парности.
Изучение цепей текущих и будущих событий мы начнем здесь и далее будем продолжать его.
Цепь текущих событий состоит из тех транзактов, для которых планируется их продвижение в одном или нескольких блоках в течение текущего значения модельного времени или в течение ближайшего времени. В цепь текущих событий входят те транзакты, движение которых заблокировано ввиду текущих условий в модели. (По желанию пользователя транзакты могут быть перенесены из цепи текущих событий в цепь пользователя.
Это можно сделать для уменьшения времени моделирования, использования нетипичной дисциплины обслуживания или для того и другого.Например,транзакт может быть временно заблокирован ввиду планирования его входа в блок SEIZE, когда требуемый прибор находится в состоянии "занято". Цепь будущих событий состоит из таких транзактов, движение которых не планируется до наступления некоторого времени в будущем. Описанные действия интерпретатора сведены в блок-схемы рис.12.1 и 12.2. Далее будут описаны эти фазы и объяснено, как действует интерпретатор. Рис.12.1. Фаза коррекции таймера модельного времени интерпретатора GPSS.
"Многоканальная система массового обслуживания с очередью"
Типичный вариант использования многоканального устройства показан на рис. 23.1. Кроме блоков ЕNТЕR - АDVANCE - LEAVЕ (ВОЙТИ - ЗАДЕРЖАТЬСЯ - ВЫЙТИ), есть блоки QUЕUЕ - DEPART , которые собирают информацию об ожидании перед блоком ЕNТЕR (эта пара блоков необязательна). Необходимо рассмотреть два варианта обслуживания при моделировании системы, показанной на рис. 23.1. Первый - метод выбора прибора пользователем; второй - метод выбора пользователя прибором.
Рис.23.1. Типичный пример моделирования с использованием многоканального устройства.
Очень часто при параллельном обслуживании перед каждым прибором образуется очередь. Когда пользователь приходит на обслуживание, он оценивает ситуацию и принимает решение, Именно в этом, наиболее часто используемом случае, название элемента STORAGE, которое должно бы быть переведено как НАКОПИТЕЛЬ, не соответствует его назначению. Вот почему при переводе этот элемент назвали многоканальным устройством.
Рис. 23.2. Пример системы многоканального обслуживания с одной очередью.
Приборы, которые являются частью многоканального устройства, не имеют своей индивидуальности. Это означает, что нет возможности разделить очереди по каждому прибору. Следовательно, реализуется концепция: если подошла очередь какого-либо пользователя, то он идет на обслуживание к любому свободному прибору. Это эквивалентно наличию единственной очереди перед устройством с многоканальным обслуживанием. Приходящий пользователь просто становится в очередь. Когда под ходит его очередь, он идет на любой свободный прибор (рис. 23.2).
При этом следует заметить, что хотя пользователи не могут выбирать прибор, приборы могут выбрать пользователей. Приборы выбирают из очереди пользователей, упорядоченных по приоритетному признаку. Когда прибор освобождается, он выбирает пользователя по принципу "первым пришел - первым обслужен внутри приоритетного класса".
Приборы, которые моделируются многоканальным устройством, реализуют в GPSS такой выбор автоматически.
Это происходит потому, что транзакты, ожидающие входа в блок ЕNТЕR (см. рис. 23.1), отсортированы в цепи текущих событий в порядке убывания их уровней приоритетов. После прохождения транзактом блока LЕАVЕ освобождение одного или более приборов вызывает возобновление просмотра цепи текущих событий. Свободный прибор занимается высокоприоритетным транзактом, причем тем из них, который ждет дольше всех. Эта ситуация проиллюстрирована на рис. 23.3.
Рис.23.3. Многоканальная система массового обслуживания с одной очередью и приоритетами.
"Моделирование многоканальных устройств"
Два или более приборов часто работают рядом, выполняя аналогичное обслуживание. Такими приборами могут быть и люди и механизмы. Вот примеры того, как люди могут играть роль параллельно работающих приборов: парикмахеры; контролеры универсального магазина; косметички; служащие в конторе; контролеры в театре.
А вот несколько примеров использования механизмов, выполняющих аналогичные операции (таких механизмов может быть два и более); буксиры, вводящие и выводящие корабли в порту; подъемные краны, переносящие тяжелые отливки от литейных форм к станкам; места на стоянке автомобилей; транспортеры для подачи определенного вида запасных частей, находящихся на полках.
Прибор в GPSS используют для моделирования единственного устройства обслуживания. Два или более находящихся рядом обслуживающих устройства могут быть промоделированы на GPSS двумя или более приборами, рaсполагаемыми рядом, т. е. параллельно. В самом деле, иногда необходимо использовать параллельные приборы, чтобы промоделировать параллельное обслуживание. Обычно к этому необходимо прибегать, когда отдельные приборы являются разнородными, т. е. характеризуются различными свойствами, например различной интенсивностью обслуживания.
Очень часто, однако, различные параллельно работающие приборы являются однородными. Это, грубо говоря, тот случай, когда некоторые устройства обладают определенными общими свойствами. Например, интенсивность, с которой контролер обслуживает покупателей в универмаге, не зависит от конкретного контролера, а является некоторой общей характеристикой.
GРSS предоставляет для моделирования однородных параллельных приборов специальное средство (или элемент). Для этого элемента используют название "многоканальное устройство". В модели может быть несколько многобанальных устройств, это отражает тот факт, что в системе существует большое число групп параллельно работающих приборов. Для того чтобы между ними было различие, многоканыльным устройствам можно давать имена. Условия использования имен такие же, как и в случае приборов и очередей.
Число приборов, которое моделируется каждым из многоканальных устройств, определяется пользователем. В этом смысле употребляют термин "емкость многоканального устройства". В следующем параграфе описаны методы использования элемента "многоканальное устройство" и определения его емкости.
Главная Содержание главы 1Некоторые замечания о неверном использовании регистратора очереди
Начинающие изучение GPSS могут составить неверное представление об использовании регистратора очереди. Два наиболее часто встречающихся ошибочных представления мы прокомментируем ниже.
Первой ошибкой является то, что многие считают, будто регистраторы очереди необходимо использовать в модели всюду, где могут возникать очереди. Часто думают, что если регистратор очереди не записан, то не обеспечивается возможность ожидания обслуживания. Это неверно. Использование регистратора очереди совершенно необязательно. При использовании регистратора интерпретатор собирает статистику об ожидании; если регистратор не используется, статистика не собирается, но всюду, где должно возникать ожидание, оно возникает. Например, на рис. 8.2 независимо от того, находится ли блок SEIZЕ между парой QUEUE - DEPART или нет, транзакт не войдет в блок SEIZЕ, если прибор JОЕ занят. Ожидание является следствием состояния прибора, а не следствием использования регистратора очереди.
Во многих случаях, даже если известно, что в определенных местах системы возникают очереди, разработчик предпочитает не использовать регистратор очереди. Если в планы не входит обработка статистических данных об очередях, то лучше не собирать статистику. Это сэкономит время, расходуемое на моделирование.
Для иллюстрации на рис. 8.4 изображена система, в которой в шести различных местах могут возникать очереди. Разработчик модели может принять решение собрать статистику во всех шести местах или не собирать ее вовсе; может принять решение собирать статистику в некоторых из этих мест модели или, например, собирать статистику в точках 2, 4, 5 и 6 и не собирать ее в точках 1 и 3.В данной книге дано много примеров, где в местах возникновения очереди статистика об очереди не собирается. В четвертом и пятом примерах этой главы приведены такие случаи.
Второй общей ошибкой, касающейся использования регистраторов очереди, является мнение, будто транзакт не является элементом очереди, если он не находится в блоке QUEUE. Это неверно.
Транзакт просто отмечает факт своего присутствия в очереди входом в блок, где осуществляется привязка к очереди по имени и времени входа в очередь. Независимо от того, остается транзакт в блоке QUEUE
или нет, он остается элементом очереди до тех пор, пока не войдет в блок DEРАRТ соответствующей очереди. В зависимости от того, каким образом построена модель, транзакт в общем случае может некоторое время находиться в различных частях модели после того, как он покинет блок QUEUЕ, и прежде, чем он войдет в соответствующий ему блок DEРАRТ. Выше мы сделали предположение, что транзакт может являться элементом более чем одной очереди. Это вовсе не так уж странно, как может показаться на первый взгляд. Можно без труда придумать ситуацию, когда люди одновременно стоят в двух или даже более очередях. Здесь следует отметить, что находиться в очереди вовсе не значит физически в ней присутствовать. Представим себе, например, случай прихода в мясной магазин покупательницы, которой приписан номер в момент входа в магазин. Если покупательница видит, что ее номер еще не дошел, она может пройти в другой магазин, например в бакалейный, стать там в очередь, обслужиться, снова вернуться в мясной магазин и ждать своей очереди. С точки зрения нахождения в очереди, она была в мясном магазине все время, хотя на самом деле она побывала и в бакалейном. В GPSS транзакт не может присутствовать одновременно более чем в пяти очередях. Если транзакт уже находится в пяти очередях и делает попытку присоединиться к шестой, то печатается предупреждающее сообщение с номером 853 . Причиной ограничения именно пятью очередями является наличие только пяти полей записи для имени очереди при привязке транзакта к очереди и пяти полей для записи времени присоединения к очереди. При рассмотрении второго примера моделирования в этой главе приведена модель на GPSS , в которой транзакты одновременно присутствуют в двух различных очередях.
Объяснение рис. 13.6. Состояния цепей
Фаза ввода (от строки 1 к строке 2). Первым действием интерпретатора является ввод модели. До фазы ввода цепи текущих и будущих событий пусты (строка 1). В течение фазы ввода интерпретатор проверяет каждую прочитываемую карту, определяя, не является ли она картой GENERATE.
При чтении этой карты интерпретатор сразу же "воспринимает" блок GENERATE для установления времени прихода транзакта в этот блок. Для этого интерпретатор сначала должен определить значение модельного времени прихода. Если задано время смещения транзакта операндом С блока, то сначала время прихода устанавливается в значение, равное значению операнда С. В противном случае разыгрывается случайное значение в соответствии с распределением интервалов прихода, определенным операндами А и В блока GENERATE. Времени прихода присваивается разыгранное значение. Далее интепретатор выбирает транзакт из вершины пассивного буфера и помещает его в цепь будущих событий с целью ввести в модель через блок GENERATE в заданный момент прихода.
Если время прихода равно нулю (либо значение операнда С равно нулю, либо разыгранное в соответствии с распределением значение интервала равно нулю), то оно автоматически заменяется интерпретатором на единицу. Это означает, что нет возможности ввести транзакт через блок GENERATE в момент модельного времени, равный нулю. Самое раннее значение = 1. Заметим, что наш транзакт еще находится на пути в модель, пребывая в цепи будущих событий. Он пока не находится ни в одном из блоков.
В модели на рис.13.5 (предыдущая страница) при чтении блока 1 GENERATE на фазе ввода модели разыгрывается число из выборки с распределением 18 - 6. Первым разыгранным значением, как следует из табл.13.1, является 14. Интерпретатор выбирает транзакт 1 из пассивного буфера и помещает его в цепь будущих событий (ЦБС), планируя вход в блок 1 в момент времени, равный 14. В течение фазы ввода также читается блок 8 GENERATE. В этом блоке задается детерминированное значение времени - 480. Интерпретатор из пассивного буфера достает транзакт 2 и помещает его в ЦБС, планируя вход транзакта в блок 8 в момент времени, равный 480.
Поскольку интерпретатор располагает транзакты в ЦБС в соответствии с временем движения, транзакт 2 ставится следом за транзактом 1. После чтения блока 9 TERMINATE стоит карта START. Читая эту карту, интерпретатор определяет значение ее операнда А и помещает копию этого значения в счетчик завершений. Фаза ввода для нас закончена. Проверка цепи будущих событий в заключение фазы ввода (строка 2, рис. 13.6) показывает, что в ней находятся два транзакта, по одному для каждого из блоков GENERATE в модели. Транзакт 1 изображает первого клиента, идущего в парикмахерскую. Он появится в парикмахерской в момент модельного времени, равный 14. Планируемый вход транзакта 1 в блок 1 аналогичен приходу клиента к двери парикмахерской. Транзакт 2 символизирует собой таймер, направляющийся в модель для того, чтобы завершить моделирование. Когда таймер модельного времени достигнет значения 480, транзакт-таймер, наконец, придет и, войдя в блок TERMINATE (блок 9), вызовет завершение моделирования. Напомним, что в качестве третьего элемента выступает номер блока, в котором находится транзакт. Но транзакты 1 и 2 не входят ни в один из блоков модели. Они еще находятся на пути в модель, поэтому на месте номера блока стоит слово "НЕТ". Блок-схема на рис.13.7 описывает рассмотренные нами особенности фазы ввода. Вся логика работы интерпретатора на фазе ввода, представленная в блок-схеме, хорошо понятна из приведенного выше описания.
Рис. 13.7. Как показано на рис.13.7, когда фаза ввода завершается интерпретатор переходит к фазе коррекции таймера. После первой коррекции выполняется первый раз фаза просмотра. Затем фаза коррекции таймера выполняется второй раз, фаза просмотра выполняется второй раз и т.д. Первое выполнение корректировки таймера (от строки 2 к строке 3). Интерпретатор устанавливает таймер в значение 14 - значение времени движения транзакта (транзакт 1), находящегося в начале цепи будущих событий в строке 2. Затем он перемещает транзакт 1 в пустую прежде цепь текущих событий.
Следующий транзакт (транзакт 2) в ЦБС имеет значение времени движения, отличное от 14. Следовательно, первое выполнение фазы коррекции таймера закончено. Заметим, что в строке 3 на рис.13.6 цепь текущих событий (ЦТС) содержит лишь один единственный транзакт, описанный как [1, КМР, НЕТ, 0, 1]. Время входа в пятипозиционной записи обозначено как КМР, т.е. "Как можно раньше". Все транзакты в ЦТС в позиции "время движения" имеют запись КМР. Это объясняется тем, что они "хотели" бы войти в следующий блок сейчас же (т.е. в текущие значения модельного времени), или, если вход в следующий блок закрыт, то как можно раньше. Текущий блок для этого транзакта по-прежнему содержит запись "HET", поскольку транзакт все еще не вошел ни в один из блоков модели. Он займет какой-либо блок только после того, как отработает фаза просмотра. После завершения первого выполнения фазы коррекции таймера сразу же начинается выполнение фазы просмотра. Первое выполнение фазы просмотра (от строки 3 к строке 4). Выбрав транзакт 1 из начала третьей строки ЦТС, интерпретатор двигает его в блок 1 (блок GENERATE), затем проверяет, может ли транзакт 1 быть перемещен в следующий блок - блок 2 QUEUE. Блок QUEUE не запрещает вход, поэтому попытка входа будет успешной. Теперь, поскольку транзакт может уйти из блока GENERATE, интерпретатор временно приостанавливает его продвижение и планирует приход следующего транзакта в блок GENERATE. Второй розыгрыш числа в соответствии с распределением 18 ± 6 интервалов прихода дает значение 13 (см. табл.13.1). Транзакт выбирается из вершины пассивного буфера (транзакт 3) и помещается в цепь будущих событий с запланированным временем входа в блок 1, равным "текущее + 13", т. е. 27. Напомним, что для определения времени прихода следующего транзакта разыгранное значение интервала прихода прибавляется к текущему значению таймера. Что касается блока GENERATE, то здесь необходимо сделать два замечания: 1. Интерпретатор не планирует следующий приход в блок GENERATE до тех пор, пока предыдущий транзакт не сделает успешную попытку войти в следующий блок.
Если следующим является блок, который может запретить вход (например, блок SEIZE), то планирование будет иметь место спустя некоторое время после входа транзакта в блок GENERATE. 2. Интерпретатор прерывает движение транзакта, выходящего из блока GENERATE, на время планирования входа его последователя. После завершения планирования движение транзакта возобновляется. Выполнение этих двух условий в виде блок-схемы показано на рис. 13.8. После завершения планирования транзакт 1 вызывает выполнение подпрограммы блока QUEUE. Из блока QUEUE интерпретатор перемещает транзакт в блоки SEIZE, DEPART и ADVANCE. В блоке ADVANCE (блок 5) определяется время задержки в соответствии с распределением 16 ± 4. По табл. 13.2 находим, что первым разыгранным значением является 18. Следовательно, транзакт 1 выводится из ЦТС и помещается в ЦБС. Планируется переход из блока 5 в блок 6 (блок RELEASE) в момент времени "текущий + 18, т.е. в момент времени 32.
Рис.13.8. Фрагмент блок-схемы,показывающий логику работы интерпретатора при выходе транзакта из блока GENERATE и планировании прихода его последователя. Теперь, поскольку транзакт 1 вызвал выполнение подпрограммы блока SEIZE при своем движении, интерпретатор заново просматривает цепь текущих событий. Цепь пуста. Следовательно, следующим шагом будет выполнение фазы коррекции таймера. Отметим, что транзакты цепи будущих событий в строке 4, если рассматривать их слева направо, имеют смысловые значения, записанные в табл.13.3. Таблица 13.3. Смысловые значения транзактов в цепи будущих событий (строка 4, рис.13.6).
Номер транзакта | Смысловое значение |
3 | Второй клиент идет в парикмахерскую |
1 | Первый клиент стрижется |
2 | Транзакт-таймер |
Следовательно, второе выполнение фазы коррекции таймера завершается. Начинается следующее выполнение просмотра. Второе выполнение фазы просмотра (от строки 5 к строке 6). Взяв транзакт 3 из начала строки 5 цепи текущих событий, интерпретатор двигает его в блок 1 (блок GENERATE), затем определяет, можно ли сразу переместить его в блок 2. Временно приостановив обработку транзакта 3, интерпретатор планирует приход следующего транзакта в блок 1 (GENERATE). В соответствии с интервалом прихода 17 (третье разыгранное значение из распределения 18 - 6 в табл. 13.1) транзакт 4 выбирается из вершины пассивного буфера и помещается в ЦБС; планируется его вход в блок 1 в момент времени 44. Она занимает в ЦБС положение между транзактом 1 и 2 в соответствии с принципом упорядочения в ЦБС. Интерпретатор возобновляет движение транзакта 3, завершая его выполнением подпрограммы блока QUEUE. Здесь транзакт безуспешно пытается выйти из блока QUEUE и войти в блок SEIZE. Устройство JOE находится в состоянии "занято", поэтому вход в этот блок запрещен. Интерпретатор оставляет транзакт 3 в блоке QUEUE и в ЦТС, планируя войти в блок 3 "Как можно раньше". Далее интерпретатор должен продолжать работу со следующим транзактом в строке 5 цепи текущих событий. Но такого транзакта не существует. Поэтому следующим шагом является выполнение фазы коррекции таймера. Заметим, что таймер все равно надо было бы продвинуть, даже если бы цепь текущих событий была не пустой. Отметим, что транзакты в строке 6 на рис.13.6 имеют смысл, указанный в табл. 13.4. Таблица 13.4. Смысловые значения транзактов в цепях текущих и будущих событий (строка 6, рис. 13.6).
Цепь | Номер транзакта | Распределение времени обслуживания, мин |
ЦТС | 3 | Второй клиент ждет в очереди |
ЦБС | 1 | Первый клиент стрижется |
ЦБС | 4 | Третий клиент идет в парикмахерскую |
ЦБС | 2 | Тразакт-таймер |
Обозначения для транзактов
Для транзакта имеется пять типов записей: номер транзакта; время, на которое запланирована попытка войти в следующий блок (время движения); номер блока, через который транзакт сейчас проходит (текущий блок); его уровень приоритета; номер следующего блока, в который делается попытка войти.
Эта информация записывается в виде пяти символов в указанном порядке. Общий вид такой пятипозиционной записи представлен на рис.13.2,а. Численный пример представлен на рис.13.2,б.
Численный пример показывает, что транзакт номер 9 пытается в момент времени, равный 68, выйти из блока 5 и войти в блок 6. Транзакт номер 9 имеет нулевой приоритет.
Рис.13.2.[ Номер транзакта. Время движения. Номер текущего блока.
Уровень приоритета. Номер следующего блока]
[9.68.5.0.6]
Рис. 13.3. Перемещение транзактов между пассивным и активным буферами.
Как указывалось ранее, номер транзактам присваивает интерпретатор. Величина номера зависит от того, как много транзактов могут одновременно находиться в модели. Это число зависит от объема предоставляемой памяти. При объеме памяти в 64К максимальным числом транзактов является 200.
Ясно, что номера транзактов могут быть от 1 до 200. Транзакты могут принадлежать к одной из двух групп. Одна группа - это скрытая или пассивная группа транзактов, находящаяся в пассивном буфере, в отличие от транзактов, уже участвующих в модели. Другая группа хранится в активном буфере транзактов, т. е. они уже вошли в модель через один или более блоков GENERATE и пока еще не удалены из модели. (Существует еще один тип блоков, через которые транзакты могут войти в модель.)
Прежде чем начинается моделирование, транзакты в пассивном буфере располагаются в порядке возрастания номеров. В модели на 64К транзакты в пассивном буфере располагаются в порядке номеров 1, 2,....., 200. Этот буфер можно представить себе как расположенный "сверху - вниз" транзакт 1 находится в вершине буфера, транзакт 2 под ним и т.д. до последнего транзакта 200, находящегося в самом низу.
При возникновении необходимости ввести в модель транзакт интерпретатор достает его из вершины пассивного буфера.
Этот транзакт вносится в модель через цепь будущих событий с помощью процедуры, которая будет описана ниже. И наоборот, когда возникает необходимость удалить соответствующий транзакт, его убирают из модели и помещают обратно в вершину пассивного буфера. Перемещение транзактов между пассивным и активным буферами показано на рис.13.3. Номера блоков присваиваются в том порядке, в котором стоят карты блоков в колоде. Например, на рис.13.5 представлено повторение распечатки программы рис.13.4 с номерами блоков, присвоенными интерпретатором. Номера блоков стоят в левой колонке.
Рис.13.4. Пример моделирования 2A. Модель и распечатка программы:
а -заполненный бланк для перфорации модели;
б - распечатка программы для модели, представленной в части а. На бланке показаны поля имени (LOCATION),операции (OPERATION) и операндов (помечено символами А,В, С,D,Е,F,G). На распечатке поле имени отмечено символами * LOC.
а)
LOCATION |   | OPERATION | A,B,C,D,E,F ------------------------> | ||||||||||||||||||||||||||||||||||||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 1 0 | 1 1 | 1 2 | 1 3 | 1 4 | 1 5 | 1 6 | 1 7 | 1 8 | 1 9 | 2 0 | 2 1 | 2 2 | 2 3 | 2 4 | 2 5 | 2 6 | 2 7 | 2 8 | 2 9 | 3 0 | 3 1 | 3 2 | 3 3 | 3 4 | 3 5 | 3 6 | 3 7 | 3 8 | 3 9 | 4 0 | 4 1 | 4 2 | 4 3 | 4 4 | 4 5 | 4 6 |
  |   |   |   |   | S | I | M | U | L | A | T | E |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
* |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
* |   |   |   |   | M | O | D | E | L |   | S | E | G | M | E | N | T |   | 1 |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
* |   |   |   |   | G | E | N | E | R | A | T | E |   | 1 | 8 | , | 6 |   | П | Р | И | Х | О | Д |   | К | Л | И | Е | Н | Т | О | В |   |   |   |   |   |   |   |   |   |   |   |   |
  |   |   |   |   | Q | U | E | U | E |   |   |   |   | J | O | E | Q |   | П | Р | И | С | О | Е | Д | И | Н | Е | Н | И | Е |   | К |   | О | Ч | Е | Р | Е | Д | И |   |   |   |   |
  |   |   |   |   | S | E | I | Z | E |   |   |   |   | J | O | E |   |   | П | Р | И | Х | О | Д |   | В |   | К | Р | Е | С | Л | О |   | П | А | Р | И | К | М | А | Х | Е | Р | А |
  |   |   |   |   | D | E | P | A | R | T |   |   |   | J | O | E | Q |   | У | Х | О | Д |   | И | З |   | О | Ч | Е | Р | Е | Д | И |   |   |   |   |   |   |   |   |   |   |   |   |
  |   |   |   |   | A | D | V | A | N | C | E |   |   | 1 | 6 | , | 4 |   | О | Б | С | Л | У | Ж | И | В | А | Н | И | Е |   | У |   | П | А | Р | И | К | М | А | Х | Е | Р | А |   |
  |   |   |   |   | R | E | L | E | A | S | E |   |   | J | O | E |   |   | О | С | В | О | Б | О | Ж | Д | Е | Н | И | Е |   | П | А | Р | И | К | М | А | Х | Е | Р | А |   |   |   |
  |   |   |   |   | T | E | R | M | I | N | A | T | E |   |   |   |   |   | У | Х | О | Д |   | И | З |   | П | А | Р | И | К | М | А | Х | Е | Р | С | К | О | Й |   |   |   |   |   |
* |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
* |   |   |   |   | M | O | D | E | L |   | S | E | G | M | E | N | T |   | 2 |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
* |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  |   |   |   |   | G | E | N | E | R | A | T | E |   | 4 | 8 | 0 | , | 1 |   | Т | А | Й | М | Е | Р |   | П | Р | И | Х | О | Д | И | Т |   | В |   | М | О | М | Е | Н | Т |   |   |
  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   | В | Р | Е | М | Е | Н | И | , | Р | А | В | Н | Ы | Й |   | 4 | 8 | 0 |   |   |
  |   |   |   |   | T | E | R | M | I | N | A | T | E |   | 1 |   |   |   |   | З | А | В | Е | Р | Ш | Е | Н | И | Е |   | П | Р | О | Г | О | Н | А |   |   |   |   |   |   |   |   |
* |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
* |   |   |   |   | C | O | N | T | R | O | L |   | C | A | R | D | S |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
* |   |   |   |   | S | T | A | R | T |   | 1 |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  |   |   |   |   | E | N | D |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
BLOCK NUMBER *LOG OPERATION A,B,C,D,E,F,G COMMENTS SIMULATE * * MODEL SEGMENT 2 * 1 GENERATE 460 TIMER ARRIVES AT TIME 460 2 TERMINATE 1 SMUT OFF THE RUN * * MODEL SEGMENT 1 * 3 GENERATE 16,6 CUSTOMERS ARRIVE 4 QUEUE JOEQ ENTER THE LINE 5 SEIZE JOE CAPTURE THE BARBER 6 DEPART JOEQ LEAVE THE LINE 7 ADVANCE 16,4 USE THE BARBER 8 RELEASE JOE FREE THE BARBER 9 TERMINATE LEAVE THE SHOP * * CONTROL CARDS * START 1 START THE RUN END RETURN CONTROL TO OPERATING SYSTEM |
BLOCK NUMBER *LOC OPERATION A,B,C,D,E,F,G COMMENTS SIMULATE * * MODEL SEGMENT 1 * 1 GENERATE 18,6 CUSTOMERS ARRIVE 2 QUEUE JOEQ ENTERTHE LINE 3 SEIZE JOE CAPTURE THE BARBER 4 DEPERT JOEQ LEAVE THE LINE 5 ADVANCE 16,4 USE THE BARBER 6 RELEASE JOE FREE THE BARBER 7 TERMINATE LEAVE THE SHOP * * MODEL SEGMENT 2 * 8 GENERATE 480 TIME ARRIVES AT TIME 480 9 TERMINATE 1 SHUT OFF THE RUN * * CONTROL CARDS * START 1 SRART THE RUN END RETURN CONTROL TO OPERATING SYSTEM |
"Описание стандартов для записи примеров моделирования"
В данном руководстве для иллюстрации различных возможностей GPSS будут рассмотрены примеры моделирования. Ниже указаны элементы описания примеров.
Постановка задачи. Она включает детальное описание задачи. Такое описание достаточно для того, чтобы по нему можно было строить модель и выполнять ее прогоны (т. е. моделировать систему). Метод построения модели. Здесь описывают и поясняют, каким образом задачу можно интерпретировать в терминах GPSS. Сделана попытка объяснить, почему избран именно такой подход. Таблица определений. Таблица определений является списком различных элементов GPSS , использованных в модели, с краткой характеристикой тех частей системы, которые описываются этими элементами. В начале этой таблицы записывается принятая в модели единица времени. Затем записывается представление транзактов. Далее в алфавитном порядке описываются все прочие элементы модели и части моделируемой системы. Блок-схема.В определенном смысле блок-схема и есть модель. Подробная блок-схема может оказаться трудночитаемой. По этой причине рядом с блоком в блок-схеме пишут пояснения (или комментарии). Комментариями являются краткие сведения, указывающие, что моделирует или чем помогает моделированию данный блок. Распечатка программы. В процессе чтения строк, представляющих собой вариант модели, интерпретатором GPSS выполняются следующие три этапа:
присваивается номер каждому блоку модели (т. е. номер его месторасположения); присваивается номер каждой считываемой строке; по каждой строке на печатающем устройстве распечатываются:
номер блока (если строка представляет собой блок); информация, находящаяся в полях имени, операции и операндов строки, а также комментарии, если они есть; номер строки ??( номер расположения этой карты в колоде).
Интерпретатор выдает распечатку исходной программы. Поскольку номер блока и номер строки не входят в исходный текст, а добавляются интерпретатором в распечатку, ее можно называть расширенной распечаткой программы. Выходные данные программы. Распечатка результатов, выдаваемая в процессе моделирования, показывает, чего фактически достиг разработчик своими силами.Она служит основой для обсуждения.
Часто представляют лишь части выходных данных. Это сделано для экономии места и для сосредоточения внимания читателя на той части выходных данных, которая для него наиболее интересна. В некоторых случаях вместо непосредственной распечатки просто представляют выводы. Обсуждение. Сюда входит обсуждение логики моделирования, использования модели и распечатки результатов.
Логика моделирования. Здесь рассматривают особенности блок-схемы и ее соотношение с самой задачей или дают конкретный метод интерпретации задачи в терминах GPSS . Использование модели. Перфокарточная версия модели содержит карты блоков,а также карты, имеющие прочую информацию. Например, карта SТАRТ, рассмотренная в параграфе 3, должна обязательно быть включена как элемент модели.В блок-схеме не существует блока, который соответствовал бы карте SТАRТ. Есть и другие возможности включения информации, в явном виде не присутствующей в блок-схеме. При необходимости такая информация будет появляться в распечатке программы и будет обсуждена нами. Распечатка результатов. Результаты можно рассматривать как некий ответ на поставленную задачу. Основным назначением примеров моделирования, тем не менее, является иллюстрация методов построения оделей на GPSS, а не числовых результатов задачи. Поэтому результатам работы программ уделяется не очень много внимания.
Основные методы использования блоков ЕNTER и LEAVE
Использование многоканального устройства для моделирования одного из параллельно работающих приборов аналогично использованию одиночного прибора. Элементом, который занимает и использует устройство, является транзакт. При этом события происходят в следующем хронологическом порядке: транзакт ожидает своей очереди, если это необходимо; транзакт занимает устройство; устройство осчществляет обслуживание в течение некоторого интервала времени; транзакт освобождает устройство.
Как и в случае с прибором, разработчик использует многоканальные устройства в модели, применяя пары дополняющих друг друга блоков. Эти блоки моделируют выполнение описанных выше событий 2 и 4. Когда транзакт входит в первый из этих блоков, моделируется событие "занятие одного из группы параллельно работающих приборов". Подобным же образом, когда транзакт входит во второй из этих блоков, моделируется выполнение события "освобождения параллельно работающего прибора". Блоками, соответствующими состояниям "занято" и "освобождено", являются ЕNТЕR (ВОЙТИ) и LEAVE (ВЫЙТИ). Эти два блока вместе с операндом А изображены на рис. 22.1.
Рис.22.1. Блоки ENTER(ВОЙТИ ) и LEAVE(ВЫЙТИ)с операндом А :
Операнд | Значение | Значение или результат по умолчанию |
А | Имя (символическое или числовое) многоканального устройства | Ошибка |
Операнд А в блоках ЕNТЕR и LEAVE
используется для указания имени соответствующего многоканального устройства. Когда транзакт входит в блок ЕNТЕR, интерпретатор выполняет следующие действия:
"счетчик входов" многоканального устройства увеличивается на единицу; "текущее содержимое" многоканального устройства увеличивается на единицу; "доступная емкость" многоканального устройства уменьшается на единицу.
Подобным же образом, когда транзакт входит в блок LEAVE, интерпретатор выполняет следующие действия:
"текущее содержимое" многоканального устройства уменьшается на единицу; "доступная емкость" многоканального устройства увеличивается на единицу.
В конце моделирования интерпретатор автоматически распечатывает такую статистику о многоканальных устройствах, как "счетчик входов", "текущее содержимое" и "максимальное содержимое".
Также распечатывается значение "среднего времени пребывания" (т. е. средний интервал времени между различными занятиями и освобождениями). Рассмотрим понятие "среднее время пребывания" более детально. Интерпретатор рассчитывает это значение с использованием полного числа единиц времени, в течение которого различные параллельно работающие приборы находятся в состоянии "занято". Существует только одно такое значение. Оно считается по всем приборам, моделируемым в этом многоканальном устройстве. Значение автоматически корректируется, когда это необходимо. Следовательно, в любое время интерпретатор может вычислить среднее время пребывания делением полного времени на "счетчик входов". Преимуществом такого подхода является учет всех приборов, в том числе и тех, которые еще находятся в занятом состоянии в момент выполнения расчета. Недостатком такого подхода является некоторое занижение статистики, поскольку часть приборов еще некоторое время должна быть занята, а это не учитывается при расчете. Для каждого конкретного транзакта время нахождения в многоканальном устройстве (т. е. между моментами времени, когда он входит в блоки ЕNТЕR и LЕАVЕ) является интервалом, в течение которого одно из параллельно работающих устройств находится в занятом состоянии. Это означает, что среднее время пребывания идентично среднему времени нахождения транзакта в многоканальном устройстве. Вот почему эта статистика об использовании многоканального устройства распечатывается под названием АVЕRАGЕ ТIМЕ/ ТRАN (СРЕДНЕЕ ВРЕМЯ/ТРАН). Очевидна аналогия между методом расчета интерпретатором статистики АVЕRАGЕ ТIМЕ/ТRАNS для очереди и АVERAGE ТIМЕ/ТRANS для многоканального устройства. Также должно быть ясно, почему интерпретатор не осуществляет привязку транзакта к имени многоканального устройства или к значению модельного времени при прохождении транзактом блока ЕNТЕR. Для многоканальных устройств расчет значения "нулевых входов" не представляет интереса.Это означает, что привязки не нужны, и, следовательно, не существует ограничений на то, сколько различных многоканальных устройств будет занято транзактом одновременно. Блоки ЕNТЕR и LEAVE относятся к таким блокам, после обработки которых возобновляется просмотр цепи текущих событий от начала. Предположим, что перед тем, как остановиться в каком-либо блоке, транзакт прошел один из блоков ЕNТЕR и(или) LEAVE. В этом случае вместо того, чтобы перейти к обработке следующего по списку транзакта в цепи текущих событий, интерпретатор начинает заново просматривать цепь текущих событий.
"Ожидание обслуживания: где при каких условиях происходит ожидание транзакта"
В зависимости от значений операндов А и В блока А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Е можно располагать в любых местах моделей. Выбор места зависит от логических условий моделирования.
"Печать в процессе моделирования"
В качестве вспомогательного средства сбора информации можно использовать возможность распечатывания статистических данных модели в процессе моделирования для получения этих данных в конце прогона. Полный набор промежуточных статистических данных можно получить при использовании операнда С карты START. Выборочный набор статистических данных может быть получен при использовании блока РRINT (НАПЕЧАТАТЬ).
"Переход транзактов в блок, отличный от последующего. Блок ТRАNSFЕR (ПЕРЕДАТЬ)"
Иногда возникает необходимость передать транзакт безусловным образом в блок, отличный от последующего. Это можно выполнить, используя блок ТRANSFER (ПЕРЕДАТЬ) в режиме безусловной передачи. Использование блока в этом режиме показано на рис. 19.1. Операнд A при таком использовании блока не участвует.
Рис.19.1
Операнд | Значение | Результат по умолчанию |
A | Не используется | ----- |
B | Позиция блока, в который должен перейти транзакт | Ошибка |
Это означает, что в колонке 19, от которой заполняются операнды, должна стоять запятая. Наличие запятой указывает на безусловный режим использования блока.
Операнд В указывает положение,занимаемое блоком, в который транзакт должен сделать попытку входа. Для краткости такой блок мы в дальнейшем просто будем именовать "В блоком". Положение блока может задаваться либо символически, либо в виде номера блока. Символическое имя использовать значительно более удобно.
На рис. 19.1 в скобках указан операнд В. Скобки используют только на блок-схеме модели; они не являются частью операнда и их не надо использовать в блоке ТRANSFER.
В режиме безусловной передачи блок ТRANSFER не может отказывать транзакту во входе. Когда транзакт входит в блок, он сразу же пытается войти в В блок.Если последний отказывает в этом, транзакт остается в блоке ТRANSFER и в цепи текущих событий. При каждом последующем просмотре цепи (либо при возобновлении просмотра в процессе выполнения фазы просмотра, либо в начале следующего выполнения фазы просмотра) снова делается попытка поместить транзакт в В блок.Возможно, что при каком-то просмотре попытка будет успешной.
Как уже было указано, такое использование блока ТRANSFER называется режимом безусловной передачи блока ТRANSFER. Существуют и альтернативные режимы использования блока ТRANSFER. Некоторые из них будут рассмотрены позднее. Использование блока ТRANSFER в режиме безусловной передачи проиллюстрировано в примере моделирования 2В.
Главная Содержание главы 1"Первый пример использования цепей текущих и будущих событий"
Рассмотрим, как интерпретатор GPSS использует цепи текущих и будущих событий на примере моделирования системы с одним прибором и очередью, представленном на рис. 13.1.
Рис. 13.1.Блок-схема для примера моделирования 2А.
Для этого надо сделать следующее:
Определить обозначения соответствующей информации о транзактах. Задать распределения интервалов прихода и обслуживания транзактов. Ввести таблицы, показывающие временную зависимость транзактов, находящихся в цепях текущих и будущих событий. Пояснить действия, предпринимаемые интерпретатором, показом изменения информации о транзактах, перемещаемых в модели.
На этот раз цепь пуста. Поэтому на следующем этапе необходимо выполнить фазу коррекции таймера. В это время транзакты в цепи будущих событий в строке 8 имеют смысл, указанный в табл. 13.6.
Таблица 13.6.
Номер транзакта | Смысловое значение |
3 | Второй клиент стрижется |
4 | Третий клиент едет в парикмахерскую |
2 | Транзакт-таймер |
Номер транзакта | Смысловое значение |
4 | Третий клиент только что пришел в парикмахерскую |
3 | Второй клиент только что закончил стрижку |
Транзакт, который прежде уже был в модели и символизировал собой первого клиента, теперь вернулся "в игру", символизируя четвертого клиента того же дня. В качестве конкретного примера одновременных событий в GPSS рассмотрим пример моделирования 2А и соответствующие состояния цепей, показанные на рис. 13.6. В строке 9 на рис.13.6 в цепи текущих событий мы видим два события, запланированных на одно и то же модельное время 44. Первым из этих событий, [4,КМР,НЕТ, 0,1], является приход клиента в парикмахерскую. Вторым из этих событий, [3,КМР,5,0,6], является завершение обслуживания клиента, находящегося в кресле парикмахера. На самом деле следующий клиент входит в дверь как раз в момент, когда обслуживаемый клиент поднимается из кресла парикмахера. Посмотрим теперь, как эта реальная ситуация моделируется в примере 2А. При просмотре цепи текущих событий интерпретатор GPSS сначала обнаруживает транзакт 4. Транзакт 4 последовательно входит в блок GENERATE, затем в блок QUEUE и должен там задержаться. Фактически, интерпретатор осуществляет вход следующего клиента в дверь и присоединяет его к очереди. Далее, продолжая просмотр цепи текущих событий, интерпретатор выбирает транзакт 3. Этот транзакт вводится в блоки RELEASE и TERMINATE, что означает "клиент уходит из парикмахерской". Здесь, следовательно, произошли два события - приход клиента и завершение обслуживания. Последовательность обработки была: приход клиента, а затем завершение обслуживания просто потому, что транзакт 4 оказался впереди транзакта 3 в цепи текущих событий. Если бы относительная последовательность этих двух событий в ЦТС оказалась инверсной, то и обработка этих событий была бы инверсной. Конечно, в этой точке система еще не окончательно изменяет свое состояние в момент модельного времени 44. Сейчас возникло условие, при котором произошло событие "перевод состояния парикмахера в положение свободно". Поскольку как часть завершения обслуживания выполняется обработка блока RELEASE, интерпретатор заново просматривает цепь текущих событий.
В результате интерпретатор снова выбирает транзакт 4, продвигая его в тот же момент модельного времени через блоки SEIZE и DEPART и вводя его в блок ADVANCE. Следовательно, произойдет событие "занятия". На этом и завершатся действия в момент времени 44. Должно быть ясно, что когда возникают временные узлы в примере моделирования 2А, то последовательность, в которой обрабатываются вовлеченные события, зависит от случая. Однако и не требуется никакого формального контроля в этой простой модели, поскольку интерпретатор заново просматривает ЦТС после обработки блока RELEASE. Если бы это было не так, модель была бы неверной, так как хотя и существовали бы в момент времени 44 ожидающий клиент и освободившийся парикмахер, никакие действия не были бы предприняты для того, чтобы клиент перешел на обслуживание к парикмахеру. Интерпретатор, следовательно, построен таким образом, что в этой модели ему безразлична последовательность возникновения одновременных событий. В примере моделирования 2А легко поменять условия таким образом, что последовательность, в которой будут записаны состояния в цепях на рис.13.6 в момент времени 44, станет небезразличной. Предположим, что прибывающий клиент решает остаться только в том случае, если он немедленно может начать обслуживаться у парикмахера, и что модель модифицируется таким образом, чтобы учесть это предположение (отметим, что мы еще не изучили способа, как это сделать). В этом случае, если приход возникнет раньше события завершения, пришедший клиент не останется на обслуживание, а если последовательность событий будет обратной, останется. При таких условиях очень важно разработать модель таким образом, чтобы в случае возникновения временных узлов завершение обслуживания всегда происходило раньше прихода заявки. Очевидно, что именно такой будет последовательность событий, если принять меры к тому, чтобы обеспечить условие расположения транзакта "завершение обслуживания" ближе к началу ЦТС, чем транзакт "приход заявки". Уже упоминалось, что относительное расположение транзактов в ЦТС определяется уровнем приоритетов.Если бы транзакт "завершение обслуживания" имел более высокий приоритет, чем транзакт "приход заявки", то имела бы место желаемая последовательность обработки событий. Позднее мы увидим, каким образом может устанавливаться уровень приоритетов для того, чтобы избежать проблем, которые возникли бы в связи с временными узлами.
Предполагаемые значения интервалов прихода и времени обслуживания
В табл.13.1 представлена последовательность разыгранных значений, являющихся результатом обращения интерпретатора GPSS за первыми четырьмя значениями из выборки чисел с распределением 18 ± 6, которое задано в блоке 1 GENERATE.
Таблица 13.1.
Номер по порядку | Разыгранное значение |
1 | 14 |
2 | 13 |
3 | 17 |
4 | 15 |
В табл.13.2 показаны первые три разыгранных значения, получаемых интерпретатором из выборки чисел с распределением 16 ± 4, которое задано в блоке 5 ADVANCE.
Таблица 13.2.
Номер по порядку | Разыгранное значение |
1 | 18 |
2 | 12 |
3 | 14 |
Далее
Главная Содержание главы 1"Пример моделирования 2А.Система с одним прибором и очередью"
Для установления периода моделирования используется сегмент таймера из двух блоков. На рис.2.10 уже был представлен сегмент, требуемый в нашем случае, в предположении, что единицей времени выбрана 1 мин. Его мы и используем в модели.
Рис.2.10
Логика моделирования. В представленной модели не выполняется никаких дополнительных действий для вывода клиентов из парикмахерской, когда моделирование завершается при значении таймера 480. Если бы в модели был настоящий парикмахер, то он после восьмичасового рабочего дня ушел бы с работы. Если, наоборот, была бы настоящая модель, то моделировалось бы закрытие дверей через 8 ч работы, а моделирование не прерывалось пока все клиенты, находящиеся в парикмахерской в этот момент времени, не были бы обслужены. Как это записывается на GPSS, будет показано дальше.
Использование модели. Бланк, на котором записана перфокарточная версия модели, показан на рис.2А.2, а. Соответствующая ей распечатка программы показана на рис.2А.2, б.
Рис.2A.2. Пример моделирования 2A.
Модель и распечатка программы:
а - заполненный бланк для перфорации модели;
б - распечатка программы для модели, представленной в части а.
На банке показаны поля имени (LOCATION), операции (OPERATION) и операндов (помечено символами А,В,С,D,Е,F,G). На распечатке по- ле имени отмечено символами * LOC.
LOCATION |   | OPERATION | A,B,C,D,E,F ------------------------> | ||||||||||||||||||||||||||||||||||||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 1 0 | 1 1 | 1 2 | 1 3 | 1 4 | 1 5 | 1 6 | 1 7 | 1 8 | 1 9 | 2 0 | 2 1 | 2 2 | 2 3 | 2 4 | 2 5 | 2 6 | 2 7 | 2 8 | 2 9 | 3 0 | 3 1 | 3 2 | 3 3 | 3 4 | 3 5 | 3 6 | 3 7 | 3 8 | 3 9 | 4 0 | 4 1 | 4 2 | 4 3 | 4 4 | 4 5 | 4 6 |
  |   |   |   |   | S | I | M | U | L | A | T | E |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
* |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
* |   |   |   |   | M | O | D | E | L |   | S | E | G | M | E | N | T |   | 1 |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
* |   |   |   |   | G | E | N | E | R | A | T | E |   | 1 | 8 | , | 6 |   | П | Р | И | Х | О | Д |   | К | Л | И | Е | Н | Т | О | В |   |   |   |   |   |   |   |   |   |   |   |   |
  |   |   |   |   | Q | U | E | U | E |   |   |   |   | J | O | E | Q |   | П | Р | И | С | О | Е | Д | И | Н | Е | Н | И | Е |   | К |   | О | Ч | Е | Р | Е | Д | И |   |   |   |   |
  |   |   |   |   | S | E | I | Z | E |   |   |   |   | J | O | E |   |   | П | Р | И | Х | О | Д |   | В |   | К | Р | Е | С | Л | О |   | П | А | Р | И | К | М | А | Х | Е | Р | А |
  |   |   |   |   | D | E | P | A | R | T |   |   |   | J | O | E | Q |   | У | Х | О | Д |   | И | З |   | О | Ч | Е | Р | Е | Д | И |   |   |   |   |   |   |   |   |   |   |   |   |
  |   |   |   |   | A | D | V | A | N | C | E |   |   | 1 | 6 | , | 4 |   | О | Б | С | Л | У | Ж | И | В | А | Н | И | Е |   | У |   | П | А | Р | И | К | М | А | Х | Е | Р | А |   |
  |   |   |   |   | R | E | L | E | A | S | E |   |   | J | O | E |   |   | О | С | В | О | Б | О | Ж | Д | Е | Н | И | Е |   | П | А | Р | И | К | М | А | Х | Е | Р | А |   |   |   |
  |   |   |   |   | T | E | R | M | I | N | A | T | E |   |   |   |   |   | У | Х | О | Д |   | И | З |   | П | А | Р | И | К | М | А | Х | Е | Р | С | К | О | Й |   |   |   |   |   |
* |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
* |   |   |   |   | M | O | D | E | L |   | S | E | G | M | E | N | T |   | 2 |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
* |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  |   |   |   |   | G | E | N | E | R | A | T | E |   | 4 | 8 | 0 | , | 1 |   | Т | А | Й | М | Е | Р |   | П | Р | И | Х | О | Д | И | Т |   | В |   | М | О | М | Е | Н | Т |   |   |
  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   | В | Р | Е | М | Е | Н | И | , | Р | А | В | Н | Ы | Й |   | 4 | 8 | 0 |   |   |
  |   |   |   |   | T | E | R | M | I | N | A | T | E |   | 1 |   |   |   |   | З | А | В | Е | Р | Ш | Е | Н | И | Е |   | П | Р | О | Г | О | Н | А |   |   |   |   |   |   |   |   |
* |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
* |   |   |   |   | C | O | N | T | R | O | L |   | C | A | R | D | S |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
* |   |   |   |   | S | T | A | R | T |   | 1 |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  |   |   |   |   | E | N | D |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
BLOCK NUMBER *LOG OPERATION A,B,C,D,E,F,G COMMENTS SIMULATE * * MODEL SEGMENT 2 * 1 GENERATE 460 TIMER ARRIVES AT TIME 460 2 TERMINATE 1 SMUT OFF THE RUN * * MODEL SEGMENT 1 * 3 GENERATE 16,6 CUSTOMERS ARRIVE 4 QUEUE JOEQ ENTER THE LINE 5 SEIZE JOE CAPTURE THE BARBER 6 DEPART JOEQ LEAVE THE LINE 7 ADVANCE 16,4 USE THE BARBER 8 RELEASE JOE FREE THE BARBER 9 TERMINATE LEAVE THE SHOP * * CONTROL CARDS * START 1 START THE RUN END RETURN CONTROL TO OPERATING SYSTEM |
Это увеличение получено за счет номеров блоков и номеров карт, находящихся соответственно в левой и правой колонках рис.2А.2,б.Легко убедиться, что номера блоков присвоены в соответствии с порядком, в котором следуют строки, представляющие блоки. Отметим также, что карты пронумерованы в порядке расположения строк. Комментарии используют для документации модели.Карты 2,3,4,12,13,14,17,18 и 19 на рис.2А.2, б являются комментариями и не являются частью сегментов модели или управляющими картами. Символ * в первой колонке (см. рис.2А.2, а) указывает на то, что карта является комментарием. Карты-блоки также могут быть прокомментированы в поле операнда. Эти комментарии аналогичны тем, которые были рассмотрены ранее и стояли рядом с блоками на рис.2A.1. На рис.2А.2,б первой картой является карта SIMULATE (МОДЕЛИРОВАТЬ). Если разработчик намерен выполнить прогон модели, то обычно эта карта стоит в начале колоды. На карте записано одно слово SIMULATE, помещенное в поле операции. Если эта карта отсутствует, то интерпретатор проверяет правильность записи модели на языке GPSS, но прогона модели не выполняет. Моделирование начинается после того, как интерпретатором в модели найдена карта START. Это объясняет, почему карта должна стоять в конце программы-модели (карта 20). Цифра 1 должна быть помещена как операнд А карты START. После того, как прогон модели завершен, работа ЭВМ над моделью еще не заканчивается. У разработчика остается много возможностей для продолжения работы. Независимо от того, используются ли эти возможности, существует некоторая точка в модели, перед которой помещены все команды управления прогонами. Здесь должна быть размещена карта END (ЗАКОНЧИТЬ). Эта карта побуждает интерпретатор вернуть управление в операционную систему. Карта END следует после карты START на рис.2А.2, б. Она состоит из слова END, занесенного в поле операции. Для модели в целом очень важен порядок, в котором располагаются карты сегментов модели, но порядок расположения сегментов безразличен.
Например, сегмент таймера может располагаться до основного сегмента на рис.2А.2 без какого-либо влияния на результат моделирования. Распечатка программы в этом случае будет такой, как показано на рис. 2А.4. Распечатка результатов. Ни из блок-схемы, ни из распечатки программы не видно, откуда получаются те или иные выходные результаты. По завершении моделирования интерпретатор GPSS автоматически распечатывает некоторое количество информации о поведении модели. Эта информация включает статистические данные по каждому из элементов, используемых в модели,т.е. по каждому из приборов и очередей (и других видов элементов,пока еще не рассмотренных). Рис. 2A.3. Часть распечатки примера моделирования 2A: а - ассемблированная модель; б - словарь символов приборов; в - словарь символов для очереди; г - значения времени и счетчик блоков; д - статистические данные по приборам; е - статистические данные по очередям. Русские эквиваленты названий элементов статистик, распечатываемых
по-английски, приведены в описании результатов.
а)
* * MODEL SEGMENT 1 * 1 GENERATE 18 6 2 QUEUE 1 3 SEIZE 1 4 DEPART 1 5 ADVANCE 16 4 6 RELEASE 1 7 TERMINATE * * MODEL SEGMENT 2 * 8 GENERATE 480 9 TERMINATE 1 * * CONTROL CARDS * START 1 |
б)
FACILITI SIMBOLS AND CORRESPONDING NUMBERGS 1 JOE |
в)
QUEUE SYMBOLS AND CORRESPONDING NUMBERS 1 JOEQ |
г)
RELATIVE CLOCK 480 ABSOLUTE CLOCK 480 BLOCK COUNTS BLOCK CURRENT TOTAL BLOCK CURRENT TOTAL BLOCK CURRENT TOTAL 1 0 27 2 1 27 3 0 26 4 0 26 5 1 26 6 0 25 7 0 25 8 0 1 9 0 1 |
д)
FACILITI AVERAGE NUMBER AVERAGE SEIZING PREEMPTING UTILISATION ENTRIES TIME/TRAN TRANS. NO. TRANS. NO. JOE .860 26 15.884 3 |
е)
QUEUE MAXIMUM AVERAGE TOTAL ZERO PERCENT AVERAGE SAVERAGE CONTENTS CONTENTS ENTRIES ENTRIES ZEROS TIME/TRANS TIME/TRANS JOEQ 1 .160 27 12 44.4 2.851 5.133 SAVERAGE TIME/TRANS = AVERAGE TIME/TRANS EXPLODING ZERO ENTRIES |
После ассемблирования все символические имена заменяются на числовые).Она обладает следующими четырьмя особенностями: Абсолютный номер блока, присвоенный интерпретатором, повторяется в объектном коде модели. Такими номерами являются номера 1 - 9 в левой колонке рис.2А.З,а. Операнды расположены не в смежных колонках и не разделены запятой. Они теперь расположены в полях по шесть колонок каждый и выровнены по левому краю (из рис. 2А.3, а пока явно не видно, что для операндов используют поля именно по шесть колонок). Все символические имена элементов в модели заменены на соответствующие им числовые эквиваленты, присвоенные интерпретатором. Например, операнд А блока QUEUE (блок 2) теперь равен 1, а не JOEQ,операнд А блока SEIZE (блок 3) теперь равен 1, а не JOE, и т.д. Комментарии, входящие в строки блоков модели, пропадают. Чистые карты - комментарии, т. е. карты, имеющие в первой колонке звездочку, не пропадают. Они целиком сохраняются в распечатке объектного кода модели. На рис.2А.З, б,в представлены перечни при боров и очередей. В перечне приборов представлены все числовые эквиваленты,присвоенные символическим именам приборов. Прибору с символическим именем JOE, в частности, присвоен номер 1 и в объектном коде модели; очередь с символическим именем JOEQ получила номер 1.Эти номера являются операндами А блоков SEIZE - RELEASE и QUEUE - DEPART на рис.2А.3,а. Если используются символические имена блоков, то в распечатке программы появляется соответствие между именами и их номерами. На рис.2А.З,г изображены значения времени и список блоков. В верхней строке рисунка указаны два значения времени - относительное и абсолютное. Различие между ними мы определим позднее. А сейчас достаточно заметить, что оба значения времени показывают 480. Это означает,что завершение моделирования произошло в момент модельного времени, равный 480.Сразу же за строкой времени на рис.2А.З,г дан список блоков. Он размещен в трех колонках: номер блока, помеченный на рисунке словом BLOCK (БЛОК),счетчик текущего содержимого, помеченный как CURRENT (ТЕКУЩЕЕ), и общее число входов, помеченное как TOTAL (ОБЩЕЕ).
Номера блоков соответствуют номерам, показанным на рис.2A.3,а. Счетчик текущего содержимого является счетчиком транзактов,находящихся в соответствующих блоках в момент завершения моделирования. Счетчик входов является счетчиком общего числа транзактов, которые вошли в соответствующие блоки в течение периода моделирования, включая также те из них, которые все еще находятся в блоке (если таковые имеются). Например, счетчик входов в блок 1 (рис.2А.З, г) равен 27. Это значит, что 27 транзактов вошло в модель через блок GENERATE, стоящий на первом месте. Аналогично, счетчик входов в блок 2 равен 27, это означает, что 27 транзактов вошло в блок QUEUE, стоящий на втором месте. Счетчик текущего содержимого в блоке 2 равен 1. Это означает, что только один транзакт все еще находится в блоке QUEUE,т.е. один клиент ждал обслуживания в момент завершения работы модели. В блоке 5,т.е. блоке ADVANCE, счетчик текущего содержимого равен 1, а счетчик входов равен 26. Это значит, что парикмахер обслуживал 26 клиентов, из этих 26 один все еще находится на обслуживании. Счетчики входов в блоках SEIZE и RELEASE равны 26 и 25 соответственно; это согласуется со значением счетчика блока ADVANCE. Рис.2А.4. Распечатка программы моделирования 2А с перестановкой сегментов модели.
BLOCK NUMBER *LOC OPERATION A,B,C,D,E,F,G COMMENTS SIMULATE * * MODEL SEGMENT 2 * 1 GENERATE 480 TIME ARRIVES AT TIME 480 2 TERMINATE 1 SHUT OFF THE RUN * * MODEL SEGMENT 1 * 3 GENERATE 18,6 CUSTOMERS ARRIVE 4 QUEUE JOEQ ENTERTHE LINE 5 SEIZE JOE CAPTURE THE BARBER 6 DEPERT JOEQ LEAVE THE LINE 7 ADVANCE 16,4 USE THE BARBER 8 RELEASE JOE FREE THE BARBER 9 TERMINATE LEAVE THE SHOP * * CONTROL CARDS * START 1 SRART THE RUN END RETURN CONTROL TO OPERATING SYSTEM |
В нижнейчасти рисунка указаны значения данных,располагаемых в колонках.Рассмотрим подробнее таблицы к рис.2А.5 и 2А.6 со ссылкой на распечатку результатов. Они выдают следующую информацию: Прибор JOE использовался в течение 86% времени, AVERAGE UTILIZATION (НАГРУЗКА) = 860. Прибор JOE был занят обслуживанием 26 раз, NUMBER ENTRIES (ЧИСЛО ВХОДОВ) = 26. Это соответствует ранее рассмотренному значению счетчика входов, равному 26 для блока SEIZE. Среднее время интервала обслуживания прибора JOE равно 15,884 мин, AVERAGE TIME/TRANS (СРЕДНЕЕ ВРЕМЯ/ТРАН) = 15.884. Транзакт номер 3 находился на обслуживании приборомJOEвмоментзавершения моделирования SEIZING TRANS.NO. (НОМЕР ОБСЛУЖИВ. ТРАНЗ.) = 3. Тот факт, что JOE был занят призавершении моделирования, соответствует ранее рассмотренному значению счетчика текущего содержимого, равного 1 для блока ADVANCE. В очереди JOE никогда не было более одного клиента,МАХIMUMCONTENTS (МАКСИМАЛЬНОЕ СОДЕРЖИМОЕ) = 1. Среднее число клиентов, находившихся в очереди, равно 0,160, AVERAGE CONTENTS (СРЕДНЕЕ СОДЕРЖИМОЕ) = 160. Числом входов в очередь является27, TOTAL ENTRIES (ОБЩЕЕ ЧИСЛО ВХОДОВ) = 27. Среди этих 27 входов в очередь было 12 нулевых, ZERO ENTRIES (НУЛЕВЫХ ВХОДОВ) = 12. Из общего числа входов в очередь 44,4% было нулевых, PERCENT ZEROS (ПРОЦЕНТ НУЛЕВЫХ) = 44,4. Среднее время нахождения в очереди на один вход (включая нулевые входы) равно 2,851 мин,AVERAGE TIME/TRANS (СРЕДНЕЕ ВРЕМЯ/ТРАНЗ.) = 2,851. Среднее время нахождения в очереди на один ненулевой вход равно5,133мин, $ AVERAGE TIME/ TRANS ($ СРЕДНЕЕ ВРЕМЯ/ТРАНЗ.) * = 5.133. В момент завершения моделирования один транзакт находился в очереди, CURRENT CONTENTS(ТЕКУЩЕЕ СОДЕРЖИМОЕ) = 1.Это соответствует рассмотренному ранее значению счетчика текущего содержимого для блока QUEUE (СТАТЬ В ОЧЕРЕДЬ), равного единице. Рис.2А.5 Описание элементов, показанных на рисунке 2А.3, д.
FACILITI | AVERAGE | NUMBER |
UTILIZATION | ENTRIES | |
JOE | .860 | 26 |
  |   |   |
AVERAGE | SEIZIHG | PREEMPTING |
TIME/TRAN | TRANS.NO. | TRANS.NO |
15.884 | 3 | |
Колонка | Значение |
1 | Имена(символические или числовые) приборов, используемых в модели |
2 | Доля времени, в течении которого соответсвующие приборы были в состоянии занятости |
3 | Число обслуживаний |
4 | Средняя продолжительность одного обслуживания |
5 | Номер транзакта(если такой есть), который в настоящее время находится на обслуживании |
6 | Номер транзакта(если такой есть), который в настоящее время занял("захватил") прибор |
Это особенно справедливо для приборов. Так как только один транзакт в единицу времениможет использовать прибор, NUMBER ENTRIES берется непосредственно из счетчика числа транзактов,находившихся на приборе, а AVERAGE TINE/TRANS является средним временем обслуживания транзактов, находившихсянаприборе.Также просто все можно было бы описать, еслибыоперанд В блоков QUEUE и DEPART всегда был равен 1 (для примера моделирования 2А это справедливо, таккакоперанд В определен по умолчанию). Вспомним, чтоприописании очередей указывалось, что интерпретаторсчитает статистику в соответствии с элементами содержимого, а не транзактами. В примере моделирования2А (и в пособии вообще) каждый транзакт, входящий в очередь, указываетвточности на один элемент содержимого.Если бы это было не так, необходимо было бы описать статистические данные очереди следующим образом. Рис.2А.6 Описание элементов, показанных на рисунке 2А.3, е.
QUEUE | MAXIMUM | AVERAGE | TOTAL | ZERO |
CONTENTS | CONTENTS | ENTRIES | ENTRIES | |
JOEQ | 1 | .160 | 27 | 12 |
  |   |   | ||
PERCENT | AVERAGE | SAVERAGE | TABLE | CURRENT |
ZEROS | TIME/TRANS | TIME/TRANS | CONTENS | |
44.4 | 2.851 | 5.133 | NUMBER | 1 |
Колонка | Значение |
1 | Имена(символические или числовые) очередей, используемых в модели |
2 | Наибольшее значение содержимого очереди, зарегистрированное в течение моделирования |
3 | Среднее значение содержимого очереди |
4 | Общее число входов в очередь |
5 | Общее число входов в очередь без последующего ожидания (нулевые входы) |
6 | Процент нулевых входов от общего числа входов |
7 | Среднее время, проведенное в очереди с учетом всех входов(нулевые входы также включаются в среднее) |
8 | Среднее время, проведенное в очереди(нулевые входы исключаются из среднего) |
9 | Имя (символическое или числовое) таблицы,GPSS, в которой представлено распределение времени ожидания для этой очереди |
10 | Текущее значение содержимого очереди |
TOTALENTRIES (ОБЩЕЕ ЧИСЛО ВХОДОВ) - это число элементов содержимого, вошедших в очередь. Более точно, TOTAL ENTRIES - зто значение счетчика, сброшенного в ноль в начале и модифицируемого назначение, равное значению операнда В блока QUEUE при каждом использовании блока. Исключением является случай, когда операнд В блока QUEUE равен 1; в общемслучае значение счетчика не равно общему числу транзактов, являющихся элементами очереди в течение моделирования. 2. ZERO ЕХТRIES (НУЛЕВЫЕ ВХОДЫ) - это число элементов содержимого,котороенаходилось в очереди нуль времени. Точнее, ZЕRО ENTRIES - это значение счетчика, в начале сброшенного в нуль, к которому добавлялось значение, равноезначению операнда В блока DEPART каждый раз при выполнении подпрограммы блока, если время нахождения транзакта в очереди равнялось нулю. Исключением является случай, когда операнд В блока DEPART равен 1;в общем случае значение счетчика не совпадает с числом транзактов, являющихся элементами очереди, проведшими нуль времени в очереди. 3. AVERAGE TIME/TRANS (СРЕДНЕЕ ВРЕМЯ/ТРАНЗ.) -это среднее время нахождения в очереди на единицу содержимого. Это значение совпадает со значением среднего времени нахождения транзактов в очереди, если предполагать, что каждый транзакт, проходя очередь, вычитает из счетчика текущего содержимого то же число,которое было прибавлено к счетчику текущего содержимого ранее. Если это не так,то величина AVERAGE TIME/TRANS означает нечто иное. 4. Аналогично МАХIMUM CONTENTS (МАКСИМАЛЬНОЕ СОДЕРЖИМОЕ), AVERAGE CONTENTS (СРЕДНЕЕ СОДЕРЖИМОЕ),PERCENT ZEROS (ПРОЦЕНТ НУЛЕВЫХ), $AVERAGE TIME/TRANS (СРЕДНЕЕ ВРЕМЯ/ТРАНЗ.) и CURRENT CONTENTS (ТЕКУЩЕЕ СОДЕРЖИМОЕ) должны интерпретироваться в соответствии с концепцией элементов содержимого,а не транзактов, за исключением использования операнда В блоков QUEUE и DEPART,равного единице. Уточним значение некоторых элементов статистических данных об очереди и приборе. Если прибор в момент завершения моделирования занят, то очевидно занижение данных, называемых AVERAGE TIME/TRANS.
Это возможно, посколькуAVERAGE TIME/TRANS вычисляется делением полного модельного времени занятости прибора на значение NUMBER ENTRIES (ЧИСЛО ВХОДОВ). Если существует транзакт, который еще не обслужен до завершения моделирования, то неполное время занятости включается в статистические данные AVERAGE TIME/TRANS. То же самое можно сказать относительно величиныAVERAGE TIME/ TRANS, рассчитанной для очереди делением общеговремени нахождения в очереди на значение TOTALENTRIES (ОБЩЕЕ ЧИСЛО ВХОДОВ). Если очередь имеет CURRENT C0NTENTS (ТЕКУЩЕЕ СОДЕРЖИМОЕ) в момент завершения моделирования, то еще не учтено полное время нахождения в очереди. В результате величины AVERAGE TIME/TRANS и $ AVERAGE TIME/TRANS занижены. И, наконец, самое раннее значение модельного времени, при котором может начаться движение транзактов, равно 1.Это означает, что на интервале времени 0 - 1 содержимое очередей в модели равно нулю, все приборы свободны и т.д.Поскольку такие данные статистики, как среднее содержимое очереди, нагрузка приборов и т.п. вычисляются от значения модельного времени,равного 0,существует незначительное отклонение этих данных от истинных. Главная Содержание главы 1
"Пример моделирования 2D. Система обслуживания с прибором, очередью и обратной связью"
Метод построения модели. Для моделирования на GPSS необходимо определить: условия работы моделируемой системы; какие элементы GPSS надо использовать для удовлетворения условий модели.
В данном случае есть два вида ограничивающих условий. Во-первых, имеется лишь одна печь. Вовторых, существует некоторое фиксированное число сборщиков, работающих в системе. Естественно, для моделирования печи использовать понятие "прибор". Также естественно отождествить сборщиков с транзактами. Тогда можно считать, что сборщики циркулируют в системе. Аналогично тому, как они периодически осуществляют сборку и обжиг, транзакты циркулируют в GPSS-модели системы.
В реальной системе, после того как сборщик вынимает из печи обожженную деталь, он возвращается и начинает новый этап сборки. В модели, после того как транзакт завершает использование прибора, моделирующего печь, он должен быть возвращен назад посредством блока TRANSFER в блок следующей сборки. Для того чтобы ограничить общее число транзактов, циркулирующих в модели, необходимо использовать операнд D блока GENERATE, с помощью которого можно задать желаемое число транзатов.
Для того чтобы вычислить прибыль, соответствующую заданному числу сборщиков, необходимо знать, сколько готовых деталей они сделали в течение моделируемого периода. Число использований печи в точности совпадает с этим значением.
Таблица определений. Единица времени: 1 мин.
Элемент | Стоимость |
Зарплата сборщика | 3.75 $ в час |
Стоимость печи | 80 $ за восьмичасовой рабочий день (независимо от степени использования) |
Цена материала | 2 $ за одну деталь |
Стоимость готового изделия | 7 $ за деталь |
Элемент GPSS | Интерпретация | ||||
Транзакты:
|
 
|
||||
Приборы:
|
 
|
Обсуждение. Логика моделирования. Это первая модель, в которой представляется случай дать символическое имя блоку. На рис.2D.1 блок ADVANCE 30,5 получил имя ВАСК.
На рис. 2D. 2 это символическое имя появляется в поле имени (находится под пометкой *LOC) на карте блока ADVANCE. В колонке номера блока на этом рисунке видно, что символическое имя ВАСК эквивалентно номеру 2.
Рис.2D.1. Блок-схема пример моделирования 2D.
BLOCK CARD NUMBER *LOC OPERATION A,B,C,D,E,F,G COMMENTS NUMBER SIMULATE 1 * 2 * MODEL SEGMENT 1 3 * 4 1 GENERATE ,,,4 PROVIDE 4 ASSEMBLERS 5 2 BACK ADVANCE 30,5 ASSEMBLE NEXT WIDGET 6 3 SEIZE OVEN CAPTURE THE OVEN 7 4 ADVANCE 8,2 USE THE OVEN 8 5 RELEASE OVEN FREE THE OVEN 9 6 TRANSFER ,BACK GO TO THE NEXT ASSEMBLY 10 * 11 * MODEL SEGMENT 2 12 * 13 7 GENERATE 2400 TIMER ARRIVES AFTER 5 DAYS 14 8 TERMINATE 1 SHUT OF THE RUN 15 * 16 * CONTROL CARDS 17 * 18 START 1 START THE RUN 19 END RETURN CONTROL TO OPERATING SYSTEM 20 |
"Пример моделирования 2Е. Задача об управлении производством"
Постановка задачи. На трикотажной фабрике 50 швейных машин работают по 8 ч в день и по 5 дней в неделю. Любая из этих машин может в любой момент времени выйти из строя. В этом случае ее заменяют резервной машиной, причем либо сразу, либо по мере ее появления. Тем временем сломанную машину отправляют в ремонтную мастерскую, где ее чинят и возвращают в цех, но уже в качестве резервной.
В существующем замкнутом цикле движения машин легко выделить четыре фазы (рис.2Е.1).
Рис.2Е.1
На рисунке квадраты представляют машины, находящиеся в работе или в резерве. Перечеркнутые квадраты представляют собой машины либо ремонтируемые, либо ожидающие ремонта. Показаны две машины в ремонте; предполагается, что два человека могут параллельно чинить машины. Всего в системе находятся 59 машин (две в ремонте, две ждут ремонта, 50 в работе и пять готовы к использованию).
Управляющий хочет знать, сколько рабочих следует нанять для работы в мастерской, сколько машин следует иметь в резерве, какую платить за это арендную плату, чтобы резервными машинами можно было подменить 50 собственных. Цель - минимизация стоимости производства.Оплата рабочих в мастерской 3,75 доллара в час. За машины, находящиеся в резерве, надо платить по 30 долларов в день. Почасовой убыток при использовании менее 50 машин в производстве оценивается примерно в 20 долларов на машину. Этот убыток возникает из-за снижения производства.
Опыт эксплуатации подсказывает, что на ремонт сломанной машины уходит примерно 7 ± 3 ч, распределение равномерное. Когда машину используют в производстве, время наработки до отказа распределено равномерно и составляет 157 ± 25 ч. Время, необходимое для перевозки машины из цеха в мастерскую и обратно, мало, и его не учитывают.
Между рабочими в мастерской не делают никаких различий. Не делают различий также и между машинами. Иными словами, распределение времени ремонта не зависит от того, кто какую машину ремонтирует. Распределение времени наработки до отказа одинаково как для собственных, так и для арендуемых машин.
Плата за арендуемые машины не зависит от того, используют их или они простаивают. По этой причине не делают попыток увеличить число собственных машин в работе в любой период времени. Предполагаем, что машину снимают с работы только в том случае, если она ломается. Необходимо построить на GPSS модель такой системы и исследовать на ней расходы при различном числе арендуемых машин, доступных управляющему. Найдите такую величину, которая минимизирует стоимость эксплуатации системы. Метод построение модели. Как и в случае 2D, предполагается, что в первую очередь следует разобраться в том, какие ограничения существуют в системе, а затем определить, какие элементы GPSS следует использовать для удовлетворения этих ограничений. В нашей системе (см. рис. 2Е.1) существуют три ограничения:
Число рабочих в мастерской. Максимальное число швейных машин, одновременно находящихся в производстве. Общее число машин, циркулирующих в системе.
Для моделирования двух первых ограничений удобно использовать многоканальные устройства, а третье ограничение моделировать транзактами. В результате такого выбора, грубо говоря, рабочие мастерской и машины, находящиеся в производстве, задаются некоторыми константами (см. рис.2Е.1) и занимают в системе определенное место. Сами швейные машины являются динамическими объектами, перемещаемыми из одного места в другое в процессе их циркулирования в системе. Рассмотрим состояния определенной машины в процессе полного оборота в цикле системы на рис.2Е.1. Предположим, что машина в настоящий момент находится в резерве. Тогда многоканальное устройство NOWON ( nоwоn, т.е. в работе), используемое для моделирования находящихся в работе машин, заполнено, и резервные машины не могут войти в многоканальное устройство. Машина, находящаяся в состоянии резерва, может получить возможность войти в работу. Транзакт, моделирующий ее, может осуществить это после многократных попыток войти в многоканальное устройство NOWON, когда одна из них, наконец, будет успешной. Проходя через блок ENTER в блок ADVANCE, транзакт моделирует время работы этой машины до тех пор, пока последняя не сломается. После того, как машина вышла из строя, транзакт покидает многоканальное устройство NOWON и тем самым открывает возможность другой резервной машине войти в работу.
Теперь транзакт ожидает (если в этом есть необходимость) входа в многоканальное устройство MEN (рабочие мастерской). Войдя в это многоканальное устройство, транзакт играет роль ремонтируемой машины. Когда он уходит из этого многоканального устройства,тем самым освобождая рабочего, последний может приняться за ремонт следующей машины. Тем временем транзакт вновь возвращается в ту точку модели, в которой он снова начинает делать попытки войти в многоканальное устройство NOWON. Общее число машин, циркулирующих в системе, равно 50 собственным машинам плюс некоторое число арендуемых для резерва. Это число следует задавать до начала прогона модели с использованием ограничителя блока GENERATE.
Единственным недостающим элементом модели теперь является таймер. Обратите внимание на то, что многоканальное устройство NOWON можно рассматривать как 50 операторов швейных машин. Эта точка зрения отвечает тому ограничению, что одновременно не могут работать более 50 швейных машин. Эта довольно сложная задача на GPSS может быть промоделирована очень просто. Модель этой же системы на языке FORTRAN значительно сложнее.
Таблица определений. Единица времени: 1 ч.
Таблица 24.1. Таблица определений примера моделирования 2Е.
Элементы GPSS | Интерпретация | ||||||
Транзакты:
|
 
|
||||||
Многоканальные устройства:
|
 
|
BLOCK NUMBER *LOC OPERATION A,B,C,D,E,F,G COMMENTS SIMULATE * * STORAGE CAPACITY DEFINITION(S) * STORAGE S$MEN,3/S$NOWON,50 3 MEN; MAX OF 50 MATCH`S RUNNING * * MODEL SEGMENT 1 * 1 CNTRL GENERATE ,,,53 PROVIDE 53 MACHINES (50 OWNED; 3 RENTED) 2 BACK ENTER NOWON MACHINE GOES INTO PRODUCTION 3 ADVANCE 157,25 MACHINE IS RUNNING 4 LEAVE NOWON MACHNE FAULTS; COMES OUT OF PRODUCTION 5 ENTER MEN CAPTURE A REPAIR MAN 6 ADVANCE 7,3 MACHINE IS BEING REPAIRED 7 LEAVE MEN FREE THE REPAIRMAN 8 TRANSFER ,BACK * * MODEL SEGMENT 2 * 9 GENERATE 6240 TIMER COMES AFTER 3 YEARS (40-HOUR WEEKS) 10 TERMINATE 1 SHUT OFF THE RUN * * CONTROL CARDS, BLOCK OPERAND RE-DEFS, AND STG CAPACITY RE-DEFS * START 1 START THE 1ST RUN 1 CNTRL GENERATE ,,,54 SET RENTED MACHINES = 4 FOR 2ND RUN MULTIPLE DEFINITION OF SYMBOL IN ABOVE CARD CLEAR CLEAR FOR 2ND RUN START 1 START THE 2ND RUN 1 CNTRL GENERATE ,,,55 SET RENTED MACHINES = 5 FOR 3RD RUN MULTIPLE DEFINITION OF SYMBOL IN ABOVE CARD CLEAR CLEAR FOR 3RD RUN START 1 START THE 3RD RUN STORAGE S$MEN,4 SET REPAIRMEN HIRED = 4 FOR 4TH RUN 1 CNTRL GENERATE ,,,53 SET RENTED MACHINES = 3 FOR 4TH RUN MULTIPLE DEFINITION OF SYMBOL IN ABOVE CARD CLEAR CLEAR FOR 4TH RUN START 1 START THE 4TH RUN 1 CNTRL GENERATE ,,,54 SET RENTED MACHINES = 4 FOR 4TH RUN MULTIPLE DEFINITION OF SYMBOL IN ABOVE CARD CLEAR CLEAR FOR 5TH RUN START 1 START THE 5TH RUN 1 CNTRL GENERATE ,,,55 SET RENTED MACHINES = 5 FOR 6TH RUN MULTIPLE DEFINITION OF SYMBOL IN ABOVE CARD CLEAR CLEAR FOR 6TH RUN START 1 START THE 6TH RUN STORAGE S$MEN,5 SET REPAIRMEN HIRED = 5 FOR 4TH RUN 1 CNTRL GENERATE ,,,53 SET RENTED MACHINES = 3 FOR 7TH RUN MULTIPLE DEFINITION OF SYMBOL IN ABOVE CARD CLEAR CLEAR FOR 7TH RUN START 1 START THE 7TH RUN 1 CNTRL GENERATE ,,,54 SET RENTED MACHINES = 4 FOR 8TH RUN MULTIPLE DEFINITION OF SYMBOL IN ABOVE CARD CLEAR CLEAR FOR 8TH RUN START 1 START THE 8TH RUN 1 CNTRL GENERATE ,,,55 SET RENTED MACHINES = 5 FOR 9TH RUN MULTIPLE DEFINITION OF SYMBOL IN ABOVE CARD CLEAR CLEAR FOR 9TH RUN START 1 START THE 9TH RUN END RETURN CONTROL TO OPERATING SYSTEM |
На основании результатов моделирования можно будет сказать, какие затраты несет производство при различных сочетаниях "нанимать/арендовать". Для фиксированного числа нанятых рабочих мастерской средние дневные расходы будут меняться в зависимости от числа арендуемых машин (рис. 2E.5). Рис.2Е.5 Зависимость дневных расходов от числа
арендуемых машин (число рабочих постоянно). При достаточно малом числе арендуемых машин расходы велики ввиду убытков из-за потери объема производства. При большом числе арендуемых машин стоимость также велика, поскольку приходится дорого платить за резервные машины, число которых больше необходимого. По-видимому, где-то между этими значениями находится минимум. Подобным же образом, при заданном числе арендуемых машин влияние числа нанятых рабочих на дневные расходы выглядит так, как показано на рис. 2Е.6. При малом числе рабочих расходы высоки ввиду убытков из-за потери объема производства. При большом числе рабочих расходы также высоки ввиду высокой оплаты простаивающих рабочих. Рис.2Е.6.Зависимость дневнх расходов от числа
рабочих (число арендуемых машин постоянно) Вполне естественно предположить, что расходы проходят через свой минимум где-то между этими двумя величинами. На рис. 2Е.7 представлено трехмерное пространство для описанной ситуации. Обратите внимание на то, что множество точек, получаемых пересечением линий решетки на плоскости, представляют собой область допустимых решений (т. е. целых значений) пар величин "число нанятых - число арендуемых". Рис.2Е.7. Поверхность дневных расходов в трехмерном пространстве. Третьим измерением являются дневные расходы, соответствующие каждой из этих точек пересечений (значения расходов не показаны). Множество всех значений расходов образует поверхность расходов в третьем измерении. (Не поверхность, а точки образуют множество дискретных значений. Тем не менее удобно использовать термин "поверхность".) Рис. 2Е.5 и рис. 2Е.6 являются сечениями этой поверхности. Можно предположить, что эта поверхность имеет одну точку минимума.
Поиск оптимального сочетания "число нанятых - число арендуемых" является, следовательно, поиском этой точки. Этот поиск можно осуществить различными методами. Рассмотрим два из них. Можно применить метод наискорейшего спуска. Этот метод заключается в выборе оптимального направления движения в области значений переменных по некоторому контуру до тех пор, пока не будут исчерпаны все возможные направления движения. Особенно удобно использовать этот метод либо при диалоговом режиме доступа к модели на ЭВМ через выносной пульт, либо если этот метод встроен в модель. В данной книге вторым методом мы пользоваться не будем. Модель может выполняться таким образом, что за каждый прогон определяется значение стоимости для одного соотношения значений "число нанятых - число арендуемых", и эти соотношения последовательно перебираются. Сначала можно исследовать довольно редкую решетку, так чтобы соотношения отстояли довольно далеко друг от друга. Рассмотрение результата обычно показывает, в какой области следует продолжать исследование. На следующем этапе моделирования исследуется ограниченная область с более близко расположенными значениями интересующего нас соотношения. Если необходимо, этот процесс можно продолжать, сужая область и делая решетку более частой. Так можно дойти до оптимального решения. Для начала напомним, что дневная оплата рабочих, аренда машин и убытки из-за нехватки машин составляют 30, 30 и 160 долларов соответственно. Стоимость убытков от потери объема продукции непропорционально велика. Это означает, что оптимальное соотношение следует искать среди таких значений, которые вызывают потери из-за простоев машин. Теперь рассмотрим условия, при которых ожидаются небольшие потери продукции. Мы видим из исходных данных, что среднее время работы машины равно 157 ч, а среднее время ее восстановления 7 ч. Рассмотрим некоторую гипотетическую "идеальную" систему, в которой нет очередей из машин. В такой идеальной системе вышедшая из строя машина никогда не простаивает перед тем, как рабочий начнет ремонт.
Кроме того, она сразу после ремонта возвращается в работу. Тогда каждая машина имеет средний цикл времени, равный 164 ч. Использование машины в такой идеальной системе равно примерно 95% [157/164 = 0,95]. Если в работе все время должно быть 50 машин (чтобы исключить потери из-за снижения объема производства), то общее число машин, циркулирующих в системе, должно быть равно 52,6 [52,6 Х 0,95 = 50 ]. При 50 работающих машинах 2,6 машины должны быть в резерве. Это, в свою очередь, означает, что следует нанять 2,6 рабочих. Приведенный расчет основан на некоторой идеализации системы. Конечно из-за наличия случайности в функционировании системы машины будут простаивать в двух местах, где ожидание потенциально возможно. Более того, арендовать 2,6 машины или нанять 2,6 рабочих невозможно. В результате приходим к выводу, что следует арендовать три, четыре или пять машин и взять на работу троих, четверых или пятерых рабочих. Это означает, что необходимо провести моделирование при девяти комбинациях, получающихся при переборе трех значений числа рабочих и трех значений числа машин. После того, как моделирование будет проведено, станет ясно, что наименьшую оценку стоимости дневных потерь дает соотношение "четверо рабочих - четыре резервные машины". Использование модели. Для моделирования использовали модель, представленную на рис. 2Е.2. Было осуществлено девять реконфигураций модели за один этап моделирования. Подготовленная колода карт для этого выглядела так, как показано на рис. 2Е.З. Обратите внимание на то, что карта 5 определяет емкость многоканальных устройств MEN и NOWON значениями 3 и 50 соответственно. Это соответствует трем нанятым рабочим и 50 одновременно работающим машинам. Карта 9 определяет блок GENERATE, через который в модель входят транзакты-машины. Операнд D равен 53, что соответствует наличию трех резервных арендуемых машин (операнд D равен сумме собственных и арендуемых машин). Блок GENERATE имеет символическое имя CNTRL (CoNTRoL, т.е. управление), поскольку этот блок должен переопределяться между картами START, когда необходимо отразить изменения в числе арендуемых машин.
После первой карты START карты 26, 27 и 28 соответственно изменяют модель (отражают реконфигурацию) и определяют четыре арендуемые машины, очищают модель от транзактов и сбрасывают статистику после первого прогона модели. Начинается моделирование при условиях "трое рабочих - четыре арендуемые машины". Карты 29, 30 и 31 повторяют эту процедуру и определяют соотношение "трое рабочих - пять арендуемых машин". Затем карта 32 переопределяет емкость многоканального устройства MEN на 4. Карта 33 модифицирует блок GENERATE с именем CNTRL, что снова определяет "три арендуемые машины". Далее модель очищается картой 34, а карта 35 начинает моделирование при соотношении "четверо рабочих - три арендуемые машины". Затем перебираются соотношения (4 - 4),(4 - 5),(5 - 3), (5 - 4), (5 - 5). Результаты моделирования. (Полное время моделирования на ЭВМ IBM 360/67 равнялось 68,2 с.) На рис.2Е.4 представлены выходные данные по многоканальным устройствам для первых трех изучаемых конфигураций системы. Для каждого многоканального устройства выдается семь различных типов информации. Рассмотрим их значения для многоканального устройства MEN (рис. 2Е.4, а). Моделировать три параллельно работающих прибора этого многоканального устройства, CAPACITY (ЕМКОСТЬ) =3. В среднем 2,185 из этих устройств были в состоянии занятости, AVERAGE CONTENTS (СРЕДНЕЕ СОДЕРЖИМОЕ) = 2,185. В среднем эти три прибора были загружены на 72,8%, AVERAGE UTILIZATION (СРЕДНЯЯ НАГРУЗКА) = 0,782. Общее число занятий приборов было 1924, ENTRIES (ВХОДОВ) = 1924. Среднее время на одно занятие было 7,087 единиц, AVERAGE TIME/TRAN (СРЕДHEE ВРЕМЯ/ТРАН) = 7,087. Ни один из приборов не находился в занятом состоянии в момент остановки моделирования, CURRENT CONTENTS (ТЕКУЩЕЕ СОДЕРЖИМОЕ) = . В процессе моделирования были моменты,когда все три прибора были в состоянии занятости одновременно, МАХIMUM CONTENTS (МАКСИМАЛЬНОЕ СОДЕРЖИМОЕ) = 3. Просматривая рис. 2Е.4, можно отметить, что AVERAGE UTILIZATION (СРЕДНЯЯ НАГРУЗКА) многоканального устройства NOWON изменяется от 0,983 до 0,989 и далее до 0,992.
Отметим также, что в момент выдачи результатов (рис. 2Е.4,а) фабрика работала с полной нагрузкой, т.е. CURRЕNT CONTENTS (ТЕКУЩЕЕ СОДЕРЖИМОЕ) многоканального устройства NOWON было равно 50 Сопоставьте эти значения с аналогичными значениями на рис. 2Е.4, б и в. В табл.24.2(119) собраны величины нагрузки многоканального устройства NOWON как функции девяти различных значений соотношения "число рабочих - число арендуемых машин", определяемых моделью 2Е.3. Результаты соответствуют сделанным ранее предположениям. При заданном числе рабочих нагрузка растет при увеличении числа арендуемых машин. Аналогично этому при заданном числе арендуемых машин нагрузка растет при увеличении числа рабочих. Таблица 24.2. Нагрузка многоканального устройства как функция
различных соотношений "число рабочих - число машин".
Число рабочих | Число арендуемых машин | ||
3 | 4 | 5 | |
3 | 0.983 | 0.989 | 0.992 |
4 | 0.989 | 0.993 | 0.997 |
5 | 0.991 | 0.993 | 0.997 |
различных соотношениях "число рабочих - число машин". а) Фиксированная плата
Число рабочих | Число арендуемых машин | ||
3 | 4 | 5 | |
3 | 180 | 210 | 240 |
4 | 210 | 240 | 270 |
5 | 240 | 270 | 300 |
Число рабочих | Число арендуемых машин | ||
3 | 4 | 5 | |
3 | 136 | 88 | 64 |
4 | 88 | 56 | 40 |
5 | 72 | 56 | 24 |
Число рабочих | Число арендуемых машин | ||
3 | 4 | 5 | |
3 | 316 | 298 | 304 |
4 | 298 | 296 | 310 |
5 | 312 | 326 | 324 |
"Пример моделирования 2С. Измененная дисциплина обслуживания в системе с одним прибором и очередью"
Постановка задачи. На некоторой фабрике в кладовой работает один кладовщик. Он выдает запасные части механикам, обслуживающим станки и устанавливающим эти части на испорченных станках (запасные части довольно дороги и, кроме того, их ассортимент слишком велик для того, чтобы каждый механик мог иметь запасную часть каждого вида в своем ящике). Время, необходимое для удовлетворения запроса, зависит от типа запасной части. Запросы бывают двух категорий. Соответствующие данные представлены в табл. 2С.1.
Таблица 2С.1. Интервалы времени прихода и времени обслуживания запросов механиков для примера 2С.
Категория запроса | Интервалы времени прихода механиков, с | Время обслуживания, с |
1 | 420+-360 | 300+-90 |
2 | 360+-240 | 100+-30 |
Кладовщик обслуживает механиков по принципу "первым пришел - первым обслужен" независимо от категории запроса. Такая дисциплина обслуживания очереди изображена на рис. 2С. 1, на котором кружки и треугольники изображают механиков, делающих запросы категории 1 и 2 соответственно. На рис. 2C.1 запрос категории 2 обслуживается, а один запрос категории 1 и два запроса категории 2 ждут своей очереди в указанном порядке.
Рис.2С.1. Дисциплина обслуживания "первым пришел- первым обслужен"
при наличии двух категорий запросов без приоритетов.
Поскольку сломанный станок ничего не производит, то простой механика в очереди приносит убыток 0,25 цента в секунду (9 долларов в час). Эта стоимость не зависит от того, за какой запасной частью ушел механик. Руководитель считает, что среднее число простаивающих механиков можно уменьшить, если запросы категории 2 в кладовой будут удовлетворяться быстрее запросов категории 1. (Среднее время обслуживания запроса категории 2 меньше, чем категории 1.
Если обслуживающий прибор выбирает запрос с наименьшим средним временем обслуживания, то говорят, что имеет место дисциплина обслуживания "ближайшая операция кратчайшая".) Только в том случае, когда в очереди нет ни одного запроса категории 2, обслуживаются запросы категории 1.
Эта дисциплина обслуживания изображена на рис. 2С.2,на котором очередь состоит из двух сегментов. Сегмент, располагаемый в начале очереди, является высокоприоритетным, а находящийся в конце очереди - низкоприоритетным. Дисциплина обслуживания очереди на рис.2С.2 называется "первым пришел - первым обслужен внутри приоритетного класса".
Рис.2С.2. Дисциплина обслуживания "первым пришел - первым обслужен"
при наличии двух категорий запросов с приоритетами. Ситуация ожидания механиками на рис.2С.2 аналогична ситуации на рис.2С.1. Кладовщик работает над удовлетворением заявки категории 2 (треугольник).Два других запроса категории 2 ожидают в очереди; кроме того, в очереди находится один запрос категории 1 (кружок). Только тогда, когда высокоприоритетный сегмент очереди пуст, обслуживаются заявки низкоприоритетного сегмента. Необходимо coздать модель работы кладовой для обеих дисциплин обслуживания очереди и выполнить моделирование для каждой из них в течение восьмичасового рабочего дня. Уменьшится ли среднее число ожидающих механиков в очереди? Сколько денег ежедневно будет сэкономлено при использовании приоритетного обслуживания? В стоимость потерь не следует включать простои механиков во время обслуживания. Метод построения модели. Система, которую необходимо промоделировать, очень напоминает систему из примера 2В. Есть два различных типа заявок, поступающих на обслуживание к единственному прибору. Различаются распределения интервалов прихода и времени обслуживания для этих типов заявок. Усложнение заключается в том, что один из типов имеет преимущество в обслуживании. Построить модель можно, используя тот же подход, что и в примере 2В. Но при этом надо найти средство задания существующей разницы в моделях, заключающейся в различных приоритетах обслуживания. Аналогично тому, как это сделано и примере моделирования 2В, запросы категории 1 могут моделироваться одним сегментом, а запросы категории 2 - другим. Различие относительных приоритетов задается путем использования в качестве операнда Е блока GENERATE для запросов категории 2 большего значения, чем для запросов категории 1.
Например, запросы категории 2 могут входить в модель через блок GENERATE с операндом Е, равным 2, а запросы категории 1 - через блок GENERATE с операндом Е, равным 1. Конечно, абсолютный уровень приоритетов не имеет значения. Важно лишь то, что транзакты, представляющие механиков категории 2, имеют больший приоритет, чем транзакты, представляющие механиков категории 1. То, как влияет уровень приоритетов транзактов на обработку, видно при рассмотрении цепи текущих событий. Вспомним, что при перенесении транзактов из цепи будущих событий в цепь текущих событий транзакты в цепи текущих событий занимают положение, являющееся последним внутри соответствующего приоритетного класса. Более того, чем выше приоритетный класс, тем ближе к началу ЦТС располагается транзакт. Поскольку интерпретатор GPSS просматривает цепь текущих событий сначала, он пытается двигать вначале высокоприоритетные транзакты. Позднее, при просмотре он пытается двигать и транзакты, которые имеют низкие приоритеты. Это означает, что любые механики категории 2, ожидающие обслуживания в очереди (у них уровень приоритета равен 2), скорее смогут занять прибор, чем механики категории 1 (у них уровень приоритета равен 1). Если прибор освобождается и в очереди стоит хотя бы один механик каждой категории, механик категории 2 следующим займет устройство просто потому, что он ближе стоит к началу ЦТС, чем механик категории 1. Модель без приоритетов. Для исключения приоритетной дисциплины обслуживания в модели в обоих сегментах достаточно сделать равными операнды Е блоков GENERATE. Проще всего это сделать, убрав операнд Е вовсе. В результате, по умолчанию запросы категорий 1 и 2 получат нулевой приоритет. O статистике. Среднее число ожидающих механиков интересует нас в первую очередь. Его мы получаем в колонке AVERAGE CONTENTS (СРЕДНЕЕ СОДЕРЖИМОЕ) очереди, в которой происходит ожидание. По- скольку стоимость простоя механиков не зависит от категории их запроса, то целесообразно иметь только одну очередь при моделировании системы. AVERAGE CONTENTS этой очереди потом может быть умножено на 0,25 цента в секунду, или на 9 долларов в час, или на 72 доллара в день для того, чтобы получить стоимость потерь в секунду, час или день соответственно. Таблица определений.
Единица времени: 1 с.
Элементы GPSS | Интерпретация | ||||||
Транзакты:
|
 
|
||||||
Приборы:
|
 
|
||||||
Очереди:
|
 
|
BLOCK CARD NUMBER *LOC OPERATION A,B,C,D,E,F,G COMMENTS SIMULATE * * MODEL SEGMENT 1 * 1 GENERATE 420,360,,,1 CATEGORY 1 MECHANICS ARRIVE 2 QUEUE LINE ENTER "CATEGORY I SEGMENT" OF LINE 3 SEIZE CLERK CAPTURE ТHЕ CLERK 4 DEPART LINE LEAVE THE LINE 5 ADVANCE 300,90 USE THE CLERK 6 RELEASE CLERK FREE THE CLERK 7 TERMINATE LEAVE THE TOOL CRIB AREA * * MODEL SEGMENT 2 * 8 GENERATE 360,240,,,2 CATEGORY 2 MECHANICS ARRIVE 9 QUEUE LINE ENTER "CATEGORY 2 SEGMENT" OF LINE 10 SEIZE CLERK CAPTURE THE CLERK 11 DEPART LINE LEAVE THE LINE 12 ADVANCE 100,30 USE THE CLERK 13 RELEASE CLERK FREE THE CLERK 14 TERMINATE LEAVE THE TOOL CRIB AREA * MODEL SEGMENT 3 * 15 GENERATE 28800 TIMER AHRIVES AFTER 8 HOURS 16 TERMINATE 1 SHUT OFF THE RUN * * CONTROL CARDS * START 1 START THE RUN END RETURN CONTROL TO OPERATING SYSTEM |
FACILITY AVERAGE NUMBER AVERAGE SEIZING PREEMPTING UTILIZATION ENTRIES TIME/TRANS TRANS. NO. TRANS. NO. CLERK .932 140 191.678 6 QUEUE MAXIMUM AVERAGE TOTAL ZERO PERCENT AVERAGE ... CONTENTS CONTENTS ENTRIES ENTRIES ZEROS TIME/TRANS ... LINE 3 .770 140 20 14.2 158.500 ... SAVERAGE TIME/TRANS = AVERAGE TIME/TRANS EXCLUDING ZERO ENTRIES |
б)
FACILITY AVERAGE NUMBER AVERAGE SEIZING PREEMPTING UTILIZATION ENTRIES TIME/TRAN TRANS. NO.TRANS. NO. CLERK .959 142 194.605 1 OUEUE MAXIMUM AVERAGE TOTAL ZERO PERCENT AVERAGE ... CONTENTS CONTENTS ENTRIES ENTRIES ZEROS TIME/TRANS ... LINE 7 2.731 145 13 0.9 542.593 ... SAVERAGE TIME/TRANS |
"Пример моделирования 2В. Расширение системы обслуживания с одним прибором и очередью"
Постановка задачи. В парикмахерскую с одним креслом могут приходить клиенты двух типов. Клиенты первого типа желают только стричься. Распределение интервалов их прихода 35 ± 10 мин. Клиенты второго типа желают постричься и побриться. Распределение интервалов их прихода 60 ± 20 мин. Парикмахер обслуживает клиентов в порядке "первым пришел - первым обслужен".
Такая ситуация может быть изображена на рис.2В.1, на котором кружками представлены клиенты, желающие только стричься, а квадратами обозначены клиенты, желающие и постричься и побриться. В момент, который изображен на рис. 2В.1, в кресле парикмахера сидит клиент, который только стрижется, а в очереди сидят только стригущийся, стригущийся и бреющийся и снова только стригущийся клиенты. На стрижку уходит 18 ± 6 мин, а на бритье 10 ± 2 мин.
Рис.2В.1. Дисциплина обслуживания "первым пришел- первым обслужен"
при наличии клиентов 2-х типов.
Необходимо написать модель парикмахерской на GPSS вместе с картами, обеспечивающими сбор данных об очереди, образуемой ожидающими клиентами.
Метод построения модели. Сначала возникает желание попытаться построить такую модель с одним прибором и очередью в виде единственной последовательности блоков, но возникают вопросы: "Как один блок GENERATE можно использовать для моделирования двух типов приходов?" и "Как реализовать различие в обслуживании только стригущихся и бреющихся клиентов?" Довольно быстро можно прийти к выводу, что у нас пока нет средств для разработки такой модели в виде единственной последовательности блоков.
Однако такую систему легко промоделировать с помощью двух независимых сегментов или последовательностей. Одна из последовательностей моделирует обслуживание только стригущихся клиентов, а вторая - стригущихся и бреющихся. В каждой из двух последовательностей пара блоков QUEUE - DEPART
описывает одну и ту же очередь, поэтому клиенты, проходящие в этих последовательностях, обеспечивают совместный сбор статистики. Таким же образом пара блоков SEIZE - RЕLEASE описывает в каждой из двух последовательностей один и тот же прибор и моделирует самого парикмахера.
В сегменте только стригущихся блок ADVANCE используется для моделирования времени стрижки; в сегменте стригущихся и бреющихся пара последовательных блоков ADVANCE используется для моделирования затрат времени на бритье и далее на стрижку соответственно. При таком подходе моделировать систему довольно легко.
Таблица определений. Единица времени: 1 мин. Таблица 2B.1.
Элементы GPSS | Интерпретация | ||||||
Транзакты:
|
 
|
||||||
Приборы:
|
 
|
||||||
Очереди:
|
 
|
Рис.2В.2. Блок-схема примера моделирования 2В. Заметьте, что сегменты 1 и 2 содержат пару блоков QUEUE - DEPART, использующую одну и ту же очередь (JOEQ). Заметьте также, каким образом каждый из этих сегментов вклю- чает пару блоков SEIZE - RELEASE, использующую один и тот же прибор (JQE). Возможность ссылки на один и тот же прибор или очередь из нескольких пар блоков нами еще не была рассмотрена, но не существует причин, из-за которых этого нельзя было бы сделать. В самом деле, гибкость, достигаемая многократными ссылками на заданные элементы GPSS, становится из этого примера очевидной. Распечатка результатов. (Полное время, необходимое для моделирования на IBM 360/67, равно 1,8 с. Обсуждение проблемы временных затрат при моделировании на GPSS смотри в гл. 4). Статистические данные, описывающие производительность прибора в модели, показаны на рис. 2В.4, б. Эти данные показывают суммарный эффект от обслуживания парикмахером клиентов обоих типов.
Из NUMBER ENTRIES ( ЧИСЛО ВХОДОВ) видно, что парикмахер был занят всего 20 раз. Не делается никаких указаний, сколько из этих 20 клиентов относятся к типу только стригущихся, а сколько к другому типу. Выходные данные показывают, что парикмахер был занят 89,7% времени, но не указано, какая часть этого времени потрачена на обслуживание только стригущихся, а какая на стригущихся и бреющихся клиентов. Аналогичным образом, статистические данные, показанные на рис. 2В.4, в, описывают поведение очереди модели также в агрегированном виде. Не делается различия между только стригущимися и стригущимися и бреющимися клиентами. В модели ничего не предпринято, чтобы такое различие сделать. Для того чтобы можно было осуществить такое различие, необходимо соответствующим образом переделать модель. Рис.2В.3. Распечатка программы примера моделирования 2В.
BLOCK NUMBER *LOC OPERATION A,B,C,D,E,F.G COMMENTS SIMULATE * * MODEL SEGMENT 1 * 1 GENERATE 35,10 HAIRCUT-ONLY CUSTOMERS ARRIVE 2 QUEUE JOEQ ENTER THE LINE 3 SEIZE JOE CAPTURE THE BARBER 4 DEPART JOEQ LEAVE THE LINE 5 ADVANCE 18,6 USE BARBER 6 RELEASE JOE FREE THE BARBER 7 TERMINATE LEAVE THE SHOP * * MODEL SEGMENT 2 * 8 GENERATE 60,20 SHAVE-AND-HAIRCUT CUSTOMERS ARRIVE 9 QUEUE JOEQ ENTER THE LINE 10 SEIZE JOE CAPTURE THE BARBER 11 DEPART JOEQ LEAVE THE LINE 12 ADVANCE 10,2 USE BARBER FOR SHAVE 13 ADVANCE 18,6 USE-BARBER FOR HAIRCUT 14 RELEASE JOE FREE THE BARBER 15 TERMINATE LEAVE THE SHOP * * MODEL SEGMENT 3 * 16 GENERATE 480 TlMER ARRIVES AT TIME 480 17 TERMINATE 1 SHUT OFF THE RUN * * CONTROL CARDS * START 1,,,1 START THE RUN: GET CHAIN PRINTOUT AT END END RETURN CONTROL TO OPERATING SYSTEM |
RELATIVE CLOCK 480 ABSOLUTE CLOCK 4ВО BLOCK COUNTS BLOCK CURRENT TOTAL BLOCK CURRENT TOTAL 1 0 13 11 0 8 2 1 13 12 0 8 3 0 12 13 1 8 4 0 12 14 0 7 5 0 12 15 0 7 6 0 12 16 0 1 7 0 12 17 0 1 8 0 8 9 0 8 10 0 8 |
FACILITY AVERAGE NUMBER AVERAGE SEIZING PREEMPTING UTILIZATION ENTRIES TIME/TRAN TRANS. NO. TRANS. NO. JOE .697 20 21.549 1 |
в)
QUEUE MAXIMUM AVERAGE TOTAL ZERO PERCENT AVERAGE SAVERAGE CONTENTS CONTENTS ENTRIES ENTRIES ZERGS TIME/TRANS TIME/TRANS JOEQ 2 .524 21 4 19,0 12.000 14.823 SAVERAGE TIME/TRANS = AVERAGE TIME/TRANS EXCLUDING ZERO ENTRIES |
CURRENT EVENTS CHAIN TRANS ВОТ BLOCK PR SP NBA SET MARK-TIME P1 Р2 P3 P4 SI TI CI... 6 457 2 3 6 457 0 0 0 0 1 1 2 0 0 0 0 0 0 0 0 |
FUTURE EVENTS CHAIN TRANS ВОТ BLOCK PR SP NOA SET МАRК-ТIМЕ P1 P2 P3 P4... CI... 1 490 13 14 1 457 0 0 0 0 4 0 0 0 0 0 0 0 0 4 502 1 4 -13 0 0 0 0 4 0 0 0 0 5 504 8 5 -9 0 0 0 0 0 0 0 0 4 6 960 16 2 -1 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 |
Рис.2В.5.Пример моделирования 2В с раздельными и общей очередями для пользователей 2-х типов. При ожидании обслуживания, следовательно, только стригущиеся клиенты одновременно имеют запись в двух разных очередях. Одно из множеств записей существует только для стригущихся клиентов; другое множество обслуживает всех клиентов, ожидающих освобождения прибора, независимо от типа. То же самое можно сказать относительно стригущихся и бреющихся клиентов, моделирование обслуживания которых осуществляется в сегменте 2. Важно отметить, что логика, присущая модели рис. 2В.5, не отличается от логики рис. 2В.2.Все равно существует только одна очередь клиентов, ожидающих парикмахера. Дисциплина выбора из очереди, реализуемая парикмахером, по-прежнему "первым пришел - первым обслужен". Хочет разработчик собирать статистику порознь или нет, не так важно. Как было показано в параграфе 2.15, присутствие в очереди - это не более чем простая запись. Заметим, что на рис. 2В.3 в качестве операнда D карты START используется единица. В результате этого распечатались цепи текущих и будущих событий по завершении моделирования. Эти цепи показаны на рис. 2В.4, г, д. Главная Содержание главы 1
Принципы использования блоков QUЕUЕ и DЕРАRТ
В любых системах массового обслуживания число ресурсов ограничено. Это означает, что не всегда можно немедленно предоставить ресурс при каждом требовании на его использование. В парикмахерской, например, таким ограниченным ресурсом является сам парикмахер. Если он занят в момент прихода клиента, то последний вынужден ждать своей очереди. В действительности, ожидающие обслуживания требования всегда составляют очередь, что дало основание называть такие системы системами с очередями (системами массового обслуживания).
Воспользуемся собственным опытом при использовании ограниченного ресурса и рассмотрим, какие события при этом происходят. Присоединяемся к очереди, т.е. образуем с другими требованиями группу "ожидающих обслуживания". Присоединение к очереди происходит в некоторый момент времени. Ждем своей очереди. Ожидание происходит в течение некоторого интервала времени. Покидаем очередь. Уход из очереди происходит в некоторый момент времени. Очень часто бывает необходимо собрать статистику, описывающую особенности протекания процесса. Эта статистика должна дать ответ на следующие вопросы: Сколько раз требования приходили в очередь? Сколько пришедших требований фактически присоединилось к очереди и сколько сразу заняли прибор? Каково было максимальное значение длины очереди? Каково было среднее число ожидающих требований? Каково среднее время ожидания тех требований, которым пришлось ждать? Специализированный язык, разработанный для моделирования систем массового обслуживания, должен иметь средства сбора такого рода статистической информации. GPSS обеспечивает такую возможность с помощью средства, называемого регистратором очереди. При использовании разработчиком регистратора очереди в тех точках модели, где число ресурсов ограничено, интерпретатор начинает автоматически собирать статистику, описывающую ожидание (если оно есть), возникающее в этих точках.
Регистратор очереди во многих отношениях подобен такому элементу моделирования, как прибор. Как и при использовании приборов, в модели может быть несколько различных регистраторов очередей.
Рис. 8.1. Блоки QUEUE (СТАТЬ В ОЧЕРЕДЬ) и DEPART (ПОКИНУТЬ ОЧЕРЕДЬ) с операндами А :
Операнд | Значение | Значение или результат по умолчанию |
А | Имя (символическое или числовое) очереди, к которой необходимо присоединиться или котороую надо покинуть | Ошибка |
Преимуществом такого подхода является учет тех транзактов, которые не покидамт очередь в момент обработки статистики. Недостатком же является тот факт, что это время будет несколько занижено, поскольку те транзакты, которые еще не вышли из очереди (если таковые имеются), должны оставаться в очереди еще некоторое время, а это никак не учитывается в расчете. Фактически интерпретатором рассчитываются два статистических параметра времени нахождения в очереди. Один из них является средним временем по всем входам в очередь. Обычно часть входов в очередь имеет нулевое время пребывания в очереди, т. е. им не приходится ждать. Поэтому интерпретатор также считает и статистику для среднего времени пребывания в очереди, исключая те входы, которые не вызвали ожидания. Это объясняет, для чего транзакту приписывается значение содержимого таймера при входе в блок QUEUE и для чего в блоке DЕРАRТ проверяется, не было ли время ожидания этого транзакта нулевым. Рассмотрим теперь пример записи пары блоков QUEUE и DЕРАRТ в модели. Рассмотрим снова рисунок примера последовательности ЗАНЯТЬ -ЗАДЕРЖАТЬ-ОСВОБОДИТЬ. Пример последовательности SЕIZЕ - АDVANСЕ -RЕLЕАSЕ Ожидание может возникнуть ввиду занятости прибора с именем JОЕ. Предположим, что мы собираем статистику об этом ожидании. В сегмент модели регистратор очереди будет введен блоками QUEUЕ и DЕРАRТ (рис. 8.2). Регистратору очереди присвоено произвольное символическое имя JОЕQ.
Рис.8.2. Добавление сегмента регистратора очереди Как же работает показанный на рисунке сегмент модели? Положим, что транзакт вошел в этот сегмент в момент, когда прибор JOЕ не занят. Транзакт входит в блок QUEUE, при этом выполняется соответствующая подпрограмма. Модифицируется счетчик входов, содержимое очереди увеличивается на 1, транзакту приписывается время входа в очередь и имя очереди. Далее транзакт тут же пытается войти в блок SEIZЕ. Поскольку прибор JОЕ свободен, эта попытка оказывается успешной. Выполняется подпрограмма SEIZЕ, и состояние прибора JОЕ изменяется со "свободно" на "занято".
Далее транзакт немедленно попадает в блок DЕРАRТ. Выполняется соответствующая подпрограмма, счетчик содержимого очереди уменьшается на 1, и т. д. Продолжая продвижение, транзакт попадает в блок АDVANCE. Вычисляется время задержки в соответствии с распределением 16 ± 4, и транзакт временно прекращает продвижение. Все это происходит в какой-то определенный момент модельного времени. Это означает, что хотя транзакт входит в очередь JОЕQ, время его пребывания в этой очереди равно нулю, т. е. вхождения вызваны тем простым фактом, что блок SEIZЕ располагается между блоками QUEUE и DЕРАRТ. Все транзакты, попадающие на прибор, должны пройти через пару QUEUE - DЕРАRТ, даже если прибор свободен и его можно занять. Предположим теперь, что прибор JОЕ находится в занятом состоянии, и следующий транзакт входит в сегмент модели рис. 8.2. Проходя блок QUEUE, он модифицирует значения счетчика входов и счетчика текущего содержимого. Ему приписывается имя очереди и значение таймера в момент входа в очередь. Далее происходит отказ, поскольку прибор JОЕ занят. Транзакт вынужденно перестает продвигаться, оставаясь в блоке QUEUE. Позднее, когда транзакт, находящийся на приборе, покидает его, ожидающий транзакт опять попытается войти в блок SEIZE. На этот раз попытка окажется успешной. Двигаясь дальше, транзакт войдет в блок DЕРАRТ, уменьшая значение счетчика содержимого очереди на 1, и т. д. В описанной ситуации транзакт проходит блоки QUEUE и DEРАRТ в различные моменты модельного времени. Это означает, что имеет место "ненулевое вхождение" в очередь.
"Распечатка цепей текущих и будущих событий"
Разработчик может довольно долго заниматься моделированием на GPSS, не интересуясь состоянием цепей. Однако разработчик может сделать много неверных моделей, если он не понимает принципа функционирования цепей.
Даже если моделируемая система относится к системам средней сложности, разработчик обязательно задается вопросом: что далее должно произойти в модели? Поскольку одновременные события в GPSS выполняются последовательно, вопрос о том, что же происходит далее в модели, может иметь очень важные последствия. Ответ на этот вопрос должен быть всегда дан в терминах цепей событий. Разработчик, незнакомый с этими понятиями, должен либо удовлетвориться отсутствием ответа на вопрос о том, что же будет дальше, либо просто должен надеяться на то, что модель верна или почти что верна. Это, вообще говоря, недопустимо.
Разработчик, знакомый с понятиями цепей, всегда сумеет найти ответ на поставленный вопрос и будет лучше понимать поведение моделей. Время от времени ему может понадобиться получить распечатку цепей для того, чтобы сделать некоторые заключения относительно того, как работает конкретная модель.
Главная Содержание главы 1в чем заключается различие между
Хотелось бы все-таки знать, в чем заключается различие между прибором и многоканальным устройством, имеющим емкость 1. Во-первых, прибор может не только "заниматься", но и захватываться, в то время как единственный элемент многоканального устройства может только "заниматься". Это и есть самое важное различие между приборами и многоканальными устройствами.Захват означает, что если даже прибор занят текущим обслуживанием, он немедленно может быть предоставлен по соответствующему требованию. Захват является очень важным элементом функционирования вычислительных и других сложных систем. Во-вторых, прибор может быть освобожден только тем транзактом, который его занял. Если транзакт пытается войти в блок RЕLЕАSЕ (ОСВОБОДИТЬ) без предварителього входа в блок SEIZE (ЗАНЯТЬ) того же прибора, возникает ошибка.В противоположность этому, любой транзакт может войти блок LЕАVЕ без того,чтобы перед этим войти в блок ЕNТЕR соответствующего много канального устройства. Ошибка возникает лишь тогда, когда из "текущего содержимого" вычитается величина, приводящая к отрицательному значению содержимого. Вообще говоря, довольно трудно себе представить, как это транзакт может выйти из многоканального устройства без того, чтобы сначала в него войти. Если это происходит, т.е. если некоторый транзакт выходит из многоканального устройства, то логика требует, чтобы некоторый транзакт перед этим вошел в то же многоканальное устройство и никогда не выходил из него. В противном случае ограничение, заключающееся в том, что текущее содержимое не должно быть отрицательно, будет нарушено. Хотя понятно, что пользователь может работать с многоканальными устройствами на таком интуитивном уровне, никто его к этому не принуждает. По крайней мере в этой книге такой необходимости не возникает. В заключение отметим, что в модели легко заменить один прибор двумя или более, если этот прибор моделируется как многоканальное устройство, достаточно только переопределить его емкость.
Если же он моделируется как прибор, блоки SEIZE и RELEASЕ должны быть заменены блоками ENTER и LEAVE и, кроме того, необходимо определить число каналов такого многоканального устройства (т.е. его емкость) . Таблица.22.4.
OPERATION | A,B,C,D,E,F ------------------------> | ||||||||||||||||||||||||||||||||||||||||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 1 0 | 1 1 | 1 2 | 1 3 | 1 4 | 1 5 | 1 6 | 1 7 | 1 8 | 1 9 | 2 0 | 2 1 | 2 2 | 2 3 | 2 4 | 2 5 | 2 6 | 2 7 | 2 8 | 2 9 | 3 0 | 3 1 | 3 2 | 3 3 | 3 4 | 3 5 | 3 6 | 3 7 | 3 8 | 3 9 | 4 0 | 4 1 | 4 2 | 4 3 | 4 4 | 4 5 | 4 6 | 4 7 | 4 8 |
S | T | O | R | A | G | E |   | S | 5 | , | 2 | / | S | 1 | , | 1 | 0 | / | S | 8 | , | 6 |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   | 1 | - | Й |   | П | Р | И | М | Е | Р |
  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
S | T | O | R | A | G | E |   | S | 4 | , | 5 | / | S | $ | T | U | G | S | , | 3 | / | S | $ | S | U | R | V | S | , | 4 | / | S | 2 | , | 1 | 2 |   | 2 | - | Й |   | П | Р | И | М | Е | Р |
  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
S | T | O | R | A | G | E |   | S | $ | M | E | N | , | 9 | / | 5 | 4 | , | 5 | / | S | 5 | , | 5 | / | S | 6 | , | 5 | / | S | 3 | , | 2 |   |   |   | 3 | - | Й |   | П | Р | И | М | Е | Р |
  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
S | T | O | R | A | G | E |   | S | $ | M | E | N | , | 9 | / | S | 4 | - | S | 6 | , | 5 | / | S | 3 | , | 2 |   |   |   |   |   |   |   |   |   |   | 4 | - | Й |   | П | Р | И | М | Е | Р |
  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
"Реализация задержки во времени. Блок АDVANСЕ (ЗАДЕРЖАТЬ)"
Предположим, что транзакт только что вошел в блок SEIZЕ, т.е занял прибор. После выполнения соответствующей подпрограммы для данного блока интерпретатор сразу же пытается продвинуть транзакт в следующий последовательный блок модели. Существует мало ограничений на то, каким должен быть этот блок. Это, например, может быть другой блок SEIZЕ, описывающий другой прибор. Так делается, если необходимо, например, выполнить операцию с одновременным занятием и рабочего и какого-либо инструмента для выполнения определенного вида обслуживания. Если рабочий и инструмент моделируются некоторой парой приборов, то транзакт одновременно должен занять оба эти прибора, прежде чем может быть начато обслуживание.
Обычно транзакт занимает прибор для того, чтобы немедленно начать на нем обслуживание.
Было указано, что обслуживание длится некоторый период времени. В течение этого времени транзакт должен прекратить двигаться по модели. Только по истечении времени обслуживания он должен попасть, в блок RЕLЕАSЕ для освобождения прибора.
В GPSS существует блок АDVANCЕ (ЗАДЕРЖАТЬ) для реализации задержки продвижения транзакта в течение некоторого интервала времени. Обычно этот интервал задается случайной переменной. Опыт показывает, что время обслуживания обычно меняется от одного обслуживания к другому.
Информация, необходимая для описания соответствующего времени обслуживания и его распределения, задается операндами А и В блока АDVANCЕ.
Возможные варианты распределения времени обслуживания делятся на две категории: равномерное распределение интервала обслуживания; прочие распределения интервалов обслуживания.
Как и при использовании блока GENERАТЕ, особо рассматривается равномерное распределение. Применение более сложных видов распределения требует использования функций. Поскольку описание функций отложено до следующей главы, здесь мы будем рассматривать только равномерное распределение.
На рис. 6.1 показан блок АDVANСЕ вместе с операндами А и В. Как и ранее, операнд А используют для определения среднего времени, которое транзакт, входящий в блок, проведет в нем.
Операнд В используют для указания половины поля допуска.
Рис. 6.1
Операнд | Значение | Значение или результат по умолчанию |
А | Задержка на время обслуживания | Ноль |
В | Половина поля допуска равномерно распределенного интервала времени задержки | Ноль |
Рис. 6.2. Главная Содержание главы 1
"Сбор статистики при ожидании. Блоки QUEUE (СТАТЬ В ОЧЕРЕДЬ) и DЕРАRТ (ПОКИНУТЬ ОЧЕРЕДЬ)"
Блоки QUEUE (СТАТЬ В ОЧЕРЕДЬ) и DЕРАRТ (ПОКИНУТЬ ОЧЕРЕДЬ) обеспечивают в GPSS возможность автоматического сбора статистических данных, описывающих вынужденное ожидание, которое может происходить время от времени в различных точках модели. В первой части этого параграфа описаны блоки, предназначенные для реализации такой возможности. Далее описаны редко используемые возможности этих блоков. В конце прокомментированы два неверных представления о процессе сбора статистики.
Состояния цепей модели
Рис. 13.6.
Номер строки | Модельное время | Цепь текущих событий к началу цепи | Цепь будущих событий к началу цепи |
1 | До фазы ввода | Пусто | Пусто |
2 | После фазы ввода | Пусто | [1,14,НЕТ,0,1] [2,480,НЕТ,0,8] |
3 | 14 | [1,КМР,НЕТ,0,1] | [2,480,НЕТ,0,8] |
4 | 14 | Пусто | [3,27,НЕТ,0,1] [1,32,5,0,6] [2,480,НЕТ,0,8] |
5 | 27 | [3,KMP,НЕТ,0,1] | [1,32,5,0,6] [2,480,НЕТ,0,8] |
6 | 27 | [3,KMP,2,0,3] | [1,32,5,0,6] [4,44,НЕТ,0,1] [2,480,НЕТ,0,8] |
7 | 32 | [3,KMP,2,0,3] [1,KMP,5,0,6] | [4,44,НЕТ,0,1] [2,480,НЕТ,0,8] |
8 | 32 | Пусто | [4,44,НЕТ,0,1] [3,44,5,0,6] [2,480,НЕТ,0,8] |
9 | 44 | [4,KMP,НЕТ,0,1] [3,KMP,5,0,6] | [2,480,НЕТ,0,8] |
10 | 44 | Пусто | [4,58,5,0,6] [1,59,НЕТ,0,1] |
На рис.13.6 показаны цепи текущих и будущих событий в течение нескольких первых значений таймера модельного времени при прогоне модели, приведенной на рис. 13.5 (см. предыдущую страницу). Каждая строка на рис. 13.6 определяется своим номером (первая колонка), который необходим для удобства ссылок при обсуждении рисунка. Различные значения моментов времени, отмечаемые таймером в течение моделирования, показаны на рис.13.6 в колонке "Модельное время". Третья колонка представляет цепь текущих событий, четвертая - цепь будущих событий. Просмотр цепи слева направо на рисунке соответствует ее анализу от начала к концу. Закодированная в виде пятипозиционных записей информация о транзактах, находящихся в цепях, показана на рис.13.6 в виде строк третьей и четвертой колонок. Иногда цепь может не содержать ни одного транзакта. Эта ситуация обозначена словом "пусто".
В клетке строк 1 и 2 на рис.13.6 показана информация до и после фазы ввода первых транзактов. Обработка интерпретатором состояний модели начинается с фазы ввода. Для каждого значения модельного времени состояния цепей показаны в двух строках.
Первая строка в любое заданное время показывает состояние цепи после последней фазы коррекции таймера, но при коррекции таймера. Первая строка для кажого значения времени показывает состояние цепей сразу после завершения коррекции таймера модельного времени.
Рассмотрим теперь, какие действия выполняются интерпретатором над состояниями цепей на рис.13.6.
"СПИСОК БЛОКОВ GPSS"
Это приложение содержит перечень всех рассмотренных в данном руководстве блоков GPSS, составленный в алфавитном порядке. Для каждого блока указывается следующая информация.
1. В столбце "Блок" дан рисунок блока с его полями, указанными в общем виде на своих обычных местах.
2. В столбце "Поле операции" - наименование операции, выполняемой блоком. Для блоков, использующих вспомогательный оператор, под операцией перечисляются возможные значения вспомогательных операторов. (В столбце "Блок" вспомогательные операторы обозначены символом Х.)
3. В последующих семи столбцах указывается назначение каждого операнда блока. В этих столбцах такие указано, где возможно их употребление по умолчанию, а где операнд должен быть обязательно употреблен.
Наконец, дается сводка значений операнда в случае существования диапазона его выбора.
Диапазон различных альтернатив в представлении значений в полях операндов обозначен в данном приложении сокращениями, показанными в табл. P2.1
Если значение операнда обязательно должно быть задано, все возможные альтернативы перечисляются внутри фигурных скобок. Например, запись, приведенная на рис.Р2.l, относится к операнду А блока ASSIGN. Она означает, что операнд в этом поле может быть или константой, или данным типа CЧAj, СЧА $ имя или СЧА * j. Заметим, что символ внутри фигурных скобок не указывается, это означает, что в операнде А блока ASSIGN нельзя использовать символическое имя.
Если операнд является необязательным, возможные альтернативы заключают в квадратные скобки. На рис.P2.2 приведен сооветствующий пример. Этот пример относится к операнду блока ADVANCE, который может быть совсем не указан, либо может содержать k, СЧАj, СЧА$ имя или СЧА*j.
Когда операнд необходимо указывать и не имеется выбора относительно формы его записи, не употребляют ни фигурные, ни квадратные скобки. Примером такой ситуации может служить блок TRANSFER с режимом выбора ВОТН, где слово ВОТН должно быть обязательно помещено в операнде А этого блока. [k, СЧАj, ] [СЧА$имя, СМА*j]
Рис.
P2.1. Обозначения, используемые, когда операнд дол- жен обязательно присутствовать
Сокращение | Значение |
k | Неотрицательная целая константа |
имя | Символическое имя |
СЧА | Общее наименование стандартного числового атрибута |
СЧАj | Общее наименование стандартного числового атрибута, за которым следует числовое имя |
СЧА$имя | Общее наименование стандартного числового атрибута, за которым следует знак доллара ($) и символическое имя элемента |
СЧА*j | Общее наименование стандартного числового атрибута, за которым следует звездочка (*) и номер параметра, величина которого соответствует (числовому) имени элемента |
Блок | Операция | A | B | C | D | E | F |
ADVANCE (Задержать) | Среднее время [k, СЧА j, СЧА $имя, СЧА *j] | Модифи катор разброса [k, СЧА j, СЧА $имя, СЧА *j кроме FN j, FN $имя, FN *j] или модифи катор функции [FN j, FN $имя, FN *j] |   |   |   |   | |
ASSEMBLE (Соединить) | Счетчик соединений {k, СЧА j, СЧА $имя, СЧА *j} |   |   |   |   |   | |
ASSIGN (Назначить) | № параметра {k, СЧА j, СЧА $имя, СЧА *j}[] | Число единиц {k, СЧА j, СЧА $имя, СЧА *j} | № модифи цирующей функции [k, СЧА j, СЧА $имя, СЧА*j] |   |   |   | |
BUFFER (Возобновить просмотр) |   |   |   |   |   |   | |
DEPART (Покинуть очередь) | Имя очереди {k, СЧА j, СЧА $имя, СЧА *j} | Число единиц {k, СЧА j, СЧА $имя, СЧА *j} |   |   |   |   | |
ENTER (Войти) | Имя многока нального устройства {k, СЧА j, СЧА $имя, СЧА *j} |   |   |   |   |   | |
GATE {LS, LR} (впустить) | Имя логи ческого переклю чателя {k, СЧАj, СЧА$имя, СЧА*j} | Следующий блок при невыпол нении условия [k,СЧАj, СЧА$имя, СЧА*j] |   |   |   |   | |
GATE {M, NM} (впустить) | Имя блока ASSEMBLE, GATHER или MATCH {k, СЧАj, СЧА$имя, СЧА*j} | Следующий блок при невыпол нении условия [k, СЧАj, СЧА$имя, СЧА*j] |   |   |   |   | |
GATE {NI I NU U} (впустить) | Имя прибора {k, СЧАj, СЧА$имя, СЧА*j} | Следующий блок при невыпол нении условия [k,СЧАj, СЧА$имя, СЧА*j] |   |   |   |   | |
GATE {SE SF SNE SNF} (впустить) | Имя многока нального устройства {k, СЧАj, СЧА$имя, СЧА*j} | Следующий блок при невыпол нении условия [k, СЧАj, СЧА$имя, СЧА*j] |   |   |   |   | |
GATHER (собрать) | Счетчик сборки {k,СЧАj, СЧА$имя, СЧА*j} |   |   |   |   |   | |
GENERATE (генери ровать) | Среднее время [k, СЧАj, СЧА$имя, СЧА*j] | Модифи катор разброса [k, СЧАj, СЧА$имя кроме FNj, FN$имя] или модифи катор функции [FNj, FN$имя] | Интер вал сме щения [k, СЧАj, СЧА $имя] | Ограни читель [k, СЧАj, СЧА $имя] | Уровень приори тета [k, СЧАj, СЧА $имя] | Число пара метров [k, СЧАj, СЧА $имя] --------- Тип пара метров [F] | |
Замечание. Операнды в полях A-F блока GENERATE ограничены константами и следующими СЧА : FN, V, X, XH, RN, N и CI. Элементы функций или перменных, используемых в этих полях, ограничены темеже СЧА. | |||||||
LEAVE (выйти) | Имя многока нального устройства {k, СЧАj, СЧА$имя, СЧА*j} | Число единиц [k, СЧАj, СЧА$имя, СЧА*j] |   |   |   |   | |
LINK (ввести в цепь) | Имя цепи пользо вателя {k, СЧАj, СЧА$имя, СЧА*j} | Критерий присое динения {LIFO FIFO Pj} | Альтер нативный блок [k, СЧАj, СЧА$имя, СЧА*j] |   |   |   | |
LOGIC {I R S} (воздей ствовать на логические переклю чатели) | Имя логи ческого переклю чателя {k, СЧАj, СЧА$имя, СЧА*j} |   |   |   |   |   | |
LOOP (органи зовать цикл) | c параметра {k, СЧАj, СЧА$имя, СЧА*j} | Следующий блок если пареметр не равен 0 {k, СЧАj, СЧА$имя, СЧА*j} |   |   |   |   | |
MARK (отметить) | c параметра {k, СЧАj, СЧА$имя, СЧА*j} |   |   |   |   |   | |
MATCH (синхрони зировать) | Адрес сопряжен ного блока MATCH {k, СЧАj, СЧА$имя, СЧА*j} |   |   |   |   |   | |
MSAVE- VALUE (сохранить значение) | Имя матрицы, имя {k, СЧАj, СЧА$имя, СЧА*j} | c строки {k, СЧАj, СЧА $имя, СЧА*j} | c столбца {k, СЧАj, СЧА $имя, СЧА*j} | Величина которую следует сохра нить {k, СЧАj, СЧА $имя, СЧА*j} | Тип матрицы [H] |   | |
PREEMPT (захватить) | Имя прибора {k, СЧАj, СЧА$имя, СЧА*j} | Возмож ность захвата по приоритету [PR] |   |   |   |   | |
PRINT (напечатать) | Нижний предел [k, СЧАj, СЧА$имя, СЧА*j] | Верхний предел [k, СЧАj, СЧА$имя, СЧА*j] | Мнемони ческое обозна чение элемента | Указатель разбивки по страни цам [любая буква] |   |   | |
PRIORITY (назначить приоритет) | Новое значение приоритета {k, СЧАj, СЧА$имя, СЧА*j} | Возмож ность возобнов ления просмотра [BUFFER] |   |   |   |   | |
QUEUE (встать в очередь) | Имя очереди {k, СЧАj, СЧА$имя, СЧА*j} | Число единиц [k, СЧАj, СЧА$имя, СЧА*j] |   |   |   |   | |
RELEASE (освободить) | Имя прибора {k, СЧАj, СЧА$имя, СЧА*j} |   |   |   |   |   | |
RETURN (вернуть) | Имя прибора {k, СЧАj, СЧА$имя, СЧА*j} |   |   |   |   |   | |
SAVE- VALUE (сохранить значение) | Имя сохраня емой величины {имя, k, СЧАj, СЧА$имя, СЧА*j} | Величина которую следует сохранить {k, СЧАj, СЧА$имя, СЧА*j} | Тип сох раняемой величины [H] |   |   |   | |
SEIZE (занять) | Имя прибора {имя, k, СЧАj, СЧА$имя, СЧА*j} |   |   |   |   |   | |
SELECT (в логическом режиме) {U, NU, I, NI, SE, SNE, SF, SNF, LR, LS} (выбрать) | Параметр в который заносят номер элемента {имя, k, СЧАj, СЧА$имя, СЧА*j} | Нижний предел {имя, k, СЧАj, СЧА$имя, СЧА*j} | Верхний предел {имя, k, СЧАj, СЧА$имя, СЧА*j} | Не исполь зуется | Не исполь зуется | Альтер натив ный выход {имя, k, СЧАj, СЧА $имя, СЧА*j} | |
SELECT (в режиме MAX или MIN) | Параметр в который заносят номер элемента {k, СЧАj, СЧА$имя, СЧА*j} | Нижний предел {имя, k, СЧАj, СЧА$имя, СЧА*j} | Верхний предел {имя, k, СЧАj, СЧА$имя, СЧА*j} | Не исполь зуется | Иссле дуемый атрибут (любой СЧА кроме MX, MH) |   | |
SELECT (в режиме отношения) {G, GE, E, NE, LE, L} (выбрать) | Параметр в который заносят номер элемента {k, СЧАj, СЧА$имя, СЧА*j} | Нижний предел {имя, k, СЧАj, СЧА$имя, СЧА*j} | Верхний предел {имя, k, СЧАj, СЧА$имя, СЧА*j} | Величина для сравнения {k, СЧАj, СЧА$имя, СЧА*j} | Иссле дуемый атрибут (любой СЧА кроме MX, MH) | Альтер натив ный выход [имя, k, СЧАj, СЧА $имя, СЧА*j] | |
SPLIT (расщепить) | Число потомков {k, СЧАj, СЧА$имя, СЧА*j} | Следующий блок для потомков {имя, k, СЧАj, СЧА$имя, СЧА*j} | Параметр в который заносят поряд ковый номер {k, СЧАj, СЧА$имя, СЧА*j} | Число пара метров у каждого потомка {k, СЧАj, СЧА $имя, СЧА*j} |   |   | |
TABULATE (табули ровать) | Имя таблицы {имя, k, СЧАj, СЧА$имя, СЧА*j} | Весовой фактор {k, СЧАj, СЧА$имя, СЧА*j} |   |   |   |   | |
TERMINATE (завершить) | Счетчик числа завер шений [k, СЧАj, СЧА$имя, СЧА*j] |   |   |   |   |   | |
TEST {G, GE, E, NE, LE, L}(проверить) | Первая величина {k, СЧАj, СЧА$имя, СЧА*j} | Вторая величина {k, СЧАj, СЧА$имя, СЧА*j} | Следую щий блок при выпол нении условия [имя, k, СЧАj, СЧА $имя, СЧА*j] |   |   |   | |
TRANSFER (в условном режиме) (передать) | Режим выбора BOTH | Первый иссле дуемый блок {имя, k, СЧАj, СЧА$имя, СЧА*j} | Второй иссле дуемый блок {имя, k, СЧАj, СЧА$имя, СЧА*j} |   |   |   | |
TRANSFER (в статическом режиме) (передать) | Режим выбора {k, СЧАj, СЧА$имя, СЧА*j} | Первый иссле дуемый блок {имя, k, СЧАj, СЧА$имя, СЧА*j} | Второй иссле дуемый блок {имя, k, СЧАj, СЧА$имя, СЧА*j} |   |   |   | |
TRANSFER (в безусловном режиме) (передать) | Режим выбора не исполь зуется | Блок, в который переходит транзакт {имя, k, СЧАj, СЧА$имя, СЧА*j} |   |   |   |   | |
UNLINK (вывести из цепи) | Имя цепи пользо вателя {имя, k, СЧАj, СЧА$имя, СЧА*j} | Блок в который входят выведен ные транзакты {имя, k, СЧАj, СЧА$имя, СЧА*j} | Счетчик выво димых транзак тов {имя, k, СЧАj, СЧА $имя, СЧА*j} | c пара метра [k, СЧАj, СЧА $имя, СЧА*j] | Аргу мент парнос ти [k, СЧАj, СЧА $имя, СЧА*j] | Альтер натив ный выход [k, СЧАj, СЧА $имя, СЧА*j] |
"СПИСОК ОПЕРАТОРОВ GPSS, НЕ ЯВЛЯЮЩИХСЯ БЛОКАМИ"
Некоторые из рассмотренных в руководстве операторов не соответствуют непосредственно блокам в языке. Попадают в эту категорию неблочных операторов такие операторы , как BVARIABLE, CLEAR, RMULT и STORAGE. В руководстве было введено 19 таких операторов; 15 операторов из 19 включены в данное приложение.
Четыре оператора END (ЗАКОНЧИТЬ), JOB (ПРОДОЛЖИТЬ), RESET (СБРОСИТЬ) и SIMULATE (МОДЕЛИРОВАТЬ) не вошли в это приложение, потому что каждый из них состоит только из одного слова: или END, или JOB и т.д., помещаемого в поле операции в строке.В этих операторах не используется ни поле имени, ни поле операндов. (Как отмечалось ранее, существует еще избирательная карта RESET. В этой карте требуется использование поля операндов. Но, поскольку избирательная карта RESET не была рассмотрена в руководстве подробно, она не включена в данное приложение.)
Все 15 неблочных операторов приведены в алфавитном порядке в соответствии с их операцией. В столбцах приложения, соответствующих полям имени и операндов, содержится следующая информация: Вкратце описывается роль поля. Затем дается сводка возможностей, представляемых программисту для ввода требуемой информации. Диапазоны доступных возможностей для ввода имен объектов и числовых данных обозначены в данном приложении следующими записями: k, имя, СЧАj и СЧА * j. Соответствующие определения смотрите в табл.P2.1 приложения 2.
Если информация обязана быть в данном месте, а программист имеет несколько возможностей для ее ввода, эти возможности перечислены в фигурных скобках.
Если какая-либо информация может быть введена по желанию программиста, то такая доступная программисту возможность (или возможности) указывается в квадратных скобках. Наконец, если информация должна присутствовать, и не имеется никаких иных форм ее записи, то ни фигурные, ни квадратные скобки не используют.
Примеры записей фигурных и квадратных скобок см. в приложении 2 на рис. P2.1 и P2.2. Однако в приложении 1 возникает необходимость в трех дополнительных типах записи.
Эти случаи используют специфические формы общего обозначения СЧАj и СЧА $ имя. В частности, вместо любого применимого СЧА можно использовать только какой-либо один или несколько.
Ниже указаны эти возможности.
1. По отношению к карте CLEAR специфическими формами являются Xj, Х $ имя, XHj и ХН $ имя. 2. По отношению к карте INITAL специфическими формами являются LSj, LS$ имя, MXj, МХ $ имя, MXj, MH$ имя, Xj, X$ имя, XHj и XH$ имя. 3. Наконец в карте STORAGE, используемой для определения емкости нескольких многоканальных устройств, специфическими формами являются Sj и S$ имя.
Таким образом, для карт CLEAR, INITIAL и STORAGE в данном приложении использованы перечисленные специфические формы, а не обычные общие формы СЧАj и СЧА $ имя. В противоположность ситуации с операторами для GPSS-блоков, неблочные операторы не укладываются в единообразную схему общих свойств. За исключением общей идеи полей имени, операции и операндов, внутри категории неблочных операторов существуют значительные различия в их спецификации.
Таким образом, это приложение предназначено для того, чтобы собрать все эти операторы вместе в качестве справочной таблицы для пользователя, которому может потребоваться срочная консультация по поводу правила составления некоторого неблочного оператора.
Поле имени | Поле операции | A | B | C | D | E | |
Имя булевской переменной { k, имя} | BVARIABLE (булевская переменная) | Комбинация определений числовых данных, операций отношения, логических атрибутов и булевских операторов. | |||||
Определения числовых данных {k,СЧА j, СЧА $имя, СЧА *j} | Операции отношения 'G' 'L' 'E' 'GE' 'LE' 'NE' | Логические атрибуты1 FU или F FNU FI FNI LS LR SE SNE SF SNF | Булевские операторы +(или), *(и) |   | |||
  | CLEAR (очистить) | Сохраяемая величина (сохраняемые величины) , не подлежащая обнулению [Xj, X$имя, XHj, XH$имя] |   |   |   |   | |
Символи ческое имя элемента | EQU (эквива лентность) | Числовой эквивалент символического имени k | Мнемони- ческое обозначение для типов элемента |   |   |   | |
Имя функции {k, имя } | FUNCTION (функция) | Аргумент функции {СЧАj, СЧА$имя, СЧА*j за исключением MX, MH} | Тип функции и число точек { C D E L M} k |   |   |   | |
Карта (карты), следующая за функцией X1, Y1/X2, Y2/X3, Y3/и т.д. (X1 должна начинаться в первом столбце; MX и MH не разрешены в качестве величин Y в функция E- или M- типа) | |||||||
  | INITIAL (инициа- лизировать) | Устанав ливаемые логические переключатели {LSj , LS$имя} | Разделитель в случае нескольких входов [/] |   |   |   | |
Матричные сохраняемые величины {MXj, MX$имя, MHj, MH$имя} | Начальное значение [-] k | Разделитель на случай нескольких входов [/] |   |   | |||
Сохраняемые величины {Xj, X$имя, XHj, XH$имя} | Начальное значение [-] k | Разделитель на случай нескольких входов [/] |   |   | |||
Имя матрицы {k, имя} | MATRIX (задать матрицу) | Тип матрицы {X, H} | Число строк, k | Число столбцов, k |   |   | 1 Формируются посредством добавления j, $имя, *j к перечисленным логическим операторам |
Имя таблицы {k, имя} | QTABLE (Q-таблица) | Имя очереди { имя, k} | Верхний предел левого частотного класса, k | Ширина промежутков между частотными классами, k | Число частотных классов, k |   | |
  | REALLOCATE (перераспре делитель) | Мнемоническое обозначение предопре- деляемого элемента | Общее число единиц этого элемента после предопре- деления, k | Разделитель в случае нескольких входов [,] |   |   | |
  | RMULT (установить значение генератора) | Положительная нечетная целая константа, которая может вводиться в один или несколько операндов от A до H для определения нестандартного начального множителя для датчиков случайных чисел соответственно с 1-го по 8-й. По умолчанию текущее значение множителя не изменяется. В случае нескольких входов разделителем является запятая. | |||||
  | START (начать) | Начальное значение счетчика числа завершений, k | Подавление печати, [NP] | Начальное значение счетчика промежу точной выдачи, [k] | Признак распечатка цепей, [l] |   | |
Имя многока нального устройства {k, имя} | STORAGE (многока нальное устройство) | Емкость многока нального устройства, k |   |   |   |   | |
  | STORAGE (многока нальное устройство) | Ссылка на многока нальное устройство, {Sj, S$имя} | Емкость многока нального устройства, k | Разделитель в случае нескольких входов, [/] |   |   | |
Имя таблицы, {k, имя} | TABLE (таблица) | Аргументы таблицы {k, СЧАj, СЧА $имя, СЧА*j} | Верхний предел левого частотного класса, k | Ширина промежутка между частотными классами, k | Кол-во частотных классов, [W] k | Времен ной интервал для RT-таблиц, k | |
Имя переменной, {k, имя} | VARIABLE; FVARIABLE (переменная; переменная с плавающей запятой) | Комбинации числовых данных и арифметических операндов |   |   | |||
Числовые данные | Арифметические операторы | ||||||
{k,СЧА j, СЧА $имя, СЧА *j} | + - * / @ (только для VARIABLE) |
"Строки, соответствующие блокам GPSS"
Существуют три поля, которые должны присутствовать в строке, представляющую данный блок. Позиции строк, используемые для записи этих полей, представлены в табл. 2.1.
Таблица 2.1. Поля строк, в которые записывают информацию блоков.
Колонки строк | Информация блока |
2-6 | Имя блока |
8-18 | Операция |
19-71 | Операнды |
Символическое имя (если оно задано) блока нужно заполнять в последовательных колонках, но обязательно между колонками 2 и 6. Операцию блоков записывают, начиная с колонки 8. Операнды заполняют в поле, начинающемся с колонки 19. Операнды следуют один за другим, их отделяют друг от друга запятыми. Между операндами не должно быть пробелов.
Рис. 2.2.Дополнительные примеры блока GENERATE : а - с операндами A-D ; б - с заданными операндами А и С; в - с заданными значениями операндов А, В и Е. Строка имеет вид, представленный на рис.2.3. Здесь представлены примеры блоков GENERATE, изображенных на рис.2.2,а,б,в. Отметим, что поясняющие комментарии, представленные на рис. 2.3, начинаются (в данном случае) от колонки 34.
LOCATION | OPERATION | A,B,C,D,E,F ------------------------> | ||||||||||||||||||||||||||||||||||||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 1 0 | 1 1 | 1 2 | 1 3 | 1 4 | 1 5 | 1 6 | 1 7 | 1 8 | 1 9 | 2 0 | 2 1 | 2 2 | 2 3 | 2 4 | 2 5 | 2 6 | 2 7 | 2 8 | 2 9 | 3 0 | 3 1 | 3 2 | 3 3 | 3 4 | 3 5 | 3 6 | 3 7 | 3 8 | 3 9 | 4 0 | 4 1 | 4 2 | 4 3 | 4 4 | 4 5 |
G | E | N | E | R | A | T | E | 3 | , | 3 | , | 1 | 0 | , | 5 | С | Т | Р | О | К | А | Д | Л | Я | Р | И | С | . | 2 | . | 2 | , | а | |||||||||||
* | ||||||||||||||||||||||||||||||||||||||||||||
S | P | A | W | N | G | E | N | E | R | A | T | E | 5 | , | , | 2 | С | Т | Р | О | К | А | Д | Л | Я | Р | И | С | . | 2 | . | 2 | , | б | ||||||||||
* | ||||||||||||||||||||||||||||||||||||||||||||
G | E | N | E | R | A | T | E | 8 | , | 1 | , | , | , | 4 | С | Т | Р | О | К | А | Д | Л | Я | Р | И | С | . | 2 | . | 2 | , | в |
Рис. 2.3. Вид строк, соответствующих блокам, представленным на рис. 2.2.
Главная Содержание главы 1"Третий пример использования цепей текущих и будущих событий"
В примере моделирования 2С делается различие между уровнями приоритетои транзактов в двух сегментах модели. Это приводит к реализации в модели дисциплины обслуживания "первым пришел - первым обслужен внутри приоритетного класса". Некоторые сомнения, которые могли остаться относительно того, почему эта дисциплина обслуживаия является результатом управления уровнями приоритетов транзактов, могут быть сняты при рассмотрении численного примера, показывающего метод использования интерпретатором GPSS цепей будущих и текущих событий при моделировании системы, изображенной на рис.2С.4. Начальные условия такого примера мы сейчас рассмотрим.
Рис.2С.4. Распечатка программы из примера моделирования 2С (с приоритетами).
BLOCK CARD NUMBER *LOC OPERATION A,B,C,D,E,F,G COMMENTS SIMULATE * * MODEL SEGMENT 1 * 1 GENERATE 420,360,,,1 CATEGORY 1 MECHANICS ARRIVE 2 QUEUE LINE ENTER "CATEGORY I SEGMENT" OF LINE 3 SEIZE CLERK CAPTURE ТHЕ CLERK 4 DEPART LINE LEAVE THE LINE 5 ADVANCE 300,90 USE THE CLERK 6 RELEASE CLERK FREE THE CLERK 7 TERMINATE LEAVE THE TOOL CRIB AREA * * MODEL SEGMENT 2 * 8 GENERATE 360,240,,,2 CATEGORY 2 MECHANICS ARRIVE 9 QUEUE LINE ENTER "CATEGORY 2 SEGMENT" OF LINE 10 SEIZE CLERK CAPTURE THE CLERK 11 DEPART LINE LEAVE THE LINE 12 ADVANCE 100,30 USE THE CLERK 13 RELEASE CLERK FREE THE CLERK 14 TERMINATE LEAVE THE TOOL CRIB AREA * MODEL SEGMENT 3 * 15 GENERATE 28800 TIMER AHRIVES AFTER 8 HOURS 16 TERMINATE 1 SHUT OFF THE RUN * * CONTROL CARDS * START 1 START THE RUN END RETURN CONTROL TO OPERATING SYSTEM |
Рис.2.34 является повторением распечатки программы модели примера 2С. В табл.2.19 с использованием номеров блоков рис. 2.34 представлены интервалы времени прихода и времени обслуживания, которые возникают в различных блоках GENERATE и ADVANCE модели. И, наконец, на рис.2.35 представлены состояния транзактов, находящихся в цепях текущих и будущих событий.
Рис. 2.34. Повторение рис. 2С.4.
BLOCK NUMBER *LOC OPERATION A,B,C,D,E,F,G COMMENTS SIMULATE * * MODEL SEGMENT 1 * 1 GENERATE 420,360,,,1 CATEGORY I MECHANICS ARRIVE 2 QUEUE LINE ENTER "CATEGORY I SEGMENT" OF LINE 3 SEIZE CLERK CAPTURE THE CLERK 4 DEPART LINE LEAVE THE LINE 5 ADVANCE 300,90 USE THE CLERK 6 RELEASE CLERK FREE THE CLERK 7 TERMINATE LEAVE THE TOOL CRIB AREA * * MODEL SEGMENT 2 * 8 GENERATE 36O,240,,,2 CATEGORY 2 MECHANICS ARRIVE 9 QUEUE LINE ENTER "CATEGORY 2 SEGMENT" OF LINE 10 SEIZE CLERK CAPTURE THE CLERK 11 DEPART LINE LEAVE THE LINE 12 ADVANCE 100,30 USE THE CLERK 13 RELEASE CLERK FREE THE CLERK 14 TERMINATE LEAVE THE TOOL CRIB AREA * * MODEL SEGMENT 3 * 15 GENERATE 28800 TIMER ARRIVES AFTER 8 HOURS 16 TERMINATE 1 SHUT OFF THE RUN * * CONTROL CARDS * START 1 START THE RUN END RETURN CONTROL TO OPERATING SYSTEM |
Таблица 2.19.
Номер блока | Тип блока | Моделируемое событие | Последовательность интервалов |
1 | GENERATE | Приход механиков, делающих запросы категории 1 | 392, 223, 426, ... |
5 | ADVANCE | Обслуживание запросов категории 1 | 309, ... |
8 | GENERATE | Приход механиков, делающих запросы категории 2 | 403, 279, 352, ... |
12 | ADVANCE | Обслуживание запросов категории 2 | В примере не используется |
15 | GENERATE | Таймер | 28800 |
Номер строки | Модельное время | Цепь текущих событий к началу цепи | Цепь будущих событий к началу цепи |
1 | ДФВ | Пусто | Пусто |
2 | ПФВ | Пусто | [1,392,HET,1,1] [2,403,HET,2,8] [3,28800,HET,0,15] |
3 | 392 | [1,KMP,HET,1,1] | [2,403,HET,2,8] [3,28800,HET,0,15] |
4 | 392 | Пусто | [2,403,HET,2,8] [4,615,HET,1,1] [1,701,5,1,6] [3,28800,HET,0,15] |
5 | 403 | [2,KMP,НЕТ,2,8] | [4,615,HET,1,1] [1,701,5,1,6] [3,28800,HET,0,15] |
6 | 403 | [2,KMP,9,2,10] | [4,615,HET,1,1] [5,682,HET,2,8] [1,701,5,1,6] [3,28800,HET,0,15] |
7 | 615 | [2,KMP,9,2,10] [4,KMP,HET,1,1] | [5,682,HET,2,8] [1,701,5,1,6] [3,28800,HET,0,15] |
8 | 615 | [2,KMP,9,2,10] [4,KMP,2,1,3] | [5,682,HET,2,8] [1,701,5,1,6] [6,1041,HET,1,1] [3,28800,HET,0,15] |
9 | 682 | [2,KMP,9,2,10] [5,KMP,HET,2,8] [4,KMP,2,1,3] | [1,701,5,1,6] [6,1041,HET,1,1] [3,28800,HET,0,15] |
10 | 682 | [2,KMP,9,2,10] [5,KMP,9,2,10] [4,KMP,2,1,3] | [1,701,5,1,6] [7,1034,HET,2,8] [6,1041,HET,1,1] [3,28800,HET,0,15] |
Мы не будем тщательно пояснять каждую запись на рис. 2.35. Те, кому это интересно, могут сами построить состояния цепей в соответствии с процедурой, тщательно описанной в первом и втором примерах использования цепей. Для нас интересным являются лишь строки 6, 8 и 10, показывающие состояния цепей в конце фазы просмотра в моменты времени 403, 615 и 682 соответственно.
Главная Содержание главы 1"Удаление транзактов из модели. Блок ТЕRМINАТЕ (ЗАВЕРШИТЬ)"
Транзакты удаляются из модели, попадая в 6лок ТЕ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Т (рис. 3.2).
Рис.3.2. Форма карты START (НАЧАТЬ)
LOCATION |   | OPERATION | A,B,C,D,E,F ------------------------> | ||||||||||||||||||||||||||||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 1 0 | 1 1 | 1 2 | 1 3 | 1 4 | 1 5 | 1 6 | 1 7 | 1 8 | 1 9 | 2 0 | 2 1 | 2 2 | 2 3 | 2 4 | 2 5 | 2 6 | 2 7 | 2 8 | 2 9 | 3 0 | 3 1 | 3 2 | 3 3 | 3 4 | 3 5 | 3 6 | 3 7 | 3 8 |
  |   |   |   |   | S | T | A | R | T |   | A |   | К | А | Р | Т | А |   | S | T | A | R | T |   | С |   | О | П | Е | Р | А | Н | Д | О | М |   | А |
* |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  |   |   |   |   | S | T | A | R | T |   | 1 |   | К | А | Р | Т | А |   | S | T | A | R | T |   | С |   | О | П | Е | Р | А | Н | Д | О | М |   | А |
  |   |   |   |   |   |   |   |   |   |   |   |   | Р | А | В | Н | Ы | М |   | 1 |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
Слово SТАRТ записывается в поле операции строки.
В нижней части рис. 3. 2 показан конкретный пример карты STАRТ, в которой операнд А принимает единичное значение.Рассмотрим теперь пример,в котором блок ТЕRМINАТЕ
и карта SТАRТ используются для управления процессом моделирования. Предположим, что разработчик выбрал в качестве единицы времени 1 мин. Он хочет промоделировать поведение системы в течение 8 ч, затем моделирование должно быть закончено.
Он сможет сделать это следующим образом.
В модель включают сегмент из двух блоков, изображенных на рис. 3.3.
Рис.3.3.Сегмент из двух блоков, обеспечивающих завершение моделирования
в момент модельного времени, равный 480 (выполнение двух другий условий подразумевается). Во всех прочих блоках ТЕRМINАТЕ в модели подразумевается использование операнда А по умолчанию. Это означает, что завершение моделирования, определяемое счетчиком завершений, не будет зависеть от других блоков ТЕRМINАТЕ. В карте SТАRТ в качестве операнда А должна быть использована единица. Единичное значение операнда А карты SТАRТ вызывает запись в счетчик завершений интерпретатора единицы в качестве начального значения. В процессе моделирования завершения движений транзактов, которые происходят время от времени в других блоках ТЕRMINАТЕ, не оказывают воздействия на счетчик завершений.Следовательно, в момент модельного времени, равный 480, транзакт попадет в блок GЕNЕRАТЕ,изображенный на рис. 3.3. Он сразу же перейдет в следующий блок ТЕRМINАТЕ, вызывая тем самым подпрограмму ТЕRМINАТЕ. Поскольку операнд этого блока содержит единицу, то из счетчика завершений вычитается единица. Это уменьшает значение счетчика от единицы до нуля. В результате интерпретатор прекращает моделирование. Такой способ использования счетчика завершений может показаться несколько странным для управления моделированием. Тем не менее только этот способ управления продолжительностью моделирования на GPSS доступен разработчику. Теперь предположим, что для выполнения действий, описанных в предшествующем примере,разрабочик использует следующее: он вставляет в модель двухблочный сегмент, изображенный на рис. 3.4;
Рис.3.4. Другой вид сегмента из двух блоков, вызывающий завершение моделирования в момент времени, равный 480 ( выполнение двух других условий подразумевается ). во всех прочих блоках ТЕRМINАТЕ модели подразумевается использование операнда А по умолчанию; в качестве операнда А карты 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. Это в значительной степени увеличивает число приращений значений времени к таймеру в процессе моделирования, что способствует еще большему увеличению времени моделирования. Главная Содержание главы 1
"Управляющие карты GPSS. Карта RESET (СБРОСИТЬ)"
Начальные условия модели могут заметно отличаться от тех условий, которые имеют место при достижении системой устойчивого состояния. (Некоторые системы могут вовсе не до- стигать устойчивого состояния. Хорошим примером такой системы является работа банка. В период между открытием банка в 9 ч 30 мин утра и закрытием в 15 ч 00 мин дня условие его работы в значительной степени зависит от времени дня. Однако подобные системы не рассмотрены.)
Рассмотрим еще раз пример моделирования 2Е. При типичных условиях функционирования некоторые из находящихся в работе машин должны быть в конце времени наработки до отказа, другие должны только начинать работу и т. д. Следовательно, время, оставшееся до отказа работающих машин, будет распределено равномерно в интервале от нуля до некоторого максимального времени работы.
В начале моделирования состояние системы, приведенной на рис.25.1, таково, что все 50 машин, находящихся в работе, только что вошли в действие. Поскольку время наработки до отказа для каждой швейной машины распределено равномерно и равно 157 ± 25 ч, то ни одна из этих машин не может выйти из строя ранее значения модельного времени 132.
Рис. 25.1
Число рабочих | Число арендуемых машин | ||
3 | 4 | 5 | |
3 | 0.983 | 0.989 | 0.992 |
4 | 0.989 | 0.993 | 0.997 |
5 | 0.991 | 0.993 | 0.997 |
Это означает, что в начале моделирования оставшееся время работы находящихся в производстве машин нереально. В то же время условия функционирования при различных соотношениях "рабочие - машины" изучаемой системы должны определяться при достижении моделью реальных условий, в противном случае это может привести к неверным выводам.
Теперь посмотрим, как же можно обеспечить возможность определения типичного значения или значений соответствующих статистических данных. Интересующей нас статистикой в примере моделирования 2Е является нагрузка многоканального устройства NOWON (как показано в предыдущем параграфе, стоимость падения выпуска продукции зависит именно от этой статистики; эта стоимость, в свою очередь, являетсй основой для выбора оптимальных условий функционирования).
Для получения достоверной статистики существуют три подхода:
Модель надо разработать так, чтобы условия функционирования были типичными с самого начала. Затем можно начать моделирование и сразу же снимать статистические данные. Можно моделировать систему так долго, что любые нетипичные статистические данные, собранные в самом начале процесса моделирования, "утонут" среди типичных данных, собранных в последующее время моделирования. Иными словами, надо сделать так, чтобы нетипичные данные составляли малый процент от полного объема данных и тем самым не имели сколько-нибудь заметного влияния. Можно поступать следующим образом:
моделировать до возникновения типичных условий работы системы; отбросить собранную до этого времени статистику без изменения состояния модели; продолжить моделирование, собирая статистику, на которую уже не влияют нетипичные ситуации.
Первый подход требует от разработчика знания типичных условий работы и умения внести в модель эти условия. В моделях сложных систем первое требование вряд ли выполнимо. Даже если бы он мог это сделать, то удовлетворить второе требование весьма затруднительно. В примере 2Е потребовалось больше времени для преодоления искажений статистических данных о нагрузке, возможных в начале моделирования. Конечно, использование карты RESET для устранения этого искажения является более предпочтительным, чем длительное моделирование без сброса. Результаты, получаются более просто, а время моделирования значительно меньше. Дополнительно следует указать, что после того, как модель создана, работа исследователя только начинается. Его следующей задачей обычно является экспериментирование с моделью, для того чтобы выяснить:
сколько времени необходимо для выхода в стационарный режим и сколько времени необходимо вести моделирование, полагая, что стационарный режим уже достигнут.
Более того, вопросы "сколько времени" зависят в общем случае от характера статистических данных, которые интересуют разработчика, и от конфигурации моделируемой системы.
Пример моделирования 2Е оказался достаточно простым, поскольку только один параметр статистики представлял для нас интерес, а именно нагрузка многоканального устройства. Кроме того, мы неявно предполагали, что ответы на вопросы "сколько времени" при комбинации "четверо рабочих - четыре арендуемые машины" справедливы и при всех прочих изучаемых комбинациях. Хотя это предположение, по-видимому, вполне справедливо в нашем случае, в общем случае это может быть не так. Следовательно, ответы на вопросы "сколько времени" должны даваться неоднократно при изучении только одной задачи. В задачу данного руководства не входит рассмотрение дальнейших деталей вопроса сбора статистики при моделировании. Мы не станем больше задерживаться и на разработке стратегий, которых следует придерживаться при исследовании моделей так же подробно, как и в последнем примере. Однако при тщательном моделировании эти два аспекта являются обязательными.
"Внесение транзактов в модель. Блок GЕNЕRАТЕ (ГЕНЕРИРОВАТЬ)"
GENERATE - это блок, через который транзакты входят в модель. Не существует ограничений на число различных блоков GЕNЕRАТЕ в одной модели. Интервал времени между последовательными появлениями транзактов блока GENERAТЕ называют интервалом поступления.
Способ реализации прихода транзактов в модель GPSS является идентичным тому способу, который изложен в модели при писании процесса прихода заявок. Это означает, что когда транзакт входит в модель через блок GENERАТЕ, интерпретатор планирует время поступления последователя транзакта путем розыгрыша случайного числа в соответствии с распределением интервалов времени поступления с последующим добавлением разыгранного значения к текущему значению таймера. При достижении этого значения времени следующий транзакт вводится в модель через блок GENERАТЕ и т. д.
В системе обслуживания разработчик должен был построить логическую схему, необходимую для реализации процедуры планирования. При использовании GPSS интерпретатор автоматически выполняет требуемые шаги для реализации блока GENERАТЕ. Это дает возможность разработчику уделить больше внимания тем деталям моделирования, которые вызывают у него наибольшие трудности.
Все разработчики должны задавать спецификацию распределения интервалов времени поступления в блоке GENERАТЕ. Информация, необходимая для данного блока, задается операндами А и В. Все возможные виды распределения интервалов времени прибытия в GPSS делят на равномерно распределенные и все другие виды распределения.
Таким образом, специально рассматривают только простейшее из всех нетривиальных распределений, а именно равномерное распределение. Для того, чтобы задать более сложный вид распределения интервалов времени прихода в GPSS, разработчик должен записать так называемое определение функции.
Блок GENERАТЕ вместе с операндами А и В изображен на рис. 1.1.
Рис. 1.1
Операнд | Значение | Значение по умолчанию |
А | Средний интервал времени | Ноль |
В | Половина поля допуска равномерно распределенного интервала | Ноль |
Операнд А определяет среднее время между последовательными приходами транзактов в блоке GENERАТЕ.
Операнд В задает половину поля допуска (или половину размаха) интервалов времени прибытия.
Когда операнды задают в виде констaнт, они должны быть неотрицательными целыми числами.В GPSS/360 существует только один единственный блок (рассмотрен ниже), для которого разрешено использование десятичной точки в операнде. Во всех остальных случаях включение десятичной точки при использовании операндов ошибочно.
Рис. 1.2. Блок GENERATE (ГЕНЕРИРОВАТЬ)
с конкретными значениями операндов А и В. На рис. 1.2 показан пример использования блока GENERАТЕ. Операндами А и В являются соответственно 5 и 3. Интервалом времени прибытия, таким образом, является случайное число со средним значением, равным 5, и полем допуска, равным 6, т. е. интервал прихода может быть выражен целыми числами 2, 3, 4, 5, б, 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 | Уровень приоритета | Ноль |
Как показано в табл. 1.1, транзакту присваивается именно этот наименьший приоритет, если в блоке GENERАТЕ не используется в явном виде операнд Е. На рис. 1.4 показаны примеры блоков GENERАТЕ, в которых значения операндов С, В и Е указаны в явном виде. На рис.1.4,а моментом первого прихода является значение 10. После этого интервалы времени прибытия находят из равномерного распределения 3-3, иначе говоря, от О до 6 включительно. Однако только первые пять транзактов должны войти в модель через этот блок GENERАТЕ. Рис. 1.4.Дополнительные примеры блока GENERATE : а - с операндами A-D ; б - с заданными операндами А и С; в - с заданными значениями операндов А, В и Е. На рис.1.4,б время первого прибытия задано числом 2.После этого приход новых транзактов будет осуществляться через каждые пять единиц времени. Главная Содержание главы 1
"Внешние управляющие карты, необходимые для выполнения моделирования на GPSS"
После того, как подготовлена колода перфокарт, содержащая модель на GPSS, прежде чем выполнять моделирование, к ней необходимо добавить внешние управляющие карты. Эти управляющие карты никак не влияют на логику работы модели. В них задается информация о задаче пользователя и об имени выполняемой программы, указывается на необходимость работы с интерпретатором GPSS и т. д. Когда эти управляющие карты добавлены в колоду, получается задание, которое можно выполнить на ЭВМ.
На рис. 11.1 показаны только карты модели; здесь внешние управляющие карты отсутствуют. Вид внешних управляющих карт задания в значительной степени зависит от вычислительной установки, на которой это задание нужно выполнять. Вот почему в данном руководстве не описаны особенности этих карт.В инструкции для оператора GPSS/360 фирмы IBM [номер GH20 0311l] приведены примеры внешних управляющих карт задания для использования программы GPSS/360 под управлением операционной системы OS/360. Каждый желающий воспользоваться интерпетатором GPSS в своем вычислительном центре может получить готовый список управляющих строк, содержащих команды. Мы будем считать, что такая информация нами получена в вычислительном центре, где будет выполнено моделирование наших систем.
Рис.11.1.Пример моделирования 2А. Модель и распечатка программы:
а) заполненный бланк для перфорации модели;
б) распечатка программы для модели, представленной в части а.
На бланке показаны поля имени (LOCATION), операции (OPERATION) и операндов
(помечено символами А,В,С,D,E,F, G). На распечатке поле имени отмечено символами *LOC.
а)
LOCATION | OPERATION | A,B,C,D,E,F ------------------------> | |||||||||||||||||||||||||||||||||||||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 1 0 | 1 1 | 1 2 | 1 3 | 1 4 | 1 5 | 1 6 | 1 7 | 1 8 | 1 9 | 2 0 | 2 1 | 2 2 | 2 3 | 2 4 | 2 5 | 2 6 | 2 7 | 2 8 | 2 9 | 3 0 | 3 1 | 3 2 | 3 3 | 3 4 | 3 5 | 3 6 | 3 7 | 3 8 | 3 9 | 4 0 | 4 1 | 4 2 | 4 3 | 4 4 | 4 5 | 4 6 |
S | I | M | U | L | A | T | E | ||||||||||||||||||||||||||||||||||||||
* | |||||||||||||||||||||||||||||||||||||||||||||
* | M | O | D | E | L | S | E | G | M | E | N | T | 1 | ||||||||||||||||||||||||||||||||
* | G | E | N | E | R | A | T | E | 1 | 8 | , | 6 | П | Р | И | Х | О | Д | К | Л | И | Е | Н | Т | О | В | |||||||||||||||||||
Q | U | E | U | E | J | O | E | Q | П | Р | И | С | О | Е | Д | И | Н | Е | Н | И | Е | К | О | Ч | Е | Р | Е | Д | И | ||||||||||||||||
S | E | I | Z | E | J | O | E | П | Р | И | Х | О | Д | В | К | Р | Е | С | Л | О | П | А | Р | И | К | М | А | Х | Е | Р | А | ||||||||||||||
D | E | P | A | R | T | J | O | E | Q | У | Х | О | Д | И | З | О | Ч | Е | Р | Е | Д | И | |||||||||||||||||||||||
A | D | V | A | N | C | E | 1 | 6 | , | 4 | О | Б | С | Л | У | Ж | И | В | А | Н | И | Е | У | П | А | Р | И | К | М | А | Х | Е | Р | А | |||||||||||
R | E | L | E | A | S | E | J | O | E | О | С | В | О | Б | О | Ж | Д | Е | Н | И | Е | П | А | Р | И | К | М | А | Х | Е | Р | А | |||||||||||||
T | E | R | M | I | N | A | T | E | У | Х | О | Д | И | З | П | А | Р | И | К | М | А | Х | Е | Р | С | К | О | Й | |||||||||||||||||
* | |||||||||||||||||||||||||||||||||||||||||||||
* | M | O | D | E | L | S | E | G | M | E | N | T | 2 | ||||||||||||||||||||||||||||||||
* | |||||||||||||||||||||||||||||||||||||||||||||
G | E | N | E | R | A | T | E | 4 | 8 | 0 | , | 1 | Т | А | Й | М | Е | Р | П | Р | И | Х | О | Д | И | Т | В | М | О | М | Е | Н | Т | ||||||||||||
В | Р | Е | М | Е | Н | И | , | Р | А | В | Н | Ы | Й | 4 | 8 | 0 | |||||||||||||||||||||||||||||
T | E | R | M | I | N | A | T | E | 1 | З | А | В | Е | Р | Ш | Е | Н | И | Е | П | Р | О | Г | О | Н | А | |||||||||||||||||||
* | |||||||||||||||||||||||||||||||||||||||||||||
* | C | O | N | T | R | O | L | C | A | R | D | S | |||||||||||||||||||||||||||||||||
* | S | T | A | R | T | 1 | |||||||||||||||||||||||||||||||||||||||
E | N | D |
б)
BLOCK NUMBER *LOG OPERATION A,B,C,D,E,F,G COMMENTS SIMULATE * * MODEL SEGMENT 2 * 1 GENERATE 460 TIMER ARRIVES AT TIME 460 2 TERMINATE 1 SMUT OFF THE RUN * * MODEL SEGMENT 1 * 3 GENERATE 16,6 CUSTOMERS ARRIVE 4 QUEUE JOEQ ENTER THE LINE 5 SEIZE JOE CAPTURE THE BARBER 6 DEPART JOEQ LEAVE THE LINE 7 ADVANCE 16,4 USE THE BARBER 8 RELEASE JOE FREE THE BARBER 9 TERMINATE LEAVE THE SHOP * * CONTROL CARDS * START 1 START THE RUN END RETURN CONTROL TO OPERATING SYSTEM |
"Второй пример использования цепей текущих и будущих событий"
Глядя на рис. 2В.2, можно подумать, что прибор JOE и очередь JOEQ использованы неверно. Хочется задать вопрос: "Каким образом можно использовать прибор в двух совершенно различных местах ?"
Вопрос этот возникает из-за существования в модели двух пар блоков SEIZE - RELEASE.
Число пар блоков SEIZE - RELEASE в модели вовсе не должно совпадать с числом обслуживающих приборов моделируемой системы. В примере моделирования 2В существует только один прибор, однако при этом можно использовать две или большее число пар блоков SEIZE - RELEASE.
Рис.2В.2.Блок-схема примера моделирования 2В.
Рассмотрим еще один пример использования интерпретатором GPSS цепей текущих и будущих событий в процессе моделирования.
На рис. 2.32 представлено повторение распечатки программы из примера моделирования 2В.
В табл. 2.16 даны последовательности интервалов времени прихода и времени обслуживания, которые имеют место в блоках GENERATE и ADVANCE модели.
Рис.2.32.
BLOCK NUMBER *LOG OPERATION A,B,C,D,E.F,G COMMENTS SIMULATE * * MODEL SEGMENT 1 * 1 GENERATE 35,10 HAIRCUT-ONLY CUSTOMERS ARRIVE 2 QUEUE JOEQ ENTER THE LINE 3 SEIZE JOE CAPTURE THE BARBER 4 DEPART JOEQ LEAVE THE LINE 5 ADVANCE 18,6 USE BARBER 6 RELEASE JOE FREE THE BARBER 7 TERMINATE LEAVE THE SHOP * * MODEL SEGMENT 2 * 8 GENERATE 60,20 SHAVE-AND-HAIRCUT CUSTOMERS ARRIVE 9 QUEUE JOEQ ENTER THE LINE 10 SEIZE JOE CAPTURE THE BARBER 11 DEPART JOEQ LEAVE THE LINE 12 ADVANCE 10,2 USE BARBER FOR SHAVE 13 ADVANCE 18,6 USE BARBER FOR HAIRCUT 14 RELEASE JOE FREE THE BARBER 15 TERMINATE LEAVE THE SHOP * * MODEL SEGMENT 3 * l6 GENERATE 480 TIMER ARRIVES AT TIME |
Таблица 2.16.
Номер строки | Тип блока | Моделируемое системное событие | Предлагаемая последовательность интервалов времени |
1 | GENERATE | Приход только стригущихся клиентов | 44, 28, 35, 40, ... |
5 | ADVANCE | Обслуживание только стригущихся клиентов | 20, 18, 22, 17, ... |
8 | GENERATE | Приход стригущихся и бреющихся клиентов | 41, 72, 52, 60, ... |
12 | ADVANCE | Бритье стригущихся и бреющихся клиентов | 9, 11, 10, 12, ... |
13 | ADVANCE | Стрижка стригущихся и бреющихся клиентов | 14, 15, 20, 19, ... |
16 | GENERATE | Таймер | 480 |
Вспомним вид пятипозиционной записи, используемой для обозначения информации о транзактах:
[ Номер транзакта; Время движения; Текущий блок; Уровень приоритета; Номер следующего блока ].
На рис. 2.33 показаны состояния транзактов, находящихся в цепях текущих и будущих событий для нескольких первых значений таймера модельного времени.
Рис.2.33.
Номер строки | Модельное время | Цепь текущих событий к началу цепи | Цепь будущих событий к началу цепи |
1 | До фазы ввода | Пусто | Пусто |
2 | После фазы ввода | Пусто | [2,41,НЕТ,0,8] [1,44,НЕТ,0,1][3,480,НЕТ,0,16] |
3 | 41 | [2,KMP,НЕТ,0,8] | [1,44,НЕТ,0,1] [3,480,НЕТ,0,16] |
4 | 41 | Пусто | [1,44,НЕТ,0,1] [2,50,12,0,13] [4,113,НЕТ,0,8] [3,480,НЕТ,0,16] |
5 | 44 | [1,KMP,НЕТ,0,1] | [2,50,12,0,13] [4,113,НЕТ,0,8] [3,480,НЕТ,0,16] |
6 | 44 | [1,KMP,2,0,3] | [2,50,12,0,13] [5,72,НЕТ,0,1] [4,113,НЕТ,0,8] [3,480,НЕТ,0,16] |
7 | 50 | [1,KMP,2,0,3] [2,KMP,12,0,13] | [5,72,НЕТ,0,1] [4,113,НЕТ,0,8] [3,480,НЕТ,0,16] |
8 | 50 | [1,KMP,2,0,3] | [2,64,13,0,14] [5,72,НЕТ,0,1] [4,113,НЕТ,0,8] [3,480,НЕТ,0,16] |
9 | 64 | [1,KMP,2,0,3] [2,KMP,13,0,14] | [5,72,НЕТ,0,1] [4,113,НЕТ,0,8] [3,480,НЕТ,0,16] |
10 | 64 | Пусто | [5,72,НЕТ,0,1] [1,84,5,0,6] [4,113,НЕТ,0,8] [3,480,НЕТ,0,16] |
В процессе выполнения этой фазы оказывается, что блок 1 является блоком GENERATE.
Транзакт 1 выбирается из вершины пассивного буфера и помещается в цепь будущих событий; планируется вход в блок 1 в момент времени, равный 44 (см. табл. 2.16). Далее карта GENERATE будет обнаружена в блоке номер 8.
Теперь транзакт 2 выбирается из буфера и помещается в цепь будущих событий; планируется его вход в блок 8 в момент времени 41, что соответствует табл. 2.16. И, наконец, третья карта GENERATE обнаруживается в позиции 16, Затем уже транзакт 3 помещается в ЦБС; планируется его вход в блок 16 в момент времени 480 в соответствии с табл. 2.16. Главная Содержание главы 1
"Занятие свободных приборов. Блоки SЕIZЕ (ЗАНЯТЬ) и RELEASE (ОСВОБОДИТЬ)"
Предположим, что мы хотим использовать прибор. При этом мы должны выполнить следующие шаги: Ожидаем своей очереди, если это необходимо. Естественно, что ожидание требует некоторого интервала времени. Когда подходит наша очередь, занимаем прибор. Событие "занятие прибора" происходит в некоторой точке времени. Прибор остается в состоянии занятости, пока не закончится обслуживание. Для обслуживания требуется также некоторый интервал времени. Когда обслуживание заканчивается, мы освобождаем прибор. Событие "освобождение прибора" также происходит в некоторой точке времени.
Подобная последовательность шагов выполняется и при моделировании использования прибора в GPSS. Реализация шагов 2 и 4 в GPSS будет рассмотрена нами сейчас; реализация шага 3 и возможности сбора статистики при выполнении шага 1 будут рассмотрены в следующих параграфах.
В GPSS элементами, которые требуют обслуживания, являются транзакты. Мы знаем, что для транзактов характерно перемещение по модели блок за блоком. Предположим, что в какой-то момент активности транзакт занимает прибор. Для этого транзакт входит (или пытается войти) в соответствующий блок, описывающий этот прибор. Блок должен обладать следующими свойствами: Если прибор уже используют, транзакт не может войти в блок, т. е. ему не разрешается занять прибор в данный момент времени, и он должен ждать в очереди. Такой запрет на вход в блок приводит к тому, что транзакт на время исключается из рассмотрения. Eсли прибор не используют, транзакт может войти в блок. Вход транзакта в блок вызывает выполнение подпрограммы обработки этого блока. Результатом выполнения подпрограммы является изменение статуса прибора из "незанято" в "занято".
Блок, который обладает этими свойствами, является блоком SEIZE (ЗАНЯТЬ). Этот блок вместе с операндом А показан на рис. 5.1.
Рис. 5.1.
Операнд | Значение | Значение или результат по умолчанию |
А | Имя (символическое или числовое) занимаемого прибора | Ошибка |
Вход транзакта в блок SEIZЕ моделирует занятие прибора, вход того же транзакта в другой блок моделирует освобождение прибора.
Назначением этого другого блока является изменение состояния ранее занятого прибора с "занято" в "незанято". Этим блоком является блок RELЕАSЕ (ОСВОБОДИТЬ), который с операндом А показан на рис. 5.2.
Рис. 5.2.
Операнд | Значение | Значение или результат по умолчанию |
А | Имя (символическое или числовое) освобождаемого прибора | Ошибка |