Анализ очередности выполнения запросов в информационно-поисковых системах

Автор: Пользователь скрыл имя, 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

Файлы: 2 файла

содержание.docx

— 20.32 Кб (Открыть, Скачать)

тпр кр.docx

— 195.54 Кб (Скачать)

            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(ListBox1.Items.Count+1)+') '+s)

      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(StringGrid1.Cells[1,0]);

  A[0,2]:=StrToFloat(StringGrid1.Cells[2,0]);

  A[1,2]:=StrToFloat(StringGrid1.Cells[2,1]);

  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(tt,A[i,j]);

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.Caption+toch(tt,W1[i]);

      if i<2 then

        Label3.Caption:=Label3.Caption+'; ';

    end;

  Label3.Caption:=Label3.Caption+');';

  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]:=IntToStr(X[i-1,j-1]);

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]:=FloatToStr(sred);

    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]:=FloatToStr(med/2);

    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,ffFixed,4,3);

  Hi:=W*36;

  Label8.Caption:=FloatToStrF(Hi,ffFixed,4,3);

  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]:=IntToStr(i)+' эксп.';

      for j:=1 to 10 do

        StringGrid1.Cells[j,0]:=IntToStr(j)+' об.';

    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]-X[j,k]),2);

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*(power(N,2)-1));

        Tkr:=1.86*sqrt((1-power(Rs,2))/(N-2));

        if Rs < Tkr then

          ListBox2.Items.Add(IntToStr(i+1)+' : '+IntToStr(j+1)+'  Rk = '+FloatToStrF(Rs,ffFixed,4,3)+' Tkr = '+FloatToStrF(Tkr,ffFixed,4,3)+'  не удовл. на лямбда')

        else

          ListBox2.Items.Add(IntToStr(i+1)+' : '+IntToStr(j+1)+'  Rk = '+FloatToStrF(Rs,ffFixed,4,3)+'  Tkr = '+FloatToStrF(Tkr,ffFixed,4,3)+'  удовл. на лямбда')

      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*(N-1));

        Zkr:=1.64*sqrt((2*(2*N+5))/(9*N*(N-1)));

        if Rk < Zkr then

          ListBox1.Items.Add(IntToStr(i+1)+' : '+IntToStr(j+1)+'  Rk = '+FloatToStrF(Rk,ffFixed,4,3)+'  не удовл. на лямбда')

        else

          ListBox1.Items.Add(IntToStr(i+1)+' : '+IntToStr(j+1)+'  Rk = '+FloatToStrF(Rk,ffFixed,4,3)+'  удовл. на лямбда')

      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.


Информация о работе Анализ очередности выполнения запросов в информационно-поисковых системах