Имитационное моделирование применяется во всех сферах деятельности человека начиная от моделей технических, технологических и организационных систем и заканчивая проблемами развития человечества и вселенной.
GPSS (General Purpose Simulating System — общецелевая система моделирования) является языком моделирования, используемым для построения дискретных моделей и проведения моделирования на ЭВМ.
Модели систем на GPSS могут быть записаны в виде блок-схем или представлены в виде последовательности строк программы, эквивалентных блок-схеме. Блок-схема представляет собой набор фигур с характерным очертанием блоков языка GPSS, соединенных между собой линиями. Блоки представляют собой подпрограммы, реализованные средствами макроассемблера. Язык моделирования содержит 37 блоков для создания имитационных программ.
В GPSS входят специальные средства для описания динамического поведения систем путем смены состояний в дискретные моменты времени.
GPSS представляет собой язык и транслятор. Как каждый язык он содержит словарь и грамматику, с помощью которых могут быть разработаны модели систем определенного типа. Транслятор языка построен как компилятор-интерпретатор и работает в две фазы. На первой фазе компиляции проверяется синтаксис и семантика написания строк GPSS-программы, а на второй — интерпретации, осуществляется продвижение транзактов по модели от блока к блоку.
Сама структура языка довольно интересна и необычна для людей, которые обычно пользуются структурными языками программирования.
В модели создаются объекты жизнедейтельности — транзакты, которые последовательно продвигаются от места своего рождения (блок GENERATE) к месту своей гибели (блок TERMINATE). Во время своей жизни он может изменять свои параметры (ASSIGN), задерживаться в каких-то точках на определенное количество времени (ADVANCE), занимать/освобождать какое-то устройство (SEIZE, RELEASE) или канал много-канального устройства (ENTER STORAGE, LEAVE STORAGE), становиться/уходить в очередь к какому-то устройству (QUEUE, DEPART), расщепляться и создавать семейство транзактов (SPLIT), собираться воедино со своим семейством (GATHER) и так далее.
Кроме того предусмотрены логические конструкции ЕСЛИ-ТО идти в такой-то блок (TEST), циклы (FOR), возможность переходить к блокам с определенной вероятностью (TRANSFER).
У каждого транзакта и всех составных частей модели есть так называемые Системные Числовые Атрибуты (СЧА). У очередей — среднее количество транзактов в очереди, текущее количество транзактов в очереди; у устройств — средняя загрузка устройства, максимальное количество занятых каналов; у транзактов — время нахождения в системе etc. Их можно использовать для каких-либо проверок (если среднее количество элементов в очереди больше определенного значения — то идти по другому пути) или расчетов.
Так же можно использовать глобальные переменные (INITIAL, SAVEVALUE) для расчета каких либо значений.
Кроме того в языке GPSS существует удобная система статистики (построения таблиц и графиков относительно каких-либо параметров), система определения значимости какого-либо фактора (ANOVA), мощная система отчетности по отработке модели (в которой можно узнать абсолютно все параметры каждого устройства или блока модели).
Так же в нем реализованы большинство распределений случайных величин (детерменированное, равномерное, экспоненциальное (из него легко выводятся распределения Эрланга любых порядков), нормальное и т.д.).
Приведу пример небольшой модели и отчета к ней.
Предположим в цех приходят детали через каждые 10+-5 минут (равномерное распределение от 5 до 15 минут). После чего 60% деталей идут на устройство 2, остальные на устройство 1.
Устройство 1- одноканальное, время обработки каждой детали у него — 25 минут.
Устройство 2 — трехканальное, время обработки каждой детали у каждого канала — 30 минут.
После обработки на этих устройствах все детали попадают на устройство №3 — оно одноканальное, время обработки каждой детали — 20 минут.
Промоделировать на протяжении 30 тыс минут.
Код модели:
U2 STORAGE 3 ;3х канальное устройство№2
GENERATE 10,5; генерируются транзакты каждые 10+-5 единиц времени
TRANSFER 0.6,nodeB; с 60% вероятностью транзакт пойдет в блокВ, иначе дальше (тоесть в блокА)
;----------БлокА------------
nodeA QUEUE 1; занимается очередь№1 перед устройством№1
SEIZE U1; если устройство не занято в данный момент — транзакт его займет
ADVANCE 25; задержится 25 единиц модельного времени
RELEASE U1; после задержки он освободит устройство
DEPART 1; и покидает очередь
TRANSFER ,nodeC; безусловно переходит в блокС
;----------БлокВ-------------
nodeB QUEUE 2; занимается очередь №2 перед устройством №2
ENTER U2; если есть хотя бы один канал в МКУ, то занимаем ОДИН канал этого устройства
ADVANCE 30; каждый транзакт сидит в устройстве 30 единиц времени
LEAVE U2; освобождает канал устройства
DEPART 2; покидает очередь
TRANSFER ,nodeC; безусловно переходит в блокС (хотя можно было этот пункт не писать, так как
; все транзакты все равно пошли бы вниз по коду и попали бы в блокС.
;----------БлокС-------------
nodeC QUEUE 3; занимается очередь №3 перед устройством №3
SEIZE U3; если устройство не занято в данный момент — транзакт его займет
ADVANCE 20; задержится 25 единиц модельного времени
RELEASE U3; после задержки он освободит устройство
DEPART 3; и покидает очередь
TERMINATE; после всего этого транзакт удаляется (выходит из системы)
; блок ведения отсчета модельного времени
GENERATE 1
TERMINATE 1
START 30000; будем моделировать систему на протяжении 30000 единиц модельного времени
Отчет:

Что мы видим в отчете? На момент окончания модельного времени в очереди №1 было 610 транзактов, в очереди№ 3 было 875 транзактов. В очереди №2 небыло транзактов вообще.
Посмотрим параметры очередей (QUEUE).
Максимальное количество транзактов (которое было за весь период моделирования) в первой очереди — 612, в третей — 876. Во второй — всего 4.
Среднее время простоя в очереди у транзакта — в первой 5007, во второй — всего 30, в третей 5595.
Коэфициент использования у первого и третьего устройства (UTIL.) 1 и 0.998. У второго всего 0.392.
Из этой информации очевидно, что узкими местами данной модели являются первое и третее устройство. Для устранения узких мест нужно либо увеличить количество каналов в этих устройствах, либо уменьшить время обработки.
Этот пример показывает лишь основные возможности языка моделирования GPSS.
С его помощью можно легко решать задачи оптимизации (максимизировать прибыль и минимизировать убыль изменяя какие-либо параметры модели) и определять жизнеспособность практически любых процессов, которые можно представить в виде системы массового обслуживания.
Спасибо за внимание!
GPSS (General Purpose Simulating System — общецелевая система моделирования) является языком моделирования, используемым для построения дискретных моделей и проведения моделирования на ЭВМ.
Модели систем на GPSS могут быть записаны в виде блок-схем или представлены в виде последовательности строк программы, эквивалентных блок-схеме. Блок-схема представляет собой набор фигур с характерным очертанием блоков языка GPSS, соединенных между собой линиями. Блоки представляют собой подпрограммы, реализованные средствами макроассемблера. Язык моделирования содержит 37 блоков для создания имитационных программ.
В GPSS входят специальные средства для описания динамического поведения систем путем смены состояний в дискретные моменты времени.
GPSS представляет собой язык и транслятор. Как каждый язык он содержит словарь и грамматику, с помощью которых могут быть разработаны модели систем определенного типа. Транслятор языка построен как компилятор-интерпретатор и работает в две фазы. На первой фазе компиляции проверяется синтаксис и семантика написания строк GPSS-программы, а на второй — интерпретации, осуществляется продвижение транзактов по модели от блока к блоку.
Сама структура языка довольно интересна и необычна для людей, которые обычно пользуются структурными языками программирования.
В модели создаются объекты жизнедейтельности — транзакты, которые последовательно продвигаются от места своего рождения (блок GENERATE) к месту своей гибели (блок TERMINATE). Во время своей жизни он может изменять свои параметры (ASSIGN), задерживаться в каких-то точках на определенное количество времени (ADVANCE), занимать/освобождать какое-то устройство (SEIZE, RELEASE) или канал много-канального устройства (ENTER STORAGE, LEAVE STORAGE), становиться/уходить в очередь к какому-то устройству (QUEUE, DEPART), расщепляться и создавать семейство транзактов (SPLIT), собираться воедино со своим семейством (GATHER) и так далее.
Кроме того предусмотрены логические конструкции ЕСЛИ-ТО идти в такой-то блок (TEST), циклы (FOR), возможность переходить к блокам с определенной вероятностью (TRANSFER).
У каждого транзакта и всех составных частей модели есть так называемые Системные Числовые Атрибуты (СЧА). У очередей — среднее количество транзактов в очереди, текущее количество транзактов в очереди; у устройств — средняя загрузка устройства, максимальное количество занятых каналов; у транзактов — время нахождения в системе etc. Их можно использовать для каких-либо проверок (если среднее количество элементов в очереди больше определенного значения — то идти по другому пути) или расчетов.
Так же можно использовать глобальные переменные (INITIAL, SAVEVALUE) для расчета каких либо значений.
Кроме того в языке GPSS существует удобная система статистики (построения таблиц и графиков относительно каких-либо параметров), система определения значимости какого-либо фактора (ANOVA), мощная система отчетности по отработке модели (в которой можно узнать абсолютно все параметры каждого устройства или блока модели).
Так же в нем реализованы большинство распределений случайных величин (детерменированное, равномерное, экспоненциальное (из него легко выводятся распределения Эрланга любых порядков), нормальное и т.д.).
Приведу пример небольшой модели и отчета к ней.
Предположим в цех приходят детали через каждые 10+-5 минут (равномерное распределение от 5 до 15 минут). После чего 60% деталей идут на устройство 2, остальные на устройство 1.
Устройство 1- одноканальное, время обработки каждой детали у него — 25 минут.
Устройство 2 — трехканальное, время обработки каждой детали у каждого канала — 30 минут.
После обработки на этих устройствах все детали попадают на устройство №3 — оно одноканальное, время обработки каждой детали — 20 минут.
Промоделировать на протяжении 30 тыс минут.
Код модели:
U2 STORAGE 3 ;3х канальное устройство№2
GENERATE 10,5; генерируются транзакты каждые 10+-5 единиц времени
TRANSFER 0.6,nodeB; с 60% вероятностью транзакт пойдет в блокВ, иначе дальше (тоесть в блокА)
;----------БлокА------------
nodeA QUEUE 1; занимается очередь№1 перед устройством№1
SEIZE U1; если устройство не занято в данный момент — транзакт его займет
ADVANCE 25; задержится 25 единиц модельного времени
RELEASE U1; после задержки он освободит устройство
DEPART 1; и покидает очередь
TRANSFER ,nodeC; безусловно переходит в блокС
;----------БлокВ-------------
nodeB QUEUE 2; занимается очередь №2 перед устройством №2
ENTER U2; если есть хотя бы один канал в МКУ, то занимаем ОДИН канал этого устройства
ADVANCE 30; каждый транзакт сидит в устройстве 30 единиц времени
LEAVE U2; освобождает канал устройства
DEPART 2; покидает очередь
TRANSFER ,nodeC; безусловно переходит в блокС (хотя можно было этот пункт не писать, так как
; все транзакты все равно пошли бы вниз по коду и попали бы в блокС.
;----------БлокС-------------
nodeC QUEUE 3; занимается очередь №3 перед устройством №3
SEIZE U3; если устройство не занято в данный момент — транзакт его займет
ADVANCE 20; задержится 25 единиц модельного времени
RELEASE U3; после задержки он освободит устройство
DEPART 3; и покидает очередь
TERMINATE; после всего этого транзакт удаляется (выходит из системы)
; блок ведения отсчета модельного времени
GENERATE 1
TERMINATE 1
START 30000; будем моделировать систему на протяжении 30000 единиц модельного времени
Отчет:

Что мы видим в отчете? На момент окончания модельного времени в очереди №1 было 610 транзактов, в очереди№ 3 было 875 транзактов. В очереди №2 небыло транзактов вообще.
Посмотрим параметры очередей (QUEUE).
Максимальное количество транзактов (которое было за весь период моделирования) в первой очереди — 612, в третей — 876. Во второй — всего 4.
Среднее время простоя в очереди у транзакта — в первой 5007, во второй — всего 30, в третей 5595.
Коэфициент использования у первого и третьего устройства (UTIL.) 1 и 0.998. У второго всего 0.392.
Из этой информации очевидно, что узкими местами данной модели являются первое и третее устройство. Для устранения узких мест нужно либо увеличить количество каналов в этих устройствах, либо уменьшить время обработки.
Этот пример показывает лишь основные возможности языка моделирования GPSS.
С его помощью можно легко решать задачи оптимизации (максимизировать прибыль и минимизировать убыль изменяя какие-либо параметры модели) и определять жизнеспособность практически любых процессов, которые можно представить в виде системы массового обслуживания.
Спасибо за внимание!