Как имитировать поведение системы с одной очередью в виде одноканальной системы массового обслуживания ( на языке GPSS/H) Самым распространенным методом имитационного моделирования остается описание поведения системы на специализированном языке GPSS. В нем поведение системы имитируется движением транзактов через блоки, которое управляется специальными операторами. Транзакты соответствуют заявкам в системе массового обслуживания – заготовкам, полуфабрикатам, средствам транспорта и т.п. Блоки соответствуют операциям, выполняемым обслуживающими приборами. Перемещаясь от одного блока к другому, транзакты имитируют процессы преобразования заявок обслуживающими приборами. В процессе моделирования транзакты взаимодействуют с блоками, которые изменяют их атрибуты. Блок GENERATE (ГЕНЕРИРОВАТЬ) вырабатывает транзакты, которые будут двигаться через блоки модели. Транзакты появляются через некоторый интервал поступления, представляющий собой сумму случайного числа по заданному закону распределения с текущим значением времени. Функцию распределения интервалов поступления транзактов задает пользователь, обращаясь к встроенным датчикам случайных чисел. После названия блока в скобках указывают 5 операндов ( табл. ). Операнд Значение A B C D E Средний интервал времени поступления транзактов( случайное число, целое число) Разброс значений времени относительно среднего интервала в одну сторону, целое число Момент времени появления первого транзакта (остальные появляются по распределению, заданному A и B) , целое число Ограничение общего числа транзактов, поступивших из блока за заданное время Один их 127 уровней приоритета каждого поступившего транзакта По умолчанию 0 0 нет нет 0 Так, запись GENERATE ( 5,1 ) показывает, что транзакты появляются через 5±1 мин. Блок TERMINATE ( ЗАВЕРШИТЬ) отображает удаление транзактов из модели. После названия блока в скобках указывают операнд А – счетчик завершения, который задает величину, на которую уменьшается значение счетчика каждый раз, когда транзакт входит в этот блок. Завершить моделирование в GPSS можно двумя способами: - заканчивать моделирование после прохождения заданного числа транзактов; - заканчивать моделирование по истечении заданного времени. По первому способу операнду А в блоке START присваивают конечное число транзактов, операнду А в блоке TERMINATE, через который транзакты определенного типа покидают модель, присваивают число, соответствующее типу транзакта, операнду А в других блоках TERMINATE присваивают А=0. Например, запись: TERMINATE 1 START 20 показывает, что моделирование закончится, когда через модель пройдут 20 транзактов. По второму способу задают единицу модельного времени, например 1 мин., и длительность моделирования, например 60 минут: - вводят в модель счетчик модельного времени - два блока, ограничивающих время моделирования: GENERATE 60 TERMINATE 1 - во всех других блоках TERMINATE задают А=0; - в блоке START задают А=1. Это приведет к тому, что завершение движения транзактов в других блоках TERMINATE не повлияет на счетчик завершения. Через 60 единиц модельного времени транзакт выйдет из блока GENERATE и перейдет в блок TERMINATE, что приведет к уменьшению значения счетчика завершения на единицу и прекращению моделирования. Процесс обслуживания заявки прибором (станком, кассиром и т.п.) отображается блоком задержки транзакта в приборе ADVANCE ( ПРОДВИНУТЬ). Он имеет два операнда: А- среднее время задержки (при равномерном законе распределения); В- время отклонения от среднего времени задержки ( в одну строну) Например, ADVANCE 3.75,1 показывает, что транзакт задержится в приборе на модельное время 2.75 - 4.75. По умолчанию оба операнда имеют нулевое значение. Блок ADVANCE задерживает продвижение транзакта на некоторое время, обычно случайное. Для имитации обслуживания транзакта некоторым прибором А используют блоки SEIZE ( ЗАНЯТЬ) и RELEASE (ОСВОБОДИТЬ) . Блок SEIZE означает занятие прибора А, указанного в операнде блока, а блок RELEASE- освобождение прибора А от обслуживания транзакта. Процесс обслуживания описывается одной из трех схем: 1.Прибор как единица SEIZEUNIT ADVANCE 10,2 RELEASE UNIT, что означает «транзакт занял прибор UNIT, задержался в нем на время 8-12 единиц и освободил прибор UNIT». 2.Прибор является субблоком UNIT в блоке SERVER SEIZE SERVER ADVANCE 20, 4 SEIZE UNIT ADVANCE 10.2 RELEASE UNIT RELEASE SERVER что означает «транзакт занял блок SERVER стал обслуживаться субблоком UNIT в течение 8-12 единиц времени, затем одновременно освободил субблок UNIT и блок SERVER». Если программа написана так, что транзакт освобождает прибор, занятый другим транзактом, то интерпретатор GPSS выдаст сигнал ошибки. 3. Прибор используется несколько раз SEIZE UNIT ADVANCE 25, 4 RELEASE UNIT ADVANCE 10,2 SEIZE UNIT ADVANCE 12,3 RELEASE UNIT что означает «транзакт дважды занимает и освобождает прибор UNIT». Оператор START (НАЧАТЬ) имеет 4 операнда ( табл. ) Операнд Значение По умолчанию А Начальное значение счетчика завершения B C D Программа на языке GPSS может быть составлена в виде последовательности блоков, а затем написана в виде последовательности команд, отображающих блоки. В таблице показано соответствие графических и словесных отображений блоков. БЛОК GENERATE ГРАФИЧЕСКОЕ ИЗОБРАЖЕНИЕ TERMINATE ADVANCE SEIZE RELEASE Счетчик модельного времени в операторе START Кроме блоков, программа на языке GPSS содержит управляющие операторы. К ним относятся: SIMULATE (начать имитацию), START ( установить значение счетчика, после которого имитация заканчивается), STORAGE ( задать число параллельно работающих приборов), FUNCTION (задать закон распределения случайных величин, дискретность или непрерывность случайной величины и число ее значений). Построим модель в виде последовательности блоков и соответствующей последовательности команд. Пусть для оценки коэффициента использования прибора достаточно 1000 измерений. Последовательность блоков Последовательность команд GENERATE A, B, SEIZE UNIT ADVANCE A,B RELEASE UNIT TERMINATE 1 START 1000 Моделирование продолжается до тех пор, пока через блок TERMINATE не пройдет 1000 транзактов. Если прибор занят обслуживанием заявки, то поступающие к нему заявки становятся в очередь. Для оценки максимального и среднего размера очереди, среднего времени ожидания в очереди предназначены блоки QUEUE и DEPART. Блок QUEUE (ВСТАТЬ В ОЧЕРЕДЬ) указывает на начало сбора информации о заявках, находящихся в очереди. Он имеет операнды А ( имя очереди) и В ( число элементов, на которое должно измениться значение содержимого очереди) . Блок DEPART (ПОКИНУТЬ ОЧЕРЕДЬ) указывает на окончание сбора информации о заявках, находящихся в очереди. Он имеет операнды А ( имя очереди) и В ( число элементов, на которое должно измениться значение содержимого очереди) . Например, программа GENERATE 100,400 QUEUE D SEIZE A DEPART D ADVANCE 80,50 RELEASE A TERMINATE 1 START 50 позволяет оценить время пребывания транзактов в очереди D перед блоком A. Программа GENERATE 100,40 QUEUE D SEIZE A ADVANCE 80,50 RELEASE A DEPART D TERMINATE 1 START 50 позволяет оценить общее время пребывания транзакта в приборе обслуживания A с учетом времени нахождения транзакта в очереди D. Рассмотренных блоков достаточно для моделирования одноканальной системы массового обслуживания . 6.6. Как работать с интерпретатором GPSS/H Интерпретатор GPSS/H® разработан ф. Wolverine Software Corporation (США) в виде студенческой (Student GPSS/H ®) и профессиональной (GPSS/H Professional®) версий. Студенческая версия является условно-платной и имеет ограничения: не более 125 блоков, не более 250 состояний, не более 32,72 Кб в памяти. Для ввода в интерпретатор GPSS/H программу составляют в виде последовательности командных строк, каждая из которых соответствует блоку. Командная строка содержит ( рис. ): имя прибора, нужное для перехода к строке из другого места модели ( не указывается, если такие переходы отсутствуют); оператор, показывающий выполнение определенной функции; операнды, показывающие характеристики функции; комментарии, поясняющие выполняемую функцию. Рис. . Формат командной строки Части строки разделяют пробелами. Программу записывают в формате ASCII П , используя любой текстовый редактор ( не Word, а WordPad или Блокнот !). Все буквы, кроме комментариев, должны быть заглавными. После написания программу называют именем из латинских букв и присваивают ей расширение .gps, например system 1 .gps. При входе в оболочку GPSS/H надо вызвать созданную программу с таким расширением. Работа комплекса GPSS/H происходит в три фазы, отображаемые на экране: 1. Pass 1 ( with source listing) …… Считывание исходного файла, выявление синтаксических ошибок, формирование исходного листинга программы, преобразование числовых значений в символы; если в программе допущены ошибки, интерпретатор выдает сообщение Error… 2. Pass 2 … Преобразование модели в форму для исполнения, распределение памяти и подготовка к исполнению моделирования. Если на этом этапе нет ошибок, то происходит переход к третьей фазе; 3. Simulation begins. Запуск модели. Если при этом нет ошибок, то формируется файл отчета с результатами моделирования, имеющий расширение .lis. В результате работы интерпретатор GPSS/H формирует показатели имитационного эксперимента работы и регистрирует информацию о работе ее элементов: число состояний занятости прибора, коэффициент использования прибора, среднее время обслуживания заявки, время прохождения транзакта через модель. Приведем пример из «Руководства по работе с GPSS/H» ( ф.Wolverine Software Inc., США). 1. Технологический процесс Заготовки поступают на участок обработки с интервалом 3-5 минут ( равномерное распределение). В течение 2 минут они движутся к станку.. Обработка заготовки продолжается от 2,75 до 4,75 минут ( равномерное распределение). Сколько времени потребуется для обработки 100 заготовок? Какова средняя загрузка станка в течение обработки 100 заготовок? 2. Представим технологический процесс в виде системы массового обслуживания. Заготовки-это заявки, а станок - это обслуживающий прибор. Надо найти время обслуживания 100 заявок и среднюю загрузку прибора. 2. Программа на языке GPSS/H ( без очереди) выглядит следующим образом: SIMULATE GENERATE 4.1 ADVANCE 2 SEIZE SERVER ADVANCE 3.1 RELEASE SERVER TERMINATE 1 START 100 END 9. После проверки программы формируется файл предстоящего процесса моделирования: STUDENT GPSS/H RELEASE 3.0j-C10 (UL206) 24 Jan 2006 12:02:06 C:\MYDOCS~1\My_docs\GPSS\GPSSHSTU\MY15.GPS LINE# STMT# IF DO BLOCK# *LOC OPERATION A,B,C,D,E,F,G 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 FILE: COMMENTS SIMULATE GENERATE 4.1 ADVANCE 2 SEIZE SERVER ADVANCE 3.1 RELEASE SERVER TERMINATE 1 START 100 END 1 2 3 4 5 6 ENTITY DICTIONARY (IN ASCENDING ORDER BY ENTITY NUMBER; "*" => VALUE CONFLICT.) Facilities: 1=SERVER SYMBOL VALUE EQU DEFNS CONTEXT NUMBER SERVER 1 Facility 4 6 STORAGE REQUIREMENTS (BYTES) COMPILED CODE: 168 COMPILED DATA: 40 MISCELLANEOUS: 0 ENTITIES: 264 COMMON: 10000 ----------------------- REFERENCES BY STATEMENT TOTAL: 10472 Файл разделен на четыре части: поcледовательность исполнения программы ( начиная со Student GPSS/H); присвоение свойств серверам (ENTITY DICTIONARY....; занятие серверов транзактами ( SYMBOL...); использование памяти ( STORAGE REQUIREMENTS..). Выводится размер модели и имитация начинается: GPSS/H MODEL SIZE: CONTROL STATEMENTS BLOCKS 6 3 Simulation begins. 5. По окончании имитационного моделирования выводятся его результаты: 5.1.Модельное и реальное времена моделирования: RELATIVE CLOCK: 415.1000 ABSOLUTE CLOCK: 415.1000 5.2. Число транзактов, прошедших через каждый блок: BLOCK CURRENT TOTAL 1 101 2 1 101 3 100 4 100 5 100 6 100 5.3. Использование обслуживающего прибора в ходе имитационного моделирования: --AVG-UTIL-DURING-FACILITY TOTAL AVAIL UNAVL ENTRIES AVERAGE CURRENT PERCENT SEIZING PREEMPTING TIME TIME TIME TIME/XACT STATUS AVAIL XACT XACT SERVER 0.747 100 3.100 AVAIL 5.4. Использование памяти при имитационном моделировании: STATUS OF COMMON STORAGE 9632 BYTES AVAILABLE 368 IN USE 480 USED (MAX) 6. Выводится информация об окончании имитации, использовании компьютера и разработчике GPSS/H: Simulation terminated. Absolute Clock: 415.1000 Total Block Executions: 602 Blocks / second: 602000 Microseconds / Block: 1.66 Elapsed Time Used (SEC) PASS1: 0.05 LOAD/CTRL: 0.22 EXECUTION: 0.00 --------------------TOTAL: 0.27 GPSS/H IS A PROPRIETARY PRODUCT OF, AND IS USED UNDER A LICENSE GRANTED BY, THE WOLVERINE SOFTWARE CORPORATION, 7617 LITTLE RIVER TURNPIKE, ANNANDALE, VIRGINIA 22003-2603, USA. 7. Результаты моделирования: время обслуживания 100 заявок- 415.1 минут обслуживающий прибор при этом будет загружен на 74,7 %. Интерпретируем результаты моделирования как ответы на вопросы заказчика: для обработки 100 заготовок потребуется 415,1 минут; при этом станок будет использоваться на 74,7 %. Для того, чтобы довести степень использования до 95 %, следует заменить станок на менее производительный ( следовательно, более дешевый). Но такое использование может быть достигнуто с образованием очереди перед станком, когда каждая заготовка ожидает обслуживания. Если в модель введено определение размера очереди, то следует проводить имитационные эксперименты с увеличением времени обработки заготовки до образования очереди заготовок перед обработкой. Применение дополнительных операторов для имитации поведения системы с несколькими очередями Система с несколькими очередями представляется как многоканальная система массового обслуживания, которая характеризуются емкостью, показывающей число параллельно включенных приборов в устройстве обслуживания. Емкость задается в начале моделирования оператором STORAGE (ХРАНИТЬ). Оператор имеет операнд А, указывающий имя многоканального устройства , и операнд В, указывающий число параллельно включенных приборов. Например, оператор STORAGE S( E ),3/S( F ),4 показывает, что устройство обслуживания имеет три параллельных прибора S и четыре параллельных прибора F. Блок ENTER (ВОЙТИ) отображает занятие В приборов из группы А параллельно работающих приборов. Например, ENTER TOOLS,2 показывает, что транзакт занимает два прибора из группы TOOLS. Блок LEAVE (ВЫЙТИ) отображает освобождение В приборов из группы А. Например, LEAVE TOOLS, 2 показывает, что транзакт освобождает два прибора из группы TOOLS. БЛОК ENTER (ВОЙТИ) ГРАФИЧЕСКОЕ ПРЕДСТАВЛЕНИЕ LEAVE (ВЫЙТИ) QUEUE (ВСТАТЬ В ОЧЕРЕДЬ) DEPART (ПОКИНУТЬ ОЧЕРЕДЬ) В качестве примера составим программу, имитирующую работу роботизированного технологического комплекса, в котором три параллельно работающих станка могут одновременно обрабатывать заготовки ( разработан к.т.н. В.В.Зиновьевым). Блоки SEIZE и RELEASE ранее рассмотренной одноканальной системы заменены на блоки ENTER и LEAVE ( ). Модель роботизированного технологического комплекса Блок-схема Программа STORAGE S(RTK),3 GENERATE 100,40 ENTER ADVANCE RTK 80,50 LEAVE RTK TERMINATE 1 START 100 Если транзакт должен перейти не в один, а два блока, то для выбора блока вводят блок TRANSFER ( передать), который может работать в трех режимах: безусловная передача – транзакты переходят в следующий блок, если он свободен ( рис. ) Рис. . Блок TRANSFER в режиме безусловной передачи В операнде А ставится запятая (,). В операнде В записывают имя блока, в который должен перейти транзакт. Например, TRANSFER ,BOX показывает, что при занятости блока BOX транзакты остаются в блоке ТRANSFER; статистическая передача- выбор направления в зависимости от случайного числа ( рис. ) Рис. . Блок TRANSFER в режиме статистической передачи В операнде А записывают число, показывающее частоту передачи транзактов в блок С. Оно должно быть больше 0 и меньше 1 и начинаться с точки. В операнде В записывают имя блока, в который переходят транзакты с частотой, записанной в операнде А. Выбор направления передачи транзакта производится с помощью датчиков равномерно распределенных случайных величин в интервале (0,1), входящих в GPSS/H. Например, TRANSFER .25,BOX, PLAY транзакты, входящие в блок, с вероятностью 0.25 будут переданы в блок PLAY и с вероятностью 0.75 - в блок BOX. передача BOTH (оба) – переход в равнозначные блоки (рис. ) Рис. . Блок TRANSFER в режиме ВОТН В операнде А записывают слово BOTH. В операнде В записывают имя блока, в который должен перейти транзакт. Если этот блок занят, то транзакт попытается перейти в другой блок с именем, записанным в операнде С. Если и этот блок тоже будет занят, то транзакт останется в блоке TRANSFER до освобождения блока сначала с именем в операнде В, затем - с именем в операнде С. Например, запись TRANSFER BOTH,BOX,PLAY означает, что сначала транзакт попытается войти в блок ВОХ. Если блок ВОХ занят, то транзакт попытается войти в блок PLAY. Если этот блок тоже занят, то транзакт остается в блоке TRANSFER, пока не освободится блок BOX или блок PLAY. Кроме того, в процессе имитации собирается информация о максимальном и среднем размерах очереди за время моделирования, общем числе транзактов в очереди, среднем времени пребывания транзакта в очереди и т.п. В реальном производстве многие данные случайны. Они имитируются случайными интервалами времени между появлением транзактов в блоке GENERATE, случайным временем задержки транзактов в блоке ADVANCE, вероятностным выбором движения транзактов в блоке TRANSFER, вероятностной проверкой условия в блоке ТEST. По умолчанию GPSS/H генерируются псевдо-случайные числа от 0 до 1, распределенные по равномерному закону. Если для имитации требуется генерировать случайные числа по другим законам распределения, то используют встроенные в GPSS/H алгоритмы генерации случайных чисел по любому из 26 законов распределения ( бета, биномиальное, Вейбулла, дискретно-равномерное, гамма, геометрическое, Лапласа, логистическое, логлапласово, логлогистическое, логнормальное, нормальное, обратное Вейбулла, обратное Гаусса, отрицательное биномиальное, Парето, Пирсона типаV, Пирсона типа VI, Пуассона, равномерное, треугольное, Джонсона, М-Эрланга, экспоненциальное, экстремального значения А, экстремального значения В. Чаще всего применяют экспоненциальный, нормальный и треугольный законы распределения. Дискретную или непрерывную, детерминированной и вероятностной функции. Случайную функцию задают оператором FUNCTION ( ФУНКЦИЯ). В поле имени записывают имя функции, в поле операций - слово FUNCTION. В операнде А записывают один из восьми номеров генераторов случайных чисел RN1...RN8, встроенных в интерпретатор GPSS/H. В операнде В указывают, дискретной (DN) или непрерывной (CN) будет случайная функция. N указывает число значений функции. Далее должны следовать строки определения функции со значениями суммарной частоты и соответствующими им значениями случайной переменной. Например, GENERATE RVEXPO (1, 100.0) вызывает случайные числа, генерируемые датчиком 1 и распределенные по экспоненциальному закону с математическим ожиданием 100.0 и дисперсией 0; GENERATE RVNORM ( 3, 10.0, 2.0) вызывает случайные числа, генерируемые датчиком 3 и распределенные по нормальному закону со средним 10.0 и среднеквадратичным отклонением 2.0; ADVANCE RVTRI ( 2, 10.0, 50.0, 75.0) показывает, что транзакт задерживается в приборе на случайное время, распределенное по треугольному закону с минимальным значением 10.0, средним значением 50.0 и максимальным значением 75.0.Значения этого времени генерируются датчиком RN2. В языке GPSS заложено множество других возможностей, имитирующих многообразные свойства реальных процессов.