МОСКОВСКИ ЭНЕРГЕТИЧЕСКИЙ ИНСТИТУТ (ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ) Лабораторная работа №3. "МОДЕЛИРОВАНИЕ СИСТЕМЫ МАССОВОГО ОБСЛУЖИВАНИЯ" Выполнил: студент группы А-12-11 Наполов Александр Вариант №4 Москва 2013 Задание: * Составить список состояний СМО; * Нарисовать граф состояний СМО; * Составить и решить систему уравнений Колмогорова; * Рассчитать основные характеристики СМО: 1. Вероятность отказа; 2. Коэффициент загрузки; 3. Пропускная способность; 4. Среднее число заявок, обслуживаемое в СМО 5. Среднее время пребывания заявки в очереди 6. Средняя длина очереди * Во время лабораторной работы провести численное моделирование этого же варианта СМО по методу, указанному в задании. * Сравнить основные характеристики СМО, полученные в результате аналитического и численного расчета. . Параметры варианта: №Число каналовДлина очередиИнтенсивность потока событий λСреднее время обслуживания 1/μМетод численного моделирования3402.252Цепь Маркова Ход работы: Список состояний СМО: Имя состоянияСколько обслуживаетсяСколько в очередиS000S110S220S330S440 Граф состояний СМО: Система уравнений Колмогорова: −λp0 + μp1 = 0 −λp1 − μp1+λp0+2μp2= 0 −λp2 − 2μp2+λp1+3μp3= 0 −λp3 − 3μp3+λp2+4μp4= 0 p0 + p1 + p2 + p3+ p4 = 1 Получаем: P0=0.02912; P1=0.11648; P2=0.23296; P3=0.3106; P4=0.3106 Основные характеристики СМО: 1) Вероятность отказа Ротк = Р3 = 0,3106 2) Коэффициент загрузки Рзагр = 1 - Ро = 0,6894 3) Пропускная способность А=λ*(1 - Ротк) = 1,55115 4) Среднее число заявок, обслуживаемое в СМО: nср = 2.7566 5) Средняя длина очереди lcp = 0 6) Среднее время пребывания заявки в очереди Tоч = 0 Код программы имитации СМО: program Project2; {$APPTYPE CONSOLE} uses SysUtils; const nmax=5; mmax=5; Lambda=2.25; mu=1/2; type TMatrix=array [1..nmax, 1..mmax] of Real; var Mi: TMatrix;//Матрица интенсивностей переходов для СМО //Mi[i,j]-лямбда-и-жи, интенсивность перехода в состояние j если она была в i. i=0-нет заявок i,j: ShortInt; N,N1: Integer;//N-счётчик числа обслуженных заявок; N1-заданное кол-во заявок Ti: array [1..nmax] of Real;//Ti-время пребывания системы в состоянии i T,tmin,nsr,B,C:Real;//T-счётчик модельного времени; tsA,tsB,k: Real;//время до перехода из текущего i в j begin k:=1; //инициализируем генератор случайных чисел; Randomize; //ф-ция Random (без аргументов) возвращает //cлучайное число с равномерным законом распределения на интервале[0,1) //формула диапазона [a,b] //x:=random(b-a+1)+a; //-----------------------------------------// //создаём матрицу интенсивностей переходов for i:=1 to nmax do for j:=1 to mmax do begin if (i=j+1) then begin//нижняя диагональ Mi[i,j]:=k*mu ; k:=k+1; end else begin if (j=i+1) then//верхняя диагональ Mi[i,j]:=Lambda else Mi[i,j]:=0 end; end; Mi[2,1]:=mu; //-----------------------------------------// //-----------------------------------------// N:=0; T:=0;//N-кол-во обслуженных заявок изначально равно нулю Writeln('Kolichestvo zayavok '); Readln(N1); i:=1; while N<N1 do begin if ((i>1) and (i<mmax)) then //не вырожденный случай begin tsA:=((-1)/Mi[i,i-1])*ln(Random); {"ниже главной диагонали"} tsB:=((-1)/Mi[i,i+1])*ln(Random); {"выше главной диагонали"} //находим минимальный и его J if tsA>tsB then begin tmin:=tsB; j:=i+1 end else begin tmin:=tsA; j:=i-1 end; end else //вырожденные случаи begin if i=1 then begin tmin:=((-1)/Mi[i,i+1])*ln(Random); j:=i+1; end else //if i=nmax then begin tmin:=((-1)/Mi[i,i-1])*ln(Random); j:=i-1; end; end; T:=T+tmin;//увеличиваем счётчик модельного времени Ti[i]:=Ti[i]+tmin;//увеличиваем счётчик пребывания системы в состоянии i if J<i then Inc(N);//увеличиваем кол-во обслуженных заявок {if N<N1 then} i:=j; end; //-----------------------------------------// //Вывод// //-----------------------------------------// Writeln('======================================='); Writeln('Nacalnie dannie:'); Writeln('Lambda = 2.25'); Writeln('1/m = 2'); Writeln('K = 4'); Writeln('L = 0'); Writeln('======================================='); Writeln('Praktika:'); Writeln('Prinyato zayavok: ', N); Writeln('Vse zatr vremya: ', T:6:2); Writeln('Sistema v raznih sostoyaniyah: '); for i:=1 to nmax do Writeln('S[',i-1,']',' ','p[',i-1,']=',Ti[i]/T:6:4); Writeln('Otkaz: ', Ti[nmax]/T:6:4); Writeln('Propusknaya sposobnost: ', (2.25*(1-(Ti[nmax]/T))):6:4); //Writeln('Среднее число обслуж-ся заявок: ', ((Ti[2]+2*Ti[3])/T):6:4); Writeln('AVG kanalov : ', ((Ti[2]+2*Ti[3]+3*Ti[4]+4*Ti[5])/T):6:4); nsr:=0; for i:=3 to 5 do nsr:=nsr+Ti[i]*(i-2); Writeln('Srednya dlina ocheredi: ', 0); //Writeln('Ср. время преб-ния заяв. в СМО: ', (((Ti[2]+2*Ti[3]+3*Ti[4]+4*Ti[5])/T)/Lambda):6:4); nsr:=0; C:=0; B:=0; for i:=1 to 2 do C:=C+Ti[i]; for i:=1 to 4 do B:=B+i*Ti[i]; Writeln('Srednee vremya v ocheredi: ', ((B-C)/N1):6:4); //Writeln('Cреднее время обслуживания: ', ((((Ti[2]+2*Ti[3]+3*Ti[4]+4*Ti[5])/T)-(nsr/T))/Lambda):6:4); Writeln('Press Enter'); //-----------------------------------------// readln; end. Содержание выходного файла: Результаты Лямбда = 3.000 Коэффициент загрузки = 1.200 Количество пришедших заявок K = 3388 Длина очереди L = 0 Число заявок : 2000 Число отказов : 1384 Время обслуживания : 1123.27865 Вероятности пребывания в состояниях : S0: p0=0.0493 S1: p1=0.1946 S2: p2=0.3320 S3: p3=0.4242 Вероятность отказа : 0.40886 Пропускная способность : 1.78139 Среднее число занятых каналов : 2.13250 Среднее время в очереди : -0.00047 Средняя длина очереди : 0.000 Анализ полученных результатов представлен в таблице Аналитический расчетЭкспериментВероятности пребывания в состоянияхP0=0.02912P0=0.0250P1=0.11648P1=0.0899P2=0.23296P2=0.2251P3=0.3106P3=0.3270P4=0.3106P4=0.3330Вероятность отказаРотк = 0,3106Ротк = 0.3330Пропускная способностьА = 1,55115А = 1.5007Среднее число занятых каналов (среднее число обслуживаемых заявок)nср = 2.7566nср = 2.8532Среднее время пребывания заявки в очередиTоч = 0Tоч = 0Средняя длина очередиlcp = 0lcp = 0
1/--страниц