1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. ГЛАВА 1 ОСНОВНЫЕ КОНЦЕПЦИИ МОДЕЛИРОВАНИЯ НА GPSS Внесение транзактов в модель. Блок GENERATE (ГЕНЕРИРОВАТЬ). Строки, соответствующие блокам GPSS. Удаление транзактов из модели. Блок TERMINATE (ЗАВЕРШИТЬ). Элементы, символизирующие обслуживающие приборы. Занятие свободных приборов. Блоки SEIZE (ЗАНЯТЬ) и RELEASE (ОСВОБОДИТЬ) Реализация задержки во времени. Блок ADVANCE (ЗАДЕРЖАТЬ). Ожидание обслуживания: где и при каких условиях происходит ожидание транзакта. Сбор статистики при ожидании. Блоки QUEUE (СТАТЬ В ОЧЕРЕДЬ) и DEPART (ПОКИНУТЬ ОЧЕРЕДЬ). Описание стандартов для записи примеров моделирования. Пример моделирования 2А. Система с одним прибором и очередью. Внешние управляющие карты, необходимые для выполнения моделирования на GPSS. Логика работы интерпретатора. Первый пример использования цепей текущих и будущих событий. Распечатка цепей текущих и будущих событий. Пример моделирования 2В. Расширение системы обслуживания с одним прибором и очередью. Второй пример использования цепей текущих и будущих событий. Пример моделирования 2С. Измененная дисциплина обслуживания в системе с одним прибором и очередью. Третий пример использования цепей текущих и будущих событий. Переход транзактов в блок, отличный от последующего. Блок TRANSFER (ПЕРЕДАТЬ). Пример моделирования 2D. Система обслуживания с прибором, очередью и обратной связью. Моделирование многоканальных устройств. Использование параллельно работающих каналов. Блоки ENTER (ВОЙТИ) и LEAVE (ВЫЙТИ). Многоканальная система массового обслуживания с очередью. Пример моделирования 2Е. Задача об управлении производством. Управляющие карты GPSS. Карта RESET (СБРОСИТЬ). Печать в процессе моделирования. ТЕМА № 1 "Внесение транзактов в модель. Блок GЕNЕRАТЕ (ГЕНЕРИРОВАТЬ)" GENERATE - это блок, через который транзакты входят в модель. Не существует ограничений на число различных блоков GЕNЕRАТЕ в одной модели. Интервал времени между последовательными появлениями транзактов блока GENERAТЕ называют интервалом поступления. Способ реализации прихода транзактов в модель GPSS является идентичным тому способу, который изложен в модели при писании процесса прихода заявок. Это означает, что когда транзакт входит в модель через блок GENERАТЕ, интерпретатор планирует время поступления последователя транзакта путем розыгрыша случайного числа в соответствии с распределением интервалов времени поступления с последующим добавлением разыгранного значения к текущему значению таймера. При достижении этого значения времени следующий транзакт вводится в модель через блок GENERАТЕ и т. д. В системе обслуживания разработчик должен был построить логическую схему, необходимую для реализации процедуры планирования. При использовании GPSS интерпретатор автоматически выполняет требуемые шаги для реализации блока GENERАТЕ. Это дает возможность разработчику уделить больше внимания тем деталям моделирования, которые вызывают у него наибольшие трудности. Все разработчики должны задавать спецификацию распределения интервалов времени поступления в блоке GENERАТЕ. Информация, необходимая для данного блока, задается операндами А и В. Все возможные виды распределения интервалов времени прибытия в GPSS делят на равномерно распределенные и все другие виды распределения. Таким образом, специально рассматривают только простейшее из всех нетривиальных распределений, а именно равномерное распределение. Для того, чтобы задать более сложный вид распределения интервалов времени прихода в GPSS, разработчик должен записать так называемое определение функции. Блок GENERАТЕ вместе с операндами А и В изображен на рис. 1.1. 1 Рис. 1.1 Блок GENERATE (ГЕНЕРИРОВАТЬ) с операндами А и В: Значение по Операнд Значение умолчанию А Средний интервал времени Ноль Половина поля допуска В равномерно распределенного Ноль интервала Операнд А определяет среднее время между последовательными приходами транзактов в блоке 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АТЕ не обязательно должны быть заданы. Когда одно (или оба) из этих значений не указано, по умолчанию предполагается нулевое значение. 2 Рис. 1.3. Блок GЕNERАТЕ с заданием по умолчанию операнда В. На рис. 1.3 показано, как может быть задано значение операнда В для блока GENERАТЕ по умолчанию. Операнд А равен 10. Поскольку для В предполагается нулевое значение, то интервалы времени распределены равномерно в соответствии с записью 10 - О. Иначе говоря, интервал времени прихода равен в точности 10. Это пример того, как может быть задано детерминированное (т.е. неслучайное) значение интервалов времени. Теперь мы рассмотрим еще три дополнительных операнда. Они показаны в табл. 1.1. Таблица 1.1. Значения операндов С, D и Е блока GENERАТЕ. Значения операндов C, D, и E блока GENERATE Операнд Значение Значение по умолчанию C Смещение интервалов Смещение отсутствует D Ограничитель Бесконечность E Уровень приоритета Ноль Операнд С используют для задания смещения интервалов. Смещение интервалов - это моиент времени, в который в блоке GENERАТЕ должен появиться первый транзакт. После этого первого прихода все остальные приходы заявок возникают в соответствии с распределением интервала времени, заданным операндами А и В. Операнд С разработчик может использовать как для ускорения, так и для замедления прихода первого транзакта или для указания прихода в желаемый момент времени. Когда операнд С не используется, все приходы в блок GENERАТЕ определяются операндами А и В. Операнд В задает гранитное значение общего числа транзактов, которые могут войти в модель через данный блок GENERАТЕ в течение времени моделирования. Когда это число достигнуто, данный блок GENERАТЕ перестанет быть активным. Если не определено граничное значение, блок GENERАТЕ остается активным в течение всего времени моделирования. Операнд Е устанавливает уровень или класс приоритета каждого из транзактов, входящих в модель через данный блок GENERАТЕ. Всего при моделировании на GPSS существует 128 различных уровней приоритетов. Эти уровни задают с помощью чисел от О до 127. Чем больше число, тем выше приоритет. Следовательно, наименьшим приоритетом является ноль. Как показано в табл. 1.1, транзакту присваивается именно этот наименьший приоритет, если в блоке GENERАТЕ не используется в явном виде операнд Е. На рис. 1.4 показаны примеры блоков GENERАТЕ, в которых значения операндов С, В и Е указаны в явном виде. На рис.1.4,а моментом первого прихода является значение 10. После этого интервалы времени прибытия находят из равномерного распределения 3-3, иначе говоря, от О до 6 включительно. Однако только первые пять транзактов должны войти в модель через этот блок GENERАТЕ. Рис. 1.4.Дополнительные примеры блока GENERATE : 3 а - с операндами A-D ; б - с заданными операндами А и С; в - с заданными значениями операндов А, В и Е. На рис.1.4,б время первого прибытия задано числом 2.После этого приход новых транзактов будет осуществляться через каждые пять единиц времени. ТЕМА № 2 "Строки, соответствующие блокам 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 1 2 3 4 5 6 7 8 9 A,B,C,D,E,F ------------------------> 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 GE N E R AT E 3 , 3 , 1 0 , 5 С Т Р О К А Д Л Я Р И С . 2 . 2 , а GE N E R AT E 5 , , 2 С Т Р О К А Д Л Я Р И С . 2 . 2 , б GE N E R AT E 8 , 1 , , , 4 С Т Р О К А Д Л Я Р И С . 2 . 2 , в * S P A W N * Рис. 2.3. Вид строк, соответствующих блокам, представленным на рис. 2.2. 4 ТЕМА № 3 "Удаление транзактов из модели. Блок ТЕ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 1 2 3 4 5 6 7 8 9 A,B,C,D,E,F ------------------------> 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 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 ч, затем моделирование должно быть закончено. Он сможет сделать это следующим образом. 1. В модель включают сегмент из двух блоков, изображенных на рис. 3.3. 5 Рис.3.3.Сегмент из двух блоков, обеспечивающих завершение моделирования в момент модельного времени, равный 480 (выполнение двух другий условий подразумевается). 2. Во всех прочих блоках ТЕRМINАТЕ в модели подразумевается использование операнда А по умолчанию. Это означает, что завершение моделирования, определяемое счетчиком завершений, не будет зависеть от других блоков ТЕRМINАТЕ. 3. В карте SТАRТ в качестве операнда А должна быть использована единица. Единичное значение операнда А карты SТАRТ вызывает запись в счетчик завершений интерпретатора единицы в качестве начального значения. В процессе моделирования завершения движений транзактов, которые происходят время от времени в других блоках ТЕRMINАТЕ, не оказывают воздействия на счетчик завершений.Следовательно, в момент модельного времени, равный 480, транзакт попадет в блок GЕNЕRАТЕ,изображенный на рис. 3.3. Он сразу же перейдет в следующий блок ТЕRМINАТЕ, вызывая тем самым подпрограмму ТЕRМINАТЕ. Поскольку операнд этого блока содержит единицу, то из счетчика завершений вычитается единица. Это уменьшает значение счетчика от единицы до нуля. В результате интерпретатор прекращает моделирование. Такой способ использования счетчика завершений может показаться несколько странным для управления моделированием. Тем не менее только этот способ управления продолжительностью моделирования на GPSS доступен разработчику. Теперь предположим, что для выполнения действий, описанных в предшествующем примере,разрабочик использует следующее: 1. он вставляет в модель двухблочный сегмент, изображенный на рис. 3.4; Рис.3.4. Другой вид сегмента из двух блоков, вызывающий завершение моделирования в момент времени, равный 480 ( выполнение двух других условий подразумевается ). 2. во всех прочих блоках ТЕRМINАТЕ модели подразумевается использование операнда А по умолчанию; 3. в качестве операнда А карты SТАRТ используется число 480. Заметим, что в блоке GЕNЕRАТЕ (рис.3.4) в качестве интервала времени задана единица. Иначе говоря, транзакты появляются здесь в моменты времени 1, 2, 3, 4, ... , 478, 479 и 480.Каждый из этих транзактов попадает в последующий блок ТЕRMINАТЕ, где из счетчика завершений вычитается единица при удалении транзакта. Когда в блок ТЕRMINАТЕ войдет 480-й транзакт, значение 6 счетчика завершений уже будет равно единице. 480-й транзакт вызывает уменьшение его от единицы до нуля, и моделирование завершается. Метод завершения моделирования, представленный в первом примере, является более предпочтительным, хотя в логическом смысле они равнозначны, так как последний пример требует 480 выполнений обработки блоков GENERАТЕ и ТЕRMINАТЕ. Так как обработка каждого блока требует времени ЭВМ, то последний пример по крайней мере в 480 раз дороже предыдущего. При втором способе завершения моделирования интерпретатор GPSS пройдет все фиксированные моменты времени, поскольку таймер должен принимать значения 1, 2, 3, 4, ..., 478, 479 и 480 из-за того, что транзакты входят в модель через блок GENERATE, изображенный на рис.3.4. Это в значительной степени увеличивает число приращений значений времени к таймеру в процессе моделирования, что способствует еще большему увеличению времени моделирования. ТЕМА № 4 "Элементы, символизирующие обслуживающие приборы" Рассмотрим теперь, какие элементы можно использовать для представления собственно обслуживания. Такими элементами могут быть либо человек, либо какой-то предмет. Например, людьми, производящими обслуживание, являются: парикмахер, заправщик на бензоколонке,водопроводчик, страховой агент, плотник. Подобным образом, предметами, которые могут обслуживать, являются: авторучка,стоянка автомобилей, театральный бинокль, подъемный кран. Независимо от того, люди это или предметы, подобные элементы мы будем называть приборами. Приборы характеризуются двумя основными свойствам: 1. Каждый прибор в любой момент времени может обслуживать только одно требование. Если в процессе обслуживания появляется новое требование, то оно должно либо подождать своей очереди обслуживания, либо пойти куда-нибудь в другое место. Существует также третья возможность. Если новое требование является достаточно важным, оно может прервать протекающее обслуживание до его завершения. Такое средство прерывания также можно моделировать на GPSS. 2. Когда на прибор поступает требование в модели, надо пропустить время, необходимое для его обслуживания. Такое время называется временем обслуживания. Поскольку в различных точках системы может быть много приборов, для различия между ними приборам могут быть даны имена. Имена задает разработчик модели. Имена могут быть либо числовыми, либо символическими. Если приборам присваивают числовые имена, числа должны быть положительными целыми. Наибольшим разрешенным номером является максимальное число приборов, допустимое в модели. Это число зависит от объема памяти, доступной этой модели. Например, в 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 Было указано, что для того, чтобы символизировать некоторые элементы реальных систем, используется абстрактная концепция транзактов. Такую же концепцию используют и для приборов. 7 Разработчик может установить, например, что прибор 9 символизирует рабочего из мастерской, а прибор, названный CPU, можно использовать для обозначения центрального процессора вычислительной системы, и т.д. Процесс создания аналогий между абстракциями GPSS и их эквивалентами в реальных системах является элементом моделирования на языке GPSS. ТЕМА № 5 "Занятие свободных приборов. Блоки SЕIZЕ (ЗАНЯТЬ) и RELEASE (ОСВОБОДИТЬ)" Предположим, что мы хотим использовать прибор. При этом мы должны выполнить следующие шаги: 1. Ожидаем своей очереди, если это необходимо. Естественно, что ожидание требует некоторого интервала времени. 2. Когда подходит наша очередь, занимаем прибор. Событие "занятие прибора" происходит в некоторой точке времени. 3. Прибор остается в состоянии занятости, пока не закончится обслуживание. Для обслуживания требуется также некоторый интервал времени. 4. Когда обслуживание заканчивается, мы освобождаем прибор. Событие "освобождение прибора" также происходит в некоторой точке времени. Подобная последовательность шагов выполняется и при моделировании использования прибора в GPSS. Реализация шагов 2 и 4 в GPSS будет рассмотрена нами сейчас; реализация шага 3 и возможности сбора статистики при выполнении шага 1 будут рассмотрены в следующих параграфах. В GPSS элементами, которые требуют обслуживания, являются транзакты. Мы знаем, что для транзактов характерно перемещение по модели блок за блоком. Предположим, что в какой-то момент активности транзакт занимает прибор. Для этого транзакт входит (или пытается войти) в соответствующий блок, описывающий этот прибор. Блок должен обладать следующими свойствами: Если прибор уже используют, транзакт не может войти в блок, т. е. ему не разрешается занять прибор в данный момент времени, и он должен ждать в очереди. Такой запрет на вход в блок приводит к тому, что транзакт на время исключается из рассмотрения. Eсли прибор не используют, транзакт может войти в блок. Вход транзакта в блок вызывает выполнение подпрограммы обработки этого блока. Результатом выполнения подпрограммы является изменение статуса прибора из "незанято" в "занято". Блок, который обладает этими свойствами, является блоком SEIZE (ЗАНЯТЬ). Этот блок вместе с операндом А показан на рис. 5.1. Рис. 5.1. Блок SEIZE (ЗАНЯТЬ) и его операнд А: Значение или результат Операнд Значение по умолчанию Имя (символическое или числовое) А Ошибка занимаемого прибора Вход транзакта в блок SEIZЕ моделирует занятие прибора, вход того же транзакта в другой блок моделирует освобождение прибора. Назначением этого другого блока является изменение состояния ранее занятого прибора с "занято" в "незанято". Этим блоком является блок RELЕАSЕ (ОСВОБОДИТЬ), который с операндом А показан на рис. 5.2. 8 Рис. 5.2. Блок RELEASE (ОСВОБОДИТЬ) и его операнд А: Значение или результат Операнд Значение по умолчанию Имя (символическое или числовое) А Ошибка освобождаемого прибора Блок RELЕАSЕ никогда не запрещает вход транзакта. В то же время было бы не логично пытаться освободить свободный прибор. Если делается такая попытка, то интерпретатор GPSS печатает сообщение об ошибке и прекращает выполнение моделирования (в приложении С дан полный список сообщений об ошибках системы GPSS/360). Подобным же образом, если транзакт пытается освободить прибор, занятый другим транзактом, печатается сообщение об ошибке и прекращается моделирование. При моделировании нет необходимости определять соответствующий прибор для интерпретатора GPSS перед тем, как использовать блок SEIZЕ. Тот факт, что блок SEIZЕ используется, вызывает установление факта существования данного прибора. Здесь можно напомнить, что когда мы обсуждали вопрос появления транзакта, ничего не было сказано о необходимости указания интерпретатору на его существование до тех пор, пока транзакт не входил в модель. Короче говоря, интерпретатор автоматически обеспечивает возникновение транзактов и приборов. ТЕМА № 6 "Реализация задержки во времени. Блок АDVANСЕ (ЗАДЕРЖАТЬ)" Предположим, что транзакт только что вошел в блок SEIZЕ, т.е занял прибор. После выполнения соответствующей подпрограммы для данного блока интерпретатор сразу же пытается продвинуть транзакт в следующий последовательный блок модели. Существует мало ограничений на то, каким должен быть этот блок. Это, например, может быть другой блок SEIZЕ, описывающий другой прибор. Так делается, если необходимо, например, выполнить операцию с одновременным занятием и рабочего и какого-либо инструмента для выполнения определенного вида обслуживания. Если рабочий и инструмент моделируются некоторой парой приборов, то транзакт одновременно должен занять оба эти прибора, прежде чем может быть начато обслуживание. Обычно транзакт занимает прибор для того, чтобы немедленно начать на нем обслуживание. Было указано, что обслуживание длится некоторый период времени. В течение этого времени транзакт должен прекратить двигаться по модели. Только по истечении времени обслуживания он должен попасть, в блок RЕLЕАSЕ для освобождения прибора. В GPSS существует блок АDVANCЕ (ЗАДЕРЖАТЬ) для реализации задержки продвижения транзакта в течение некоторого интервала времени. Обычно этот интервал задается случайной переменной. Опыт показывает, что время обслуживания обычно меняется от одного обслуживания к другому. Информация, необходимая для описания соответствующего времени обслуживания и его распределения, задается операндами А и В блока АDVANCЕ. Возможные варианты распределения времени обслуживания делятся на две категории: равномерное распределение интервала обслуживания; прочие распределения интервалов обслуживания. Как и при использовании блока GENERАТЕ, особо рассматривается равномерное распределение. Применение более сложных видов распределения требует использования функций. Поскольку описание функций отложено до следующей главы, здесь мы будем рассматривать только равномерное распределение. На рис. 6.1 показан блок АDVANСЕ вместе с операндами А и В. Как и ранее, операнд А используют для определения среднего времени, которое транзакт, входящий в блок, проведет в нем. Операнд В используют для указания половины поля допуска. 9 Рис. 6.1 Блок ADVANCE (ЗАДЕРЖАТЬ) операндами А и В: Значение или Операнд Значение результат по умолчанию А Задержка на время обслуживания Ноль Половина поля допуска равномерно В распределенного интервала времени Ноль задержки На рис.6.2 показан блок АDVANСЕ со значениями операндов А и В, равными 30 и 5 соответственно. Для каждого транзакта, входящего в этот блок, возможные значения интервалов времени находятся в пределах 25 - 35 включительно. Предположим, что транзакт входит в блок в момент времени, равный 134, а разыгранным значением из распределении 30 ± 5 является 31. Тогда транзакт будет оставаться в этом блоке до момента времени, равного 134 + 31, или 165. В этот момент интерпретатор попытается продвинуть его в следующий блок модели.Блок АDVANCE никогда не препятствует входу транзакта.Любое число транзактов может находиться в этом блоке одновременно. Когда транзакт попадает в такой блок, выполняется соответствующая подпрограмма и вычисляется время пребывания транзакта в нем. Вновь прибывший транзакт никак не влияет на уже находящийся в блоке транзакт. Рис. 6.2. ТЕМА № 7 "Ожидание обслуживания: где при каких условиях происходит ожидание транзакта" В зависимости от значений операндов А и В блока АDVANСЕ может так случиться, что время пребывания транзакта в блоке окажется равным нулю. Например, в блоке АDVANСЕ 12,12 время пребывания в блоке, равное нулю, может возникать в 4% всех случаев. Когда это происходит, вместо задержки транзакта в блоке АDVANСЕ интерпретатор сразу же пытается переместить этот транзакт в следующий блок. Иногда, если это удобно, можно использовать блок АDVANCЕ в качестве "фиктивного" блока. Этого можно добиться, не указывая значения операндов блока. При этом обеспечивается нулевое значение задержки по умолчанию. Позднее мы рассмотрим ситуации, когда это необходимо сделать. Классический случай использования последовательности SЕIZЕ - АDVANCЕ - RELЕАSЕ показан на рис.7.1. 10 Рис.7.1. Пример последовательности SЕIZЕ - АDVANСЕ - RЕLЕАSЕ (ЗАНЯТЬ - ЗАДЕРЖАТЬ - ОСВОБОДИТЬ). Транзакт, двигающийся по этой цепочке, займет устройство с символическим именем JОЕ, задержится там на 16-4 единицы времени и затем покинет его. После того, как транзакт войдет в блок RЕLЕАSЕ и соответствующая подпрограмма закончится, интерпретатор попытается продвинуть транзакт в следующий блок. Вполне возможно, что транзакт задерживается в блоке после того, как обработана подпрограмма. Этот тип входа с оставлением транзакта в блоке является вынужденным; транзакт предпочитает двигаться дальше по модели, если этому не противоречат условия моделирования. Сравните эту ситуацию с добровольным пребыванием транзакта в блоке АDVANCЕ. Ответ на второй вопрос касается дисциплины обслуживания очереди. Дисциплиной обслуживания очереди является правило, в соответствии с которым прибор выбирает на обслуживание следующий транзакт, если таких транзактов больше, чем один. В обычном режиме мы используем дисциплину обслуживания "первым пришел - первым обслужен".Тот, кто ждет дольше других, будет первым. Эту дисциплину обслуживания используют в GPSS по умолчанию. На самом деле дисциплина обслуживания, используемая по умолчанию в GPSS, является более сложной, чем "первым пришел - первым обслужен"; ее реализуют только для транзактов одного класса приоритетов. Транзакту присваивается некоторый приоритет. Уровень приоритета ожидающих транзактов автоматически учитывается интерпретатором при выборе на обслуживание. В примере, следующем далее (пример 2С), показано, как используют эту дисциплину обслуживания. В момент, когда закончится обработка программы RЕLЕАSЕ, следующий транзакт попытается использовать устройство, называемое JОЕ. Из рис. 7.1 вовсе не следует, что блоки АDVANCЕ можно располагать только после блоков SEIZЕ или они должны предшествовать блокам RELЕАSЕ. Блоки АDVANCЕ можно располагать в любых местах моделей. Выбор места зависит от логических условий моделирования. ТЕМА № 8 "Сбор статистики при ожидании. Блоки QUEUE (СТАТЬ В ОЧЕРЕДЬ) и DЕРАRТ (ПОКИНУТЬ ОЧЕРЕДЬ)" Блоки QUEUE (СТАТЬ В ОЧЕРЕДЬ) и DЕРАRТ (ПОКИНУТЬ ОЧЕРЕДЬ) обеспечивают в GPSS возможность автоматического сбора статистических данных, описывающих вынужденное ожидание, которое может происходить время от времени в различных точках модели. В первой части этого параграфа описаны блоки, предназначенные для реализации такой возможности. Далее описаны редко используемые возможности этих блоков. В конце прокомментированы два неверных представления о процессе сбора статистики. Принципы использования блоков QUЕUЕ и DЕРАRТ В любых системах массового обслуживания число ресурсов ограничено. Это означает, что не всегда можно немедленно предоставить ресурс при каждом требовании на его использование. В парикмахерской, например, таким ограниченным ресурсом является сам парикмахер. Если он занят в момент прихода клиента, то последний вынужден ждать своей очереди. В действительности, ожидающие обслуживания требования всегда составляют очередь, что дало основание называть такие системы системами с очередями (системами массового обслуживания). Воспользуемся собственным опытом при использовании ограниченного ресурса и рассмотрим, какие события при этом происходят. 1. Присоединяемся к очереди, т.е. образуем с другими требованиями группу "ожидающих обслуживания". Присоединение к очереди происходит в некоторый момент времени. 2. Ждем своей очереди. Ожидание происходит в течение некоторого интервала времени. 3. Покидаем очередь. Уход из очереди происходит в некоторый момент времени. Очень часто бывает необходимо собрать статистику, описывающую особенности протекания процесса. Эта статистика должна дать ответ на следующие вопросы: o Сколько раз требования приходили в очередь? o Сколько пришедших требований фактически присоединилось к очереди и сколько сразу заняли прибор? 11 Каково было максимальное значение длины очереди? Каково было среднее число ожидающих требований? Каково среднее время ожидания тех требований, которым пришлось ждать? Специализированный язык, разработанный для моделирования систем массового обслуживания, должен иметь средства сбора такого рода статистической информации. GPSS обеспечивает такую возможность с помощью средства, называемого регистратором очереди. При использовании разработчиком регистратора очереди в тех точках модели, где число ресурсов ограничено, интерпретатор начинает автоматически собирать статистику, описывающую ожидание (если оно есть), возникающее в этих точках. Регистратор очереди во многих отношениях подобен такому элементу моделирования, как прибор. Как и при использовании приборов, в модели может быть несколько различных регистраторов очередей. При использовании регистраторов очередей в точках, где возможно ожидание, собирается статистика, описывающая поведение очереди в соответствующей точке модели. Регистраторы очередей различают заданием имен. Условия назначения имен те же, что и условия назначения имен приборов. Имена могут быть числовыми или символическими. Если они числовые, то числа должны быть целыми и положительными. Наибольший номер, используемый в модели, должен быть равным максимальному числу регистраторов в модели. (Как и при использовании приборов, максимальное число регистраторов очередей,допустимое при моделировании, зависит от объема используемой памяти. Максимальное число регистраторов очередей равно (О, 150 и 300 для 64К, 128К и 25бК байт памяти соответственно). Если имя символическое, оно должно содержать от трех до пяти алфавитноцифровых символов, причем первые три символа должны быть алфавитными. Разработчик вносит регистратор очереди в модель с помощью пары взаимодополняющих блоков. Такой парой являются блоки, моделирующие упомянутые выше события 1 и 3. Когда транзакт входит в первый из этих блоков, моделируется событие "присоединение к очереди". Подобным образом, когда транзакт входит во второй из них, моделируется событие "уход из очереди". Блоками, соответствующими событиям "присоединение" и "уход", соответственно являются QUEUE (СТАТЬ В ОЧЕРЕДЬ) и DЕРАRТ (ПОКИНУТЬ ОЧЕРЕДЬ). Эти два блока вместе с операндом А показаны на рис. 8.1. Операнд А используют в блоках QUEUE и DЕРАRТ для указания имени соответствующей очереди. При входе транзакта в блок QUEUE выполняется обработка соответствующей подпрограммы, включающей следующие четыре действия: 1. "Счетчик входов" для данной очереди увеличивается на единицу. 2. Запись "счетчика текущего содержимого" для данной очереди также увеличивается на единицу. 3. Транзакт "привязывается" к очереди указанием ее имени. 4. Транзакт "привязывается" к очереди с запоминанием значения текущего модельного времени. o o o Рис. 8.1. Блоки QUEUE (СТАТЬ В ОЧЕРЕДЬ) и DEPART (ПОКИНУТЬ ОЧЕРЕДЬ) с операндами А : Блоки QUEUE (СТАТЬ В ОЧЕРЕДЬ) и DEPART (ПОКИНУТЬ ОЧЕРЕДЬ) с операндами А: Значение или Операнд Значение результат по умолчанию Имя (символическое или числовое) очереди, к которой необходимо А Ошибка присоединиться или котороую надо покинуть Когда транзакт присоединяется к очереди, устанавливается факт привязки транзакта. В этом смысле информация, указывающая, что конкретный транзакт является элементом очереди, приписывается самому транзакту. Транзакт перестает быть элементом очереди только тогда, когда он переходит в 12 блок DЕРАRТ соответствующей очереди. Когда это происходит, интерпретатор выполняет подпрограмму обработки блока, включающую следующее: 1. Запись "счетчика текущего содержимого" соответствующей очереди уменьшается на единицу. 2. Используя привязку к значению времени, интерпретатор определяет, является ли время, проведенное транзактом в очереди, нулевым. Если да, то такой транзакт по определению является транзактом с "нулевым пребыванием" в очереди; соответствующим образом изменяется счетчик "нулевых вхождений" (причина возникновения нулевых вхождений объяснена ниже). 3. Ликвидируется привязка транзакта, ука- зывающая на принадлежность транзакта соответствующей очереди. В конце моделирования интерпретатор автоматически распечатывает такие элементы статистики, как "счетчик входов", "максимальное содержимое", "среднее значение содержимого" и "счетчик текущего содержимого". Распечатывается также среднее время пребывания в очереди. Рассмотрим подробнее значение среднего времени пребывания в очереди. Интерпретатор может накапливать эти статистические данные двумя способами. Одним из них является расчет времени пребывания в момент входа каждого из транзактов в блок DЕРАRТ (ПОКИНУТЬ ОЧЕРЕДЬ). На самом деле интерпретатор поступает иначе. Вместо того, чтобы независимо обрабатывать блок DЕРАRТ, интерпретатор отслеживает полное время нахождения в очереди, накопленное до текущего времени, получаемое суммированием значений для всех прошедших и находящихся в очереди транзактов. Таким обрадом, в любой момент времени интерпретатором может быть рассчитано среднее время пребывания в очереди делением полного времени пребывания в очереди, накопленного до текущего времени, на значение счетчика входов. Преимуществом такого подхода является учет тех транзактов, которые не покидамт очередь в момент обработки статистики. Недостатком же является тот факт, что это время будет несколько занижено, поскольку те транзакты, которые еще не вышли из очереди (если таковые имеются), должны оставаться в очереди еще некоторое время, а это никак не учитывается в расчете. Фактически интерпретатором рассчитываются два статистических параметра времени нахождения в очереди. Один из них является средним временем по всем входам в очередь. Обычно часть входов в очередь имеет нулевое время пребывания в очереди, т. е. им не приходится ждать. Поэтому интерпретатор также считает и статистику для среднего времени пребывания в очереди, исключая те входы, которые не вызвали ожидания. Это объясняет, для чего транзакту приписывается значение содержимого таймера при входе в блок QUEUE и для чего в блоке DЕРАRТ проверяется, не было ли время ожидания этого транзакта нулевым. Рассмотрим теперь пример записи пары блоков QUEUE и DЕРАRТ в модели. Рассмотрим снова рисунок примера последовательности ЗАНЯТЬ -ЗАДЕРЖАТЬ-ОСВОБОДИТЬ. Пример последовательности SЕIZЕ - АDVANСЕ -RЕLЕАSЕ Ожидание может возникнуть ввиду занятости прибора с именем JОЕ. Предположим, что мы собираем статистику об этом ожидании. В сегмент модели регистратор очереди будет введен блоками QUEUЕ и DЕРАRТ (рис. 8.2). Регистратору очереди присвоено произвольное символическое имя JОЕQ. Рис.8.2. Добавление сегмента регистратора очереди Как же работает показанный на рисунке сегмент модели? Положим, что транзакт вошел в этот сегмент в момент, когда прибор JOЕ не занят. Транзакт входит в блок QUEUE, при этом выполняется соответствующая подпрограмма. Модифицируется счетчик входов, содержимое очереди 13 увеличивается на 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Т в различные моменты модельного времени. Это означает, что имеет место "ненулевое вхождение" в очередь. Использование операнда В в блоках QUEUE и DЕРАRТ. В блоках QUEUE и DEРАRТ существует возможность использования операнда В. На рис. 8.3 повторен рис. 8.1, но с использованием операнда В. Операнд В указывает на какую величину должен быть модифицирован счетчик содержимого очереди. По умолчанию для этого операнда подразумевается значение 1. Рис.8.3. Блоки QUEUE и DEPART с операндами А и В: Блоки QUEUE и DEPART с операндами А и В: Значение или Операнд Значение результат по умолчанию Имя (символическое или числовое) А Ошибка очереди Число элементов, на которое должно В измениться значение счетчика Еденица содеожимого очереди На рис.8.2 именно это значение и используется. Лучше всего проследить влияние операнда В при рассмотрении поведения интерпретатора во время выполнения подпрограмм блоков QUEUE и DЕРАRТ. При выполнении подпрограммы QUEUE происходит следующее: 1. Увеличивается значение счетчика входов сооветствующей очереди на число, равное значению операнда В. 2. Увеличивается значение счетчика содержимого очереди на число, равное значению операнда В. 3. Транзакту приписывается имя очереди. 4. Транзакту приписывается текущее значение модельного времени. Пп. 3 и 4 были пояснены ранее. Пп. 1 и 2 показывают влияние использования операнда В на значение содержимого очереди. Очевидно, что если в блоке QUEUE использован операнд В, отличный от 1, то 14 значение счетчика входов не будет равно числу транзактов, вошедших в этот блок. Подобным образом, содержимое очереди не будет совпадать с числом транзактов, которые привязаны к данной очереди. Например, когда транзакт переходит в блок "QUEUE LINE,2", то и счетчик входов и счетчик содержимого очереди, названной LINЕ, увеличивается на 2, но суммарное число транзактов, присоединившихся к очереди, увеличивается только на 1,и число транзактов, находящихся в очереди, также увеличивается на 1. Рассмотрим теперь выполнение подпрограммы DЕРАRТ. 1. Значение счетчика содержимого очереди уменьшается на число, определяемое операндом В. 2. Используя значение времени, приписанное транзакту при вхождении в блок QUEUE, определяют, является ли данный транзакт транзактом с нулевым вхождением. Если транзакт вызвал нулевое вхождение в очередь, то счетчик нулевых вхождений увеличивается на число, определяемое операндом В блока DЕРАRТ. 3. Связь транзакта, показывающая принадлежность к данной очереди, разрывается. Для иллюстрации п. 2 предположим, что транзакт входит в блок "QUEUE QUEUE,5" и что в то же значение модельного времени он проходит в блок "DЕРАRТ QUEUE,5". По определению транзакт вызывает нулевое вхождение в очередь. Следует помнить, что интерпретатор обрабатывает элементы информации очереди в единицах содержимого, а не в транзактах. Следовательно, в этом примере число нулевых вхождений в очередь увеличится на 5, а не на 1. В операндах В блоков QUEUE и DЕРАRТ значения, отличные от 1, употребляются в специальном случае. Очевидно, что собираемые статистические данные должны соответствующим образом быть интерпретирозаны. При печатании таких данных, как число входов, максимальное и среднее содержимое, текущее содержимое, а также число нулевых вхождений делается ссылка не на число транзактов, а на число элементов содержимого. В заключение скажем, что существует однозначное точное соответствие между счетчиком содержимого очереди и числом транзактов, рассматриваемых как элементы очереди только в том случае, если операнд В блоков QUEUE и DЕРАRТ равен 1 (заданный в явном виде или по умолчанию). Необходимость использования операнда В возникает крайне редко, поэтому почти всегда существует точное однозначное соответствие. В этой книге нет случаев возникновения необходимости использования операнда В в блоках QUEUE и DЕРАRТ. Некоторые замечания о неверном использовании регистратора очереди Начинающие изучение GPSS могут составить неверное представление об использовании регистратора очереди. Два наиболее часто встречающихся ошибочных представления мы прокомментируем ниже. Первой ошибкой является то, что многие считают, будто регистраторы очереди необходимо использовать в модели всюду, где могут возникать очереди. Часто думают, что если регистратор очереди не записан, то не обеспечивается возможность ожидания обслуживания. Это неверно. Использование регистратора очереди совершенно необязательно. При использовании регистратора интерпретатор собирает статистику об ожидании; если регистратор не используется, статистика не собирается, но всюду, где должно возникать ожидание, оно возникает. Например, на рис. 8.2 независимо от того, находится ли блок SEIZЕ между парой QUEUE - DEPART или нет, транзакт не войдет в блок SEIZЕ, если прибор JОЕ занят. Ожидание является следствием состояния прибора, а не следствием использования регистратора очереди. Во многих случаях, даже если известно, что в определенных местах системы возникают очереди, разработчик предпочитает не использовать регистратор очереди. Если в планы не входит обработка статистических данных об очередях, то лучше не собирать статистику. Это сэкономит время, расходуемое на моделирование. Для иллюстрации на рис. 8.4 изображена система, в которой в шести различных местах могут возникать очереди. Разработчик модели может принять решение собрать статистику во всех шести местах или не собирать ее вовсе; может принять решение собирать статистику в некоторых из этих мест модели или, например, собирать статистику в точках 2, 4, 5 и 6 и не собирать ее в точках 1 и 3.В данной книге дано много примеров, где в местах возникновения очереди статистика об очереди не собирается. В четвертом и пятом примерах этой главы приведены такие случаи. 15 Второй общей ошибкой, касающейся использования регистраторов очереди, является мнение, будто транзакт не является элементом очереди, если он не находится в блоке QUEUE. Это неверно. Транзакт просто отмечает факт своего присутствия в очереди входом в блок, где осуществляется привязка к очереди по имени и времени входа в очередь. Независимо от того, остается транзакт в блоке QUEUE или нет, он остается элементом очереди до тех пор, пока не войдет в блок DEРАRТ соответствующей очереди. В зависимости от того, каким образом построена модель, транзакт в общем случае может некоторое время находиться в различных частях модели после того, как он покинет блок QUEUЕ, и прежде, чем он войдет в соответствующий ему блок DEРАRТ. Выше мы сделали предположение, что транзакт может являться элементом более чем одной очереди. Это вовсе не так уж странно, как может показаться на первый взгляд. Можно без труда придумать ситуацию, когда люди одновременно стоят в двух или даже более очередях. Здесь следует отметить, что находиться в очереди вовсе не значит физически в ней присутствовать. Представим себе, например, случай прихода в мясной магазин покупательницы, которой приписан номер в момент входа в магазин. Если покупательница видит, что ее номер еще не дошел, она может пройти в другой магазин, например в бакалейный, стать там в очередь, обслужиться, снова вернуться в мясной магазин и ждать своей очереди. С точки зрения нахождения в очереди, она была в мясном магазине все время, хотя на самом деле она побывала и в бакалейном. В GPSS транзакт не может присутствовать одновременно более чем в пяти очередях. Если транзакт уже находится в пяти очередях и делает попытку присоединиться к шестой, то печатается предупреждающее сообщение с номером 853 . Причиной ограничения именно пятью очередями является наличие только пяти полей записи для имени очереди при привязке транзакта к очереди и пяти полей для записи времени присоединения к очереди. При рассмотрении второго примера моделирования в этой главе приведена модель на GPSS , в которой транзакты одновременно присутствуют в двух различных очередях. ТЕМА № 9 "Описание стандартов для записи примеров моделирования" В данном руководстве для иллюстрации различных возможностей GPSS будут рассмотрены примеры моделирования. Ниже указаны элементы описания примеров. 1. Постановка задачи. Она включает детальное описание задачи. Такое описание достаточно для того, чтобы по нему можно было строить модель и выполнять ее прогоны (т. е. моделировать систему). 2. Метод построения модели. Здесь описывают и поясняют, каким образом задачу можно интерпретировать в терминах GPSS. Сделана попытка объяснить, почему избран именно такой подход. 3. Таблица определений. Таблица определений является списком различных элементов GPSS , использованных в модели, с краткой характеристикой тех частей системы, которые описываются этими элементами. В начале этой таблицы записывается принятая в модели единица времени. Затем записывается представление транзактов. Далее в алфавитном порядке описываются все прочие элементы модели и части моделируемой системы. 4. Блок-схема.В определенном смысле блок-схема и есть модель. Подробная блок-схема может оказаться трудночитаемой. По этой причине рядом с блоком в блок-схеме пишут пояснения (или комментарии). Комментариями являются краткие сведения, указывающие, что моделирует или чем помогает моделированию данный блок. 5. Распечатка программы. В процессе чтения строк, представляющих собой вариант модели, интерпретатором GPSS выполняются следующие три этапа: o присваивается номер каждому блоку модели (т. е. номер его месторасположения); 16 присваивается номер каждой считываемой строке; по каждой строке на печатающем устройстве распечатываются: номер блока (если строка представляет собой блок); информация, находящаяся в полях имени, операции и операндов строки, а также комментарии, если они есть; номер строки ??( номер расположения этой карты в колоде). Интерпретатор выдает распечатку исходной программы. Поскольку номер блока и номер строки не входят в исходный текст, а добавляются интерпретатором в распечатку, ее можно называть расширенной распечаткой программы. 6. Выходные данные программы. Распечатка результатов, выдаваемая в процессе моделирования, показывает, чего фактически достиг разработчик своими силами.Она служит основой для обсуждения. Часто представляют лишь части выходных данных. Это сделано для экономии места и для сосредоточения внимания читателя на той части выходных данных, которая для него наиболее интересна. В некоторых случаях вместо непосредственной распечатки просто представляют выводы. 7. Обсуждение. Сюда входит обсуждение логики моделирования, использования модели и распечатки результатов. Логика моделирования. Здесь рассматривают особенности блок-схемы и ее соотношение с самой задачей или дают конкретный метод интерпретации задачи в терминах GPSS . Использование модели. Перфокарточная версия модели содержит карты блоков,а также карты, имеющие прочую информацию. Например, карта SТАRТ, рассмотренная в параграфе 3, должна обязательно быть включена как элемент модели.В блок-схеме не существует блока, который соответствовал бы карте SТАRТ. Есть и другие возможности включения информации, в явном виде не присутствующей в блок-схеме. При необходимости такая информация будет появляться в распечатке программы и будет обсуждена нами. Распечатка результатов. Результаты можно рассматривать как некий ответ на поставленную задачу. Основным назначением примеров моделирования, тем не менее, является иллюстрация методов построения оделей на GPSS, а не числовых результатов задачи. Поэтому результатам работы программ уделяется не очень много внимания. ТЕМА № 10 o o "Пример моделирования 2А.Система с одним прибором и очередью" Для установления периода моделирования используется сегмент таймера из двух блоков. На рис.2.10 уже был представлен сегмент, требуемый в нашем случае, в предположении, что единицей времени выбрана 1 мин. Его мы и используем в модели. Рис.2.10 Логика моделирования. В представленной модели не выполняется никаких дополнительных действий для вывода клиентов из парикмахерской, когда моделирование завершается при значении таймера 480. Если бы в модели был настоящий парикмахер, то он после восьмичасового рабочего дня ушел бы с работы. Если, наоборот, была бы настоящая модель, то моделировалось бы закрытие дверей через 8 ч работы, а моделирование не прерывалось пока все клиенты, находящиеся в парикмахерской в этот момент времени, не были бы обслужены. Как это записывается на GPSS, будет показано дальше. Использование модели. Бланк, на котором записана перфокарточная версия модели, показан на рис.2А.2, а. Соответствующая ей распечатка программы показана на рис.2А.2, б. 17 Рис.2A.2. Пример моделирования 2A. Модель и распечатка программы: а - заполненный бланк для перфорации модели; б - распечатка программы для модели, представленной в части а. На банке показаны поля имени (LOCATION), операции (OPERATION) и операндов (помечено символами А,В,С,D,Е,F,G). На распечатке по- ле имени отмечено символами * LOC. LOCATION OPERATION 1 2 3 4 5 6 7 8 9 A,B,C,D,E,F ------------------------> 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 S I M U L AT E * * M OD E L S E G M E N T 1 * G E N E R AT E 1 8 , 6 П Р И ХО Д Q UE U E J OE Q П Р И С О Е Д И Н Е Н И Е S E I Z E J OE П Р И ХО Д D E P A R T J OE Q У Х О Д A DV A N C E 1 6 , 4 О Б С Л У Ж И В А Н И Е У R E L E A S E J OE О С В ОБ О Ж Д Е Н И Е П АР И К М А Х Е Р А T E R M I NA T E У Х О Д M OD E L 2 И З И З К Л И Е Н Т О В В К О Ч Е Р Е Д И К Р Е С Л О П А Р И К М А Х Е О Ч Е Р Е Д И П А Р И К М А Х Е Р П А Р И К М АХ Е Р С К О Й * * S E G M E N T * G E N E R AT E 4 8 0 , 1 Т А ЙМ Е Р П Р И Х О Д ИТ В М О М Е Н Т В Р Е М Е Н И , Р А В Н Ы Й T E R M I NA T E 1 З А В Е Р Ш Е Н И Е 4 8 0 П Р ОГ О Н А * * C ON T R OL * S T A R T C A R D S 1 E ND BLOCK NUMBER *LOG OPERATION SIMULATE * * * 1 2 3 4 5 6 7 8 9 460 TIMER ARRIVES AT TIME 460 1 SMUT OFF THE RUN MODEL SEGMENT 1 GENERATE QUEUE SEIZE DEPART ADVANCE RELEASE TERMINATE * * * COMMENTS MODEL SEGMENT 2 GENERATE TERMINATE * * * A,B,C,D,E,F,G 16,6 CUSTOMERS ARRIVE JOEQ ENTER THE LINE JOE CAPTURE THE BARBER JOEQ LEAVE THE LINE 16,4 USE THE BARBER JOE FREE THE BARBER LEAVE THE SHOP CONTROL CARDS START 1 END START THE RUN RETURN CONTROL TO OPERATING SYSTEM 18 Обратите внимание на то, что интерпретатор увеличил объем распечатывающей информации по сравнению с исходным текстом. Это увеличение получено за счет номеров блоков и номеров карт, находящихся соответственно в левой и правой колонках рис.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 * 19 START 1 б) FACILITI SIMBOLS AND CORRESPONDING NUMBERGS 1 JOE в) QUEUE SYMBOLS AND CORRESPONDING NUMBERS 1 JOEQ RELATIVE CLOCK BLOCK COUNTS BLOCK CURRENT TOTAL 1 0 2 1 3 0 4 0 5 1 6 0 7 0 8 0 9 0 480 г) ABSOLUTE CLOCK TOTAL BLOCK 480 CURRENT TOTAL BLOCK CURRENT 27 27 26 26 26 25 25 1 1 FACILITI AVERAGE UTILISATION JOE .860 д) NUMBER AVERAGE SEIZING PREEMPTING ENTRIES TIME/TRAN TRANS. NO. TRANS. NO. 26 15.884 3 е) 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 Основные результаты, полученные при моделировании (см. рис.2А.2), представлены на рис.2А.З. На рис. 2А.З,а показана модель после ее ассемблирования (процесс трансляции с исходного языка в некоторый промежуточный объектный код. После ассемблирования все символические имена заменяются на числовые).Она обладает следующими четырьмя особенностями: 1. Абсолютный номер блока, присвоенный интерпретатором, повторяется в объектном коде модели. Такими номерами являются номера 1 - 9 в левой колонке рис.2А.З,а. 2. Операнды расположены не в смежных колонках и не разделены запятой. Они теперь расположены в полях по шесть колонок каждый и выровнены по левому краю (из рис. 2А.3, а пока явно не видно, что для операндов используют поля именно по шесть колонок). 3. Все символические имена элементов в модели заменены на соответствующие им числовые эквиваленты, присвоенные интерпретатором. Например, операнд А блока QUEUE (блок 2) теперь равен 1, а не JOEQ,операнд А блока SEIZE (блок 3) теперь равен 1, а не JOE, и т.д. 4. Комментарии, входящие в строки блоков модели, пропадают. Чистые карты - комментарии, т. е. карты, имеющие в первой колонке звездочку, не пропадают. Они целиком сохраняются в распечатке объектного кода модели. На рис.2А.З, б,в представлены перечни при боров и очередей. В перечне приборов представлены все числовые эквиваленты,присвоенные символическим именам приборов. Прибору с символическим именем JOE, в частности, присвоен номер 1 и в объектном коде модели; очередь с символическим именем JOEQ получила номер 1.Эти номера являются операндами А блоков SEIZE - RELEASE и QUEUE - DEPART на рис.2А.3,а. Если используются символические имена блоков, то в распечатке программы появляется соответствие между именами и их номерами. На рис.2А.З,г изображены значения времени и список блоков. В верхней строке рисунка указаны два значения времени - относительное и абсолютное. Различие между ними мы определим позднее. А QUEUE 20 сейчас достаточно заметить, что оба значения времени показывают 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А.З,д,е показаны статистические данные, собранные о работе прибора JOE и очереди JOEQ. Еще раз статистические данные о работеприборапоказаны на рис.2A.5; здесь колонки пронумерованы для удобства дальнейших ссылок. В таблице к рис.2А.5 даны значения элементоввразличных колонках. Аналогично, на рис. 2А.6 повторена часть распечатки статистических данных об очереди вместе с номерами колонок. В нижнейчасти рисунка указаны значения данных,располагаемых в колонках.Рассмотрим подробнее таблицы к рис.2А.5 и 2А.6 со ссылкой на распечатку результатов. Они выдают следующую информацию: 1. Прибор JOE использовался в течение 86% времени, AVERAGE UTILIZATION (НАГРУЗКА) = 860. 2. Прибор JOE был занят обслуживанием 26 раз, NUMBER ENTRIES (ЧИСЛО ВХОДОВ) = 26. Это соответствует ранее рассмотренному значению счетчика входов, равному 26 для блока SEIZE. 3. Среднее время интервала обслуживания прибора JOE равно 15,884 мин, AVERAGE TIME/TRANS (СРЕДНЕЕ ВРЕМЯ/ТРАН) = 15.884. 4. Транзакт номер 3 находился на обслуживании приборомJOEвмоментзавершения моделирования SEIZING TRANS.NO. (НОМЕР ОБСЛУЖИВ. ТРАНЗ.) = 3. Тот факт, что 21 5. 6. 7. 8. 9. 10. 11. 12. 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 TIME/TRAN 15.884 SEIZIHG TRANS.NO. 3 PREEMPTING TRANS.NO Описание элементов, показанных на рисунке 2А.3, д Колонка Значение Имена(символические или числовые) приборов, 1 используемых в модели Доля времени, в течении которого соответсвующие приборы 2 были в состоянии занятости 3 Число обслуживаний 4 Средняя продолжительность одного обслуживания Номер транзакта(если такой есть), который в настоящее 5 время находится на обслуживании Номер транзакта(если такой есть), который в настоящее 6 время занял("захватил") прибор Статистические данные, приведенные на рис. 2А.5 и 2А.6, понятны и почти не требуют дополнительных пояснений. Это особенно справедливо для приборов. Так как только один транзакт в 22 единицу времениможет использовать прибор, 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 ZEROS 44.4 AVERAGE TIME/TRANS 2.851 SAVERAGE TIME/TRANS 5.133 TABLE NUMBER CURRENT CONTENS 1 Описание элементов, показанных на рисунке 2А.3, е Колонка Значение Имена(символические или числовые) очередей, 1 используемых в модели Наибольшее значение содержимого очереди, 2 зарегистрированное в течение моделирования 3 Среднее значение содержимого очереди 4 Общее число входов в очередь Общее число входов в очередь без последующего ожидания 5 (нулевые входы) 6 Процент нулевых входов от общего числа входов Среднее время, проведенное в очереди с учетом всех 7 входов(нулевые входы также включаются в среднее) Среднее время, проведенное в очереди(нулевые входы 8 исключаются из среднего) Имя (символическое или числовое) таблицы,GPSS, в которой 9 представлено распределение времени ожидания для этой очереди 10 Текущее значение содержимого очереди Замечание: В ЭВМ единой серии, на которых реализована система GPSS/360, вместо символа $ следует использовать символ Д. 1. TOTALENTRIES (ОБЩЕЕ ЧИСЛО ВХОДОВ) - это число элементов содержимого, вошедших в очередь. Более точно, TOTAL ENTRIES - зто значение счетчика, сброшенного в ноль в начале и 23 модифицируемого назначение, равное значению операнда В блока 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,существует незначительное отклонение этих данных от истинных. ТЕМА № 11 "Внешние управляющие карты, необходимые для выполнения моделирования на 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. 24 а) LOCATION OPERATION 1 2 3 4 5 6 7 8 9 A,B,C,D,E,F ------------------------> 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 S I M U L AT E * * M OD E L S E G M E N T 1 * G E N E R AT E 1 8 , 6 П Р И ХО Д Q UE U E J OE Q П Р И С О Е Д И Н Е Н И Е S E I Z E J OE П Р И ХО Д D E P A R T J OE Q У Х О Д A DV A N C E 1 6 , 4 О Б С Л У Ж И В А Н И Е У R E L E A S E J OE О С В ОБ О Ж Д Е Н И Е П АР И К М А Х Е Р А T E R M I NA T E У Х О Д M OD E L 2 И З И З К Л И Е Н Т О В В К О Ч Е Р Е Д И К Р Е С Л О П А Р И К М А Х Е О Ч Е Р Е Д И П А Р И К М А Х Е Р П А Р И К М АХ Е Р С К О Й * * S E G M E N T * G E N E R AT E 4 8 0 , 1 Т А ЙМ Е Р П Р И Х О Д ИТ В М О М Е Н Т В Р Е М Е Н И , Р А В Н Ы Й T E R M I NA T E 1 З А В Е Р Ш Е Н И Е 4 8 0 П Р ОГ О Н А * * C ON T R OL * S T A R T C A R D S 1 E ND б) BLOCK NUMBER *LOG OPERATION SIMULATE * * * 1 2 3 4 5 6 7 8 9 460 1 TIMER ARRIVES AT TIME 460 SMUT OFF THE RUN MODEL SEGMENT 1 GENERATE QUEUE SEIZE DEPART ADVANCE RELEASE TERMINATE * * * COMMENTS MODEL SEGMENT 2 GENERATE TERMINATE * * * A,B,C,D,E,F,G 16,6 JOEQ JOE 16,4 JOE CUSTOMERS ARRIVE ENTER THE LINE CAPTURE THE BARBER JOEQ LEAVE THE LINE USE THE BARBER FREE THE BARBER LEAVE THE SHOP CONTROL CARDS START 1 END START THE RUN RETURN CONTROL TO OPERATING SYSTEM 25 ТЕМА № 11 "Внешние управляющие карты, необходимые для выполнения моделирования на 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 1 2 3 4 5 6 7 8 9 A,B,C,D,E,F ------------------------> 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 S I M U L AT E * * M OD E L S E G M E N T 1 * G E N E R AT E 1 8 , 6 П Р И ХО Д Q UE U E J OE Q П Р И С О Е Д И Н Е Н И Е S E I Z E J OE П Р И ХО Д D E P A R T J OE Q У Х О Д A DV A N C E 1 6 , 4 О Б С Л У Ж И В А Н И Е У R E L E A S E J OE О С В ОБ О Ж Д Е Н И Е П АР И К М А Х Е Р А T E R M I NA T E У Х О Д M OD E L 2 И З И З К Л И Е Н Т О В В К О Ч Е Р Е Д И К Р Е С Л О П А Р И К М А Х Е О Ч Е Р Е Д И П А Р И К М А Х Е Р П А Р И К М АХ Е Р С К О Й * * S E G M E N T * G E N E R AT E 4 8 0 , 1 Т А ЙМ Е Р П Р И Х О Д ИТ В М О М Е Н Т В Р Е М Е Н И , Р А В Н Ы Й T E R M I NA T E 1 З А В Е Р Ш Е Н И Е 4 8 0 П Р ОГ О Н А * * C ON T R OL * S T A R T C A R D S 1 E ND б) BLOCK NUMBER *LOG OPERATION A,B,C,D,E,F,G COMMENTS 26 SIMULATE * * * 1 2 MODEL SEGMENT 2 GENERATE TERMINATE * * * 3 4 5 6 7 8 9 460 1 MODEL SEGMENT 1 GENERATE QUEUE SEIZE DEPART ADVANCE RELEASE TERMINATE * * * TIMER ARRIVES AT TIME 460 SMUT OFF THE RUN 16,6 JOEQ JOE 16,4 JOE CUSTOMERS ARRIVE ENTER THE LINE CAPTURE THE BARBER JOEQ LEAVE THE LINE USE THE BARBER FREE THE BARBER LEAVE THE SHOP CONTROL CARDS START 1 END START THE RUN RETURN CONTROL TO OPERATING SYSTEM ТЕМА № 12 "Логика работы интерпретатора" В предыдущих параграфах мы описали операции, выполняемые интерпретатором. Это описание, тем не менее, не является достаточным. Например, нами был рассмотрен вопрос о движении транзактов от блока к блоку. Все еще не ясно, какой транзакт интерпретатор выберет следующим для продвижения в модели, когда другой транзакт прекратил двигаться, или в чем заключается cyть дисциплины обслуживания очереди "первым пришел - первым обслужен внутри одного приоритетного класса". На эти вопросы можно будет дать удовлетворительный ответ только после того, как будет рассмотрена логика, на которой основана работа интерпретатора. В основном логика работы интерпретатора становится понятной из рассмотрения механизма отслеживания пути транзактов, движущихся в модели. Интерпретатор рассматривает каждый транзакт как элемент одной или нескольких цепей. Каждый транзакт может быть представлен как звено в цепи. Цепи являются открытыми, а не замкнутыми, следовательно, они имеют два конца, начальный и конечный. В качестве элемента цепи транзакт занимает определенное положение относительно начала цепи. Положение транзакта в цепи тесно связано с тем, как скоро транзакт должен снова вернуться в модель для продолжения движения. Последовательность обработки, в свою очередь, тесно связана с временем возникновений событий при выполнении моделирования. Существуют цепи: текущих событий; будущих событий; пользователя; прерывания; парности. Имеется только одна цепь текущих и одна цепь будущих событий. В общем случае может существовать более чем одна цепь пользователя, цепь прерывания и цепь парности. Изучение цепей текущих и будущих событий мы начнем здесь и далее будем продолжать его. Цепь текущих событий состоит из тех транзактов, для которых планируется их продвижение в одном или нескольких блоках в течение текущего значения модельного времени или в течение ближайшего времени. В цепь текущих событий входят те транзакты, движение которых заблокировано ввиду текущих условий в модели. (По желанию пользователя транзакты могут быть перенесены из цепи текущих событий в цепь пользователя. Это можно сделать для уменьшения времени моделирования, использования нетипичной дисциплины обслуживания или для того и другого.Например,транзакт может быть временно заблокирован ввиду планирования его входа в блок SEIZE, когда требуемый прибор находится в состоянии "занято". Цепь будущих событий состоит из таких транзактов, движение которых не планируется до наступления некоторого времени в будущем. 27 Описанные действия интерпретатора сведены в блок-схемы рис.12.1 и 12.2. Далее будут описаны эти фазы и объяснено, как действует интерпретатор. Рис.12.1. Фаза коррекции таймера модельного времени интерпретатора GPSS. Рис.12.2. Фаза просмотра интерпретатора GPSS. ТЕМА № 13 "Первый пример использования цепей текущих и будущих событий" Рассмотрим, как интерпретатор GPSS использует цепи текущих и будущих событий на примере моделирования системы с одним прибором и очередью, представленном на рис. 13.1. Рис. 13.1.Блок-схема для примера моделирования 2А. 28 Для этого надо сделать следующее: 1. Определить обозначения соответствующей информации о транзактах. 2. Задать распределения интервалов прихода и обслуживания транзактов. 3. Ввести таблицы, показывающие временную зависимость транзактов, находящихся в цепях текущих и будущих событий. 4. Пояснить действия, предпринимаемые интерпретатором, показом изменения информации о транзактах, перемещаемых в модели. Обозначения для транзактов Для транзакта имеется пять типов записей: номер транзакта; время, на которое запланирована попытка войти в следующий блок (время движения); номер блока, через который транзакт сейчас проходит (текущий блок); его уровень приоритета; номер следующего блока, в который делается попытка войти. Эта информация записывается в виде пяти символов в указанном порядке. Общий вид такой пятипозиционной записи представлен на рис.13.2,а. Численный пример представлен на рис.13.2,б. Численный пример показывает, что транзакт номер 9 пытается в момент времени, равный 68, выйти из блока 5 и войти в блок 6. Транзакт номер 9 имеет нулевой приоритет. Рис.13.2.[ Номер транзакта. Время движения. Номер текущего блока. Уровень приоритета. Номер следующего блока] [9.68.5.0.6] Рис. 13.3. Перемещение транзактов между пассивным и активным буферами. 29 Как указывалось ранее, номер транзактам присваивает интерпретатор. Величина номера зависит от того, как много транзактов могут одновременно находиться в модели. Это число зависит от объема предоставляемой памяти. При объеме памяти в 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 1 2 3 4 5 6 7 8 9 A,B,C,D,E,F ------------------------> 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 S I M U L AT E * * M OD E L S E G M E N T * G E N E R AT E 1 8 , 6 П Р И ХО Д Q UE U E J OE Q П Р И С О Е Д И Н Е Н И Е S E I Z E J OE П Р И ХО Д D E P A R T J OE Q У Х О Д A DV A N C E 1 6 , 4 О Б С Л У Ж И В А Н И Е У R E L E A S E J OE О С В ОБ О Ж Д Е Н И Е П АР И К М А Х Е Р А T E R M I NA T E 1 У Х О Д И З И З К Л И Е Н Т О В В К К Р Е С Л О О Ч Е Р Е Д И П А Р И К М А Х Е О Ч Е Р Е Д И П А Р И К М А Х Е Р П А Р И К М АХ Е Р С К О Й 30 * * M OD E L S E G M E N T 2 * G E N E R AT E 4 8 0 , 1 Т А ЙМ Е Р П Р И Х О Д ИТ В М О М Е Н Т В Р Е М Е Н И , Р А В Н Ы Й T E R M I NA T E З А В Е Р Ш Е Н И Е 1 4 8 0 П Р ОГ О Н А * * C ON T R OL * S T A R T C A R D S 1 E ND б) BLOCK NUMBER *LOG OPERATION A,B,C,D,E,F,G COMMENTS SIMULATE * * * 1 2 MODEL SEGMENT 2 GENERATE 460 TIMER ARRIVES AT TIME 460 TERMINATE 1 SMUT OFF THE RUN * * * 3 4 5 6 7 8 9 MODEL SEGMENT 1 GENERATE 16,6 QUEUE JOEQ SEIZE JOE DEPART JOEQ ADVANCE 16,4 RELEASE JOE TERMINATE * * * CUSTOMERS ARRIVE ENTER THE LINE CAPTURE THE BARBER LEAVE THE LINE USE THE BARBER FREE THE BARBER LEAVE THE SHOP CONTROL CARDS START 1 START THE RUN END RETURN CONTROL TO OPERATING SYSTEM Рис 13.5. Повторение рис. 13.4 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 * 31 START 1 SRART THE RUN END RETURN CONTROL TO OPERATING SYSTEM Предполагаемые значения интервалов прихода и времени обслуживания В табл.13.1 представлена последовательность разыгранных значений, являющихся результатом обращения интерпретатора GPSS за первыми четырьмя значениями из выборки чисел с распределением 18 ± 6, которое задано в блоке 1 GENERATE. Таблица 13.1. Разыгранные значения интервалов времени прихода в блоке 1 Номер по порядку Разыгранное значение 1 14 2 13 3 17 4 15 В табл.13.2 показаны первые три разыгранных значения, получаемых интерпретатором из выборки чисел с распределением 16 ± 4, которое задано в блоке 5 ADVANCE. Таблица 13.2. Разыгранные значения интервалов времени прихода в блоке 5 Номер по порядку Разыгранное значение 1 18 2 12 3 14 "Первый пример использования цепей текущих и будущих событий" Состояния цепей модели Рис. 13.6. Состояния цепей для первого примера испльзования цепей текущих и будущих событий: КМР - "как можно раньше" Номер Модельное Цепь текущих событий к Цепь будущих событий к строки время началу цепи началу цепи 1 До фазы ввода Пусто Пусто После фазы 2 Пусто [1,14,НЕТ,0,1] [2,480,НЕТ,0,8] ввода 3 14 [1,КМР,НЕТ,0,1] [2,480,НЕТ,0,8] [3,27,НЕТ,0,1] [1,32,5,0,6] 4 14 Пусто [2,480,НЕТ,0,8] 5 27 [3,KMP,НЕТ,0,1] [1,32,5,0,6] [2,480,НЕТ,0,8] [1,32,5,0,6] [4,44,НЕТ,0,1] 6 27 [3,KMP,2,0,3] [2,480,НЕТ,0,8] 7 32 [3,KMP,2,0,3] [1,KMP,5,0,6] [4,44,НЕТ,0,1] [2,480,НЕТ,0,8] [4,44,НЕТ,0,1] [3,44,5,0,6] 8 32 Пусто [2,480,НЕТ,0,8] [4,KMP,НЕТ,0,1] 9 44 [2,480,НЕТ,0,8] [3,KMP,5,0,6] 10 44 Пусто [4,58,5,0,6] [1,59,НЕТ,0,1] На рис.13.6 показаны цепи текущих и будущих событий в течение нескольких первых значений таймера модельного времени при прогоне модели, приведенной на рис. 13.5 (см. предыдущую страницу). Каждая строка на рис. 13.6 определяется своим номером (первая колонка), который необходим для удобства ссылок при обсуждении рисунка. Различные значения моментов времени, отмечаемые таймером в течение моделирования, показаны на рис.13.6 в колонке "Модельное время". Третья колонка представляет цепь текущих событий, четвертая - цепь будущих событий. Просмотр цепи слева направо на рисунке соответствует ее анализу от начала к концу. Закодированная в виде 32 пятипозиционных записей информация о транзактах, находящихся в цепях, показана на рис.13.6 в виде строк третьей и четвертой колонок. Иногда цепь может не содержать ни одного транзакта. Эта ситуация обозначена словом "пусто". В клетке строк 1 и 2 на рис.13.6 показана информация до и после фазы ввода первых транзактов. Обработка интерпретатором состояний модели начинается с фазы ввода. Для каждого значения модельного времени состояния цепей показаны в двух строках. Первая строка в любое заданное время показывает состояние цепи после последней фазы коррекции таймера, но при коррекции таймера. Первая строка для кажого значения времени показывает состояние цепей сразу после завершения коррекции таймера модельного времени. Рассмотрим теперь, какие действия выполняются интерпретатором над состояниями цепей на рис.13.6. Объяснение рис. 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 описывает рассмотренные нами особенности фазы ввода. Вся логика работы интерпретатора на фазе ввода, представленная в блок-схеме, хорошо понятна из приведенного выше описания. 33 Рис. 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. 34 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 Транзакт-таймер (от строки 4 к строке 5). Интерпретатор продвигает таймер к значению 27 - времени движения транзакта (транзакт 3), находящегося в начале строки 4 цепи будущих событий. Далее он перемещает транзакт из ЦБС в прежде пустую ЦТС. Следующий транзакт в ЦБС (транзакт 1) имеет время движения, отличное от 27. Следовательно, второе выполнение фазы коррекции таймера завершается. Начинается следующее выполнение просмотра. Второе выполнение фазы просмотра (от строки 5 к строке 6). Взяв транзакт 3 из начала строки 5 цепи текущих событий, интерпретатор двигает его в блок 1 (блок GENERATE), затем определяет, можно ли сразу переместить его в блок 2. Временно приостановив обработку транзакта 3, интерпретатор планирует приход следующего транзакта в блок 1 (GENERATE). В соответствии с интервалом прихода 17 (третье разыгранное значение из распределения 18 - 6 в табл. 13.1) транзакт 4 выбирается из вершины пассивного буфера и помещается в ЦБС; планируется его вход в блок 1 в момент времени 44. Она занимает в ЦБС положение между транзактом 1 и 2 в соответствии с принципом упорядочения в ЦБС. Интерпретатор возобновляет движение транзакта 3, завершая его выполнением подпрограммы блока QUEUE. Здесь транзакт безуспешно пытается выйти из блока QUEUE и войти в блок SEIZE. 35 Устройство JOE находится в состоянии "занято", поэтому вход в этот блок запрещен. Интерпретатор оставляет транзакт 3 в блоке QUEUE и в ЦТС, планируя войти в блок 3 "Как можно раньше". Далее интерпретатор должен продолжать работу со следующим транзактом в строке 5 цепи текущих событий. Но такого транзакта не существует. Поэтому следующим шагом является выполнение фазы коррекции таймера. Заметим, что таймер все равно надо было бы продвинуть, даже если бы цепь текущих событий была не пустой. Отметим, что транзакты в строке 6 на рис.13.6 имеют смысл, указанный в табл. 13.4. Таблица 13.4. Смысловые значения транзактов в цепях текущих и будущих событий (строка 6, рис. 13.6). Смысловые значение транзактов в цепях текущих и будущих событий Номер Распределение времени Цепь транзакта обслуживания, мин ЦТС 3 Второй клиент ждет в очереди ЦБС 1 Первый клиент стрижется Третий клиент идет в ЦБС 4 парикмахерскую ЦБС 2 Тразакт-таймер Третье выполнение фазы коррекции таймера (от строки 6 к строке 7). Интерпретатор продвигает значение модельного времени к 32 - времени движения транзакта (транзакт 1), стоящего первым в строке 6 цепи будущих событий. Далее он перемещает транзакт 1 в цепь текущих событий, где тот занимает место последнего элемента среди элементов того же приоритетного класса. Отметим, что в строке 7 в ЦТС транзакт 1 располагается за транзактом 3 (транзакт 3 уже стоит в цепи текущих событий в начале третьего выполнения фазы коррекции таймера). ТЕМА № 13 "Первый пример использования цепей текущих и будущих событий" Следующий транзакт ЦБС (транзакт 4) имеет значение времени движения, отличное от 32. Следовательно, выполняется следующая фаза просмотра. При этом транзакты, находящиеся в строке 7 цепи текущих событий, имеют смысл, указанный в табл. 13.5. Таблица 13.5. Смысловые значения транзактов в цепи текущих событий. Смысловые значения транзактов в цепи текущих событих Номер Смысловое значение транзакта 3 Второй клиент ждет в очереди Первый клиент только что закончил 1 завершил стрижку Третье выполнение фазы просмотра (от строки 7 к строке 8). Выбрав транзакт 3 из начала строки 7 ЦТС, интерпретатор терпит неудачу в попытке ввести транзакт в блок 3 (SEIZE) и вывести его из блока 2. Во входе в блок 3 отказано, поскольку прибор все еще не освободился. Поэтому транзакт 3 остается в блоке QUEUE и в ЦТС, причем планируется его вход в блок 3 "как можно раньше". Переходим к следующему транзакту строки 7 ЦТС (транзакту 1). Интерпретатор перемещает его из блока 5 в блок 6 (RELEASE) и далее из блока 6 в блок 7 (TERMINATE), где он выводится из модели и возвращается в вершину пассивного буфера. Теперь, поскольку транзакт 1 вызвал выполнение подпрограммы блока RELEASE, интепретатор вновь просматривает цепь текущих событий. Снова выбирается транзакт 3, и он снова пытается выйти из блока 2 и войти в блок 3. На этот раз попытка оказывается успешной. Выполнение последовательности SEIZE-ADVANCE-RELEASE вызывает необходимость зедержать транзакт на 12 единиц времени в соответствии с распределением 16 ± 4 (второе значение из табл.13.2). Транзакт 3 помещается в ЦБС; планируется вывести его из блока 5 и поместить в блок 6 в момент времени "текущий + 12" или 44. Заметим, что в ЦБС транзакт 3 попадает в один узел с транзактом 4, который также имеет время движения, равное 44. Поскольку транзакт 4 уже находится в ЦБС, транзакт 3 помещается позади него. Напомним, что если в ЦБС возникает узел времени, то входящий транзакт попадает в цепь как последний элемент среди транзактов того же значения времени движения. 36 Поскольку транзакт 3 вызвал выполнение блока SEIZE, интерпретатор заново просматривает цепь текущих событий. На этот раз цепь пуста. Поэтому на следующем этапе необходимо выполнить фазу коррекции таймера. В это время транзакты в цепи будущих событий в строке 8 имеют смысл, указанный в табл. 13.6. Таблица 13.6. Смысловые значения транзактов в цепи будущих событих Номер Смысловое значение транзакта 3 Второй клиент стрижется Третий клиент едет в 4 парикмахерскую 2 Транзакт-таймер Четвертое выполнение фазы коррекции таймера (от строки 8 к строке 9). Интерпретатор продвигает время к значению 44 - времени движения транзакта (транзакта 4), стоящего первым в строке 8 цепи будущих событий. Затем он перемещает транзакт 4 из ЦБС в ранее пустую ЦТС. Следующий транзакт в ЦБС (транзакт 3) также имеет значение времени движения, равное 44. Он также перемещается в цепь текущих событий, где помещается за транзактом 4 в качестве последнего элемента внутри своего класса приоритетов. Следующий транзакт в цепи будущих событий (транзакт 2) имеет время движения, отличное от 44. Таким образом, четвертая коррекция таймера завершается. Прежде чем продолжить, давайте снова посмотрим, какой смысл придается двум транзактам, стоящим в строке 9 цепи текущих событий (табл. 13.7). Таблица 13.7. Смысловые значения транзактов в цепи текущих событий. Смысловые значения транзактов в цепи текущих событих Номер Смысловое значение транзакта Третий клиент только что пришел в 4 парикмахерскую Второй клиент только что закончил 3 стрижку Четвертое выполнение фазы просмотра (от строки 9 к строке 10). Выбрав транзакт 4, стоящий в начале строки 9 ЦТС, интерпретатор помещает его в блок 1, далее определяет, можно ли его переместить из блока 1 в блок 2. Временно прекратив обработку транзакта 4, интерпретатор планирует время прихода его последователя в блок 1 (GENERATE). Транзакт 1 выбирается из вершины транзактов пассивного буфера и помещается в цепь будущих событий, причем планируется время входа в блок 1 в момент времени "текущий + 15", т.е. 59 (в соответствии с табл.13.1, четвертое значение для распределения 18 ± 6 равно 15). Заметим, что это снова транзакт 1, который вернулся в модель из пассивного буфера. Транзакт, который прежде уже был в модели и символизировал собой первого клиента, теперь вернулся "в игру", символизируя четвертого клиента того же дня. В качестве конкретного примера одновременных событий в GPSS рассмотрим пример моделирования 2А и соответствующие состояния цепей, показанные на рис. 13.6. В строке 9 на рис.13.6 в цепи текущих событий мы видим два события, запланированных на одно и то же модельное время 44. Первым из этих событий, [4,КМР,НЕТ, 0,1], является приход клиента в парикмахерскую. Вторым из этих событий, [3,КМР,5,0,6], является завершение обслуживания клиента, находящегося в кресле парикмахера. На самом деле следующий клиент входит в дверь как раз в момент, когда обслуживаемый клиент поднимается из кресла парикмахера. Посмотрим теперь, как эта реальная ситуация моделируется в примере 2А. При просмотре цепи текущих событий интерпретатор GPSS сначала обнаруживает транзакт 4. Транзакт 4 последовательно входит в блок GENERATE, затем в блок QUEUE и должен там задержаться. Фактически, интерпретатор осуществляет вход следующего клиента в дверь и присоединяет его к очереди. Далее, продолжая просмотр цепи текущих событий, интерпретатор выбирает транзакт 3. Этот транзакт вводится в блоки RELEASE и TERMINATE, что означает "клиент уходит из парикмахерской". Здесь, следовательно, произошли два события - приход клиента и завершение обслуживания. Последовательность обработки была: приход клиента, а затем завершение обслуживания просто 37 потому, что транзакт 4 оказался впереди транзакта 3 в цепи текущих событий. Если бы относительная последовательность этих двух событий в ЦТС оказалась инверсной, то и обработка этих событий была бы инверсной. Конечно, в этой точке система еще не окончательно изменяет свое состояние в момент модельного времени 44. Сейчас возникло условие, при котором произошло событие "перевод состояния парикмахера в положение свободно". Поскольку как часть завершения обслуживания выполняется обработка блока RELEASE, интерпретатор заново просматривает цепь текущих событий. В результате интерпретатор снова выбирает транзакт 4, продвигая его в тот же момент модельного времени через блоки SEIZE и DEPART и вводя его в блок ADVANCE. Следовательно, произойдет событие "занятия". На этом и завершатся действия в момент времени 44. Должно быть ясно, что когда возникают временные узлы в примере моделирования 2А, то последовательность, в которой обрабатываются вовлеченные события, зависит от случая. Однако и не требуется никакого формального контроля в этой простой модели, поскольку интерпретатор заново просматривает ЦТС после обработки блока RELEASE. Если бы это было не так, модель была бы неверной, так как хотя и существовали бы в момент времени 44 ожидающий клиент и освободившийся парикмахер, никакие действия не были бы предприняты для того, чтобы клиент перешел на обслуживание к парикмахеру. Интерпретатор, следовательно, построен таким образом, что в этой модели ему безразлична последовательность возникновения одновременных событий. В примере моделирования 2А легко поменять условия таким образом, что последовательность, в которой будут записаны состояния в цепях на рис.13.6 в момент времени 44, станет небезразличной. Предположим, что прибывающий клиент решает остаться только в том случае, если он немедленно может начать обслуживаться у парикмахера, и что модель модифицируется таким образом, чтобы учесть это предположение (отметим, что мы еще не изучили способа, как это сделать). В этом случае, если приход возникнет раньше события завершения, пришедший клиент не останется на обслуживание, а если последовательность событий будет обратной, останется. При таких условиях очень важно разработать модель таким образом, чтобы в случае возникновения временных узлов завершение обслуживания всегда происходило раньше прихода заявки. Очевидно, что именно такой будет последовательность событий, если принять меры к тому, чтобы обеспечить условие расположения транзакта "завершение обслуживания" ближе к началу ЦТС, чем транзакт "приход заявки". Уже упоминалось, что относительное расположение транзактов в ЦТС определяется уровнем приоритетов. Если бы транзакт "завершение обслуживания" имел более высокий приоритет, чем транзакт "приход заявки", то имела бы место желаемая последовательность обработки событий. Позднее мы увидим, каким образом может устанавливаться уровень приоритетов для того, чтобы избежать проблем, которые возникли бы в связи с временными узлами. ТЕМА № 14 "Распечатка цепей текущих и будущих событий" Разработчик может довольно долго заниматься моделированием на GPSS, не интересуясь состоянием цепей. Однако разработчик может сделать много неверных моделей, если он не понимает принципа функционирования цепей. Даже если моделируемая система относится к системам средней сложности, разработчик обязательно задается вопросом: что далее должно произойти в модели? Поскольку одновременные события в GPSS выполняются последовательно, вопрос о том, что же происходит далее в модели, может иметь очень важные последствия. Ответ на этот вопрос должен быть всегда дан в терминах цепей событий. Разработчик, незнакомый с этими понятиями, должен либо удовлетвориться отсутствием ответа на вопрос о том, что же будет дальше, либо просто должен надеяться на то, что модель верна или почти что верна. Это, вообще говоря, недопустимо. Разработчик, знакомый с понятиями цепей, всегда сумеет найти ответ на поставленный вопрос и будет лучше понимать поведение моделей. Время от времени ему может понадобиться получить распечатку цепей для того, чтобы сделать некоторые заключения относительно того, как работает конкретная модель. ТЕМА № 15 "Пример моделирования 2В. Расширение системы обслуживания с одним прибором и очередью" Постановка задачи. В парикмахерскую с одним креслом могут приходить клиенты двух типов. Клиенты первого типа желают только стричься. Распределение интервалов их прихода 35 ± 10 мин. Клиенты второго типа желают постричься и побриться. Распределение интервалов их прихода 60 ± 20 мин. Парикмахер обслуживает клиентов в порядке "первым пришел - первым обслужен". 38 Такая ситуация может быть изображена на рис.2В.1, на котором кружками представлены клиенты, желающие только стричься, а квадратами обозначены клиенты, желающие и постричься и побриться. В момент, который изображен на рис. 2В.1, в кресле парикмахера сидит клиент, который только стрижется, а в очереди сидят только стригущийся, стригущийся и бреющийся и снова только стригущийся клиенты. На стрижку уходит 18 ± 6 мин, а на бритье 10 ± 2 мин. Рис.2В.1. Дисциплина обслуживания "первым пришел- первым обслужен" при наличии клиентов 2-х типов. Необходимо написать модель парикмахерской на GPSS вместе с картами, обеспечивающими сбор данных об очереди, образуемой ожидающими клиентами. Метод построения модели. Сначала возникает желание попытаться построить такую модель с одним прибором и очередью в виде единственной последовательности блоков, но возникают вопросы: "Как один блок GENERATE можно использовать для моделирования двух типов приходов?" и "Как реализовать различие в обслуживании только стригущихся и бреющихся клиентов?" Довольно быстро можно прийти к выводу, что у нас пока нет средств для разработки такой модели в виде единственной последовательности блоков. Однако такую систему легко промоделировать с помощью двух независимых сегментов или последовательностей. Одна из последовательностей моделирует обслуживание только стригущихся клиентов, а вторая - стригущихся и бреющихся. В каждой из двух последовательностей пара блоков QUEUE - DEPART описывает одну и ту же очередь, поэтому клиенты, проходящие в этих последовательностях, обеспечивают совместный сбор статистики. Таким же образом пара блоков SEIZE - RЕLEASE описывает в каждой из двух последовательностей один и тот же прибор и моделирует самого парикмахера. В сегменте только стригущихся блок ADVANCE используется для моделирования времени стрижки; в сегменте стригущихся и бреющихся пара последовательных блоков ADVANCE используется для моделирования затрат времени на бритье и далее на стрижку соответственно. При таком подходе моделировать систему довольно легко. Таблица определений. Единица времени: 1 мин. Таблица 2B.1. Таблица определений примера моделирования 2B Элементы GPSS Интерпретация Транзакты: 1-й сегмент модели Только стригущиеся клиенты 2-й сегмент модели Стригущиеся и бреющиеся клиенты 3-й сегмент модели Таймер Приборы: JOE Очереди: JOEQ Парикмахер Очередь, используемая для сбора статистики ожидания клиентов обоих типов Обсуждение. Логика моделирования. Блок-схема, соответствующая разработанному подходу, представлена на рис.2В.2. Сегмент 1 моделирует обслуживание только стригущихся клиентов. Сегмент 2 моделирует обслуживание стригущихся и бреющихся клиентов. Сегмент 3 определяет логику для таймера. 39 Рис.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 40 * * 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 Рис. 2В.4. Часть распечатки выходных данных примера моделирования 2В: а - значения времени и список блоков; б - статистические данные по прибору; в - статистические данные по очереди; г - цепь текущих событий; д - цепь будущих событий. а) 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 д) 41 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В.2 модели должен быть дополнен введением дополнительной очереди в сегмент 1 и в сегмент 2. Когда это будет сделано, модель сможет одновременно обслуживать три раздельные множества записей характеристик ожидания. На рис. 2В.5 показана блок-схема рис. 2В.2 после ее модификации в соответствии со сделанными предложениями. Дополнительные очереди, названные ТYРЕ1 и ТYРЕ2, введены соответственно в сегмент 1 и в сегмент 2. Заметим, что когда клиент входит в сегмент 1, он присоединяется к очереди JOEQ, затем к очереди TYPE1, а уже затем пытается занять прибор. Если попытка успешна, то клиент уходит из очередей ТYРЕ1 и JOEQ, и начинается обслуживание блоком ADVANCE. Рис.2В.5.Пример моделирования 2В с раздельными и общей очередями для пользователей 2-х типов. При ожидании обслуживания, следовательно, только стригущиеся клиенты одновременно имеют запись в двух разных очередях. Одно из множеств записей существует только для стригущихся клиентов; другое множество обслуживает всех клиентов, ожидающих освобождения прибора, независимо от типа. То же самое можно сказать относительно стригущихся и бреющихся клиентов, моделирование обслуживания которых осуществляется в сегменте 2. Важно отметить, что логика, присущая модели рис. 2В.5, не отличается от логики рис. 2В.2. Все равно существует только одна очередь клиентов, ожидающих парикмахера. Дисциплина выбора из очереди, реализуемая парикмахером, по-прежнему "первым пришел - первым обслужен". Хочет 42 разработчик собирать статистику порознь или нет, не так важно. Как было показано в параграфе 2.15, присутствие в очереди - это не более чем простая запись. Заметим, что на рис. 2В.3 в качестве операнда D карты START используется единица. В результате этого распечатались цепи текущих и будущих событий по завершении моделирования. Эти цепи показаны на рис. 2В.4, г, д. ТЕМА № 16 "Второй пример использования цепей текущих и будущих событий" Глядя на рис. 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 43 * * * 8 9 10 11 12 13 14 15 MODEL SEGMENT 2 GENERATE 60,20 QUEUE JOEQ SEIZE JOE DEPART JOEQ ADVANCE 10,2 ADVANCE 18,6 RELEASE JOE TERMINATE * * * l6 17 SHAVE-AND-HAIRCUT CUSTOMERS ARRIVE ENTER THE LINE CAPTURE THE BARBER LEAVE THE LINE USE BARBER FOR SHAVE USE BARBER FOR HAIRCUT FREE THE BARBER LEAVE THE SHOP MODEL SEGMENT 3 GENERATE 480 TIMER ARRIVES AT TIME <80 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 Таблица 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 3 4 5 Состояния цепей для второго примера их использования Модельное Цепь текущих событий Цепь будущих событий к началу цепи время к началу цепи До фазы Пусто Пусто ввода После фазы [2,41,НЕТ,0,8] Пусто ввода [1,44,НЕТ,0,1][3,480,НЕТ,0,16] 41 [2,KMP,НЕТ,0,8] [1,44,НЕТ,0,1] [3,480,НЕТ,0,16] [1,44,НЕТ,0,1] [2,50,12,0,13] 41 Пусто [4,113,НЕТ,0,8] [3,480,НЕТ,0,16] 44 [1,KMP,НЕТ,0,1] [2,50,12,0,13] [4,113,НЕТ,0,8] 44 6 44 [1,KMP,2,0,3] 7 50 [1,KMP,2,0,3] [2,KMP,12,0,13] 8 50 [1,KMP,2,0,3] 9 64 [1,KMP,2,0,3] [2,KMP,13,0,14] 10 64 Пусто [3,480,НЕТ,0,16] [2,50,12,0,13] [5,72,НЕТ,0,1] [4,113,НЕТ,0,8] [3,480,НЕТ,0,16] [5,72,НЕТ,0,1] [4,113,НЕТ,0,8] [3,480,НЕТ,0,16] [2,64,13,0,14] [5,72,НЕТ,0,1] [4,113,НЕТ,0,8] [3,480,НЕТ,0,16] [5,72,НЕТ,0,1] [4,113,НЕТ,0,8] [3,480,НЕТ,0,16] [5,72,НЕТ,0,1] [1,84,5,0,6] [4,113,НЕТ,0,8] [3,480,НЕТ,0,16] Фаза ввода (от строки 1 к строке 2). Как показано в первой строке рис. 2.33, в начале фазы ввода цепи пусты. В процессе выполнения этой фазы оказывается, что блок 1 является блоком GENERATE. Транзакт 1 выбирается из вершины пассивного буфера и помещается в цепь будущих событий; планируется вход в блок 1 в момент времени, равный 44 (см. табл. 2.16). Далее карта GENERATE будет обнаружена в блоке номер 8. Теперь транзакт 2 выбирается из буфера и помещается в цепь будущих событий; планируется его вход в блок 8 в момент времени 41, что соответствует табл. 2.16. И, наконец, третья карта GENERATE обнаруживается в позиции 16, Затем уже транзакт 3 помещается в ЦБС; планируется его вход в блок 16 в момент времени 480 в соответствии с табл. 2.16. ТЕМА № 17 "Пример моделирования 2С. Измененная дисциплина обслуживания в системе с одним прибором и очередью" Постановка задачи. На некоторой фабрике в кладовой работает один кладовщик. Он выдает запасные части механикам, обслуживающим станки и устанавливающим эти части на испорченных станках (запасные части довольно дороги и, кроме того, их ассортимент слишком велик для того, чтобы каждый механик мог иметь запасную часть каждого вида в своем ящике). Время, необходимое для удовлетворения запроса, зависит от типа запасной части. Запросы бывают двух категорий. Соответствующие данные представлены в табл. 2С.1. Таблица 2С.1. Интервалы времени прихода и времени обслуживания запросов механиков для примера 2С. Интервалы времени прихода и времени обслуживания запросов механиков для примера 2C Категория Интервалы времени Время запроса прихода механиков, с обслуживания, с 1 420+-360 300+-90 2 360+-240 100+-30 Кладовщик обслуживает механиков по принципу "первым пришел - первым обслужен" независимо от категории запроса. Такая дисциплина обслуживания очереди изображена на рис. 2С. 1, на котором кружки и треугольники изображают механиков, делающих запросы категории 1 и 2 соответственно. На рис. 2C.1 запрос категории 2 обслуживается, а один запрос категории 1 и два запроса категории 2 ждут своей очереди в указанном порядке. 45 Рис.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. Конечно, абсолютный уровень приоритетов не имеет 46 значения. Важно лишь то, что транзакты, представляющие механиков категории 2, имеют больший приоритет, чем транзакты, представляющие механиков категории 1. То, как влияет уровень приоритетов транзактов на обработку, видно при рассмотрении цепи текущих событий. Вспомним, что при перенесении транзактов из цепи будущих событий в цепь текущих событий транзакты в цепи текущих событий занимают положение, являющееся последним внутри соответствующего приоритетного класса. Более того, чем выше приоритетный класс, тем ближе к началу ЦТС располагается транзакт. Поскольку интерпретатор GPSS просматривает цепь текущих событий сначала, он пытается двигать вначале высокоприоритетные транзакты. Позднее, при просмотре он пытается двигать и транзакты, которые имеют низкие приоритеты. Это означает, что любые механики категории 2, ожидающие обслуживания в очереди (у них уровень приоритета равен 2), скорее смогут занять прибор, чем механики категории 1 (у них уровень приоритета равен 1). Если прибор освобождается и в очереди стоит хотя бы один механик каждой категории, механик категории 2 следующим займет устройство просто потому, что он ближе стоит к началу ЦТС, чем механик категории 1. Модель без приоритетов. Для исключения приоритетной дисциплины обслуживания в модели в обоих сегментах достаточно сделать равными операнды Е блоков GENERATE. Проще всего это сделать, убрав операнд Е вовсе. В результате, по умолчанию запросы категорий 1 и 2 получат нулевой приоритет. O статистике. Среднее число ожидающих механиков интересует нас в первую очередь. Его мы получаем в колонке AVERAGE CONTENTS (СРЕДНЕЕ СОДЕРЖИМОЕ) очереди, в которой происходит ожидание. По- скольку стоимость простоя механиков не зависит от категории их запроса, то целесообразно иметь только одну очередь при моделировании системы. AVERAGE CONTENTS этой очереди потом может быть умножено на 0,25 цента в секунду, или на 9 долларов в час, или на 72 доллара в день для того, чтобы получить стоимость потерь в секунду, час или день соответственно. Таблица определений. Единица времени: 1 с. Таблица определений примера моделирования 2C Элементы GPSS Интерпретация Транзакты: 1-й сегмент модели Механики, делающие запрос категории 1 2-й сегмент модели Механики, делающие запрос категории 2 3-й сегмент модели Таймер Приборы: CLERK Очереди: LINE Кладовщик Очередь, используемая для сбора статистики о механиках, делающих запросы обеих категорий Рис.2С.3. Блок-схема для примера моделирования 2С ( с приоритетами). 47 Обсуждение. Использование модели. Модель, показанная на рис.2С.4, была выполнена на ЭВМ первой. Затем операнды Е были удалены из карт GENERATE, и результирующая безприоритетная модель была еще раз пропущена через ЭВМ. Рис.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 48 END RETURN CONTROL TO OPERATING SYSTEM Рис.2С.5. Часть распечатки выходных данных примера моделирования 2С: а - с приоритетами; б - без приоритетов. а) 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 < ENTRIES ZERO EXCLUDING TRANS TIME> При таком подходе, не слишком рентабельном, требуется два прогона модели. Далее в этой главе мы рассмотрим метод однократного прогона, позволяющий достичь тех же результатов. Выходные данные моделирования. (Полное время, потребовавшееся для моделирования на ЭВМ IBN360/67, равнялось 2,1 с.) Как отмечалось выше, наиболее интересной для нас является среднее содержимое очереди, т.е. поле AVERAGE CONTENTS. Рис.2С.5,б показывает, что среднее число ожидающих механиков при отсутствии различия уровней приоритетов при моделировании на интервале восьмичасового рабочего дня равно 2,731. Когда различие в приоритетах есть, среднее число уменьшается до 0,770, как это следует из рис.2С.5,а. Следовательно, если различие приоритетов реализуется, это ведет к увеличению производительности системы в том смысле, что среднее число ожидающих механиков уменьшается примерно на 70%. Обратите внимание на то, что это различие определено на 140 и 145 входах в очередь TOTAL ENTRIES (ОБЩЕЕ ЧИСЛО BXOДОВ), рис.2С.5,а и 2С.5,б]. Из-за случайности процесса при моделировании без приоритеров получилось на пять приходов больше, чем при наличии приоритетов. При отсутствии различия приоритетов стоимость потерь из-за простоя механиков в день составляет около 197 долларов (2,731 х 72 доллара в день = 196,6З доллара в день). В случае реализации различия уровней приоритетов стоимость потерь составила около 55 долларов в день (55,44). Разница таким образом составила 141 доллар (141,19). Несмотря на полученное различие стоимости, период моделирования, использованный в нашем примере, так мал, что выводы, сделанные на основании полученных результатов, неправдоподобно хороши. После того, как мы изучим дополнительные возможности GPSS, мы еще раз промоделируем эту систему более тщательно. ТЕМА № 18 "Третий пример использования цепей текущих и будущих событий" В примере моделирования 2С делается различие между уровнями приоритетои транзактов в двух сегментах модели. Это приводит к реализации в модели дисциплины обслуживания "первым пришел - первым обслужен внутри приоритетного класса". Некоторые сомнения, которые могли остаться относительно того, почему эта дисциплина обслуживаия является результатом управления уровнями приоритетов транзактов, могут быть сняты при рассмотрении численного примера, показывающего метод использования интерпретатором GPSS цепей будущих и текущих событий при моделировании системы, изображенной на рис.2С.4. Начальные условия такого примера мы сейчас рассмотрим. Рис.2С.4. Распечатка программы из примера моделирования 2С (с приоритетами). BLOCK CARD NUMBER *LOC OPERATION A,B,C,D,E,F,G COMMENTS SIMULATE * * MODEL SEGMENT 1 49 * 1 2 3 4 5 6 7 GENERATE 420,360,,,1 CATEGORY 1 MECHANICS ARRIVE QUEUE LINE ENTER "CATEGORY I SEGMENT" OF LINE SEIZE CLERK CAPTURE ТHЕ CLERK DEPART LINE LEAVE THE LINE ADVANCE 300,90 USE THE CLERK RELEASE CLERK FREE THE CLERK TERMINATE LEAVE THE TOOL CRIB AREA * * * 8 9 10 11 12 13 14 * * 15 16 MODEL SEGMENT 2 GENERATE 360,240,,,2 CATEGORY 2 MECHANICS ARRIVE QUEUE LINE ENTER "CATEGORY 2 SEGMENT" OF LINE SEIZE CLERK CAPTURE THE CLERK DEPART LINE LEAVE THE LINE ADVANCE 100,30 USE THE CLERK RELEASE CLERK FREE THE CLERK TERMINATE LEAVE THE TOOL CRIB AREA MODEL SEGMENT 3 GENERATE 28800 TIMER AHRIVES AFTER 8 HOURS 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 50 16 TERMINATE 1 * * CONTROL * START 1 START END RETURN SHUT OFF THE RUN CARDS THE RUN CONTROL TO OPERATING SYSTEM Таблица 2.19. Интервалы времени прихода и времени обслуживания в третьем примере использования цепей Номер Последовательность Тип блока Моделируемое событие блока интервалов Приход механиков, делающих 1 GENERATE 392, 223, 426, ... запросы категории 1 Обслуживание запросов 5 ADVANCE 309, ... категории 1 Приход механиков, делающих 8 GENERATE 403, 279, 352, ... запросы категории 2 Обслуживание запросов В примере не 12 ADVANCE категории 2 используется 15 GENERATE Таймер 28800 Рис.2.35 Состояния цепей для третьего примера использования цепей текущих и будущих событий: ДФВ - до фазы; ПФВ - после фазы ввода Номер Модельное Цепь текущих событий к Цепь будущих событий к началу строки время началу цепи цепи 1 ДФВ Пусто Пусто [1,392,HET,1,1] [2,403,HET,2,8] 2 ПФВ Пусто [3,28800,HET,0,15] 3 392 [1,KMP,HET,1,1] [2,403,HET,2,8] [3,28800,HET,0,15] [2,403,HET,2,8] [4,615,HET,1,1] 4 392 Пусто [1,701,5,1,6] [3,28800,HET,0,15] [4,615,HET,1,1] [1,701,5,1,6] 5 403 [2,KMP,НЕТ,2,8] [3,28800,HET,0,15] [4,615,HET,1,1] [5,682,HET,2,8] 6 403 [2,KMP,9,2,10] [1,701,5,1,6] [3,28800,HET,0,15] [2,KMP,9,2,10] [5,682,HET,2,8] [1,701,5,1,6] 7 615 [4,KMP,HET,1,1] [3,28800,HET,0,15] [2,KMP,9,2,10] [5,682,HET,2,8] [1,701,5,1,6] 8 615 [4,KMP,2,1,3] [6,1041,HET,1,1] [3,28800,HET,0,15] [2,KMP,9,2,10] [1,701,5,1,6] [6,1041,HET,1,1] 9 682 [5,KMP,HET,2,8] [3,28800,HET,0,15] [4,KMP,2,1,3] [2,KMP,9,2,10] [1,701,5,1,6] [7,1034,HET,2,8] 10 682 [5,KMP,9,2,10] [6,1041,HET,1,1] [3,28800,HET,0,15] [4,KMP,2,1,3] Мы не будем тщательно пояснять каждую запись на рис. 2.35. Те, кому это интересно, могут сами построить состояния цепей в соответствии с процедурой, тщательно описанной в первом и втором примерах использования цепей. Для нас интересным являются лишь строки 6, 8 и 10, показывающие состояния цепей в конце фазы просмотра в моменты времени 403, 615 и 682 соответственно. ТЕМА № 19 51 "Переход транзактов в блок, отличный от последующего. Блок ТRАNSFЕR (ПЕРЕДАТЬ)" Иногда возникает необходимость передать транзакт безусловным образом в блок, отличный от последующего. Это можно выполнить, используя блок ТRANSFER (ПЕРЕДАТЬ) в режиме безусловной передачи. Использование блока в этом режиме показано на рис. 19.1. Операнд A при таком использовании блока не участвует. Рис.19.1 Блок TRANSFER (ПЕРЕДАТЬ) в режиме безусловной передачи Результат по Операнд Значение умолчанию A Не используется ----Позиция блока, в который B Ошибка должен перейти транзакт Это означает, что в колонке 19, от которой заполняются операнды, должна стоять запятая. Наличие запятой указывает на безусловный режим использования блока. Операнд В указывает положение,занимаемое блоком, в который транзакт должен сделать попытку входа. Для краткости такой блок мы в дальнейшем просто будем именовать "В блоком". Положение блока может задаваться либо символически, либо в виде номера блока. Символическое имя использовать значительно более удобно. На рис. 19.1 в скобках указан операнд В. Скобки используют только на блок-схеме модели; они не являются частью операнда и их не надо использовать в блоке ТRANSFER. В режиме безусловной передачи блок ТRANSFER не может отказывать транзакту во входе. Когда транзакт входит в блок, он сразу же пытается войти в В блок.Если последний отказывает в этом, транзакт остается в блоке ТRANSFER и в цепи текущих событий. При каждом последующем просмотре цепи (либо при возобновлении просмотра в процессе выполнения фазы просмотра, либо в начале следующего выполнения фазы просмотра) снова делается попытка поместить транзакт в В блок.Возможно, что при каком-то просмотре попытка будет успешной. Как уже было указано, такое использование блока ТRANSFER называется режимом безусловной передачи блока ТRANSFER. Существуют и альтернативные режимы использования блока ТRANSFER. Некоторые из них будут рассмотрены позднее. Использование блока ТRANSFER в режиме безусловной передачи проиллюстрировано в примере моделирования 2В. ТЕМА № 20 "Пример моделирования 2D. Система обслуживания с прибором, очередью и обратной связью" Метод построения модели. Для моделирования на GPSS необходимо определить: 1. условия работы моделируемой системы; 2. какие элементы GPSS надо использовать для удовлетворения условий модели. В данном случае есть два вида ограничивающих условий. Во-первых, имеется лишь одна печь. Вовторых, существует некоторое фиксированное число сборщиков, работающих в системе. Естественно, для моделирования печи использовать понятие "прибор". Также естественно отождествить сборщиков с транзактами. Тогда можно считать, что сборщики циркулируют в системе. Аналогично тому, как они периодически осуществляют сборку и обжиг, транзакты циркулируют в GPSS-модели системы. В реальной системе, после того как сборщик вынимает из печи обожженную деталь, он возвращается и начинает новый этап сборки. В модели, после того как транзакт завершает использование прибора, моделирующего печь, он должен быть возвращен назад посредством блока TRANSFER в блок 52 следующей сборки. Для того чтобы ограничить общее число транзактов, циркулирующих в модели, необходимо использовать операнд D блока GENERATE, с помощью которого можно задать желаемое число транзатов. Для того чтобы вычислить прибыль, соответствующую заданному числу сборщиков, необходимо знать, сколько готовых деталей они сделали в течение моделируемого периода. Число использований печи в точности совпадает с этим значением. Таблица определений. Единица времени: 1 мин. Элемент Зарплата сборщика Таблица 2D.2 Стоимость 3.75 $ в час 80 $ за восьмичасовой рабочий день (независимо от степени использования) Цена материала 2 $ за одну деталь Стоимость 7 $ за деталь готового изделия Стоимость печи Таблица определений примера моделирования 2D Элемент GPSS Интерпретация Транзакты: 1-й сегмент модели Сборщики 2-й сегмент модели Печь Приборы: OVEN Печь Обсуждение. Логика моделирования. Это первая модель, в которой представляется случай дать символическое имя блоку. На рис.2D.1 блок ADVANCE 30,5 получил имя ВАСК. На рис. 2D.2 это символическое имя появляется в поле имени (находится под пометкой *LOC) на карте блока ADVANCE. В колонке номера блока на этом рисунке видно, что символическое имя ВАСК эквивалентно номеру 2. Рис.2D.1. Блок-схема пример моделирования 2D. Рис.2D.2. Распечатка программы примера моделирования 2D. 53 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 На рис. 2D.1, несмотря на то, что сборщики ждут своей очереди использования печи, блок SEIZE (ЗАНЯТЬ) не находится внутри пары блоков QUEUE - DEPART (СТАТЬ В ОЧЕРЕДЬ - ПОКИНУТЬ ОЧЕРЕДЬ). Сбор статистических данных об очереди не требуется, поэтому не ставятся блоки для сбора данных об очереди в модели. Сборщики, ожидающие в очереди использования печи, представляются транзактами, которые в цепи текущих событий ждут возможности войти в блок 3 (SEIZE) "как можно раньше". С точки зрения счетчиков блоков эти транзакты входят в число значений счетчика текущего содержимого блока 2 (ADVANCE). Это верно, даже если время задержки в блоке ADVANCE уже истекло. Использование модели. Поведение модели исследовали при трех значениях соотношения сборщики печь. Было выполнено три раздельных прогона модели на ЭВМ. При каждом новом прогоне менялся только операнд D блока GENERATE 1-го сегмента модели. Именно он задавал изменение соотношения сборщики - печь. "Моделирование многоканальных устройств" Два или более приборов часто работают рядом, выполняя аналогичное обслуживание. Такими приборами могут быть и люди и механизмы. Вот примеры того, как люди могут играть роль параллельно работающих приборов: парикмахеры; контролеры универсального магазина; косметички; служащие в конторе; контролеры в театре. А вот несколько примеров использования механизмов, выполняющих аналогичные операции (таких механизмов может быть два и более); буксиры, вводящие и выводящие корабли в порту; подъемные краны, переносящие тяжелые отливки от литейных форм к станкам; места на стоянке автомобилей; транспортеры для подачи определенного вида запасных частей, находящихся на полках. Прибор в GPSS используют для моделирования единственного устройства обслуживания. Два или более находящихся рядом обслуживающих устройства могут быть промоделированы на GPSS двумя или более приборами, рaсполагаемыми рядом, т. е. параллельно. В самом деле, иногда необходимо использовать параллельные приборы, чтобы промоделировать параллельное обслуживание. Обычно к этому необходимо прибегать, когда отдельные приборы являются разнородными, т. е. характеризуются различными свойствами, например различной интенсивностью обслуживания. Очень часто, однако, различные параллельно работающие приборы являются однородными. Это, грубо говоря, тот случай, когда некоторые устройства обладают определенными общими свойствами. Например, интенсивность, с которой контролер обслуживает покупателей в универмаге, не зависит от конкретного контролера, а является некоторой общей характеристикой. GРSS предоставляет для моделирования однородных параллельных приборов специальное средство (или элемент). Для этого элемента используют название "многоканальное устройство". В модели может быть несколько многобанальных устройств, это отражает тот факт, что в системе существует большое число групп параллельно работающих приборов. Для того чтобы между ними было различие, многоканыльным устройствам можно давать имена. Условия использования имен такие же, как и в случае приборов и очередей. 54 Число приборов, которое моделируется каждым из многоканальных устройств, определяется пользователем. В этом смысле употребляют термин "емкость многоканального устройства". В следующем параграфе описаны методы использования элемента "многоканальное устройство" и определения его емкости. ТЕМА № 22 "Использование параллельно работающих каналов. Блоки ЕNТЕR (ВОЙТИ) и LEAVE (ВЫЙТИ)" В первой части параграфа описаны блоки, соответствующие многоканальным устройствам, рассмотрены основные методы их использования и дополнительные возможности этих блоков. Далее объяснены два метода определения емкости многоканальных устройств. И, наконец, обсуждено основное различие между такими элементами, как прибор и многоканальное устройство с емкостью, равной единице. Основные методы использования блоков ЕNTER и LEAVE Использование многоканального устройства для моделирования одного из параллельно работающих приборов аналогично использованию одиночного прибора. Элементом, который занимает и использует устройство, является транзакт. При этом события происходят в следующем хронологическом порядке: 1. транзакт ожидает своей очереди, если это необходимо; 2. транзакт занимает устройство; 3. устройство осчществляет обслуживание в течение некоторого интервала времени; 4. транзакт освобождает устройство. Как и в случае с прибором, разработчик использует многоканальные устройства в модели, применяя пары дополняющих друг друга блоков. Эти блоки моделируют выполнение описанных выше событий 2 и 4. Когда транзакт входит в первый из этих блоков, моделируется событие "занятие одного из группы параллельно работающих приборов". Подобным же образом, когда транзакт входит во второй из этих блоков, моделируется выполнение события "освобождения параллельно работающего прибора". Блоками, соответствующими состояниям "занято" и "освобождено", являются ЕNТЕR (ВОЙТИ) и LEAVE (ВЫЙТИ). Эти два блока вместе с операндом А изображены на рис. 22.1. Рис.22.1. Блоки ENTER(ВОЙТИ ) и LEAVE(ВЫЙТИ)с операндом А : Блоки ENTER (ВОЙТИ) и LEAVE (ВЫЙТИ) с операндом А: Значение или Операнд Значение результат по умолчанию Имя (символическое или числовое) А Ошибка многоканального устройства Операнд А в блоках ЕNТЕR и LEAVE используется для указания имени соответствующего многоканального устройства. Когда транзакт входит в блок ЕNТЕR, интерпретатор выполняет следующие действия: 1. "счетчик входов" многоканального устройства увеличивается на единицу; 2. "текущее содержимое" многоканального устройства увеличивается на единицу; 3. "доступная емкость" многоканального устройства уменьшается на единицу. Подобным же образом, когда транзакт входит в блок LEAVE, интерпретатор выполняет следующие действия: 1. "текущее содержимое" многоканального устройства уменьшается на единицу; 2. "доступная емкость" многоканального устройства увеличивается на единицу. В конце моделирования интерпретатор автоматически распечатывает такую статистику о многоканальных устройствах, как "счетчик входов", "текущее содержимое" и "максимальное 55 содержимое". Также распечатывается значение "среднего времени пребывания" (т. е. средний интервал времени между различными занятиями и освобождениями). Рассмотрим понятие "среднее время пребывания" более детально. Интерпретатор рассчитывает это значение с использованием полного числа единиц времени, в течение которого различные параллельно работающие приборы находятся в состоянии "занято". Существует только одно такое значение. Оно считается по всем приборам, моделируемым в этом многоканальном устройстве. Значение автоматически корректируется, когда это необходимо. Следовательно, в любое время интерпретатор может вычислить среднее время пребывания делением полного времени на "счетчик входов". Преимуществом такого подхода является учет всех приборов, в том числе и тех, которые еще находятся в занятом состоянии в момент выполнения расчета. Недостатком такого подхода является некоторое занижение статистики, поскольку часть приборов еще некоторое время должна быть занята, а это не учитывается при расчете. Для каждого конкретного транзакта время нахождения в многоканальном устройстве (т. е. между моментами времени, когда он входит в блоки Е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. В этом случае вместо того, чтобы перейти к обработке следующего по списку транзакта в цепи текущих событий, интерпретатор начинает заново просматривать цепь текущих событий. ТЕМА № 23 "Многоканальная система массового обслуживания с очередью" Типичный вариант использования многоканального устройства показан на рис. 23.1. Кроме блоков ЕNТЕR - АDVANCE - LEAVЕ (ВОЙТИ - ЗАДЕРЖАТЬСЯ - ВЫЙТИ), есть блоки QUЕUЕ DEPART , которые собирают информацию об ожидании перед блоком ЕNТЕR (эта пара блоков необязательна). Необходимо рассмотреть два варианта обслуживания при моделировании системы, показанной на рис. 23.1. Первый - метод выбора прибора пользователем; второй - метод выбора пользователя прибором. Рис.23.1. Типичный пример моделирования с использованием многоканального устройства. Очень часто при параллельном обслуживании перед каждым прибором образуется очередь. Когда пользователь приходит на обслуживание, он оценивает ситуацию и принимает решение, Именно в этом, наиболее часто используемом случае, название элемента STORAGE, которое должно бы быть переведено как НАКОПИТЕЛЬ, не соответствует его назначению. Вот почему при переводе этот элемент назвали многоканальным устройством. Рис. 23.2. Пример системы многоканального обслуживания с одной очередью. 56 Приборы, которые являются частью многоканального устройства, не имеют своей индивидуальности. Это означает, что нет возможности разделить очереди по каждому прибору. Следовательно, реализуется концепция: если подошла очередь какого-либо пользователя, то он идет на обслуживание к любому свободному прибору. Это эквивалентно наличию единственной очереди перед устройством с многоканальным обслуживанием. Приходящий пользователь просто становится в очередь. Когда под ходит его очередь, он идет на любой свободный прибор (рис. 23.2). При этом следует заметить, что хотя пользователи не могут выбирать прибор, приборы могут выбрать пользователей. Приборы выбирают из очереди пользователей, упорядоченных по приоритетному признаку. Когда прибор освобождается, он выбирает пользователя по принципу "первым пришел - первым обслужен внутри приоритетного класса". Приборы, которые моделируются многоканальным устройством, реализуют в GPSS такой выбор автоматически. Это происходит потому, что транзакты, ожидающие входа в блок ЕNТЕR (см. рис. 23.1), отсортированы в цепи текущих событий в порядке убывания их уровней приоритетов. После прохождения транзактом блока LЕАVЕ освобождение одного или более приборов вызывает возобновление просмотра цепи текущих событий. Свободный прибор занимается высокоприоритетным транзактом, причем тем из них, который ждет дольше всех. Эта ситуация проиллюстрирована на рис. 23.3. Рис.23.3. Многоканальная система массового обслуживания с одной очередью и приоритетами. Приходящие пользователи не просто становятся в конец очереди, а вливаются в очередь как последние элементы своего приоритетного класса. Рис.23.3 является повторением рис.23.2, внесены лишь различия в приоритетах пользователей. Схема многоканального обслуживания с одной очередью часто используется в реальных ситуациях. Это справедливо для тех с лучаев, когда элементы, ожидающие обслуживания, неодушевлены и однородны, что часто бывает на практике.Это, например, имеет место, когда из цеха в цех по конвейеру двигаются некоторые детали. И хотя в цехах могут быть люди, работающие параллельно, работа их идентична и поступает из единого источника. Многоканальная система массового обслуживания с одной очередью также часто используется и в случае, когда осуществляется обслуживание людей. Такими примерами являются банки, где реализуется система быстрой очереди.Человек, входя в банк, не выбирает себе окошко и не становится в очередь к нему, а становится в конец общей очереди, которая ведет ко всем окошкам. При таком подходе невозможно обогнать других клиентов, время обслуживания которых больше 57 обычного (например, клиентов, открывающих новый счет или покупающих или выписывающих аккредитив). Очень часто при параллельном обслуживании образуется несколько различных очередей. Моделирование такой многоканальной системы обслуживания с несколькими очередями сложнее, чем моделирование многоканальных систем с единственной очередью. Например, надо определить критерий выбора очередей требованиями. Когда приходит новое требование, этот критерий следует использовать для определения очереди,к которой ему следует присоединиться. Также следует предусмотреть возможность перехода из очереди в очередь.Если очередь двигается слишком медленно, то стоящие в конце очереди могут захотеть перейти в другую очередь. ТЕМА № 24 "Пример моделирования 2Е. Задача об управлении производством" Постановка задачи. На трикотажной фабрике 50 швейных машин работают по 8 ч в день и по 5 дней в неделю. Любая из этих машин может в любой момент времени выйти из строя. В этом случае ее заменяют резервной машиной, причем либо сразу, либо по мере ее появления. Тем временем сломанную машину отправляют в ремонтную мастерскую, где ее чинят и возвращают в цех, но уже в качестве резервной. В существующем замкнутом цикле движения машин легко выделить четыре фазы (рис.2Е.1). Рис.2Е.1 На рисунке квадраты представляют машины, находящиеся в работе или в резерве. Перечеркнутые квадраты представляют собой машины либо ремонтируемые, либо ожидающие ремонта. Показаны две машины в ремонте; предполагается, что два человека могут параллельно чинить машины. Всего в системе находятся 59 машин (две в ремонте, две ждут ремонта, 50 в работе и пять готовы к использованию). Управляющий хочет знать, сколько рабочих следует нанять для работы в мастерской, сколько машин следует иметь в резерве, какую платить за это арендную плату, чтобы резервными машинами можно было подменить 50 собственных. Цель - минимизация стоимости производства.Оплата рабочих в мастерской 3,75 доллара в час. За машины, находящиеся в резерве, надо платить по 30 долларов в день. Почасовой убыток при использовании менее 50 машин в производстве оценивается примерно в 20 долларов на машину. Этот убыток возникает из-за снижения производства. Опыт эксплуатации подсказывает, что на ремонт сломанной машины уходит примерно 7 ± 3 ч, распределение равномерное. Когда машину используют в производстве, время наработки до отказа распределено равномерно и составляет 157 ± 25 ч. Время, необходимое для перевозки машины из цеха в мастерскую и обратно, мало, и его не учитывают. Между рабочими в мастерской не делают никаких различий. Не делают различий также и между машинами. Иными словами, распределение времени ремонта не зависит от того, кто какую машину ремонтирует. Распределение времени наработки до отказа одинаково как для собственных, так и для арендуемых машин. Плата за арендуемые машины не зависит от того, используют их или они простаивают. По этой причине не делают попыток увеличить число собственных машин в работе в любой период времени. Предполагаем, что машину снимают с работы только в том случае, если она ломается. 58 Необходимо построить на GPSS модель такой системы и исследовать на ней расходы при различном числе арендуемых машин, доступных управляющему. Найдите такую величину, которая минимизирует стоимость эксплуатации системы. Метод построение модели. Как и в случае 2D, предполагается, что в первую очередь следует разобраться в том, какие ограничения существуют в системе, а затем определить, какие элементы GPSS следует использовать для удовлетворения этих ограничений. В нашей системе (см. рис. 2Е.1) существуют три ограничения: 1. Число рабочих в мастерской. 2. Максимальное число швейных машин, одновременно находящихся в производстве. 3. Общее число машин, циркулирующих в системе. Для моделирования двух первых ограничений удобно использовать многоканальные устройства, а третье ограничение моделировать транзактами. В результате такого выбора, грубо говоря, рабочие мастерской и машины, находящиеся в производстве, задаются некоторыми константами (см. рис.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Е. Таблица определений примера моделирования 2E Элементы GPSS Интерпретация Транзакты: 1-й сегмент модели Швейные машины 2-й сегмент модели Таймер Многоканальные устройства: MEN NOWON Рабочие мастерской Накопитель емостью 50, т.е. максимальное число швейных машин, находящихся в работе одновременно Рис.2Е.2. Блок-схема примера моделирования 2Е (три резервные машины). 59 Рис.2Е.3. Распечатка программы примера моделирования 2Е BLOCK NUMBER *LOC OPERATION A,B,C,D,E,F,G SIMULATE COMMENTS * * 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 REDEFS * 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 60 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.4. Часть распечатки выходных данных примера моделирования 2E: а - статистика по многоканальным устройствам для соотношения "трое рабочих - три арендуемые машины"; б - статистика по многоканальным устройствам для соотношения "трое рабочих - четыре арендуемые машины"; в - статистика по многоканальным устройствам для соотношения "трое рабочих - пять арендуемых машин". а) STORAGE CAPASITY AVERAGE AVERAGE ENTRIES AVERAGE CURRENT MAXIMUM CONTENTS UTILIZATION TIME/TRAN CONTENTS CONTENTS MEN 3 2.185 .728 1924 7.087 3 3 NOWON 50 49.182 .983 1974 155.471 50 50 б) STORAGE CAPASITY AVERAGE AVERAGE ENTRIES AVERAGE CURRENT MAXIMUM CONTENTS UTILIZATION TIME/TRAN CONTENTS CONTENTS MEN 3 2.180 .726 1934 7.036 3 3 NOWON 50 49.486 .989 1984 155.643 50 50 в) STORAGE CAPASITY AVERAGE AVERAGE ENTRIES AVERAGE CURRENT MAXIMUM CONTENTS UTILIZATION TIME/TRAN CONTENTS CONTENTS MEN 3 .184 .728 1951 6.986 3 3 NOWON 50 49.629 .992 2003 154.611 49 50 Стратегия моделирования. Модель используется для оценки сочетания "нанимать/арендовать", которое минимизало бы средние дневные расходы на производство. На основании результатов моделирования можно будет сказать, какие затраты несет производство при различных сочетаниях "нанимать/арендовать". Для фиксированного числа нанятых рабочих мастерской средние дневные расходы будут меняться в зависимости от числа арендуемых машин (рис. 2E.5). 61 Рис.2Е.5 Зависимость дневных расходов от числа арендуемых машин (число рабочих постоянно). При достаточно малом числе арендуемых машин расходы велики ввиду убытков из-за потери объема производства. При большом числе арендуемых машин стоимость также велика, поскольку приходится дорого платить за резервные машины, число которых больше необходимого. Повидимому, где-то между этими значениями находится минимум. Подобным же образом, при заданном числе арендуемых машин влияние числа нанятых рабочих на дневные расходы выглядит так, как показано на рис. 2Е.6. При малом числе рабочих расходы высоки ввиду убытков из-за потери объема производства. При большом числе рабочих расходы также высоки ввиду высокой оплаты простаивающих рабочих. Рис.2Е.6.Зависимость дневнх расходов от числа рабочих (число арендуемых машин постоянно) Вполне естественно предположить, что расходы проходят через свой минимум где-то между этими двумя величинами. На рис. 2Е.7 представлено трехмерное пространство для описанной ситуации. Обратите внимание на то, что множество точек, получаемых пересечением линий решетки на плоскости, представляют собой область допустимых решений (т. е. целых значений) пар величин "число нанятых - число арендуемых". Рис.2Е.7. Поверхность дневных расходов в трехмерном пространстве. Третьим измерением являются дневные расходы, соответствующие каждой из этих точек пересечений (значения расходов не показаны). Множество всех значений расходов образует поверхность расходов в третьем измерении. (Не поверхность, а точки образуют множество 62 дискретных значений. Тем не менее удобно использовать термин "поверхность".) Рис. 2Е.5 и рис. 2Е.6 являются сечениями этой поверхности. Можно предположить, что эта поверхность имеет одну точку минимума. Поиск оптимального сочетания "число нанятых - число арендуемых" является, следовательно, поиском этой точки. Этот поиск можно осуществить различными методами. Рассмотрим два из них. 1. Можно применить метод наискорейшего спуска. Этот метод заключается в выборе оптимального направления движения в области значений переменных по некоторому контуру до тех пор, пока не будут исчерпаны все возможные направления движения. Особенно удобно использовать этот метод либо при диалоговом режиме доступа к модели на ЭВМ через выносной пульт, либо если этот метод встроен в модель. В данной книге вторым методом мы пользоваться не будем. 2. Модель может выполняться таким образом, что за каждый прогон определяется значение стоимости для одного соотношения значений "число нанятых - число арендуемых", и эти соотношения последовательно перебираются. Сначала можно исследовать довольно редкую решетку, так чтобы соотношения отстояли довольно далеко друг от друга. Рассмотрение результата обычно показывает, в какой области следует продолжать исследование. На следующем этапе моделирования исследуется ограниченная область с более близко расположенными значениями интересующего нас соотношения. Если необходимо, этот процесс можно продолжать, сужая область и делая решетку более частой. Так можно дойти до оптимального решения. Для начала напомним, что дневная оплата рабочих, аренда машин и убытки из-за нехватки машин составляют 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 начинает моделирование при соотношении 63 "четверо рабочих - три арендуемые машины". Затем перебираются соотношения (4 - 4),(4 - 5),(5 - 3), (5 - 4), (5 - 5). Результаты моделирования. (Полное время моделирования на ЭВМ IBM 360/67 равнялось 68,2 с.) На рис.2Е.4 представлены выходные данные по многоканальным устройствам для первых трех изучаемых конфигураций системы. Для каждого многоканального устройства выдается семь различных типов информации. Рассмотрим их значения для многоканального устройства MEN (рис. 2Е.4, а). 1. Моделировать три параллельно работающих прибора этого многоканального устройства, CAPACITY (ЕМКОСТЬ) =3. 2. В среднем 2,185 из этих устройств были в состоянии занятости, AVERAGE CONTENTS (СРЕДНЕЕ СОДЕРЖИМОЕ) = 2,185. 3. В среднем эти три прибора были загружены на 72,8%, AVERAGE UTILIZATION (СРЕДНЯЯ НАГРУЗКА) = 0,782. 4. Общее число занятий приборов было 1924, ENTRIES (ВХОДОВ) = 1924. 5. Среднее время на одно занятие было 7,087 единиц, AVERAGE TIME/TRAN (СРЕДHEE ВРЕМЯ/ТРАН) = 7,087. 6. Ни один из приборов не находился в занятом состоянии в момент остановки моделирования, CURRENT CONTENTS (ТЕКУЩЕЕ СОДЕРЖИМОЕ) = <пусто>. 7. В процессе моделирования были моменты,когда все три прибора были в состоянии занятости одновременно, МАХ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 В табл. 24.З собраны значения расходов для различных соотношений " число рабочих - число арендуемых машин". В табл. 24.3, а показаны фиксированные значения оплаты труда рабочих и арендной платы. за машины; в табл. 24.3, б - стоимость уменьшения выпуска продукции, которая легко рассчитывается по значению нагрузки устройства NOWON и платы за снижение объема производства; в табл. 24.3, в - сумма этих расходов. Сравнение результатов в табл. 24.3, в показывает, что на основании проведенного моделирования можно сделать вывод о том, что наиболее выгодным соотношением числа рабочих и числа арендуемых машин является "четыре - четыре". Таблица 24.3. Дневные расходы (долларов в день) при различных соотношениях "число рабочих - число машин". а) Фиксированная плата Число рабочих 3 4 5 Число арендуемых машин 3 4 5 180 210 240 210 240 270 240 270 300 б) Потери из-за снижения объема производства 64 Число рабочих 3 4 5 Число арендуемых машин 3 4 5 136 88 64 88 56 40 72 56 24 в) Общие расходы Число рабочих 3 4 5 Число арендуемых машин 3 4 5 316 298 304 298 296 310 312 326 324 Следует, однако, помнить, что значения нагрузки в табл. 24.2, являются только оценками правильного решения, которое может быть получено лишь при длительном моделировании всех изучаемых соотношений. Это, в свою очередь, ведет к тому, что расходы в табл. 24.3, в также являются оценками. При более тщательном анализе эти результаты могут оказаться несколько иными. Например, может случиться так, что правильные расходы при соотношении "четверо рабочих - три арендуемые машины" окажутся ниже, чем при соотношении "четверо рабочих - четыре арендуемые машины". Этот вопрос будет рассмотрен в следующем параграфе. ТЕМА № 25 "Управляющие карты 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 (как показано в предыдущем параграфе, стоимость падения выпуска продукции зависит именно от этой статистики; эта стоимость, в свою очередь, являетсй основой для выбора оптимальных условий функционирования). Для получения достоверной статистики существуют три подхода: 65 1. Модель надо разработать так, чтобы условия функционирования были типичными с самого начала. Затем можно начать моделирование и сразу же снимать статистические данные. 2. Можно моделировать систему так долго, что любые нетипичные статистические данные, собранные в самом начале процесса моделирования, "утонут" среди типичных данных, собранных в последующее время моделирования. Иными словами, надо сделать так, чтобы нетипичные данные составляли малый процент от полного объема данных и тем самым не имели сколько-нибудь заметного влияния. 3. Можно поступать следующим образом: o моделировать до возникновения типичных условий работы системы; o отбросить собранную до этого времени статистику без изменения состояния модели; o продолжить моделирование, собирая статистику, на которую уже не влияют нетипичные ситуации. Первый подход требует от разработчика знания типичных условий работы и умения внести в модель эти условия. В моделях сложных систем первое требование вряд ли выполнимо. Даже если бы он мог это сделать, то удовлетворить второе требование весьма затруднительно. В примере 2Е потребовалось больше времени для преодоления искажений статистических данных о нагрузке, возможных в начале моделирования. Конечно, использование карты RESET для устранения этого искажения является более предпочтительным, чем длительное моделирование без сброса. Результаты, получаются более просто, а время моделирования значительно меньше. Дополнительно следует указать, что после того, как модель создана, работа исследователя только начинается. Его следующей задачей обычно является экспериментирование с моделью, для того чтобы выяснить: 1. сколько времени необходимо для выхода в стационарный режим и 2. сколько времени необходимо вести моделирование, полагая, что стационарный режим уже достигнут. Более того, вопросы "сколько времени" зависят в общем случае от характера статистических данных, которые интересуют разработчика, и от конфигурации моделируемой системы. Пример моделирования 2Е оказался достаточно простым, поскольку только один параметр статистики представлял для нас интерес, а именно нагрузка многоканального устройства. Кроме того, мы неявно предполагали, что ответы на вопросы "сколько времени" при комбинации "четверо рабочих - четыре арендуемые машины" справедливы и при всех прочих изучаемых комбинациях. Хотя это предположение, по-видимому, вполне справедливо в нашем случае, в общем случае это может быть не так. Следовательно, ответы на вопросы "сколько времени" должны даваться неоднократно при изучении только одной задачи. В задачу данного руководства не входит рассмотрение дальнейших деталей вопроса сбора статистики при моделировании. Мы не станем больше задерживаться и на разработке стратегий, которых следует придерживаться при исследовании моделей так же подробно, как и в последнем примере. Однако при тщательном моделировании эти два аспекта являются обязательными. ТЕМА № 26 "Печать в процессе моделирования" В качестве вспомогательного средства сбора информации можно использовать возможность распечатывания статистических данных модели в процессе моделирования для получения этих данных в конце прогона. Полный набор промежуточных статистических данных можно получить при использовании операнда С карты START. Выборочный набор статистических данных может быть получен при использовании блока РRINT (НАПЕЧАТАТЬ). Использование снимков Кроме счетчика завершений в GPSS существует счетчик снимков. Его исходное значение определяется операндом С карты START. При чтении интерпретатором этой карты заносится исходное значение в счетчик завершений и счетчик снимков в соответствии со значениями операндов А и С соответственно. В процессе моделирования каждый раз при вычитании из счетчика завершений некоторой величины такая же величина вычитается из счетчика снимков. 66