Лабораторная работа
ИМИТАЦИОННОЕ МОДЕЛИРОВАНИЕ НА ЯЗЫКЕ GPSS
Порядок проведения работы
Получить у преподавателя задание на имитационное моделирование.
Разработать имитационную модель.
Занести в отчет разработанную имитационную модель и полученные результаты моделирования.
1. Разработка модели «Моделирование работы транспортного цеха» в среде gpss World
1.1. Постановка задачи
Транспортный цех объединения обслуживает три филиала: А, В и С. Грузовики перевозят изделия из А в В и из В в С, возвращаясь затем в А без груза. Погрузка в А занимает 20 мин, переезд из А в В длится 30 мин, разгрузка и погрузка в В – соответственно по 20 мин, переезд в С - 30 мин, разгрузка в С - 20 мин и переезд в А - 20 мин. Если к моменту погрузки в А и В отсутствуют изделия, грузовики уходят дальше по маршруту. Погрузки и разгрузки осуществляются на отдельных терминалах, при этом разгружаться/нагружаться в одно время может только одна машина. Соответственно грузовики, пришедшие в момент, когда терминал занят, становятся в очередь. Изделия в А выпускаются партиями по 1000 шт. через 20±3 мин, в В - такими же партиями через 20±5 мин. На линии работает 12 грузовиков, каждый перевозит 1000 изделий. В начальный момент все грузовики находятся в А.
Требуется смоделировать работу транспортного цеха объединения в течение 1000 ч. Определить частоту пустых перегонов грузовиков между А и В, В и С и сравнить с характеристиками, полученными при равномерном начальном распределении грузовиков между этапами погрузки в филиалах А и В.
1.2. Уточнение условия задачи
Договоримся о ряде используемых соглашений:
Будем выражать все интервалы времени в минутах. Таким образом, время моделирования будет составлять 60000 мин.
Так как изделия и в А, и в В выпускаются одинаковыми партиями по 1000 штук, а грузовики перевозят ровно 1000 изделий, то будем считать, что филиалы выпускают партии изделий, а грузовик может перевезти за раз 1 партию.
1.3. Описание моделируемой системы
1.3.1. Сегменты модели
Модель транспортного цеха состоит из следующих сегментов:
1) Сегмент объявлений SAVEVALUE–сущностей и присвоений им начальных значений.
В модели используются следующие SAVEVALUE–сущности:
Таблица 1.
SAVEVALUE–сущности, используемые в модели
Наименование SAVEVALUE–сущности |
Описание SAVEVALUE–сущности |
AQUEUE |
Содержит в себе количество партий изделий, накопленных к настоящему моменту на складе в филиале A. Если на складе нет ни одной партии, то проезжающие мимо грузовики пропускают этап погрузки в филиале A. |
BQUEUE |
То же, только для филиала B. |
EMPTY |
В данной сущности производится подсчет пустых перегонов грузовиков на дорогах из A в B и из B в C. |
MOVES |
В данной сущности накапливается общее число перегонов грузовиков между филиалами A и B, а также между B и C. |
2) Сегмент, отвечающий за создание партий изделий в цехе А.
В данном сегменте с заданным интервалом времени 20±3 мин создаются транзакции типа А. Перед их уничтожением увеличивается на 1 значение в AQUEUE.
3) Сегмент, отвечающий за создание партий изделий цехе В.
В данном сегменте с заданным интервалом времени 20±5 мин создаются транзакции типа В. Перед их уничтожением увеличивается на 1 значение в BQUEUE.
4) Сегмент, в котором создаются и двигаются по своим маршрутам грузовики.
В данном сегменте в начальный момент времени создаются 12 грузовиков, которые сразу же начинают свое следование по бесконечному замкнутому маршруту АВСА... Этапы перемещений грузовиков см. в соответствующем разделе.
5) Таймер (отсчитывает время моделирования — 60000 мин). После сигнализирования таймера имитация модели прекращается.
1.3.2. Типы транзакций
В модели используются транзакции следующих типов:
Транзакции типа А (партии изделий, создаваемые в филиале А).
Транзакции типа В (партии изделий, создаваемые в филиале В).
Транзакции типа T (от англ. trucks, грузовики, перевозящие партии изделий).
Каждому грузовику после его создания назначается целочисленный параметр BUSY (начальное значение 0), который показывает, загружен (1) или пуст (0) грузовик. Данные сведения используются в пунктах разгрузки в филиалах В и С.
1.3.3. Этапы перемещений грузовиков
Маршрут грузовиков (в пределах одного цикла) состоит из следующих этапов:
Таблица 2.
Этапы перемещений грузовиков
Наименование этапа |
Описание этапа перемещения |
ALOAD |
На данном этапе производится погрузка в грузовик партии деталей, выпущенной в филиале А. Погрузка длится 20 мин. Если грузовик приходит в момент, когда терминал ATERMINAL занят, то он становится в очередь QATERMINAL. Перед началом погрузки на единицу уменьшается значение, сохраняемое в сущности AQUEUE. После окончания погрузки грузовику присваивается статус «загружен» (значение параметра BUSY становится равным 1). Если на момент прибытия грузовика на складе в филиале A нет ни одной партии деталей, грузовик переходит к этапу ABTEST. |
ABTEST |
На данном этапе производится определение, пуст ли грузовик. Если он пуст, то увеличивается на 1 значение сущности EMPTY. В противном случае грузовик отправляется на следующий этап. |
ABMOVE |
На данном этапе происходит перегон грузовика из филиала A в филиал В. Перегон занимает 30 мин. Перед началом перегона наращивается значение, сохраняемое в сущности MOVES. После окончания перегона грузовик переходит к следующему этапу. |
BUNLOAD |
Если грузовик загружен, на данном этапе происходит его разгрузка в филиале B. В противном случае грузовик переходит к следующему этапу. Если загруженный грузовик приходит в момент, когда терминал разгрузки BTERMINAL1 занят, то он становится в очередь QBTERMINAL1. Разгрузка длится 20 мин. После окончания разгрузки грузовику присваивается статус «пуст» (параметр BUSY становится равным 0). |
BLOAD |
На данном этапе производится погрузка в грузовик партии деталей, выпущенной в филиале B. Погрузка длится 20 мин. Если грузовик приходит в момент, когда терминал загрузки BTERMINAL2 занят, то он становится в очередь QBTERMINAL2. Перед началом погрузки на единицу уменьшается значение, сохраняемое в сущности BQUEUE. После окончания погрузки грузовику присваивается статус «загружен» (значение параметра BUSY становится равным 1), Если на момент прибытия грузовика на складе в филиале B нет ни одной партии деталей, грузовик переходит к следующему этапу. |
BCTEST |
На данном этапе производится определение, пуст ли грузовик. Если он пуст, то наращивается значение сущности EMPTY. В противном случае грузовик отправляется на следующий этап. |
BCMOVE |
На данном этапе происходит перегон грузовика из филиала B в филиал C. Перегон занимает 30 мин. Перед началом перегона наращивается значение, сохраняемое в сущности MOVES. После окончания перегона грузовик переходит к следующему этапу. |
CUNLOAD |
Если грузовик загружен, на данном этапе происходит его разгрузка в филиале C. В противном случае грузовик переходит к следующему этапу. Если загруженный грузовик приходит в момент, когда терминал CTERMINAL занят, то он становится в очередь QCTERMINAL. Разгрузка длится 20 мин. После окончания разгрузки грузовику присваивается статус «пуст» (параметр BUSY становится равным 0). |
CAMOVE |
На данном этапе происходит перегон грузовика из филиала C в филиал A. Перегон занимает 20 мин. После окончания перегона грузовик переходит к этапу ALOAD и начинается новый виток перемещений грузовика. |
1.4. Моделирующая программа на языке GPSS
1.4.1. Блок-диаграмма модели в символике языка GPSS
В сегменте 1 происходит инициализация SAVEVALUE-сущностей со значением 0.
Рисунок 2 – Блок-диаграмма сегментов 2,3,5
Рисунок 3 – Блок-диаграмма сегмента 4
1.4.2. Описание текста моделирующей программы
В следующей таблице приводится описание определенных строк программы (* обозначает любую цифру):
Таблица 3.
Описание текста моделирующей программы
Номера строк |
Описание строк |
Соответствующие этапы перемещений грузовиков |
100 |
Требование симуляции модели |
— |
Сегмент объявлений SAVEVALUE-сущностей |
||
1** |
Объявление и инициализация SAVEVALUE -сущностей |
— |
Сегмент создания изделий в цехе A |
||
2** |
Создание партий изделий в цехе A, наращивание значения AQUEUE, уничтожение партий изделий |
— |
Сегмент создания изделий в цехе B |
||
3** |
Создание партий изделий в цехе B, наращивание значения BQUEUE, уничтожение партий изделий |
— |
Сегмент создания и перемещения грузовиков |
||
4** |
Создание грузовиков, назначение им параметра BUSY, распределение их по филиалам |
— |
500-530 |
Задержка в цехе A: погрузка |
ALOAD |
540-570 |
Переезд из A в B |
ABTEST, ABMOVE |
600-620 |
Задержка в цехе B: разгрузка |
BUNLOAD |
630-660 |
Задержка в цехе B: погрузка |
BLOAD |
670-695 |
Переезд из B в C |
BCTEST, BCMOVE |
700-720 |
Задержка в цехе C: разгрузка |
CUNLOAD |
730 |
Переезд из C в A |
CAMOVE |
800 |
Возвращение в цех A (к этапу ALOAD) |
— |
Сегмент-таймер |
||
9** |
Осуществляет остановку процесса имитации по прошествии 60000 мин |
— |
1.4.3. Замечания по поводу равномерного распределения грузовиков между филиалами
Приведем различия в программах для случаев, когда все грузовики изначально находятся перед этапом погрузки в филиале A и когда они равномерно распределены между филиалами A и B (точнее, между этапами погрузки в этих филиалах). Для этого следует изменить начало кода, принадлежащего сегменту 4 (создание и перемещение грузовиков), а именно, те строки, которые нумеруются с 4:
; Создание грузовиков
400 GENERATE ,,,12
410 ASSIGN BUSY,0
Равномерное распределение грузовиков можно смоделировать следующим образом:
Отдельная генерация грузовиков для филиалов А и В (по 6 грузовиков на каждый филиал):
; Создание грузовиков
; Для филиала А
400 GENERATE ,,,6
410 ASSIGN BUSY,0
420 TRANSFER ,ALOAD
; Для филиала В
430 GENERATE ,,,6
440 ASSIGN BUSY,0
450 TRANSFER ,BLOAD
1.4.4. Текст моделирующей программы на языке GPSS
100 SIMULATE
;*****************************************************
; Объявление SAVEVALUE-сущностей
110 INITIAL X$AQUEUE,0
120 INITIAL X$BQUEUE,0
130 INITIAL X$EMPTY,0
140 INITIAL X$MOVES,0
;*****************************************************
; Создание изделий в цехе A
200 GENERATE 20,3
210 SAVEVALUE AQUEUE+,1
220 TERMINATE
;*****************************************************
; Создание изделий в цехе B
300 GENERATE 20,5
310 SAVEVALUE BQUEUE+,1
320 TERMINATE
;*****************************************************
; Создание грузовиков
400 GENERATE ,,,12
410 ASSIGN BUSY,0
; Задержка в цехе А
; Погрузка в цехе А
500 ALOAD TEST G X$AQUEUE,0,ABTEST
510 SAVEVALUE AQUEUE-,1
511 QUEUE QATERMINAL
512 SEIZE ATERMINAL
513 DEPART QATERMINAL
520 ADVANCE 20
525 RELEASE ATERMINAL
530 ASSIGN BUSY,1
; Переезд из А в B
540 ABTEST TEST E P$BUSY,0,ABMOVE
550 SAVEVALUE EMPTY+,1
560 ABMOVE SAVEVALUE MOVES+,1
570 ADVANCE 30
; Задержка в цехе B
; Разгрузка в цехе B
600 BUNLOAD TEST E P$BUSY,1,BLOAD
601 QUEUE QBTERMINAL1
602 SEIZE BTERMINAL1
603 DEPART QBTERMINAL1
610 ADVANCE 20
615 RELEASE BTERMINAL1
620 ASSIGN BUSY,0
; Погрузка в цехе B
630 BLOAD TEST G X$BQUEUE,0,BCTEST
640 SAVEVALUE BQUEUE-,1
641 QUEUE QBTERMINAL2
642 SEIZE BTERMINAL2
643 DEPART QBTERMINAL2
650 ADVANCE 20
655 RELEASE BTERMINAL2
660 ASSIGN BUSY,1
; Переезд из B в C
670 BCTEST TEST E P$BUSY,0,BCMOVE
680 SAVEVALUE EMPTY+,1
690 BCMOVE SAVEVALUE MOVES+,1
695 ADVANCE 30
; Задержка в цехе C
; Разгрузка в цехе C
700 CUNLOAD TEST E P$BUSY,1,CAMOVE
701 QUEUE QCTERMINAL
702 SEIZE CTERMINAL
703 DEPART QCTERMINAL
710 ADVANCE 20
715 RELEASE CTERMINAL
720 ASSIGN BUSY,0
; Переезд из C в A
730 CAMOVE ADVANCE 20
; Возвращение в цех А
800 TRANSFER ,ALOAD
; Таймер
900 GENERATE 60000
910 TERMINATE 1
1.4.5. Используемые операторы
SIMULATE - начальная карта программы, если разработчик намерен выполнить прогон модели. Если эта карта отсутствует, то интерпретатор проверяет правильность записи модели на языке GPSS, но прогона модели не выполняет.
INITIAL X$PER,0 – задаем начальное значение величины PER равное 1
GENERATE 30,5,,8 - генерация 8 транзактов, интервалы времени между появлениями транзактов распределены равномерно в диапазоне [30-5, 30+5].
SAVEVALUE PER+,1 - увеличение текущего значения сохраняемой величины PER на 1.
TERMINATE 3 - удаление транзакта из системы, при этом содержимое итогового счетчика уменьшается на 3 единицы, моделирование заканчивается, если содержимое счетчика станет равным или меньше нуля.
ASSIGN ATT,0 – замена текущего значения параметра транзакта ATT на значение 0.
TEST E P$ATT,1,MET - если значение параметра транзакта ATT равно 1, то данный транзакт перейдет на следующий блок, иначе - в блок MET
TEST G P$ATT,0,MET - если значение параметра транзакта ATT больше чем 0, то данный транзакт перейдет на следующий блок, иначе - в блок MET.
QUEUE AA1 - оператор организации очереди, длина очереди AA1 увеличивается на единицу.
DEPART AA1 - то же, но длина очереди уменьшается на единицу.
SEIZE A1 - занятие устройства A1 приходящим на его вход транзактом; если устройство занято, то транзакт задерживается в очереди к этому устройству.
ADVANCE A,B - задержка транзакта на время, определенное содержимым полей A и B, смысл величин, записываемых в этих подполях, такой же, как и в операторе GENERATE.
RELEASE A1 - освобождение устройства A1 обслуженным транзактом.
TRANSFER ,MET - безусловная передача транзакта в блок MET.
1.4.6. Запуск программы
FileNewModel
Запуск на имитацию: CommandCreate Simuation
CommandStartStart 1
