- •113Equation Chapter 3 Section 1 Министерство образования и науки Российской Федерации
- •«Пермский национальный исследовательский политехнический университет»
- •Индивидуальная работа
- •Реферат
- •Содержание:
- •2. Техническое задание
- •Введение.
- •4. Разработка имитационной модели.
- •4.1. Математическое описание имитационной модели.
- •4.2. Описание блок-схемы алгоритма.
- •4.3. Анализ полученных результатов моделирования.
- •5. Разработка аналитической модели.
- •5. 1 Математическое описание аналитической модели
- •5.2. Расчёт параметров смо.
- •5.3. Анализ полученных результатов моделирования.
- •6. Сопоставление полученных результатов для разработанных моделей.
- •7. Выводы.
- •8. Список используемой литературы.
- •9. Приложения
8. Список используемой литературы.
Гмурман В. Е., «Теория вероятностей и математическая статистика». М: Высшая школа, 1977.
Овчаров Л. А., «Прикладные задачи теории массового обслуживания», Москва, Машиностроение, 1969.
ГОСТ 19.105-78. ЕСПД. «Общие требования к программным документам».
Южаков А.А., «Прикладная теория СМО», Пермь, ПГТУ, 2004.
9. Приложения
Приложение 1. Листинги программ моделирования.
{Имитационное моделирование}
const
lambda=3.57; {Интенсивность простейшего входящего потока}
muz=1.213; {Интенсивность простейшего потока освобождения канала}
mu=0.38; {Интенсивность простейшего потока обслуживания заявок}
time_t=1000000; {Время моделирования}
n_kanalov=5; {Число каналов обслуживания}
var
kolvo,otkaz:longint; {Кол-во заявок, кол-во отказов, кол-во выполненных заявок}
vypolneno:real;
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; {Массив, в котором хранится кол-во заявок, выполненных каждым каналом}
Pobs,lambda0,Pzk:real; {Вероятность обслуживания и вероятность занятости канала}
tpk: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+mu/muz;
end;
end;
if (t>=t_z0) then {Генерация прихода новой заявки}
begin
t_z:=-100/lambda*ln((random(1000)+1)/1000); {генерация случайного интервала между заявками}
t_z0:=t_z0+t_z;
inc(kolvo);
for i:=1 to n_kanalov do {Проверяем, есть ли у нас свободные каналы, чтобы поставить заявку на
begin {обслуживание}
if (n[i]=0) then {Если есть свободный канал, то заявка ставится на обслуживание}
begin
t_obs:=-100/muz*ln((random(1000)+1)/1000); {Генерация времени обслуживания заявки}
n[i]:=t+t_obs; {Записываем время окончания обслуживания заявки}
t_zan[i]:=t_zan[i]+t_obs; {Общее время занятости i-го канала}
n_vyp[i]:=n_vyp[i]+1; {Число заявок, выполненных i-тым каналом}
ok:=1; {Заявка поставлена на обслуживание}
break;{Заявка поставлена на обслуживание, поэтому нет }
end; {надобности далее искать свободные каналы}
end;
if (ok<>1) then inc(otkaz); {если заявка не встала на обслуживание, то увеличивается счётчик отказов}
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 tpk:=tpk+(time_t-t_zan[i])/n_vyp[i]; {Вычисление среднего времени простоя канала}
tpk:=tpk/n_kanalov;
Pobs:=vypolneno/kolvo;
lambda0:=Pobs*lambda; {Плотность потоков обслуживаюзщих заявок}
writeln('4islo zajavok ',kolvo);
writeln('vypolneno ',vypolneno:5:4);
writeln('Вероятность обслуживания ',Pobs:5:3);
writeln('Вероятность занятости канала ',Pzk:5:3);
writeln('Среднее время простоя канала ',tpk/100:5:3);
writeln('lambda0 ',lambda0:5:3);
writeln('vero obsluя ',Pobs:5:3);
writeln('ver zanjatosti ',Pzk:5:3);
writeln('srednee vremja prostpja ',tpk:5:3);
readln;
end.
{Расчёт параметров аналитической модели}
program an_model;
const
lambda=3.57; {Интенсивность простейшего входящего потока}
muz=1.213; {Интенсивность простейшего потока освобождения канала}
mu=0.38; {Интенсивность простейшего потока обслуживания заявок}
muz=1.091; {Интенсивность потока обслуживания заявок}
mu=0.383;
const_alfa=5.19431714;{загрузка системы}
n_kanalov=3; {Количество каналов обслуживания}
var
i:integer; {Счётчик}
Pobs,Pzk,tpk:real; {Вероятность обслуживания, вероятность занятости канала, среднее время простоя канала}
function R_func(m:integer;alfa:real):real;
var
i,j:integer;
factorial:longint;
stepen,r_zn:real;
begin
R_zn:=0;
for i:=0 to m do
begin
factorial:=1; {Вычисление факториала}
for j:=0 to i do if (j=0) then factorial:=1 else factorial:=factorial*j;
stepen:=alfa; {Вычисление степени}
for j:=0 to i do stepen:=stepen*alfa;
R_zn:=R_zn+stepen/factorial;
end;
R_func:=R_zn;
end;
begin {Вычисление требуемых параметров аналитической модели}
Pobs:=mu/muz*R_func(n_kanalov-1,const_alfa)/R_func(n_kanalov,const_alfa);
Pzk:=const_alfa/n_kanalov*R_func(n_kanalov-1,const_alfa)/R_func(n_kanalov,const_alfa);
tpk:=1/muz*(1-pzk)/pzk;
lambda0:=Pobs*lambda;
writeln('lambda0 ',lambda0:5:3);
writeln('Вероятность обслуживания ',Pobs:5:3);
writeln('Вероятность занятости канала ',Pzk:5:3);
writeln('Среднее время простояя канала ',tpk:5:3);
end.
Приложение 2. Таблицы результатов моделирования.
Таблица 1. Результаты имитационного моделирования:
Число каналов обслуживания, |
Номер реализации |
|
|
|
|
1 |
0,530 |
0,704 |
0,243 |
2 |
0,535 |
0,701 |
0,237 |
|
3 |
0,538 |
0,704 |
0,243 |
|
4 |
0,538 |
0,701 |
0,249 |
|
5 |
0,538 |
0,699 |
0,228 |
|
6 |
0,529 |
0,705 |
0,239 |
|
7 |
0,529 |
0,707 |
0,249 |
|
8 |
0,535 |
0,703 |
0,254 |
|
9 |
0,531 |
0,706 |
0,239 |
|
10 |
0,533 |
0,701 |
0,240 |
|
среднее |
0,5336 |
0,7031 |
0,2421 |
|
|
1 |
0,744 |
0,642 |
0,303 |
2 |
0,741 |
0,651 |
0,287 |
|
3 |
0,742 |
0,644 |
0,285 |
|
4 |
0,742 |
0,649 |
0,287 |
|
5 |
0,743 |
0,648 |
0,299 |
|
6 |
0,738 |
0,646 |
0,292 |
|
7 |
0,737 |
0,654 |
0,299 |
|
8 |
0,735 |
0,652 |
0,302 |
|
9 |
0,742 |
0,648 |
0,287 |
|
10 |
0,743 |
0,648 |
0,292 |
|
среднее |
0,7407 |
0,6482 |
0,2933 |
|
|
1 |
0,901 |
0,587 |
0,375 |
2 |
0,896 |
0,593 |
0,372 |
|
3 |
0,894 |
0,587 |
0,388 |
|
4 |
0,890 |
0,594 |
0,353 |
|
5 |
0,899 |
0,590 |
0,374 |
|
6 |
0,891 |
0,592 |
0,367 |
|
7 |
0,891 |
0,593 |
0,345 |
|
8 |
0,896 |
0,594 |
0,371 |
|
9 |
0,897 |
0,588 |
0,357 |
|
10 |
0,891 |
0,519 |
0,357 |
|
среднее |
0,8946 |
0,5837 |
0,3659 |
Таблица 2. Сравнение результатов имитационного и аналитического моделирования:
Число каналов обслуживания, |
Искомый параметр |
Аналитическая модель |
Имитационная модель |
|
|
0,5338 |
0,5336 |
|
0.7131 |
0,7031 |
|
|
0.2400 |
0,2421 |
|
|
|
0,7459 |
0,7407 |
|
0.6531 |
0,6482 |
|
|
0.3110 |
0,2933 |
|
|
|
0,8912 |
0,8946 |
|
0.5923 |
0,5837 |
|
|
0.3417 |
0,3659 |
Приложение 3. Графики, полученные в результате моделирования.
График 1. Зависимость плотности потока обслуживающих заявок от числа приборов для аналитической и имитационной моделей.
График
2. Зависимость
вероятности занятости канала от числа
приборов для аналитической и имитационной
моделей
График 3. Зависимость среднего времени простоя канала от числа приборов для аналитической и имитационной моделей.
Приложение
4. Блок-схема
алгоритма имитационной модели.
