Исследование систем массового обслуживания с ожиданием


Исследование систем массового обслуживания с ожиданием

1. Краткие теоретические сведения

Системы массового обслуживания с ожиданием распространены наиболее широко. Их можно разбить на две большие группы: разомкнутые и замкнутые. К замкнутым относятся системы, в которых поступающий поток требований ограничен. В разомкнутых системах поступающий поток требований не ограничен.

СМО с n-каналами обслуживает простейший поток требований. При занятости всех n -узлов обслуживания поступившее требование ставится в очередь и обслуживается после некоторого ожидания. Общее число требований, находящихся в системе на обслуживании и в очереди, обозначим k и назовем состояниям системы. При k= величина k характеризует число занятых каналов в системе, при k= число занятых каналов равно n, а разность k-n определяет длину очереди. Параметр интенсивности обслуживания потока определяется числом занятых узлов ().

Введем понятие загрузки системы p, равное отношению интенсивности входящего потока к интенсивности обслуживания .

Отметим, что при загрузке системы, равной или больше числа узлов обслуживания системы n, с вероятностью, равной 1, постоянно будут заняты все узлы обслуживания, и длина очереди будет бесконечной - явление "взрыва". Поэтому, чтобы система могла функционировать нормально и очередь не росла безгранично, необходимо выполнить условие p<1.

При ограниченной очереди k=, где m - заданная максимально допустимая длина очереди (емкость накопителя).

Динамика состояний системы с ограниченной длиной очереди описывается системой ОДУ Колмогорова для вероятностей состояний.

массовый обслуживание ожидание дифференциальный

при дисциплинирующем условии

и начальных условиях

Решение бесконечной системы алгебраических уравнений для стационарных вероятностей состояний СМО с ожиданием и бесконечной очередью определяется вторым распределением Эрланга

P0 =

К основным показателям качества обслуживания рассматриваемой СМО относятся:

  • -вероятность наличия очереди (вероятность того, что число требований в системе больше числа узлов)
  • -вероятность занятости всех узлов системы
  • -среднее число требований в системе

Мтр =P0 (

-средняя длина очереди

Mоч =

-среднее число свободных узлов

Мсв =

  • - среднее число занятых узлов
  • -среднее время ожидания начала обслуживания

T ож =

-общее время, которое проводят в очереди все требования, поступившие в систему за единицу времени

Tож =

-среднее время, которое требование проводит в системе обслуживания

Ттр = Тож +

-среднее время, которое в среднем проводят в системе все требования, поступившие за единицу времени

Тстр = Тожид +

2. Порядок выполнения работы

Построить размеченный граф состояний СМО с ограниченной длиной очереди.

Записать систему обыкновенных дифференциальных уравнений (ОДУ) Колмогорова для вероятностей состояний системы.

Составить программу на ЭВМ интегрирования ОДУ, вычисления вероятностей состояний в установившемся режиме и показателей качества функционирования СМО.

Провести вычислительный эксперимент, в котором:

  • - исследовать динамику вероятностей состояния и показателей качества СМО;
  • - оценить время переходных процессов в системе;
  • - вычислить вероятности состояний и показатели качества функционирования системы в установившемся режиме

Сформулировать выводы по работе.

Текст задания

На железнодорожной станции имеются 5 путей для обслуживания прибывающих железнодорожных составов . Интенсивность прибытия железнодорожных составов равна 15 составов час.Среднее время обслуживая одного состава 20 мин.

Система обыкновенных дифференциальных уравнения Колмогорова.

m=4;

µ=3

н=5*3=15

с=л/н =5

0

1

2

3

4

5

6

7

8

Pэр

0.2953

0,3691

0,2307

0,0769

0,0769

0,0154

0,0031

0,0031

0,0031

P

0,0100

0,8500

0,1500

0

0

0

0

0

0

вероятность наличия очереди 0.3076062640

вероятность занятости всех узлов системы 0.6152125280

среднее число требований в системе 2.1667016219

средняя длина очереди 0.8202833706

среднее число свободных узлов 1.2919463087

среднее число занятых узлов 0.7080536913

среднее время ожидания начала обслуживания 0.1367138951

program Lab1;

{$APPTYPE CONSOLE}

Type

vector=array[1..11] of real;

massiv=array[1..11] of vector;

fft=string[20];

ffs=TextFile;

ft=array[1..7] of ffs;

const m=4;

Var

p,p1:vector;

t,lam,mu,Po,Ps,suma:real;

qq:real;

kkk,xx,xx1:integer;

yy,yy1:array[1..7] of integer;

r,Reg,Grm,j,i,n,k,l,lll:integer;

Kbp1,ush,pot,rr,Kbp,Kbg,Kbg1,Kbgg,Kbpp,s,h,a,b:real;

y,y1,y2:vector;

Trem,Tpodg,Tpol,Nar,Npvo,LamV,Prem,Pbp:real;

Toj:real;

//AA,lam:massiv;

st:string[2];

stt:string[6];

stt1:string[6];

f,f1,f2,f3:textFile;

fn2,fn1,fn,fn3:string[20];

ff1,ff2,ff3,ff4,ff5,ff6,ff7:text;

ffn:array[1..7] of fft;

procedure lv(x: real; n: integer; a: vector; var b: vector);

var i: integer;

begin

for i:=1 to N do b[i]:=0.0; for i:=1 to n do b[i]:=x*a[i];

end;

procedure sv(n:integer; a,b: vector; var c: vector);

var i,j: integer;

begin

for i:=1 to n do c[i]:=0.0; for i:=1 to n do c[i]:=a[i]+b[i];

end;

procedure tm(n,m: integer; a:massiv; var b:massiv);

var i,j: integer;

begin

for i:=1 to n do for j:=1 to m do b[i,j]:=0.0;

for i:=1 to n do for j:=1 to n do b[i,j]:=a[j,i];

end;

procedure pmv(n,k: integer; a: massiv; b: vector; var c: vector);

var i,j: integer;

begin

for i:=1 to n do c[i]:=0.0;

for i:=1 to n do for j:=1 to n do c[i]:=c[i] +a[i,j]*b[j];

end;

procedure fpr1(n: integer; p: vector; var pp: vector); //n=2; m=4; k=3,6/ begin number with 1;7

begin

//pmv(n,n,lam,p,pp);

pp[1]:=-lam * P[1] + mu* P[2];

pp[2]:= lam * P[1] - (lam + mu)*P[2] + 2* mu* P[3];

pp[3]:= lam * P[2] - (lam + 2* mu) * P[3] + 2* mu* P[4];

pp[4]:= lam * P[3] - (lam + 2* mu) * P[4] + 2* mu*P[5];

pp[5]:= lam * P[4] - (lam + 2* mu) * P[5] + 2* mu*P[6];

pp[6]:= lam * P[5] - (lam + 2* mu) * P[6] + 2* mu*P[7];

pp[7]:= lam * P[6] - (lam + 2* mu) * P[7] + 2* mu*P[8];

pp[8]:= lam * P[7] - 2*mu*P[8];

end;

procedure euler(n: integer; h: real; p:vector; var p1: vector);

var k,k1,k2,k3,k4,pp: vector;

i,j: integer; s: real;

begin

fpr1(n,p,pp);

for i:=1 to 8 do

begin

p1[i]:=p[i]+pp[i]*h;

end;

end;

function step(a:Real;k:Integer):Real;

var i:Integer;

begin

if k=0 then step:=1;

if k=1 then step:=a;

if k>1 then for i:=1 to k-1 do step:=a*a;

end;

function fact(a:Integer):Integer;

var i,t:Integer;

begin

t:=1;

if a>0 then for i:=1 to a do t:= i*t;

fact:=t;

end;

function sum(a:Real;k:Integer):Real;

var i:Integer; s:Real;

begin

for i:=0 to k do

s:=s+step(a,i)/fact(i);

sum:=s;

end;

{********************************************************************************************************}

begin {main}

fn1:='rezult.txt';

assignFile(ff1,fn1); rewrite(ff1);

n:=4;

Lam:=15;

mu:=3;

p[1]:=1.0;

for i:=2 to 7 do

p[i]:=0.0;

//eioaa?e?iaaiea

t:=0.0;

h:=0.01;

Writeln(ff1,'__________________________________________');

for i:=1 to 1000 do

begin

t:=t+h;

euler(n+m+1,h,p,p1);

p:=p1;

//if (t>0.9) then

writeln(ff1,t:10:8,' ',p1[1]:10:8,' ',p1[2]:10:8,' ',p1[3]:10:8,' ',p1[4]:10:8,' ',p1[5]:10:8,' ',

p1[6]:10:8,' ',p1[7]:10:8,' ',p1[8]:10:8);

//readln;

end;

Writeln(ff1,'__________________________________________');

Writeln(ff1,'Aa?iyoiinoe ninoiyiee');

//Po:=1/(sum(lam/mu,n-1)+(step(lam/mu,n-1)/fact(n-1))*((lam/mu/(n-1)-step(lam/mu/(n-1),m+1))/(1-lam/mu/(n-1))));

Po:=1/(sum(lam/(n*mu),n-1)+(step(lam/(n*mu),n)/fact(n-1)/(n-lam/(n*mu))));

//Writeln(ff1,Po:20:10);

for i:=0 to n-1 do

begin

Ps:=(step(lam/(n*mu),i)/fact(i))*Po;

Writeln(ff1,i,Ps:20:10);

end;

for i:=n to n+m do

begin

Ps:=(step(lam/(n*mu),i)/fact(n-1)/step(5,i-n))*Po;

Writeln(ff1,i,Ps:20:10);

end;

Writeln(ff1,'aa?iyoiinou iaee?ey i?a?aae '); Writeln(ff1,( step(lam/(n*mu),3)/fact(2)/(2-lam/(n*mu))*Po ):20:10);

Writeln(ff1,'aa?iyoiinou caiyoinoe anao oceia nenoaiu '); Writeln(ff1,( step(lam/(n*mu),2)/fact(1)/(2-lam/(n*mu))*Po ):20:10);

Writeln(ff1,'n?aaiaa ?enei o?aaiaaiee a nenoaia '); Writeln(ff1,Po*(lam/(n*mu)* sum(lam/(n*mu),5)+step(lam/(n*mu),3)*(2+1-lam/(2*mu))/fact(1)/step(2-lam/(2*mu),2) ):20:10);

Writeln(ff1,'n?aaiyy aeeia i?a?aae '); Writeln(ff1,( Po*step(lam/(n*mu),3)/fact(1)/step(2-lam/(n*mu),2)):20:10);

suma:=0;

for k:=1 to 2 do suma:=suma+k*(step(lam/(n*mu),k)/fact(2-k));

Writeln(ff1,'n?aaiaa ?enei naiaiaiuo oceia'); Writeln(ff1,( suma*Po ):20:10);

Writeln(ff1,'n?aaiaa ?enei caiyouo oceia'); Writeln(ff1,( 2-suma*Po ):20:10);

Writeln(ff1,'n?aaiaa a?aiy i?eaaiey ia?aea ianeo?eaaiey'); Writeln(ff1,( step(lam/(n*mu),2)/(k*mu*fact(1)*step(2-lam/(n*mu),2))*Po ):20:10);

CloseFile(FF1);

end.