Автор: Пользователь скрыл имя, 26 Марта 2012 в 09:15, курсовая работа
Пусть в очереди автоматизированной информационно-поисковой системы находится N ожидающих выполнения запросов. Каждый запрос характеризуется М показателями - определенными требованиями на ресурсы (это могут быть объем занимаемой оперативной памяти, время занятия канала ввода-вывода, частота обращения к информационному фонду и т.д.). Будем считать, что чем больше ресурсы, требуемые для выполнения запроса, тем раньше его надо выполнять.
Постановка задачи…………….…………………………………………3
1.1 Определение по Парето групповой очередности выполнения запросов в АИПС ..........…………………………….3
1.2 Оценка непротиворечивости суждений эксперта при попарном сравнении запросов в шкале отношений .....……3
1.3 Оценка согласованности мнений экспертов при групповой экспертизе ...................................................…5
1.4 Исходные данные…………………………………………………..…….6
2.1 Для первой части………………………………….……….…..….6
2.2 Для второй части…………………………………….……....……7
2.3 Для третьей части…………..…...………………………….……..8
3 Решение поставленной задачи......……………………………….……..9
3.1 Определение по Парето групповой очередности выполнения запросов в АИПС …………………………….9
3.2 Оценка непротиворечивости суждений эксперта при попарном сравнении запросов в шкале отношений ..........…12
3.3 Оценка согласованности мнений экспертов при групповой экспертизе ..............................................…15
4 Выбор программных средств разработки для реализации поставленной задачи............………………....................…20
5 Библиографический список………...…………………………...……..21 Приложения...........................................................……………..……23
StringGrid2.Cells[0,c] := IntToStr(i + 1);
d := 1;
for j := 0 to n do
if flag[j] = 0 then
begin
StringGrid2.Cells[d,c] := IntToStr(b[i,j]);
inc(d);
end;
inc(c);
end;
{поиск парето оптимального
for i := 0 to n do
begin
f2 := true;
for j := 0 to n do
if b[j,i] = 1 then
f2 := false;
if f2 then
if flag[i] = 0 then
begin
s:=s + ' ' + inttostr(i + 1);
flag[i] := 1;
end;
end;
for i := 0 to n do
if flag[i] = 1 then
for j := 0 to n do
b[i,j] := 0;
k:=k+1;
if s<>'' then
ListBox1.Items.Add(IntToStr(
else
Button3.Enabled:=False;
end;
end;
end.
ПРИЛОЖЕНИЕ Б
Программа "Оценка непротиворечивости суждений эксперта при попарном сравнении запросов в шкале отношений".
Листинг программного модуля "Unit1.pas":
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, ExtCtrls, Math;
type
MASS = array [0..2,0..2] of extended;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Label1: TLabel;
Button1: TButton;
Button2: TButton;
Panel1: TPanel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label6: TLabel;
Label5: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure matrXX(X: MASS; var REZ: MASS);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
A, tmp: MASS;
W0, W1: array [0..2] of extended;
tt: real = 0.001;
s_i: real =0.58;
implementation
{$R *.dfm}
function toch(t,x:real):string;
var
len:integer;
begin
len:=Length(FloatToStr(t))-2 ;
result:=FloatToStrF(x, ffGeneral, len, len);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i,j: integer;
begin
with StringGrid1 do
if (Cells[1,0]='') or (Cells[2,0]='') or (Cells[2,1]='') then
begin
ShowMessage('Введите все необходимые данные');
exit;
end;
A[0,1]:=StrToFloat(
A[0,2]:=StrToFloat(
A[1,2]:=StrToFloat(
for i:=0 to 2 do
for j:=0 to i do
if i=j then
A[i,j]:=1
else
A[i,j]:=1/A[j,i];
for i:=0 to 2 do
for j:=0 to 2 do
StringGrid1.Cells[j,i]:=toch(
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[1,0]:='5';
StringGrid1.Cells[2,0]:='6';
StringGrid1.Cells[2,1]:='4';
end;
procedure TForm1.matrXX(X:MASS; var REZ: MASS);
var
i,j,k:integer;
begin
for i := 0 to 2 do
for j := 0 to 2 do
begin
REZ[i,j] :=0;
for k := 0 to 2 do
REZ[i,j] := REZ[i,j] + X[i,k]*X[k,j];
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i,j,k,l:integer;
detA, sledA, soglA, Lambd, i_s, o_s:extended;
begin
k:=1;
l:=1;
detA := 0;
sledA:=0;
W0[0]:=0;
W0[1]:=0;
W0[2]:=0;
//Determinant
for i := 0 to 2 do
for j := 0 to 2 do
detA := detA + A[i,j];
//Sobstvenniy vektor
for i := 0 to 2 do
W1[i]:=(A[i,0] + A[i,1] + A[i,2])/detA;
//Summa diagonalei (sled)
for i := 0 to 2 do
sledA := sledA + A[i,i];
Lambd := power(sledA,1/l);
while (not(abs(W0[0]-W1[0]) <= tt) and not(abs(W0[1]-W1[1]) <= tt) and not(abs(W0[2]-W1[2]) <= tt) ) do
begin
k:=k+1;
l:=l*2;
for i:=0 to 2 do
W0[i]:=W1[i];
matrXX(A,A);
//Determinant
for i := 0 to 2 do
for j := 0 to 2 do
detA := detA + A[i,j];
//Sobstvenniy vektor
for i := 0 to 2 do
W1[i]:=(A[i,0] + A[i,1] + A[i,2])/detA;
//Summa diagonalei (sled)
for i := 0 to 2 do
sledA := sledA + A[i,i];
Lambd := power(sledA,1/l);
end;
i_s:=(Lambd-3)/(3-1);
o_s:=i_s/s_i;
Label2.Caption:='Количество итераций: '+IntToStr(k)+';';
Label3.Caption:='Вектор приоритетов: W(';
for i := 0 to 2 do
begin
Label3.Caption:=Label3.
if i<2 then
Label3.Caption:=Label3.
end;
Label3.Caption:=Label3.
Label4.Caption:='Собственное значение матрицы: '+toch(tt,Lambd)+';';
Label5.Caption:='Отношение согласованности: '+toch(tt,o_s)+';';
if o_s > 0.1 then
Label6.Caption:='ОС > 0.1 матрица несогласована'
else
Label6.Caption:='ОС < 0.1 матрица согласована';
end;
end.
ПРИЛОЖЕНИЕ В
Программа "Оценка согласованностей мнений при групповой экспертизе".
Листинг программного модуля "Unit1.pas":
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, Math;
type
TForm1 = class(TForm)
Label1: TLabel;
StringGrid1: TStringGrid;
VarBox: TComboBox;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
StaticText1: TStaticText;
StringGrid2: TStringGrid;
ListBox1: TListBox;
ListBox2: TListBox;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label6: TLabel;
procedure FormCreate(Sender: TObject);
procedure _Load(v:byte);
procedure _SredRang;
procedure _Median;
procedure _Hi;
procedure _Spirmen;
procedure _Kendel;
procedure VarBoxChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
MASS = array [0..9] of byte;
XMASS = array [0..3,0..9] of byte;
const
_1_10: MASS =(1,2,3,4,5,6,7,8,9,10);
_11_20: MASS =(1,3,5,7,9,2,4,6,8,10);
M: byte = 4;
N: byte = 10;
var
Form1: TForm1;
X: XMASS;
implementation
{$R *.dfm}
procedure TForm1._Load(v:byte);
var
i, j, k: integer;
begin
if v<=10 then
begin
k:=(v-1) mod 10;
for i:=0 to 9 do
begin
if k>=10 then k:=0;
X[0,i]:=_1_10[k];
inc(k);
end;
for i:=1 to 3 do
begin
inc(k);
for j:=0 to 9 do
begin
if k>=10 then k:=k mod 10;
X[i,j]:=_1_10[k];
inc(k);
end;
end;
end
else
begin
k:=v mod 10;
if k mod 2 <> 0 then
k:=(k-1) div 2
else
if k=0 then k:=9 else k:=k div 2 +4;
for i:=0 to 9 do
begin
if k>=10 then k:=0;
X[0,i]:=_11_20[k];
inc(k);
end;
for i:=1 to 3 do
begin
inc(k);
for j:=0 to 9 do
begin
if k>=10 then k:=k mod 10;
X[i,j]:=_11_20[k];
inc(k);
end;
end;
end;
for i:=1 to 4 do
for j:=1 to 10 do
StringGrid1.Cells[j,i]:=
end;
procedure TForm1._SredRang;
var
i, j: byte;
sred: real;
begin
for i:=0 to 9 do
begin
sred:=0;
for j:=0 to 3 do
sred:=sred+X[j,i];
sred:=sred/4;
StringGrid2.Cells[i+1,0]:=
end;
end;
procedure TForm1._Median;
var
i, j, k, min, max, minj, maxj, med: Byte;
begin
for i:=0 to 9 do
begin
med:=0;
min:=11; minj:=0;
max:=0; maxj:=0;
for j:=0 to 3 do
begin
if min > X[j,i] then
begin
min:=x[j,i];
minj:=j;
end;
if max < X[j,i] then
begin
max:=x[j,i];
maxj:=j;
end;
end;
for k:=0 to 3 do
if (k<>minj) and (k<>maxj) then
med:=med+X[k,i];
StringGrid2.Cells[i+1,1]:=
end;
end;
procedure TForm1._Hi;
var
W, S, Hi, sumo: real;
i, j: byte;
begin
S:=0;
for i:=0 to 9 do
begin
sumo:=0;
for j:=0 to 3 do
sumo:=sumo+X[j,i];
sumo:=power((sumo-22),2);
S:=S+sumo;
end;
W:=(12*S)/15840;
Label7.Caption:=FloatToStrF(W,
Hi:=W*36;
Label8.Caption:=FloatToStrF(
if Hi < 16.9 then
StaticText1.Caption:='Согласие не удовлетворительное на заданном уровне значимости.'
else
StaticText1.Caption:='Согласие удовлетворительное на заданном уровне значимости.'
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i, j:byte;
begin
VarBox.Clear;
for i:=1 to 20 do
VarBox.Items.Add(IntToStr(i));
VarBox.ItemIndex:=15;
for i:=1 to 4 do
begin
StringGrid1.Cells[0,i]:=
for j:=1 to 10 do
StringGrid1.Cells[j,0]:=
end;
StringGrid2.Cells[0,0]:='
StringGrid2.Cells[0,1]:='
VarBoxChange(Sender);
end;
function _SUMM(i,j: byte):real;
var
k: byte;
begin
result:=0;
for k:=0 to 9 do
result:=result+power((X[i,k]-
end;
procedure TForm1._Spirmen;
var
Rs, Tkr: real;
i, j: byte;
begin
ListBox2.Clear;
for i:=0 to 2 do
for j:=i+1 to 3 do
begin
Rs:=1-(6*_SUMM(i,j))/(N*(
Tkr:=1.86*sqrt((1-power(Rs,2))
if Rs < Tkr then
ListBox2.Items.Add(IntToStr(i+
else
ListBox2.Items.Add(IntToStr(i+
end;
end;
function _INVERS(_X: XMASS; i,j: byte):byte;
var
k, l: byte;
tmp: array [0..1] of byte;
begin
for k := 0 to 9 do
for l := 0 to 8 do
if _X[i,l] > _X[i,l+1] then
begin
tmp[0] := _X[i,l+1];
tmp[1] := _X[j,l+1];
_X[i,l+1] := _X[i,l];
_X[j,l+1] := _X[j,l];
_X[i,l] := tmp[0];
_X[j,l] := tmp[1];
end;
result:=0;
for k:=0 to 8 do
for l:=k+1 to 9 do
if _X[j,k] > _X[j,l] then
result:=result+1;
end;
procedure TForm1._Kendel;
var
Rk, Zkr: real;
i, j: byte;
begin
ListBox1.Clear;
for i:=0 to 2 do
for j:=i+1 to 3 do
begin
Rk:=1-(4*_INVERS(X,i,j))/(N*(
Zkr:=1.64*sqrt((2*(2*N+5))/(9*
if Rk < Zkr then
ListBox1.Items.Add(IntToStr(i+
else
ListBox1.Items.Add(IntToStr(i+
end;
Label6.Caption:='Zkr = '+FloatToStrF(Zkr,ffFixed,4,3)
end;
procedure TForm1.VarBoxChange(Sender: TObject);
begin
_Load(StrToInt(VarBox.Text));
_SredRang;
_Median;
_Hi;
_Spirmen;
_Kendel;
end;
end.
Информация о работе Анализ очередности выполнения запросов в информационно-поисковых системах