Вероятность превышения длиной очереди заданной величины 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]: