Метод Гурвица
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_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_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 Результат работы программы
-----------------------
Игрок А
Игрок В
Стратегии
игрок А
Стратегии
игрок В
УС
СУ
ОУ
f(t)
U(t)
Продолжение рис 2.4.2
из стр.
из стр.
63
62
Оптимальная стратегия, max выигрыш игрока В
61
Оптимальная стратегия, max выигрыш игрока А
60
Игрока В разрешит конфликтную ситуацию
Нет
59
Нет
да
Игрока А разрешит конфликтную ситуацию
56
58
max_a>max_b
max_a=max_b
да
57
55
Цикл 14
54
Цикл 15
F
E
53
H_b:=[pic]
Седловые точки
Выход
Продолжение рис. 2.4.2
к стр.
к стр.
из стр.
F
44
E
V_b[i,j]>max_b
да
52
51
Max_b:=V_b[pic]
48
47
50
49
Цикл 15
[pic]
Цикл 14
[pic]
H_B:=1
max_b:=V_b[1,1]
46
Цикл 11
V_b[i,j]:=al[j]*b_m[i]++(1-al[j])*b_b[i]
45
Цикл 13
D
43
Цикл 13
[pic]
Продолжение рис. 2.4.2
к стр.
из стр.
D
42
Цикл 12
C_ b[i,j]> b_b[i,j]
да
41
40
b_m[pic]:=C_ b[pic]
C_ b[i,j]< b_m[i,j]
да
39
38
37
36
35
b_m[pic]:=C_ b[pic]
34
Цикл 12
[pic]
b_b[pic]:=C_b[pic]
b_m[pic]:=C_b[pic]
Цикл 11
[pic]
C
33
Цикл 9
32
Цикл 10
Продолжение рис. 2.4.2
к стр.
из стр.
22
C
31
H_a:=[pic]
V_a[i,j]>max_a
да
30
29
Max_a:=V_ a[pic]
26
25
28
27
Цикл 10
[pic]
Цикл 9
[pic]
H_A:=1
max_a:=V_a[1,1]
24
Цикл 6
V_a[i,j]:=al[j]*a_m[i]+ +(1-al[j]) *a_b[i]
B
23
Цикл 7
Продолжение рис. 2.4.2
к стр.
из стр.
21
Цикл 7
[pic]
B
20
Цикл 6
| | скачать работу |
Метод Гурвица |