Язык gpss основные понятия

Общие сведения о языке GPSS

Язык моделирования GPSS (General Purpose System Simulation) разработан фирмой IBM в США и с 1962 года входит в стандартное математическое обес­печение машин серии IBM360/370. Язык GPSS получил наиболее широкое рас­пространение по сравнению с другими языками моделирования. Он включен в институтские учебные курсы по моделированию систем у нас в стране иизуча­ется в аналогичных курсах во многих колледжах и университетах США и дру­гих стран. В данном учебном пособии рассматривается одна из версий языка GPSS, реализованная в среде MS DOS для компьютеров класса IBM XT и выше.

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

Язык основан на схеме транзактов(сообщений). Под транзактом пони­мается формальный объект, который «путешествует» по системе (перемещается от блока к блоку), встречая на пути всевозможные задержки, вызванные занято­стью тех или иных единиц оборудования. Транзакты имеют прямую аналогию с заявками в системах массового обслуживания. В качестве транзакта может вы­ступать программа обработки информации, телефонный вызов, покупатель в магазине, отказ системы при исследовании надежности и т.д. Каждый транзакт обладает совокупностью параметров (до 100), которые называются атрибутами транзакта. В процессе имитации атрибуты могут меняться в соответствии с ло­гикой работы исследуемой системы.

1) создание и уничтожение транзактов,

2) изменение их атрибутов,

3) задержка транзактов,

4) изменение маршрутов транзактов в системе.

Основные группы объектов языка [5]:

1) объекты, имитирующие единицы оборудования системы (устройство, память и логические переключатели);

2) статистические объекты (очередь, таблица),

3) вычислительные объекты (ячейка, арифметическая и логические пере­менные),

В рассматриваемой версии языка реализованы следующие объекты языка: устройство, память, очередь, таблица, ячейка, арифметическая переменная. Да­дим описание этих объектов.

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

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

Очередь объект, связанный со сбором статистики о задержках, возни­кающих на пути прохождения транзакта. Чаще всего очередь помещают перед устройством либо памятью. Следует учитывать, что естественно образующиеся в процессе моделирования очереди транзактов обрабатываются симулятором автоматически, а описываемый объект языка служит лишь для обеспечения вы­вода на печать соответствующих статистических данных.

Таблицаобеспечивает накопление в процессе моделирования статистики о каком-либо заданном случайном параметре модели. По окончании прогона модели эта статистика автоматически обрабатывается и выводится на печать, в частности, в виде таблицы относительных частот попадания значений случай­ного параметра (аргумента таблицы) в указанные частотные интервалы. Печа­таются также среднее значение и среднее квадратичное отклонение аргумента.

Ячейкииспользуются для записи, накопления и хранения численных зна­чений различных входных и выходных параметров моделируемой системы. Эти значения могут быть использованы для организации счетчиков числа проходя­щих транзактов, для вывода значений варьируемых параметров модели, для временного хранения значений стандартных числовых атрибутом(СЧА). Зна­чения ячеек всегда выводятся на печать,

Арифметическая переменнаяпозволяет выполнить заданную последова­тельность арифметических операций над любыми СЧА модели для вычисления значения зависимого от них параметра.

Любая программа на GPSS связана с созданием транзактов, проведением их через последовательность блоков и уничтожением транзактов. При этом соз­дание или генерация транзактов основывается на знании закономерностей ин­формационных потоков, циркулирующих в моделируемой системе, а путь про­хождения транзакта через блоки определяется спецификой работы оборудования исследуемой системы.

Синтаксис языка

Идентификаторы.Они должны содержать от трех до пяти алфавитно-цифровых символов, причем первые три символа должны быть буквами. Иден­тификаторы используются для формирования имен объектов и блоков. Исклю­чение составляют ячейки и атрибуты транзактов, которые могут обозначаться не только идентификаторами, но и просто числами.

Блоки/операторы.Каждый блок языка записывается в отдельной строке и имеет следующую структуру:

[метка] операция [операнды] [комментарии]. Каждое поле отделяется друг от друга пробелами, обязательным является только поле операции, осталь­ные поля могут отсутствовать.

Метка является именем-идентификатором блока. Поле операндов может содержать от 1 до 7 подполей: А, В, С, D. Е, F, G, содержимое которых отделя­ется друг от друга запятой. Для пропуска одного из подполей поля операндов ставится просто запятая: А„С.

Комментарии, кроме поля комментариев, могут быть заданы отдельной строкой: любая строка, начинающаяся с символа «*», тоже будет комментари­ем.

где i обозначает номер объекта.

Объект СЧА Назначение
Блок N$ ws Число транзактов, вошедших в блок с указанным именем. Число транзактов, находящихся в ука­занном блоке.
Генераторы случайных чисел Rni Случайное число в диапазоне 0-999. При использовании СЧА в качестве аргумента функции представляются действительными числами в диапазо­не 0.- 0.999999
Транзакт Pi PR Значение параметра Значение приоритета
Память S$ R$ Текущее содержимое памяти Свободный объем памяти
Очередь Q$ Текущая длина очереди
Переменные V$ Значение арифметической переменной
Ячейки Х$ или Xi Значение ячейки
Функции FN$ Значение функции

Мнемокоды. Внекоторых блоках языка требуется указывать состояние объектов, для этого используются следующие коды:

Источник

GPSS-WORLD основы имитационного моделирования на живых примерах

Доброй пятницы уважаемые читатели Хабра.
В данном посте я предлагаю вам бегло ознакомиться с возможностью создания имитационной модели процессов в программе GPSS-WORLD. Данный пост нельзя считать полноценным туториалом, но я поделюсь с Вами теми крупицами, что знаю и вполне возможно что уже через пол часа после прочтения статьи Вы проявив фантазию создадите свою собственную имитационную модель. Как говориться в народе: «Тяжело в учении легко в бою».
И пусть местами, данный «туториал» придерживается принципа: «битый не битого везет», но я всё же донесу до вас те знания, которые у меня есть, ну а вы уж сами вольны решать, стоить ли мне доверять или лучше проверять. В любом случае я буду рад аудиту кода от знатоков GPSS-WORLD. Все материалы статьи размещены на GItHub
Изучать самые азы будем сразу на живых примерах — доступных, понятных и близких сердцу многим сотрудникам проводящим свои законные 8 часов в офисах.
От конкретики перейдем к лирике, пятница традиционно располагает задаваться безумными вопросами, и в этот раз мы с моим коллегой DrZugrik задались вопросом: «Сколько нужно сотрудников тех поддержки, чтобы рассказать, как вкрутить лампочку?».
За подробностями сего мысленного эксперимента прошу под кат.

Написание этого мини туториала вместе с разработкой моделей заняло 6 часов чистого времени.
буду признателен если статья доберется до потенциально заинтересованных читателей.

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

Для начала нам понадобиться сам GPSS-World.

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

проанализируем результаты
Итак мы видим, что в среднем наш кулер загружен на 33%, то есть в нашей команде из 10 сотрудников получается примерно так как если бы к нему постоянно прикладывался Администратор Петр, Марья Васильевна из бухгалтерии и Менеджер проекта Василий Чуфыркин, ну и еще 0.33 человека, или например — кот. На самом деле этот блок текста не несет смысловой нагрузки, мне просто очень хотелось нарисовать кота и кулер и Марью Васильевну из бухгалтерии (все кроме кота личности сугубо выдуманные)

Хотя черт побери после того как я прочел это, могу смело утверждать, что кулер мог бы напоить 12 милых котиков =)

Но вернемся к теме.

Давайте рассмотрим, результаты выдачи.

Facility – это список всех наших работающих устройств, в данном случае только кулер.
Entries 79 – означает число подходов на обслуживание к устройству, в данном случае число человек с пустыми чашками составило 79 – за всю рабочую смену.
Util – коэффициент использования оборудования, Он говорит нам о том, что кулер бездествовал (1-0.33)*100%=67% всего времени.
AVE. TIME – среднее время использования кулера 1 человеком 2.002 минуты
AVAIL. – Доступность кулера, не знаю что это значит видимо еденица говрит, что он был доступен
DELAY = 0 – говрит нам о том, что чсло людей которые просто подошли к кулеру, расстроились и ушли с пустыми руками (кружкой), равно нулю.

Теперь переедем к нашей очереди (QUEUE)
Как видите тут указано имя созданной нами ранее очереди,
В которой максимально находилось 9 человек, в которую было 79 входов, и 48 нулевых входов (по всей видимости входов без ожидания в очереди), среднее время проведенное человеком в очереди равно 1.5 минуты. Cont. = 0 говорит нам о том, что на момент окончания моделирования в очереди никого не было.

Ну вот вроде бы все не плохо, но что будет если мы вернемся в сытый 2006
Год и наймем еще 30 сотрудников в наш офис?

Как видно из модели, наш кулер почти перестанет простаивать, а среднее время в очереди составит аж 20 минут, что наводит на мысли либо о том, что нужен второй кулер, либо о том, что пора всех лишать премии за долгие чаепития.
Может быть данная модель, простовата, но даже она при проявлении некоторой фантазии позволяет нам оценить количество кулеров которое необходимо на этаже.
Но на текущий момент мы с вами еще не умеем, разрабатывать многоканальные модели обслуживания. Так убьем же двух зайцев, научимся многоканальному обслуживанию и заодно ответим на вопросов, которым мы с коллегой задались в самом начале статьи. (кто внимательный и помнит — молодец, тому счастья добра и безпохмельных выходных: )

При создании модели операторы call центра и абоненты, зададимся такими условиями
Дано:
2 оператора техподдержки обслуживают пользовталей, которые звонят пимерно раз в две минуты, Если один оператор занят трубку берет другой. Рабочий день составляет 480 минут (8 часов без перерыва на обед так сказать)
Определить:
Коэффициент загруженности сотрудников службы поддержки.

Как и в прошлый раз опишу построчно

В результате получим следующие данные

Структура вывода похожа на структуру вывода первой модели, разве что вместо очереди — накопитель предлагаю вам с ней разобраться самостоятельно. Кстати параметры генерации отчета можно настроить (на этом компьютере у меня не установлен GPSS и нет желания его ставить, поэтому поверьте пока на слово, что в настройках программы есть такая возможность ну, а я если не забуду допишу в понедельник сюда, как это сделать)
Итак, мы видим, что наши операторы вполне приемлемо загружены примерно на 75% и 87 % соответственно. Будем считать, что двух операторов вполне достаточно, чтобы посоветовать людям как правильно вкрутить лампочку. Но мы же с вами — народ любопытный, давайте посмотрим, что будет если к ребятам подсадить еще одно нахлебника с телефоном.
Для этого рассмотрим немного модифицированную модель. Предлагаю вам разобраться с ней самостоятельно.

Результат под спойлером

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

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

Давайте опять построчно

Строка 1 — INITIAL X$APPLES,3 ;1 задаем значение переменной, X$ в данном случае нам как-то указывает на название переменной, а цифра три это значение которое мы запишем в переменю APPLES (кстати я не фанат продукции APPLE просто в тот момент на общем столе лежало 3 яблока, а одно я забрал себе, прям как в детсадовских задачах по математике)
Строка – 2 GENERATE 1 – создадим 1 итерацию
Строка 3 — SAVEVALUE APPLES-,1; – сохраним в переменную яблоки ее значение минус один.
Строки 4-5 помогут нам закончить программу.

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

Ну что же теперь вы знаете об одном из инструментов с помощью, которого можно создать имитационную модель процесса, инструмент не самый удобный и уже похоже не дорабатываемый разработчиками, но тем не менее если вы проявите фантазию то за один два дня сможете провести исследование какой-нибудь модели и например опубликовать его в научном журнале или на конференции (об этом я уже писал раньше )
В любом случае теперь у вас есть еще 1 инструмент, чтобы творить, развиваться и делать мир лучше. Право слово это интереснее чем лопать шарике на смартфоне, сидя в общественном транспорте.
Всем хороших выходных, счастья добра и удачи 🙂

Источник

Поделиться с друзьями
admin
Оцените автора
( Пока оценок нет )
Как переводится?
Adblock
detector