Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Задание 4. Матричные игры






 

Определить нижнюю и верхнюю цену игры, заданной платёжной матрицей, где 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;

 

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.015 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал