M/D/1 №
|
3,09
|
a
|
26
|
b
|
0.12
|
c
|
0.10
|
d
|
15
|
e
|
1.0
|
r
|
98
|
Util
|
15
|
. Лістинг програми
// -
#include <vcl.h>
#pragma hdrstop
#include «Main.h»
// -
#pragma package
(smart_init)
#pragma resource «*.dfm»
// Ініціалізація змінних
TForm1 *Form1;lyambda =
0;ServUtil = 0;MidAnswerT = 0;MidProcWaitT = 0;LineSize = 0;SystemSize = 0;Tq =
0;q = 0;reaching = 0;K = 0;C = 0;Td = 0;
// швидкість надходження елементів
даних в систему
float DataIncomingSpeed
(unsigned int StationsNum, unsigned int IncSpeed)
}
// -
// утилізація системиServerUtilization
(float DataIncSpeed, float MidProcTime)
{(DataIncSpeed *
MidProcTime);
}
// -
// середній час
відповіді
float MidAnswerTime
(float ServerUtil, float MidProcTime)
{(MidProcTime * (2 -
ServerUtil)) /
(2 * (1 - ServerUtil));
}
// -
// середній розмір чергиSizeOfLine (float
ServerUtil)
{(pow (ServerUtil, 2) /
(2 * (1 - ServerUtil)));
}
// -
// середня кількість елементів даних
в системі
float ElementsInSystem
(float LineSz, float ServerUtil)
{(LineSz + ServerUtil);
}
// -
// середній час, який елементи даних очікують обслуговуванняMidProcessWaitingTime
(float ServerUtil, float MidProcTime)
{((ServerUtil *
MidProcTime) / (2 * (1 - ServerUtil)));
}
// -
// стандартне відхилення
qDeltaq (float ServerUtil)
{(1 / (1 - ServerUtil))
* sqrt (ServerUtil + 3 * pow (ServerUtil, 2) / 2 + 5 * pow (ServerUtil, 3) /
6);
}
// -
// стандартне відхилення
TqDeltaTq (float MidProcTime, float ServerUtil)
{(MidProcTime / (1 -
ServerUtil)) * sqrt (ServerUtil / 3 + pow (ServerUtil, 2) / 12);
}
// -
// коефіцієнт ПуасонаPuasonKoef (float
ServerUtil)
{1 / (1 + ServerUtil);
}
// -
// середній час обслуговування для елементів даних в черзіMidProcTimeTd (float MidProcTime, float ServerUtil)
{MidProcTime / (1 -
ServerUtil);
}
// -
// відсоток завантаження до досягнення насиченості сервераReachStateProcentage
(float MidProcTime, float EventsCount, float MaxAnswerTime)
{(1 - (MidProcTime * log
(100 / (100 - EventsCount)) / MaxAnswerTime)) * 100;
}
// -
__fastcall TForm1:TForm1
(TComponent* Owner): TForm(Owner)
{
}
// -
// Обробник кнопки «Розрахунок»__fastcall
TForm1: StartButtonClick (TObject *Sender)
{>Lines->Clear();=
DataIncomingSpeed (WorkStationsEdit->Text. ToInt(),>Text. ToInt());=
ServerUtilization (lyambda, MidProcTimeEdit->Text. ToDouble());(ServUtil
> 1)
ShowMessage («Введено некоректні дані! Утилізація неповинна перевищувати
100%»);
else
{
MidAnswerT = MidAnswerTime (ServUtil, MidProcTimeEdit->Text. ToDouble());
LineSize = SizeOfLine(ServUtil);=
ElementsInSystem (LineSize, ServUtil);= MidProcessWaitingTime (ServUtil,
MidProcTimeEdit->Text.
ToDouble());= ServUtil;= PuasonKoef(ServUtil);= MidProcTimeTd
(MidProcTimeEdit->Text. ToDouble(), ServUtil);= Deltaq(ServUtil);= DeltaTq
(MidProcTimeEdit->Text. ToDouble(), ServUtil);= ReachStateProcentage
(MidProcTimeEdit->Text. ToDouble(),>Text. ToDouble(),>Text.
ToDouble());->Lines->Add((AnsiString) «Швидкість
надходження елементів даних в систему:» + FloatToStrF (lyambda, ffFixed, 6, 1) + «елементів/сек»);
Log->Lines->Add((AnsiString) «Утилізація сервера при обслуговуванні:» + FloatToStrF (ServUtil * 1e2, ffFixed, 4, 2) + «%»);
Log->Lines->Add((AnsiString)
«Функція Ерланга:» + FloatToStrF
(ServUtil, ffFixed, 4, 3));>Lines->Add((AnsiString) «Коефіцієнт Пуасона:» + FloatToStrF
(K, ffFixed, 4, 3));>Lines->Add((AnsiString) «Середній час відповіді:» +
FloatToStrF (MidAnswerT, ffFixed, 4, 3) + «c»);
{(((UtilEdit->Text.
ToDouble() * 1e-2) + ServUtil) > 1)>Text = FloatToStrF
(UtilEdit->Text. ToDouble() -
(UtilEdit->Text.
ToDouble() + ServUtil * 100 - 100), ffFixed, 4, 2);temp = MidAnswerTime
(ServUtil + UtilEdit->Text. ToDouble() * 1e-2, MidProcTimeEdit->Text.
ToDouble());->Lines->Add((AnsiString) «Середній час
відповіді при збільшенні утилізації:» + FloatToStrF (temp, ffFixed, 4, 3) + «c»);
}
catch(…)
{
Log->Lines->Add («Середній час відповіді при збільшенні утилізації: сервер
перевантажено»);
}
Log->Lines->Add((AnsiString) «Середній розмір черги:» + FloatToStrF (LineSize, ffFixed, 6, 3) +
«елементів»);
Log->Lines->Add((AnsiString) «Відсоток завантаження до досягнення насиченості сервера:» + FloatToStrF (reaching, ffFixed, 4, 2) + «%»);
Log->Lines->Add((AnsiString) «Середня кількість елементів даних в системі:» + FloatToStrF (SystemSize, ffFixed, 6, 3) +
«елементів»);
Log->Lines->Add((AnsiString) «Середній час, який елементи даних проводять в системі:» + FloatToStrF (MidAnswerT, ffFixed, 4, 3) + «c»);
try
{temp =
MidProcessWaitingTime (ServUtil + UtilEdit->Text. ToDouble() * 1e-2,
MidProcTimeEdit->Text. ToDouble());>Lines->Add((AnsiString) «Середній час, який елементи даних очікують обслуговування, при збільшенні утилізації:» + FloatToStrF (temp,
ffFixed, 4, 3) + «c»);
}
catch(…)
{
Log->Lines->Add («Середній час, який елементи даних очікують обслуговування, при
збільшенні утилізації: сервер перевантажено»);
}
Log->Lines->Add((AnsiString) «Стандартне відхилення q:» + FloatToStrF (q, ffFixed, 4, 2));
Log->Lines->Add((AnsiString) «Середній час обслуговування для елементів даних в черзі (не
включаючи елементи, для яких час очікування дорівнює 0):» + FloatToStrF (Td, ffFixed, 4, 3) + «c»);
Log->Lines->Add((AnsiString) «Стандартне відхилення Tq:» + FloatToStrF (Tq, ffFixed, 4, 3) + «c»);
}
}
// -
4. Результати виконання
програми
Рисунок 1 - результат
виконання програми
мережа програма
ерланг пуасон
Рисунок 2 - результат
виконання програми