Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Задание 4. Матричные игрыСтр 1 из 2Следующая ⇒
Определить нижнюю и верхнюю цену игры, заданной платёжной матрицей, где k – номер варианта. Используя графическую интерпретацию, найти решение игры. Имея вариант №23, получаем платежную матрицу. Результаты работы программы.
Код основной части программы.
m: Integer; // Общее количество строк n: Integer; // Общее количество столбцов
A: array[1..MaxSize, 1..MaxSize] of Real; // Платежная матрица игры
X: array[1..MaxSize] of Real; // Вероятность стратегии для строки Y: array[1..MaxSize] of Real; // Вероятность стратегии для столбца
Z1: array[1..MaxSize] of Real; // Коэффициенты для итерации Z2: array[1..MaxSize] of Real;
procedure UpDateMatrix;
public end;
var MainForm: TMainForm;
implementation
procedure TMainForm.UpDateMatrix;
var
I: Integer;
begin
for I: = 1 to Matrix.RowCount do begin Matrix.Cells[0, I]: = 'A' + IntToStr(I); end;
for I: = 1 to Matrix.ColCount do begin Matrix.Cells[I, 0]: = 'B' + IntToStr(I); end;
end;
// Процедура поиска наименьшего элемента в массиве
function Min(var Buf; n: Integer): Integer;
var
r: Real; i, Index: Integer;
begin
Index: = 1; r: = TRealArray(Buf)[1];
for i: = 2 to n do begin
if TRealArray(Buf)[i] < r then begin Index: = i; r: = TRealArray(Buf)[i]; end;
end;
Result: = Index;
end;
// Процедура поиска наибольшего элемента в массиве
function Max(var Buf; n: Integer): Integer;
var
r: Real; i, Index: Integer;
begin
Index: = 1; r: = TRealArray(Buf)[1];
for i: = 2 to n do begin
if TRealArray(Buf)[i] > r then begin Index: = i; r: = TRealArray(Buf)[i]; end;
end;
Result: = Index;
end;
procedure TMainForm.FormCreate(Sender: TObject); begin
m: = 3; n: = 2;
UpDateMatrix;
end;
procedure TMainForm.ExitBitBtnClick(Sender: TObject); begin Close; end;
procedure TMainForm.PlayerBChange(Sender: TObject);
var
temp: Integer;
begin
temp: = 0;
try
temp: = StrToInt(PlayerB.Text) + 1;
except Matrix.ColCount: = 2; PlayerB.Text: = '1'; end;
if not ((temp > 1) and (temp < 102)) then begin Matrix.ColCount: = 6; PlayerB.Text: = '5';
m: = 5;
end else begin m: = temp - 1; Matrix.ColCount: = temp; UpDateMatrix; end;
end;
procedure TMainForm.PlayerAChange(Sender: TObject);
var
temp: Integer;
begin
try
temp: = StrToInt(PlayerA.Text) + 1;
except Matrix.RowCount: = 2; PlayerB.Text: = '1'; Exit; end;
if not ((temp > 1) and (temp < 102)) then begin Matrix.RowCount: = 6; PlayerB.Text: = '5'; n: = 5; end else begin n: = temp - 1; Matrix.RowCount: = temp; UpDateMatrix; end;
end;
procedure TMainForm.FindBitBtnClick(Sender: TObject);
var
C1, C2, CSUM, temp: Real; i, j, k: Integer;
begin
temp: = 0;
for i: = 1 to n do for j: = 1 to m do begin
try
if String(Matrix.Cells[j, i]) = '' then begin ShowMessage('Введите значения матрицы! '); Exit; end;
temp: = StrToFloat(String(Matrix.Cells[j, i]));
except ShowMessage('Неправилный формат числа: " ' + String(Matrix.Cells[j, i]) + '" '); Exit; end;
A[i, j]: = temp;
end;
// Решение матрицы
// Обнуляем массивы
FillChar(X, SizeOf(X), 0); FillChar(Y, SizeOf(X), 0); FillChar(Z1, SizeOf(X), 0); FillChar(Z2, SizeOf(X), 0);
k: = 0; i: = 1;
repeat
Inc(k);
for j: = 1 to n do Z1[j]: = Z1[j] + A[i, j]; // Расчет элементов строки
j: = Min(Z1, n); // Поиск наименьшего в строке
Y[j]: = Y[j] + 1; C1: = Z1[j] / k; // Нижняя цена игры
for i: = 1 to m do Z2[i]: = Z2[i] + a[i, j]; // Расчет элементов столбца
i: = Max(Z2, n); // Поиск наибольшего в столбце X[i]: = X[i] + 1; C2: = Z2[i] / K; // Верхняя цена игры CSUM: = (C1 + C2) / 2; // Среднее значение цены игры
until k = IterationCount;
// Определение оптимальных смешанных стратегий
for i: = 1 to m do X[i]: = X[i] / k; // Для строк
for j: = 1 to n do Y[j]: = Y[j] / k; // для столбцов
Memo.Clear;
Memo.Lines.Add('Цена игры: ' + FloatToStr(CSUM)); Memo.Lines.Add('');
for i: = 1 to m do Memo.Lines.Add('P(A'+ IntToStr(i) + ') = ' + FloatToStr(x[i]));
Memo.Lines.Add(''); Memo.Lines.Add('----------'); Memo.Lines.Add('');
for i: = 1 to n do Memo.Lines.Add('P(B'+ IntToStr(i) + ') = ' + FloatToStr(y[i]));
end;
|