Автор работы: Пользователь скрыл имя, 07 Октября 2013 в 21:35, дипломная работа
В настоящее время инженеры, проектирующие и эксплуатирующие автоматизированные информационные системы (АИС), сталкиваются с рядом проблем, связанных со все возрастающей сложностью этих систем, ужесточением требований к их характеристикам, необходимостью учета целого комплекса условий, определяющих процесс функционирования системы.
Введение 2
Постановка задачи 3
Оптимизация программы "диспетчер-кодировщик" в блоке предварительной обработки запросов. 3
Определение характера и интенсивности информационного потока, поступающего на вход блока выполнения запросов. 4
Оптимизация работы БВЗ. 5
Исходные данные 6
Решение 7
Оптимизация программы «Диспетчер-Кодировщик» в блоке предварительной обработки запросов. 7
Определение характера и интенсивности информационного потока, поступающего на вход блока запросов. 11
Оптимизация работы блока выполнения запросов. 12
Заключение 15
Список использованной литературы 16
Интерфейс программы 17
Листинг программы 18
(Множество допустимых решений {1,2,3,4,5,6,7,8,9,10})
Кол-во каналов n |
D(n) |
Q(n) |
D(n)/ Dmax |
1 |
645,52579 |
0,1455 |
0,54772 |
2 |
1022,88169 |
0,29016 |
0,8679 |
3 |
1178,57647 |
0,43154 |
1 |
4 |
1163,63188 |
0,56531 |
0,98732 |
5 |
1037,92631 |
0,68574 |
0,88066 |
6 |
859,33383 |
0,78713 |
0,72913 |
7 |
668,22719 |
0,86578 |
0,56698 |
8 |
479,72827 |
0,92148 |
0,40704 |
9 |
289,87136 |
0,95738 |
0,24595 |
10 |
88,68203 |
0,97848 |
0,07525 |
В множестве допустимых решений
выделим подмножество П - множество
парето-оптимальных решений. Решение
х принадлежит множеству
При помощи программы было получено множество Парето. (Парето-оптимальное множество {3,4,5,6,7,8,9,10})
В него не вошли точки W1 = (645,52579; 0,1455) и W2 = (1022,88169; 0,29016):
Кол-во каналов n |
D(n) |
Q(n) |
D(n)/ Dmax |
3 |
1178,57647 |
0,43154 |
1 |
4 |
1163,63188 |
0,56531 |
0,98732 |
5 |
1037,92631 |
0,68574 |
0,88066 |
6 |
859,33383 |
0,78713 |
0,72913 |
7 |
668,22719 |
0,86578 |
0,56698 |
8 |
479,72827 |
0,92148 |
0,40704 |
9 |
289,87136 |
0,95738 |
0,24595 |
10 |
88,68203 |
0,97848 |
0,07525 |
Множество Парето содержит более одного элемента, следовательно необходимо среди этих элементов выбрать наиболее оптимальный, для получения которого можно применить методы скаляризации векторного критерия W (метод линейной свертки и метод идеальной точки).
Метод линейной свертки:
Используя ту же программу, получили:
S(n) | |
3 |
624,84835 |
4 |
616,99059 |
5 |
550,42324 |
6 |
455,81688 |
7 |
354,56733 |
8 |
254,68908 |
9 |
154,08179 |
10 |
47,46136 |
- есть искомое оптимальное значение n=nопт числа модулей, непосредственно занятых обслуживанием запросов. Т.е. это будет третья точка W3(1178,57647; 0,43154).
Метод идеальной точки:
Ищем такое оптимальное решение - точку в пространстве критериев, которая находилась бы ближе всего к идеальной точке (1;1): (Wопт , W*) = Smin
То решение, для которого величина r окажется наименьшей в методе идеальной точки, и будет искомым оптимальным значением n=nопт числа модулей, непосредственно занятых обслуживанием запросов.
Используя ту же программу, получили:
S(n) | |
3 |
0,56846 |
4 |
0,43487 |
5 |
0,33616 |
6 |
0,34451 |
7 |
0,45334 |
8 |
0,59814 |
9 |
0,75525 |
10 |
0,925 |
Методом идеальной точки получили nопт = arg min {S(n)} = 5.
Т.е. это точка W5(1037,92631; 0,68574).
В результате применения методов идеальной точки и метода линейной свертки были получены два разных решения. Оставляем эти два значения для предъявления заказчику этого исследования (ЛПР), который должен сделать окончательный выбор, руководствуясь дополнительными, внешними по отношению к данной задаче соображениями.
Зелёными квадратиками показаны точки, входящие в Парето-оптимальное множество (т. 3-10).
Красными квадратиками показаны точки, невходящие в Парето-оптимальное множество (т. 1-2).
Жёлтым кружочком показана лучшая точка, полученная методом линейной свёртки (т. 3).
Черным квадратиком показана лучшая точка, полученная методом идеальной точки (т. 5)
Черным квадратиком показана идеальная точка (1;1) – она соединена с лучшей точкой,полученной методом идеальной точки (т. 5)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, ExtCtrls, XPMan, Grids, TeEngine, Series,
TeeProcs, Chart;
type
TForm1 = class(TForm)
Edit1: TLabeledEdit;
UpDown1: TUpDown;
Button1: TButton;
SG1: TStringGrid;
Button2: TButton;
Chart1: TChart;
SG2: TStringGrid;
SG3: TStringGrid;
Label1: TLabel;
SG4: TStringGrid;
Label2: TLabel;
Button3: TButton;
Button4: TButton;
pom: TPointSeries;
Button5: TButton;
mls: TPointSeries;
graf: TPointSeries;
mit: TLineSeries;
Button6: TButton;
Shape1: TShape;
Shape2: TShape;
Shape3: TShape;
Shape4: TShape;
Shape5: TShape;
Shape6: TShape;
Shape7: TShape;
Shape8: TShape;
Shape9: TShape;
Shape10: TShape;
Timer1: TTimer;
Label3: TLabel;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
function fact(x:integer):real;
function _t(x:real):string;
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
lambda, f1,f2,f3,f4, d,e1,e2, T, N,M, Rd,Rq, uy, P,R, Pnm, p0, Ro, k, Ksr:real;
Lsys, Wsys, hiN, Locher, Dmax:real;
nvar,imin:integer;
Doh, Qops, Sn:array [1..10] of real;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses math;
procedure TForm1.Button1Click(Sender: TObject);
var i,j,imax, index:integer;
max,per,min:real;
begin
graf.Clear;
pom.Clear;
mls.Clear;
mit.Clear;
imax:=0;
nvar:=strtoint(edit1.Text);
Dmax:=0;
for i:=0 to 10 do
for j:=1 to 10 do
begin
sg1.Cells[i,j]:='';
sg2.Cells[i,j]:='';
sg3.Cells[i,j]:='';
sg4.Cells[i,j]:='';
end;
F1:=nvar;
F2:=0.001*nvar;
F3:=0.1*nvar;
F4:=0.01*nvar;
k:=10;
uy:=0.93+F2;
if uy>1 then
R:=1
else
R:=k*power(uy,k - 1)*(1 -(k - 1)/k*uy);
P:=1-R;
lambda:=R*100;
T:=0.08; //время
ro:=lambda*T;
d:=100+F3; //доход за один запрос
e1:=1000+F3; //штраф за единицу времени
e2:=50+F3; //убытки от неучастия в течение единицы времени одного модуля
n:=10; //количество каналов
m:=3; //количество заявок в очереди
Rd:=0.5+F4;
Rq:=1-Rd;
for i:=1 to 10 do
begin
hiN:=ro/i;
p0:=1;
for j:=1 to i do
p0:=p0 + power(ro,j)/fact(j);
p0:=1/(p0 + power(ro,i + 1)*(1 - power(hiN,m))/(i*fact(i)*(1 - hiN)));
pnm:= p0*power(ro,i + m)/(power(i,m)*fact(i));
Qops[i]:=1-pnm;
Ksr:=ro*(1-pnm);
Locher:=Power(ro,i + 1)*p0*(1 - (m + 1)*Power(hiN,m) + m*Power(hiN,m + 1))/
(i*fact(i)*(1 - hiN)*(1 - hiN));
Lsys:=Locher+Ksr;
Wsys:=lsys/lambda;
Doh[i]:=(d-e1*Wsys)*lambda*
SG1.Cells[0,i]:=IntToStr(i);
SG1.Cells[1,i]:=_t(Doh[i]);
SG1.Cells[2,i]:=_t(Qops[i]);
end;
max:=-10000000;
for i:=1 to 10 do
if max<strtofloat(sg1.Cells[1,i]) then
begin
max:=strtofloat(sg1.Cells[1,i]
Dmax:=max;
imax:=i;
end;
for i:=1 to 10 do
begin
per:=strtofloat(sg1.Cells[1,i]
sg1.Cells[3,i]:=_t(per);
end;
index:=1;
for i:=1 to 10 do
if i>=imax then
begin
SG2.Cells[0,index]:=SG1.Cells[
SG2.Cells[1,index]:=SG1.Cells[
SG2.Cells[2,index]:=SG1.Cells[
inc(index);
end;
max:=-1000000;
for i:=imax to 10 do
begin
Sn[i]:=rd*Doh[i]+rq*Qops[i];
sg3.Cells[0,i-imax+1]:=sg1.
sg3.Cells[1,i-imax+1]:=_t(Sn[
if max<Sn[i] then
begin
max:=Sn[i];
imax:=i;
end;
if sg3.Cells[0,i-imax+1]='10' then break;
end;
label1.Caption:='Метод линейной свертки: точка '+inttostr(imax);
for i:=imax to 10 do
begin
if strtofloat(sg1.Cells[0,i])<=10 then
begin
sn[i]:=sqrt(sqr(1-strtofloat(
sg4.Cells[0,i-imax+1]:=_t(i);
sg4.Cells[1,i-imax+1]:=_t(sn[
end
else
break;
end;
min:=1000000;
imin:=0;
for i:=imax to 10 do
if min>strtofloat(sg4.Cells[1,i-
begin
min:=strtofloat(sg4.Cells[1,i-
imin:=i;
end;
label2.Caption:='Метод идеальной точки: '+inttostr(imin);
button2.Enabled:=true;
button3.Enabled:=true;
button4.Enabled:=true;
button5.Enabled:=true;
end;
function TForm1.fact(x: integer): real;
var i, per:integer;
begin
per:=1;
for i:=1 to x do
per:=per*i;
fact:=per;
end;
procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
for i:=1 to 10 do
graf.AddXY(strtofloat(sg1.
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
sg1.Cells[0,0] := 'n';
sg1.Cells[1,0] := 'D(n)';
sg1.Cells[2,0] := 'Q(n)';
sg1.Cells[3,0] := 'D(n)/Dmax';
sg2.Cells[0,0] := 'n';
sg2.Cells[1,0] := 'D(n)';
sg2.Cells[2,0] := 'D(n)/Dmax';
sg3.Cells[0,0] := 'n';
sg3.Cells[1,0] := 'S(n)';
sg4.Cells[0,0] := 'n';
sg4.Cells[1,0] := 'S(n)';
end;
function TForm1._t(x: real): string;
//var per:string;
begin
//per:=floattostr(x);
_t:=FormatFloat('0.#####',x)
end;
procedure TForm1.Button3Click(Sender: TObject);
var index, i:integer;
begin
pom.Clear;
index:=strtoint(sg3.Cells[0,1]
for i:=index to 10 do
pom.AddXY(strtofloat(sg1.
end;
procedure TForm1.Button4Click(Sender: TObject);
var index:integer;
begin
mls.Clear;
index:=strtoint(sg3.Cells[0,1]
mls.AddXY(strtofloat(sg1.
end;
procedure TForm1.Button5Click(Sender: TObject);
var index:integer;
begin
mit.Clear;
mit.AddXY(strtofloat(sg1.
mit.AddXY(1,1);
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
form1.Close;
end;
end.
Информация о работе Оптимизация программы "диспетчер-кодировщик"