- •1 Имитационное моделирование системы массового обслуживания
- •1.1 Анализ динамики функционирования смо
- •1.2 Формализация модели смо средствами gpss
- •1.3 Имитационное моделирование смо в среде gpss World
- •Общая информация о результатах работы модели:
- •Информация о блоках:
- •Информация об объектах типа «устройство»:
- •Информация об объектах типа «очередь»
- •Информация о сохраняемых величинах (ячейках)
- •2 Анализ и оптимизация системы массового обслуживания
- •2.1 Формализация модели смо для задач анализа и оптимизации
- •2.2 Модификация имитационной модели
- •2.3 Реализация модельных экспериментов и анализ результатов
1.3 Имитационное моделирование смо в среде gpss World
Рассмотрим принципиальные особенности реализации имитационной вероятностной модели заданной СМО в среде GPSS World.
В заданной СМО интенсивность обслуживания в устройствах SA-SC зависит от интервала времени между поступлением заявок одного типа. Данную величину будем сохранять в ячейки. Так же потребуется ввести некоторое множество ячеек для накопления необходимой статистики. Характеристики сохраняемых ячеек приведены в таблице 5.
Таблица 5 – Сохраняемые ячейки программной реализации
Имя ячейки |
Описание |
Начальное значение |
Mode |
Переменная определяющая режим работы СМО. |
0 |
Val1 |
Время поступления очередной заявки типа 1 в СМО. |
0 |
Val2 |
Время поступления очередной заявки типа 2 в СМО. |
0 |
Val3 |
Время поступления очередной заявки типа 3 в СМО. |
0 |
Cnt |
текущее кол-во заявок в СМО. |
0 |
Cnt_A11 |
количество заявок типа 1 завершивших обслуживание в СМО с интенсивностью 1 в режиме 1 индивидуально |
0 |
Cnt_A21 |
количество заявок типа 1 обслуженных с интенсивностью 2 в режиме 1. |
0 |
Cnt_B11 |
количество заявок типа 2 обслуженных с интенсивностью 1 в режиме 1. |
0 |
Cnt_B21 |
количество заявок типа 2 обслуженных с интенсивностью 2 в режиме 1. |
0 |
Cnt_C11 |
количество заявок типа 3 обслуженных с интенсивностью 1 в режиме 1. |
0 |
Cnt_C21 |
количество заявок типа 3 обслуженных с интенсивностью 2 в режиме 1. |
0 |
Cnt_A12 |
количество заявок типа 1 обслуженных с интенсивностью 1 в режиме 2. |
0 |
Cnt_A22 |
количество заявок типа 1 обслуженных с интенсивностью 2 в режиме 2. |
0 |
Cnt_B12 |
количество заявок типа 2 обслуженных с интенсивностью 1 в режиме 2. |
0 |
Cnt_B22 |
количество заявок типа 2 обслуженных с интенсивностью 2 в режиме 2. |
0 |
Cnt_C12 |
количество заявок типа 3 обслуженных с интенсивностью 1 в режиме 2. |
0 |
Cnt_C22 |
количество заявок типа 3 обслуженных с интенсивностью 2 в режиме 2. |
0 |
Cnt_All_A1 |
счетчик заявок типа 1 завершенных обслуживание в режиме 1 |
0 |
Cnt_All_A2 |
счетчик заявок типа 1 завершенных обслуживание в режиме 2 |
0 |
Cnt_All_B1 |
счетчик заявок типа 2 завершенных обслуживание в режиме 1 |
0 |
Cnt_All_B2 |
счетчик заявок типа 2 завершенных обслуживание в режиме 2 |
0 |
Cnt_All_C1 |
счетчик заявок типа 3 завершенных обслуживание в режиме 1 |
0 |
Cnt_All_C2 |
счетчик заявок типа 3 завершенных обслуживание в режиме 2 |
0 |
All_A |
общее количество заявок типа 1. |
0 |
All_B |
общее количество заявок типа 2. |
0 |
All_C |
общее количество заявок типа 3. |
0 |
Для организации пакетирования перед обработкой в устройстве обслуживания S1 была введена булева переменная BVAR, привязанная к коэффициенту использования устройства обслуживания S1.
Для накопления статистики работы СМО, а также расчета интенсивности обслуживания заявок в устройствах SA-SC будем использовать параметры заявок в качестве хранилищ некоторых величин:
-
интервал времени между последовательным поступлением заявок одного типа;
-
собственному типу заявки (пакет или одиночная заявка).
Характеристика используемых параметров приведена в таблице 6.
Таблица 6 – Сохраняемые параметры заявок
Параметр |
Описание сохраняемого значения |
В |
Интервал времени между поступлениями двух заявок одного типа. |
С |
Тип заявки. 1- тип А, 2 – тип В, 3 – тип С, 4 – пакет. |
10 |
Момент времени, когда заявка поступает в СМО. |
20 |
Момент времени, когда заявка завершает обслуживание в СМО. |
30 |
Время пребывания заявки в СМО. |
Кроме этого, в программной реализации имитационной СМО имеются следующие особенности:
-
для сбора данных о времени пребывания заявок и пакетов в СМО использованы статистические таблицы с именами GIST_P, GIST_Z1, GIST_Z2 и GIST_Z3;
-
для сбора данных о среднем времени пребывания и среднеквадратическом отклонении времени пребывания заявок и пакетов в очередях использованы статистические таблицы с именами GIST_QSA, GIST_QSB, GIST_QSC, GIST_S1 и GIST_S2;
-
в устройствах SA-SC время обработки заявки генерируется для каждой заявки в отдельности в зависимости от заданного условия;
-
для реализации моделирования процесса обработки заявок в данной СМО
было выбрано число обслуживаемых заявок равное 10000.
Листинг программной реализации имитационной вероятностной модели СМО имеет следующий вид.
******** БЛОК ИНИЦИАЛИЗАЦИИ ПЕРЕМЕННЫХ ********
INITIAL X$Mode,1 ;переменная определяющая режим работы СМО
INITIAL X$Val1,0 ;время поступления очередной заявки типа 1 в СМО
INITIAL X$Val2,0 ;время поступления очередной заявки типа 2 в СМО
INITIAL X$Val3,0 ;время поступления очередной заявки типа 3 в СМО
INITIAL X$Cnt,0 ;текущее кол-во заявок в СМО
INITIAL X$Cnt_A11,0 ;количество заявок типа 1 обслуженных с
;интенсивностью 1 в режиме 1
INITIAL X$Cnt_A21,0 ;количество заявок типа 1 обслуженных с
;интенсивностью 2 в режиме 1
INITIAL X$Cnt_B11,0 ;количество заявок типа 2 обслуженных с
;интенсивностью 1 в режиме 1
INITIAL X$Cnt_B21,0 ;количество заявок типа 2 обслуженных с
;интенсивностью 2 в режиме 1
INITIAL X$Cnt_C11,0 ;количество заявок типа 3 обслуженных с
;интенсивностью 1 в режиме 1
INITIAL X$Cnt_C21,0 ;количество заявок типа 3 обслуженных с
;интенсивностью 2 в режиме 1
INITIAL X$Cnt_A12,0 ;количество заявок типа 1 обслуженных с
;интенсивностью 1 в режиме 2
INITIAL X$Cnt_A22,0 ;количество заявок типа 1 обслуженных с
;интенсивностью 2 в режиме 2
INITIAL X$Cnt_B12,0 ;количество заявок типа 2 обслуженных с
;интенсивностью 1 в режиме 2
INITIAL X$Cnt_B22,0 ;количество заявок типа 2 обслуженных с
;интенсивностью 2 в режиме 2
INITIAL X$Cnt_C12,0 ;количество заявок типа 3 обслуженных с
;интенсивностью 1 в режиме 2
INITIAL X$Cnt_C22,0 ;количество заявок типа 3 обслуженных с
;интенсивностью 2 в режиме 2
INITIAL X$Cnt_All_A1,0 ;счетчик заявок типа 1 завершенных обслуживание в
;режиме 1
INITIAL X$Cnt_All_A2,0 ;счетчик заявок типа 1 завершенных обслуживание в
;режиме 2
INITIAL X$Cnt_All_B1,0 ;счетчик заявок типа 2 завершенных обслуживание в
;режиме 1
INITIAL X$Cnt_All_B2,0 ;счетчик заявок типа 2 завершенных обслуживание в
;режиме 2
INITIAL X$Cnt_All_C1,0 ;счетчик заявок типа 3 завершенных обслуживание в
;режиме 1
INITIAL X$Cnt_All_C2,0 ;счетчик заявок типа 3 завершенных обслуживание в
;режиме 2
INITIAL X$All_A,0 ;общее количество заявок типа 1
INITIAL X$All_B,0 ;общее количество заявок типа 2
INITIAL X$All_C,0 ;общее количество заявок типа 3
BVAR BVARIABLE FR$U_S1>=900 ;булевая переменная. равна 1 при коэф.
;использования устройства U_S1 >=0.9
******** БЛОК ИНИЦИАЛИЗАЦИИ ГИСТОГРАММ ********
GIST_P TABLE P30,0,0.1,40 ;гистограмма среднего времени пребывания пакетов
GIST_Z1 TABLE P30,0,2,70 ;гистограмма среднего времени пребывания заявок
;типа 1
GIST_Z2 TABLE P30,0,2,70 ;гистограмма среднего времени пребывания заявок
;типа 2
GIST_Z3 TABLE P30,0,2,70 ;гистограмма среднего времени пребывания заявок
;типа 3
GIST_QSA QTABLE QSA,0,0.5,30 ;гистограмма времени пребывания заявок и пакетов в
;очереди QSA
GIST_QSB QTABLE QSB,0,0.5,30 ;гистограмма времени пребывания заявок и пакетов в
;очереди QSB
GIST_QSC QTABLE QSC,0,0.5,30 ;гистограмма времени пребывания заявок и пакетов в
;очереди QSC
GIST_QS1 QTABLE Q_S1,0,1,30 ;гистограмма времени пребывания заявок и пакетов в
;очереди QS1
GIST_QS2 QTABLE Q_S2,0,0.1,20 ;гистограмма времени пребывания заявок и пакетов в
;очереди QS2
******** БЛОК ИНИЦИАЛИЗАЦИИ ФУНКЦИИ ********
tipe1 FUNCTION RN1,D3 ;функция определения типа заявок в режиме 1
0.58,To_SA/0.81,To_SB/1,To_SC
tipe2 FUNCTION RN1,D3 ;функция определения типа заявок в режиме 2
0.25,To_SA/0.75,To_SB/1,To_SC
******** БЛОК ФОРМИРОВАНИЯ РЕЖИМА РАБОТЫ СМО ********
GENERATE 50 ;генерация заявки-инициатора смены режима
TEST E X$Mode,1,To_Mode1 ;проверка текущего режима
SAVEVALUE Mode,2 ;смена режима с 1 на 2
TERMINATE ;выход заявки-инициатора из СМО
To_Mode1 SAVEVALUE Mode,1 ;смена режима с 2 на 1
TERMINATE ;выход заявки-инициатора из СМО
******** НАЧАЛО МОДЕЛИРОВАНИЯ *********
GENERATE(Exponential(1,0,0.3125)) ;генерация заявки
MARK 10 ;фиксация времени поступления заявки
ADOPT 1 ;все в 1 семейство
SAVEVALUE Cnt+,1 ;увеличение счетчика кол-ва заявок в СМО
TEST E X$Mode,1,To_Mode2 ;проверка режима работы СМО
TRANSFER ,FN$tipe1 ;переход заявки в устройство согласно типу заявки
To_Mode2 TRANSFER ,FN$tipe2 ;переход заявки в устройство согласно типу заявки
******** УСТРОЙСТВО SA ********
To_SA SAVEVALUE All_A+,1 ;увеличение счетчика заявок типа 1
ASSIGN C,1 ;фиксация типа заявки в параметр С
PLUS (P10-X$Val1),B ;вычисление интервала времени между поступление 2-х
;заявок 1 типа
SAVEVALUE Val1,P10 ;фиксация времени поступления текущей заявки в СМО
QUEUE QSA ;поступление в очередь устройства SA
SEIZE U_SA ;занимаем устройство SA
DEPART QSA ;извлечение заявки из очереди устройства SA
TEST GE P$B,1,To_SA2 ;проверка разницы времени поступления последних 2-х
;заявок
ADVANCE (Exponential(1,0,1/(1.25/(P$B-1)))) ;обработка с интенсивностью 2
TEST E X$Mode,1,Temp_1 ;проверка режима работы СМО
SAVEVALUE Cnt_A21+,1 ;увеличения счетчика обработанных заявок типа 1 с
;интенсивностью 2 в режиме 1
TRANSFER, To_RSA ;переход к выходу из блока
Temp_1 SAVEVALUE Cnt_A22+,1 ;увеличения счетчика обработанных заявок типа 1 с
;интенсивностью 2 в режиме 2
TRANSFER ,To_RSA ;переход к выходу из блока
To_SA2 ADVANCE (Exponential(1,0,1/(1.25/P$B))) ;обработка с интенсивностью 1
TEST E X$Mode,1,Temp_2 ;проверка режима работы СМО
SAVEVALUE Cnt_A11+,1 ;увеличения счетчика обработанных заявок типа 1 с
;интенсивностью 1 в режиме 1
TRANSFER ,To_RSA ;переход к выходу из блока
Temp_2 SAVEVALUE Cnt_A12+,1 ;увеличения счетчика обработанных заявок типа 1 с
;интенсивностью 1 в режиме 2
To_RSA RELEASE U_SA ;освобождение устройства SA
TRANSFER ,To_S1 ;переход к устройству S1
******** УСТРОЙСТВО SB ********
To_SB SAVEVALUE All_B+,1 ;увеличение счетчика заявок типа 2
ASSIGN C,2 ;фиксация типа заявки в параметр С
PLUS (P10-X$Val2),B ;вычисление интервала времени между поступление 2-х
;заявок 2 типа
SAVEVALUE Val2,P10 ;фиксация времени поступления текущей заявки в СМО
QUEUE QSB ;поступление в очередь устройства SB
SEIZE U_SB ;занимаем устройство SB
DEPART QSB ;извлечение заявки из очереди устройства SB
TEST GE P$B,1,To_SB2 ;проверка разницы времени поступления последних 2-х
;заявок
ADVANCE (Exponential(1,0,1/(1.25/(P$B-1)))) ;обработка с интенсивностью 2
TEST E X$Mode,1,Temp_3 ;проверка режима работы СМО
SAVEVALUE Cnt_B21+,1 ;увеличения счетчика обработанных заявок типа 2 с
;интенсивностью 2 в режиме 1
TRANSFER ,To_RSB ;переход к выходу из блока
Temp_3 SAVEVALUE Cnt_B22+,1 ;увеличения счетчика обработанных заявок типа 2 с
;интенсивностью 2 в режиме 2
TRANSFER ,To_RSB ;переход к выходу из блока
To_SB2 ADVANCE (Exponential(1,0,1/(1.25/P$B))) ;обработка с интенсивностью 1
TEST E X$Mode,1,Temp_4 ;проверка режима работы СМО
SAVEVALUE Cnt_B11+,1 ;увеличения счетчика обработанных заявок типа 2 с
;интенсивностью 1 в режиме 1
TRANSFER ,To_RSB ;переход к выходу из блока
Temp_4 SAVEVALUE Cnt_B12+,1 ;увеличения счетчика обработанных заявок типа 2 с
;интенсивностью 1 в режиме 2
To_RSB RELEASE U_SB ;освобождение устройства SB
TRANSFER ,To_S1 ;переход к устройству S1
******** УСТРОЙСТВО SC ********
To_SC SAVEVALUE All_C+,1 ;увеличение счетчика заявок типа 3
ASSIGN C,3 ;фиксация типа заявки в параметр С
PLUS (P10-X$Val3),B ;вычисление интервала времени между поступление 2-х
;заявок 3 типа
SAVEVALUE Val3,P10 ;фиксация времени поступления текущей заявки в СМО
QUEUE QSC ;поступление в очередь устройства SC
SEIZE U_SC ;занимаем устройство SC
DEPART QSC ;извлечение заявки из очереди устройства SC
TEST GE P$B,1,To_SC2 ;проверка разницы времени поступления последних 2-х
;заявок
ADVANCE (Exponential(1,0,1/(1.25/(P$B-1)))) ;обработка с интенсивностью 2
TEST E X$Mode,1,Temp_5 ;проверка режима работы СМО
SAVEVALUE Cnt_C21+,1 ;увеличения счетчика обработанных заявок типа 3 с
;интенсивностью 2 в режиме 1
TRANSFER ,To_RSC ;переход к выходу из блока
Temp_5 SAVEVALUE Cnt_C22+,1 ;увеличения счетчика обработанных заявок типа 3 с
;интенсивностью 2 в режиме 2
TRANSFER ,To_RSC ;переход к выходу из блока
To_SC2 ADVANCE (Exponential(1,0,1/(1.25/P$B))) ;обработка с интенсивностью 1
TEST E X$Mode,1,Temp_6 ;проверка режима работы СМО
SAVEVALUE Cnt_C11+,1 ;увеличения счетчика обработанных заявок типа 3 с
;интенсивностью 1 в режиме 1
TRANSFER ,To_RSC ;переход к выходу из блока
Temp_6 SAVEVALUE Cnt_C12+,1 ;увеличения счетчика обработанных заявок типа 3 с
;интенсивностью 1 в режиме 2
To_RSC RELEASE U_SC ;освобождение устройства SC
******** УСТРОЙСТВО S1 ********
To_S1 TEST E BV$BVAR,1,To_S12 ;проверка коэф. использования устройства S1
ASSEMBLE 2 ;формирование пакета из 2-х заявок
ASSIGN C,4 ;установка типа заявки - пакет
To_S12 QUEUE Q_S1 ;поступление в очередь устройства S1
SEIZE U_S1 ;занимаем устройство S1
DEPART Q_S1 ;извлечение заявки из очереди устройства S1
ADVANCE(Gamma(1,0,0.1724,2)) ;обслуживание
RELEASE U_S1 ;освобождение устройства S1
******** УСТРОЙСТВО S2 ********
To_S2 QUEUE Q_S2 ;поступление в очередь устройства S2
SEIZE U_S2 ;занимаем устройство S2
DEPART Q_S2 ;извлечение заявки из очереди устройства S2
ADVANCE(Exponential(1,0,1/(X$Cnt/0.45))) ;обслуживание
RELEASE U_S2 ;освобождение устройства S2
******** ЗАВЕРШЕНИЕ ОБРАБОТКИ ЗАЯВКИ ********
To_end TEST E X$Mode,1,To_FMode2 ;проверка режима работы входного потока
TEST E P$C,1,To_Test4 ;проверка типа заявки
SAVEVALUE Cnt_All_A1+,1 ;увеличение счетчика завершенных заявок типа 1
TRANSFER ,To_Test10 ;переход
To_Test4 TEST E P$C,2,To_Test5 ;проверка типа заявки
SAVEVALUE Cnt_All_B1+,1 ;увеличение счетчика завершенных заявок типа 2
TRANSFER ,To_Test10 ;переход
To_Test5 TEST E P$C,3,To_Test10 ;проверка типа заявки
SAVEVALUE Cnt_All_C1+,1 ;увеличение счетчика завершенных заявок типа 3
TRANSFER ,To_Test10 ;переход
To_FMode2 TEST E P$C,1,To_Test6 ;проверка типа заявки
SAVEVALUE Cnt_All_A2+,1 ;увеличение счетчика завершенных заявок типа 1
TRANSFER ,To_Test10 ;переход
To_Test6 TEST E P$C,2,To_Test7 ;проверка типа заявки
SAVEVALUE Cnt_All_B2+,1 ;увеличение счетчика завершенных заявок типа 2
TRANSFER ,To_Test10 ;переход
To_Test7 TEST E P$C,3,To_Test10 ;проверка типа заявки
SAVEVALUE Cnt_All_C2+,1 ;увеличение счетчика завершенных заявок типа 3
To_Test10 SAVEVALUE Cnt-,1 ;уменьшение счетчика текущих заявок в СМО
MARK 20 ;фиксация времени завершения обслуживания заявки
PLUS (P20-P10),30 ;вычисление времени пребывания заявки в СМО в
;параметр 30
TEST E P$C,1,To_Test2 ;проверка на тип заявки
TABULATE Gist_Z1 ;занесение значения времени пребывания заявки в
;гистограмму
TRANSFER ,To_exit ;переход в выходу из СМО
To_Test2 TEST E P$C,2,To_Test3 ;проверка на тип заявки
TABULATE Gist_Z2 ;занесение значения времени пребывания заявки в
;гистограмму
TRANSFER ,To_exit ;переход в выходу из СМО
To_Test3 TEST E P$C,3,To_Z ;проверка на тип заявки
TABULATE Gist_Z3 ;занесение значения времени пребывания заявки в
;гистограмму
TRANSFER ,To_exit ;переход в выходу из СМО
To_Z TABULATE Gist_P ;занесение значения времени пребывания пакета в
;гистограмму
To_exit TERMINATE 1 ;выход заявки из СМО
START 10000 ;задание числа прогонов
Результаты эксперимента по моделированию процесса обслуживания заявок в заданной СМО были получены в виде полного стандартного отчета GPSS World Simulation Report, приведенного ниже.