Метод Гурвица

Страница: 9/10

{расчет наименьших и наибольших выигрышей игрока A}

for i:=1 to m do

begin

a_m[i]:=C_a[i,1]; {массив наименьшии выигрыш}

a_b[i]:=C_a[i,1]; {массив наибольшии выигрыш}

for j :=2 to n do

begin

if C_a[i,j]<a_m[i] then a_m[i]:=C_a[i,j];

if C_a[i,j]>a_b[i] then a_b[i]:=C_a[i,j];

end;

{вычисления расчетных выигрышей игрока A}

for j :=1 to k do

V_a[i,j]:=al[j]*a_m[i]+(1-al[j])*a_b[i];

end;

{нахождения оптимальной стратегии и максимального выигрыша игрока A}

max_a:=V_a[1,1];

H_A:=1;

for i :=1 to m do

for j :=1 to k do

if V_a[i,j]>max_A then

begin

max_a:=V_a[i,j]; { максимальный выигрыш игрока А}

H_a:=i { оптимальная стратегия игрока А}

end;

{расчет наименьших и наибольших выигрышей игрока В}

for i:=1 to n do

begin

b_m[i]:=C_b[i,1]; {массив наименьшии выигрыш}

b_b[i]:=C_b[i,1]; {массив наибольшии выигрыш}

for j:=2 to m do

begin

if C_b[i,j]<b_m[i] then b_m[i]:=C_b[i,j];

if C_b[i,j]>b_b[i] then b_b[i]:=C_b[i,j];

end;

{вычисления расчетных выигрышей игрока В}

for j:=1 to k do

V_b[i,j]:=al[j]*b_m[i]+(1-al[j])*b_b[i];

end;

{нахождения оптимальной стратегии и максимального выигрыша игрока В}

max_b:=V_b[1,1];

H_b:=1;

for i:=1 to n do

for j:=1 to k do

if V_b[i,j]>max_b then

begin

max_b:=V_b[i,j]; { максимальный выигрыш игрока B}

H_b:=i { оптимальная стратегия игрока B}

end;

{ нахождения наибольшего расчетного выигрыша одного из игроков }

if max_a=max_b then Panel6.Visible:=true

else

if max_a>max_b then

begin

Panel4.Visible:=true;

panel5.Visible:=false

end

else

begin

panel5.Visible:=true;

Panel4.Visible:=false

end;

label11.Caption:=FloatToStr(max_a);

label12.Caption:=FloatToStr(H_a);

label14.Caption:=FloatToStr(max_b);

label13.Caption:=FloatToStr(H_b);

WW_A1;

end;

{просмотр для игрока А}

procedure Tform1.W_tabliza_A(Sender: TObject);

begin

WW_A1;

end;

{просмотр для игрока B}

procedure Tform1.W_tabliza_B(Sender: TObject);

begin

with form1 do

Begin

c_s.Colcount:=m+1;

c_s.Rowcount:=n+1;

tabliza.Rowcount:=n+1;

for i:=1 to n do

begin

form1.tabliza.Cells[0,i]:='B'+intToStr(i);

form1.C_S.Cells[0,i]:='B'+intToStr(i);

for j:=1 to m do

begin

form1.C_S.Cells[j,0]:='A'+intToStr(j);

form1.C_S.Cells[j,i]:=intToStr(C_B[i,j]);

end;

end;

label23.caption:='B';

tabliza.cells[1,0]:='b_малая';tabliza.cells[2,0]:='b_большая';

for j:=1 to n do

begin

tabliza.cells[1,j]:=intToStr(b_m[j]);

tabliza.cells[2,j]:=intToStr(b_b[j]);

end;

for i:=1 to n do

for j:=1 to k do

tabliza.cells[j+2,i]:=floatToStr(V_b[i,j]);

end;

end;

end.

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

Grids, StdCtrls, ExtCtrls, Buttons, Menus;

type

TForm2 = class(TForm)

alpfa: TStringGrid;

Panel1: TPanel;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

procedure FormShow(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

i,j:integer;

implementation

uses osnowa;

{$R *.DFM}

{ Ввод козффициентов оптимизмов}

procedure TForm2.FormShow(Sender: TObject);

begin

j:=0;

form1.tabliza.Visible:=true;

alpfa.Colcount:=strToInt(form1.edit3.text);

for i:=0 to alpfa.Colcount do

begin

j:=j+1;

alpfa.Cells[i,0]:='Alpha'+intToStr(i+1);

alpfa.Cells[i,1]:=FloatToStr(al[j]);

end;

end;

procedure TForm2.BitBtn2Click(Sender: TObject);

begin

j:=0;

for i:=0 to alpfa.Colcount do

begin

j:=j+1;

try

al[j]:=strToFloat(trim(alpfa.Cells[i,1]));

form1.tabliza.Cells[3+i,0]:=alpfa.Cells[i,1];

except

showMessage('Ошибочная запись числа : '+alpfa.Cells[i,1]);

end; end;

end;

end.

Приложение 2 Результат работы программы

Реферат опубликован: 8/03/2006