Вероятность превышения длиной очереди заданной величины n

Средняя длина очереди

Величина есть интенсивность нагрузки, создаваемой ожидающими вызовами, а - интенсивность потока задержанных вызовов, где каждый задержанный вызов в среднем ждет . Тогда

Средняя длительность ожидания

Средняя длительность ожидания для любого поступившего вызова

Величины и выражены в условных единицах времени.

 

 

Листинг программы :

unit Unit1;

interface

uses

Windows, Messages, Math, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, Series, ComCtrls;

type

TForm1 = class(TForm)

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Chart: TChart;

Series1: TFastLineSeries;

Series2: TFastLineSeries;

Series3: TFastLineSeries;

Label1: TLabel;

Edit1: TEdit;

Label5: TLabel;

Edit2: TEdit;

Button1: TButton;

Button2: TButton;

ListBox1: TListBox;

ListBox2: TListBox;

ListBox3: TListBox;

ListBox4: TListBox;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

 

type

TTList=record

TP:array[1..100] of Extended;

LT:real;

VT:integer;

end;

var

RT :real;

TT:array[1..3] of TTList;

i,j,n:integer;

 

function fact(n : Extended) : Extended;

begin

if n <= 1 then fact := 1

else fact := n * fact(n - 1);

end;

 

function DL(L:Extended; v:Integer):Extended;

var

i,j:Integer;

temp:Extended;

begin

temp:=0;

for j:=0 to v-1 do

temp:=temp+power(L,j)/fact(j);

 

temp:=temp+power(L,v)/((v-L)*fact(v-1));

temp:=power(temp,-1);

DL:=temp*power(L,v)/((v-L)*fact(v-1));

end;

 

function PE(L:real; v:integer; n:integer):Extended;

begin

PE:=power(L/v,n+1)*DL(L,v);

end;

 

procedure PTT(var TS:TTList;RT:Extended);

var

i,j:integer;

temp:Extended;

begin

i:=0;

repeat

i:=i+1;

TS.TP[i]:=DL(TS.LT,TS.VT);

TS.VT:=TS.VT+1;

until (TS.TP[i]<=RT);

TS.VT:=TS.VT-1;

end;

 

procedure TForm1.Button2Click(Sender: TObject);

begin

Close;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

Series1.Clear;

Series2.Clear;

Series3.Clear;

 

N:=StrToInt(Edit1.Text);

RT:=StrToFloat(Edit2.Text);

 

TT[1].LT:=(N+1)*10/(N+4);

TT[2].LT:=(N+1)*15/(N+4);

TT[3].LT:=(N+1)*20/(N+4);

 

for I := 1 to 3 do

TT[i].VT:=Round(TT[i].LT)+1;

 

Form1.ListBox1.Items.Clear;

Form1.ListBox2.Items.Clear;

Form1.ListBox3.Items.Clear;

Form1.ListBox4.Items.Clear;

 

Form1.ListBox1.Items.Add(' V Dv(/\) ');

Form1.ListBox2.Items.Add(' V Dv(/\) ');

Form1.ListBox3.Items.Add(' V Dv(/\) ');

 

for I := 1 to 3 do

begin

PTT(TT[i],RT);

for j := 1 to TT[i].VT-Round(TT[i].LT) do

begin

case i of

1:begin

Form1.ListBox1.Items.Add('[/\1]+'+IntToStr(j)+'

'+FloatToStr(TT[i].TP[j]));

Series1.Add(TT[i].TP[j],'[/\]+'+IntToStr(j));

end;

2:begin

Form1.ListBox2.Items.Add('[/\2]+'+IntToStr(j)+'

'+FloatToStr(TT[i].TP[j]));

Series2.Add(TT[i].TP[j],'[/\]+'+IntToStr(j));

end;

else begin

Form1.ListBox3.Items.Add('[/\3]+'+IntToStr(j)+'

'+FloatToStr(TT[i].TP[j]));

Series3.Add(TT[i].TP[j],'[/\]+'+IntToStr(j));

end;

end;

end;

end;

With Form1.ListBox4.Items do

begin

Add(#13#10);

Add('вер. прев. очеред. трёх выз.: '+FloatToStr(PE(TT[1].LT,

Round(1.5*TT[1].LT),3

)));

 

Add('вер. ожид. выз.: '+FloatToStr(DL(TT[1].LT,Round(1.5*TT[1].LT)

)));

Add('сред. врем. ожид. для зад. выз.: '

+FloatToStr(1/(Round(1.5*TT[1].LT)-TT[1].LT)

));

Add('сред. врем. ожид. для люб. выз.: '+FloatToStr(DL(

TT[1].LT,Round(1.5*TT[1].LT))/(

Round(1.5*TT[1].LT)-TT[1].LT)

));

Add('сред. длин. очереди: '+FloatToStr(TT[1].LT*DL(

TT[1].LT,Round(1.5*TT[1].LT))/(

Round(1.5*TT[1].LT)-TT[1].LT)

));

end;

end;

end.

 

Результаты работы программы :

таблица зависимости DV( ) для L1:

 

таблица зависимости DV( ) для L2:

 

 

таблица зависимости DV( ) для L3:

 

график зависимости DV( ):

 

 

таблица характеристик для и V=[1.5 L]: