Студентам > Рефераты > Метод Гурвица
Метод ГурвицаСтраница: 5/6
Panel3: TPanel;
Panel4: TPanel;
Label17: TLabel;
Label18: TLabel;
Panel5: TPanel;
Label19: TLabel;
Label20: TLabel;
Label21: TLabel;
Label22: TLabel;
Label23: TLabel;
RadioButton7: TRadioButton;
RadioButton8: TRadioButton;
Button3: TButton;
Panel6: TPanel;
Label1: TLabel;
BitBtn1: TBitBtn;
Label15: TLabel;
procedure WWod_koef(Sender: TObject);
procedure W_Rezultat(Sender: TObject);
procedure W_tabliza_A(Sender: TObject);
procedure W_tabliza_B(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
form1: Tform1;
C_B,C_A:array [1..10,1..10] of integer; { платёжная матрица игрока А,В}
a_b,a_m,b_b,b_m:array[1..10] of integer; {наибольший наименьший выигрыш иг. А,В}
al:array[1..10] of
real; {массив альфа}
V_A,V_B:array[1..10,1..10]of real; {Расчётные
выигрыши иг. А,В }
max_a:real; { Наибольший выигрыш игрока А}
max_b:real; { Наибольший выигрыш игрока В}
H_a:integer; { Оптимальная стратегия игрока А}
h_b:integer; { Оптимальная стратегия игрока В}
m:Integer; { Количество стратегий игрока А}
n:Integer; { Количество стратегий игрока В}
k:Integer; { Количество статистических
коэффициентов}
I,J:Integer;
implementation
uses Unit2;
{$R *.DFM}
{ вывод коэф., матрицы С_А}
procedure WW_A;
begin
form1.c_s.Colcount:=n+1;
form1.c_s.Rowcount:=m+1;
form1.tabliza.Rowcount:=m+1;
for i :=1 to m do
begin
form1.tabliza.Cells[0,i]:='A'+intToStr(i);
form1.C_S.Cells[0,i]:='A'+intToStr(i);
for j :=1 to n do
begin
form1.C_S.Cells[j,0]:='B'+intToStr(j);
form1.C_S.Cells[j,i]:=intToStr(C_A[i,j]);
end;
end;
with form1 do
begin
label23.caption:='A';
tabliza.cells[1,0]:='a_малая';tabliza.cells[2,0]:='a_большая';
end;
end;
{ Вывод наибольший, наименьший, расчётный выигрыш матрицы
V_А}
procedure WW_A1;
begin
WW_A;
With form1.tabliza Do
begin
for j:=1 to n do
begin
cells[1,j]:=intToStr(a_m[j]);
cells[2,j]:=intToStr(a_b[j]);
end;
for i:=1 to m do
for j:=1 to k do
cells[j+2,i]:=floatToStr(V_a[i,j]);
end;
end;
{событие на нажатие кнопки 'Ввод коэф..'}
procedure TForm1.WWod_koef(Sender: TObject);
begin
try
m:=strToint(edit1.text);
n:=strToint(edit2.text);
k:=strToint(edit3.text);
except
showMessage('Ошибочная запись числа ');
end;
try
Form2 := TForm2.Create(self);
tabliza.Colcount:=3+k;
Form2.ShowModal;
finally
Form2.Close;
WW_a;
end;
end;
{событие на нажатие кнопки 'вывод результата'}
procedure Tform1.W_Rezultat(Sender: TObject);
begin
Panel6.Visible:=false;
panel3.Visible:=true;
{Вводим из
таблицы C_A в матрицу игрока А -
C_A}
{ C_S[столбец,строка] }
for i :=1 to m
do {по столбцам m таблицы C_S}
for j :=1 to n do {по строкам n таблицы C_S}
C_a[i,j]:=StrToInt(C_S.Cells[j,i]);
{Создаём
матрицу C_B путём транспонирования матрицы игрока А}
for i :=1 to n do
for j :=1 to m do
C_b[i,j] :=StrToInt(C_S.Cells[i,j]);
{расчет наименьших и наибольших выигрышей игрока
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);
|