Анализ полученных результатов моделирования
⇐ ПредыдущаяСтр 3 из 3 Была исследована зависимость вероятностных характеристик системы от числа обслуживающих приборов. При увеличении числа обслуживающих приборов от 3 до 6 наблюдаем: · уменьшение вероятности занятости канала; · неизменность среднего времени занятости канала; · увеличение среднего времени простоя канала. В результате аналитического моделирования получены интересующие нас вероятностные характеристики системы. При аналитическом моделировании система ПРО рассматривалась в виде графа гибели и размножения, что позволило определить вероятности состояний из системы уравнений. Также эти характеристики могут быть посчитаны по заранее известным формулам. Расчет по эти формулам произведен в программе, листинг которой представлен в Приложении 2. Результаты аналитического моделирования представлены также в Приложении 3. А требуемые графики в Приложении 4.
Сопоставление полученных результатов для разработанных моделей Что бы убедиться в адекватности применяемых моделей СМО, воспользуемся статистическим критерием Если выборки однородны, то считают, что они извлечены из одной генеральной совокупности и, следовательно, имеют одинаковые, причем неизвестные, непрерывные функции распределения Таким образом, нулевая гипотеза состоит в том, что при всех значениях аргумента функции распределения равны между собой: Для того чтобы при заданном уровне значимости
и сравнить полученное значение с табличным Если Если Зададимся уровнем значимости Значение В качестве Результаты расчетов сведем в таблицу. Таблица 5.1. Расчет значения
Из таблицы получили
Заключение В процессе выполнения данной индивидуальной работы была рассмотрена система массового обслуживания на примере системы ПРО с отказами и частичной взаимопомощью. Данная система ПРО была рассмотрена как система массового обслуживания с отказами и частичной взаимопомощью между каналами обслуживания. Для заданной системы были построены две модели: аналитическая модель и имитационная модель. Обе системы рассматриваются при следующих упрощениях: рассматривается простейший пуассоновский поток входящих заявок, простейший пуассоновский поток обслуживания, а также система работает в стационарном режиме. В аналитической модели можно путем решения алгебраической системы уравнений можно определить вероятностные характеристики системы – вероятность обслуживания, вероятность занятости канала, среднее время простоя канала и др. Имитационная модель строилась с учетом всех особенностей функционирования реальной системы и поэтому она достаточно точно описывает все вероятностные процессы. В основу имитационной модели положено рассмотрение работы системы на некотором отрезке времени. В результате этого можно определить вероятностные характеристики системы. Листинг программы имитационного моделирования приведен в Приложении 1.
На этапе сравнения двух построенных моделей с помощью критерия Также была выявлена зависимость вероятностных характеристик системы от числа обслуживающих приборов, были получены следующие закономерности. Проводя моделирование при увеличении числа обслуживающих приборов от 3 до 6, наблюдаем: · увеличение вероятности обслуживания; · уменьшения вероятности занятости канала; · увеличение среднего времени простоя канала. Соответствующие зависимости в виде графиков представлены в Приложении 4.
Список используемой литературы
1. Южаков А.А. Прикладная теория систем массового обслуживания: Учеб. пособие, Пермь, Перм. гос. техн. ун-т, 2005. 2. Овчаров Л. А., Прикладные задачи теории массового обслуживания, Москва, Машиностроение, 1969. 3. Гмурман В. Е., Теория вероятностей и математическая статистика. М: Высшая школа, 2003. 4. ГОСТ 19.105-78. ЕСПД. Общие требования к программным документам.
Приложения Приложение 1 Листинг программы имитационного моделирования
program SMO_im; uses crt; const lambda=4.52; {Интенсивность простейшего входящего потока} mu=0.975; {Интенсивность простейшего потока обслуживания} eta=0.703; {Параметр нетерпимости заявки} time_t=1000000; {Время моделирования} n_kanalov=3; {Число каналов обслуживания} l=3; {Параметр взаимопомощи} var n_svob,p:integer; {кол-во свободных в данный момент приборов} vypolneno:real; {Количество выполненных заявок} kolvo,otkaz:longint; {Кол-во заявок, кол-во отказов} i,ok:integer; t:longint; {Текущее время при моделировании} t_z0,t_z,t_obs:real; {Интервалы обслуживания и занятости заявки} n:array[1..n_kanalov] of real;{Массив, в котором хранится время занятости текущего канала} t_zan:array[1..n_kanalov] of real;{Массив, в котором хранится общее время занятости каждого канала во время моделирования} n_vyp:array[1..n_kanalov] of integer; {Массив, в котором хранится кол-во заявок, выполненных каждым каналом} n_l_z:array[1..n_kanalov] of integer; Pobs:real; {Вероятность обслуживания} Lo,tpk,ksr:real; {Среднее число занятых каналов и плотность потока обслуживающих заявок}
n_zero:array[1..l] of integer; {Номера свободных в данный момент каналов обслуживания} pobs,pzk:real; {Вероятность занятости канала} begin randomize; t_z0:=0; kolvo:=0; otkaz:=0; vypolneno:=0; for i:=0 to n_kanalov do {Начальное обнуление параметров} begin n_vyp[i]:=0; t_zan[i]:=0; end; for t:=0 to time_t do {Основной цикл моделирования} begin for i:=1 to n_kanalov do {Цикл проверки окончания обслуживания заявки} begin if ((t>=n[i])AND(n[i]<>0)) then {Если текущее время больше, чем} begin n[i]:=0; vypolneno:=vypolneno+1/n_l_z[i]; n_l_z[i]:=0; end; продолжение Приложения 1 end; if (t>=t_z0) then {Генерации прихода новой заявки} begin t_z:=-100/lambda*ln((random(1000)+1)/1000);{генерация случайного интервала между заявками} t_z0:=t_z0+t_z; inc(kolvo); {Счётчик числа пришедших заявок увеличивается на единицу} n_svob:=0; for i:=1 to l do n_zero[i]:=0; {Обнуляется массив номеров свободных каналов} p:=1; for i:=1 to n_kanalov do {Цикл поиска свободных каналов} begin if (n[i]=0) then begin inc(n_svob); n_zero[p]:=i; inc(p); end; end; if (n_svob>=l) then begin {если число свободных каналов больше, чем l, то поступившая заявка обслуживается l} t_obs:=-100/(l*mu+eta)*ln((random(1000)+1)/1000);{Генерация времени обслуживания заявки} for i:=1 to l do {Распределяем обслуживание заявки по l каналам} begin n[n_zero[i]]:=t+t_obs; {Записываем время окончания обслуживания заявки} n_l_z[n_zero[i]]:=l; t_zan[n_zero[i]]:=t_zan[n_zero[i]]+t_obs;{Общее время занятости i-го канала} n_vyp[n_zero[i]]:=n_vyp[n_zero[i]]+1; {Число заявок, выполненных i-тым каналом} ok:=1; {Заявка поставлена на обслуживание} end; end else if (n_svob>0)AND(n_svob<l) then begin {если число свободных каналов меньше, чем l, то поступившая заявка обслуживается} t_obs:=-100/(n_svob*mu+eta)*ln((random(1000)+1)/1000); {Генерация времени обслуживания заявки} for i:=1 to n_svob do {Распределяем обслуживание заявки по оставшимся свободным каналам} begin n[n_zero[i]]:=t+t_obs; {Записываем время окончания обслуживания заявки} n_l_z[n_zero[i]]:=n_svob; t_zan[n_zero[i]]:=t_zan[n_zero[i]]+t_obs;{Общее время занятости i-го канала} n_vyp[n_zero[i]]:=n_vyp[n_zero[i]]+1; {Число заявок, выполненных i-тым каналом} ok:=1; {Заявка поставлена на обслуживание} end; продолжение Приложения 1 end else ok:=0; {иначе заявка не поставлена на обслуживание} if (ok<>1) then inc(otkaz); {Если заявка не поставлена на обслуживание, то увеличивается счётчик отказов на единицу}
end; end; {Окончание основного цикла моделирования} {Вычисление интересующих параметров по результатам моделирования} pzk:=0; for i:=1 to n_kanalov do pzk:=pzk+t_zan[i]/time_t; pzk:=pzk/n_kanalov; {Вычисление вероятности занятости канала} tpk:=0; for i:=1 to n_kanalov do if (n_vyp[i]<>0) then tpk:=tpk+(time_t-t_zan[i])/n_vyp[i]; ksr:=pzk*n_kanalov; {Вычисление среднего числа занятых каналов} Pobs:=(kolvo-otkaz)/kolvo; {Вычисление вероятности обслуживания} writeln('Число заявок ',kolvo); writeln('Выполнено ',vypolneno:5:0); writeln('Вероятность обслуживания ',Pobs:5:3); {Вывод результатов моделирования} writeln('Вероятность занятости канала ',pzk:5:3); writeln('Среднее число занятых каналов ',ksr:5:3); readln; end.
Приложение 2 Листинг программы аналитического моделирования
program SMO_an; uses crt; const l=4.52; m=0.703; n=6; ll=3; k=2000; function faktorial(a:integer):integer; var ii,fak:integer;
begin fak:=1; if a=0 then fak:=1; for ii:=1 to a do fak:=fak*ii; faktorial:=fak; end;
var p: array [0..n] of real; i,h,ns:integer; c:real;
begin h:=n div ll; ns:=h; c:=0; if n mod ll <>0 then ns:=ns+1; for i:=0 to ns do p[i]:=0; for i:=0 to ns-1 do c:=c+exp(i*ln(l))/(faktorial(i)*exp(i*ln(ll*m))); c:=c+exp(ns*ln(l))/(faktorial(ns-1)*n*m*exp((ns-1)*ln(ll*m))); p[0]:=1/c; for i:=1 to ns-1 do p[i]:=(p[i-1]*l)/(i*ll*m); {exp(i*ln(l))/(faktorial(i)*exp(i*ln(ll*m))*c);}
p[ns]:=p[ns-1]*l/(n*m); {exp(ns*ln(l))/(faktorial(ns)*m*exp((ns-1)*ln(ll*m))*c);} for i:=0 to ns do writeln('p[',i,']=',p[i]:4:5); writeln('n=',ns); writeln('Pobsl=',(1-p[ns]):3:6); writeln('l0=',(1-p[ns]):3:6); writeln('ksr=',(l/m)*p[ns]:3:6); readln; end. Приложение 3
Воспользуйтесь поиском по сайту: ![]() ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|