Язык gpss для чайников

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 инструмент, чтобы творить, развиваться и делать мир лучше. Право слово это интереснее чем лопать шарике на смартфоне, сидя в общественном транспорте.
Всем хороших выходных, счастья добра и удачи 🙂

Источник

Программирование в GPSS

Синтаксис, семантика и прагматика языка GPSS

В алфавит языка GPSS входят следующие символы:

? – вопросительный знак (для вызова помощи),

Формальные правила написания программ на языке GPSS образуют его синтаксис.

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

прагматический аспект

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

Классы объектов языка GPSS

Описываемые на GPSS абстрактные системы строятся из набора простых объектов. Эти объекты делятся на четыре класса: динамические, оборудование, статистические и операционные.

Динамические объекты называются транзактами. Эти объекты могут возникать и уничтожаться. Транзакты движутся в системе и производят при движении ряд действий. Транзакты могут также «размножаться» и «склеиваться».

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

Интерпретации транзактов

Ниже приводятся некоторые интерпретации транзактов.

Моделируемая система

Интерпретация транзакта

Оборудование в GPSS подразделяется на следующие типы: устройства, памяти и логические ключи. Оборудование подвергается определенным воздействиям со стороны транзактов.

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

Интерпретаций устройст

Моделируемая система

Интерпретация устройства

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

Элементы реальных систем

Моделируемая система

Интерпретация памяти

Бункер для изделий

Логический ключ имеет 2 состояния: S (включен) и R (выключен). Состояния ключа устанавливаются одними транзактами и могут проверяться другими. Результаты проверки могут учитываться в последующих действиях транзактов. В начальном состоянии все ключи в системе выключены.

При моделировании сети перекрестков ключ может соответствовать светофору.

Очереди и таблицы

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

Каждая очередь в GPSS-системе имеет выход и вход. Очередь подсчитывает статистические данные о проходящих через нее транзактах: число проходящих тран­зактов, среднее время задержки транзактов в очереди и т.д.

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

Блоки

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

Динамика GPSS-системы характеризуется тем, как проходят изменения состояний ее объектов во времени.

Модельное время

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

Общеалгоритмические средства GPSS

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

Для любого общеалгоритмического средства GPSS можно найти аналог почти в любом алгоритмическом языке.

Стандартные числовые атрибуты

Алгоритм, выполняемый при входе транзакта в блок, определяется типом бло-ка, указанным в поле операции, и операндами, которые записаны в поле операндов. Операнды дают выполняемому алгоритму информацию о текущем состоянии объектов системы в виде значений стандартных числовых атрибутов (СЧА).

В общем случае любой СЧА имеет вид:

Q1, где буква Q обозначает «текущая длина очереди», а число 1 указывает, что имеется в виду очередь номер 1.

В общем случае идентификатор характеристики t состоит из одной или двух букв, а указатель j является либо номером объекта (как в S1), либо присоединенным именем объекта, либо косвенным номером объекта.

равно текущему содержимому памяти, которая имеет метку МЕМ.

Косвенный номер объекта состоит из знака * и номера параметра транзакта. При этом имеются в виду параметры того транзакта, который обрабатывается в данный момент времени. В качестве косвенного номера объекта принимается содержимое указанного параметра транзакта. Например, значение атрибута

равно текущей длине очереди, номер которой записан во втором параметре транзакта.

Арифметические переменные

Для большей универсальности языка GPSS у некоторых СЧА стандартизировано лишь обозначение, а смысл этих СЧА и алгоритмы их вычисления определяются пользователем при описании модели. К таким СЧА относятся арифметические переменные. Обозначение арифметической переменной имеет вид V$name. Использовать любой конкретный СЧА вида V$name в качестве операнда можно лишь при условии, что этот СЧА описан пользователем в данной модели.

В арифметическом выражении можно использовать следующие знаки арифметических операций:

Пусть, например, переменная V$SUM описана строкой

Тогда значение V$SUM будет определяться как суммарное содержимое первой и второй памяти. Если переменную V$CAP описать в виде

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

При описании арифметических переменных необходимо иметь в виду следующее:

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

3) Синтаксис арифметических выражений соответствует синтаксису, принятому в языках программирования высокого уровня. Например, аргументы стандартных функций типа SIN, EXP,SQR, и т.п. должны заключаться в скобки.

Логические (булевы) переменные

Отношение представляет собой запись двух СЧА, соединенных одним из знаков:

LOG1 BVARIABLE V$ABC1’G’5

LOG2 BVARIABLE V$ABC1’NE’V$ABC2,

всегда равны единице, если V$ABC1 и V$ABC2 описаны так, как в предыдущем параграфе.

Если СЧА в логическом выражении не входит в отношение, то ему приписывается логическое значение (в этом случае СЧА должен быть заключен в скобки). Логическое значение «ложно» приписывается в случае, если численно СЧА равен нулю, во всех остальных случаях приписывается значение «истинно».

Стандартные логические атрибуты (СЛА) в GPSS отражают состояние оборудования в модели. Это следующие атрибуты.

FVj – устройство j доступно,

FNVj – устройство j недоступно.

SVj – память j доступна,

SNVj – памятьj недоступна.

M – в j-ом блоке синхронизации есть транзакт того же семейства,

NM – в j-ом блоке синхронизации нет транзакта того же семейства.

Последние два СЛА могут быть использованы только в блоке GATE.

равна единице тогда и только тогда, когда устройства 1 и 2 оба свободны, или памяти 1 и 2 обе не заполнены.

Следует иметь в виду, что, хотя все промежуточные операции в булевской переменной имеют логические значения «истинно» или «ложно», сама булевская переменная имеет числовое значение 0 или 1.

Функции

Функция — это СЧА, обозначаемый в виде FN$name и описываемый пользователем в виде численной зависимости FN$name от другого СЧА. Рассмотрим на примерах, как это делается.

Пусть необходимо, чтобы значение FN$KL1 вычислялось в модели через S$MEM в соответствии с графиком, изображенным на приведенных ниже рисунках.

Рис. *1

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

Первая строка описания функции должна содержать метку функции в поле метки, слово FUNCTION в поле операции и два операнда в поле операндов. Первый операнд является обозначением того СЧА, который выбран в качестве аргумента функции. В данном примере это S$MEM – количество занятых единиц памяти MEM. Второй операнд состоит из буквы D, обозначающей, что данная функция дискретная, и из числа точек, которыми задается график функции. Координаты точек, задающих график, записываются в последующих строках описания функции. Из примера видно, что каждая точка задается парой координат, разделенных запятой, причем вначале указывается абсцисса точки, потом ордината. Координаты разных точек разделяются косой чертой. Функция может задаваться любым числом точек. Запись координат точек начинается с 1-й позиции строки и может быть продолжена на последующих строках.

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

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

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

Кроме того, если значение аргумента в процессе моделирования окажется за пределами диапазона, охваченного графиком, то соответствующий крайний отрезок графика автоматически «продолжается» до нужного места. Так что описанная выше дискретная функция FN$KL1 будет иметь в зависимости от S$MEM следующие значения:

Источник

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