Материал: 27_Карныгин_Владимир_01

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Теория игр и исследование операций.

Отчет по лабораторной работе №1.

Задание 1.

Игроки А и В записывают цифры 1 и 2. Игра состоит в том, что, кроме своей цифры каждый игрок записывает еще и ту цифру, которую по его мнению, записал соперник. Если оба игрока угадали или оба ошиблись, то партия заканчивается вничью; если же угадал только один, то он получает столько очков, какова сумма записанных им цифр.

Реализация:

function res = game(mode)

if (strcmp(mode,'matrix') == 1)

a1 = 1:2;

A = zeros(numel(a1)^2);

for i = 1:numel(a1)

for j = 1:numel(a1)

A((i-1)*2 + j,1:2) = [a1(i) a1(j)];

end

end

B = A;

PayMatrix = zeros(numel(A(:,1)));

for i = 1:numel(a1)^2

for j = 1:numel(a1)^2

PayMatrix(i,j) = sud(A(i,:),B(j,:));

end

end

res = PayMatrix;

PayMatrix

return

end

N = input('Enter number of games: ');

disp(sprintf('------------------------------------------------------------------------------------'));

disp(sprintf('- - - - -'));

disp(sprintf('- N - Player A - - Player B -'));

disp(sprintf('- - - - -'));

disp(sprintf('------------------------------------------------------------------------------------'));

disp(sprintf('- - - - -'));

if ( strcmp(mode,'manual') == 1)

A = zeros(N,2);

B = zeros(N,2);

sumA = 0;

sumB = 0;

for i = 1:N

A(i,1:2) = input('Player A: ');

clc;

B(i,1:2) = input('Player B: ');

clc;

disp(sprintf('-%3d- %7s - - %7s -',i,pr(A(i,:)),pr(B(i,:))));

sumA = sumA + sud(A(i,:),B(i,:));

sumB = sumB - sud(A(i,:),B(i,:));

end

elseif ( strcmp(mode,'automatic') == 1)

A = randint(N,2,[1 2]);

B = randint(N,2,[1 2]);

sumA = 0;

sumB = 0;

for i = 1:N

disp(sprintf('-%3d- %7s - - %7s -',i,pr(A(i,:)),pr(B(i,:))));

sumA = sumA + sud(A(i,:),B(i,:));

sumB = sumB - sud(A(i,:),B(i,:));

end

end

disp(sprintf('- - - - -'));

disp(sprintf('------------------------------------------------------------------------------------'));

disp(sprintf('- - - - -'));

disp(sprintf('-SUM- %7d - - %7d -',sumA,sumB));

disp(sprintf('- - - - -'));

disp(sprintf('------------------------------------------------------------------------------------'));

end

function res = pr(A)

res = sprintf('(%2d,%2d)',A(1),A(2));

end

function res = sud(A,B)

if A(2)==B(1) & B(2)==A(1)

res = 0;

elseif A(2)~=B(1) & B(2)~=A(1)

res = 0;

elseif A(2)==B(1) & B(2)~=A(1)

res = sum(A);

else

res = -sum(B);

end

end

Пример вызова:

game('manual')

Формат входных данных:

mode – параметр, регулирующий режим работы программы:

'matrix' – соответствует выводу платежной матрицы для данной игры;

'manual' – игра двух игроков;

'automatic' – симуляция игры двух игроков (не требует ввода с клавиатуры)

Результаты:

>> game('automatic')

Enter number of games: 23

------------------------------------------------------------------------------------

- - - - -

- N - Player A - - Player B -

- - - - -

------------------------------------------------------------------------------------

- - - - -

- 1- ( 1, 1) - - ( 2, 2) -

- 2- ( 2, 2) - - ( 2, 2) -

- 3- ( 2, 1) - - ( 2, 2) -

- 4- ( 2, 2) - - ( 1, 1) -

- 5- ( 1, 1) - - ( 2, 1) -

- 6- ( 2, 2) - - ( 1, 1) -

- 7- ( 2, 1) - - ( 1, 2) -

- 8- ( 1, 1) - - ( 1, 1) -

- 9- ( 1, 1) - - ( 1, 2) -

- 10- ( 1, 2) - - ( 2, 2) -

- 11- ( 2, 1) - - ( 1, 2) -

- 12- ( 1, 1) - - ( 2, 1) -

- 13- ( 2, 2) - - ( 1, 1) -

- 14- ( 1, 2) - - ( 2, 1) -

- 15- ( 2, 2) - - ( 1, 2) -

- 16- ( 1, 2) - - ( 2, 1) -

- 17- ( 2, 1) - - ( 2, 2) -

- 18- ( 2, 2) - - ( 2, 1) -

- 19- ( 2, 2) - - ( 1, 1) -

- 20- ( 2, 1) - - ( 1, 1) -

- 21- ( 2, 2) - - ( 1, 1) -

- 22- ( 1, 1) - - ( 2, 2) -

- 23- ( 1, 1) - - ( 1, 2) -

- - - - -

------------------------------------------------------------------------------------

- - - - -

-SUM- -3 - - 3 -

- - - - -

------------------------------------------------------------------------------------

Платежная матрица:

>> game('matrix')

PayMatrix =

0 2 -3 0

-2 0 0 3

3 0 0 -4

0 -3 4 0

Задание 2.

Конкурирующие фирмы А и В производят однородный сезонный товар, пользующийся спросом в течении n единиц времени. Доход от продажи товара в единицу времени составляет C ден. ед. Фирма В, будучи более состоятельной в ходе конкурентной борьбы стремиться вытеснить фирму А с рынка сбыта, способствуя своими действиями минимизации ее дохода, не считаясь при этом с временными потерями части своего дохода в надежде наверстать упущенное в будущем. Действующее законодательство не позволяет использовать для этого заведомо занижение цены на товар(прибегать к демпинговым ценам). Единственным допустимым способом достижения своей цели для фирмы В (как и для фирмы А в целях защиты своих интересов на рынке сбыта) остается повышение качества товара и надлежащий выбор момента времени поставки его на рынок сбыта. Уровень спроса на товар зависит от его качества, и в данный момент реализуется товар, качество которого выше. Повышение же качества требует дополнительных затрат времени на совершенствование технологии его изготовления и переналадку оборудования. Поэтому будем предполагать, что качество товара тем выше, чем позже он поступает на рынок.

Реализация:

function game2(mode)

C = 100;

n = 5;

if (strcmp(mode,'matrix') == 1)

A = 1:n;

B = 1:n;

for i = 1:n

for j = 1:n

[mn, idx] = min([A(i),B(j)]);

Delta(i,j) = abs(A(i) - B(j))*(-1)^(idx+1)*C;

sm(i,j) = (n-(A(i)+B(j) - mn)+1)*C*(-1)^(idx);

PayMatrix(i,j) = Delta(i,j) + sm(i,j);

if (A(i)==B(j))

PayMatrix(i,j) = 0;

end

end

end

PayMatrix

return;

end

Number = input('Number of games = ');

hello;

if (strcmp(mode,'manual') == 1)

for i = 1:Number

A(i) = input('Player A: ');

clc;

B(i) = input('Player B: ');

clc;

end

end

if (strcmp(mode,'automatic') == 1)

A = randint(1,Number,n) + 1;

B = randint(1,Number,n) + 1;

end

for i = 1:Number

show(A(i),B(i));

[mn, idx] = min([A(i),B(i)]);

Delta(i) = abs(A(i) - B(i))*(-1)^(idx+1)*C;

sm(i) = (n-(A(i)+B(i) - mn)+1)*C*(-1)^(idx);

if (A(i)==B(i))

Delta(i) = 0;

sm(i) = 0;

end

end

Asum = sum(Delta + sm);

Bsum = sum(-Delta - sm);

its_all(Asum,Bsum);

end

function res = pr(A)

res = sprintf('%7d',A);

end

function show(A,B)

disp(sprintf('-%3d- %7s - - %7s -',i,pr(A),pr(B)));

end

function res = sud(A,B)

if A(2)==B(1) & B(2)==A(1)

res = 0;

elseif A(2)~=B(1) & B(2)~=A(1)

res = 0;

elseif A(2)==B(1) & B(2)~=A(1)

res = sum(A);

else

res = -sum(B);

end

end

function hello

disp(sprintf('------------------------------------------------------------------------------------'));

disp(sprintf('- - - - -'));

disp(sprintf('- N - Player A - - Player B -'));

disp(sprintf('- - - - -'));

disp(sprintf('------------------------------------------------------------------------------------'));

disp(sprintf('- - - - -'));

end

function its_all(a,b)

disp(sprintf('- - - - -'));

disp(sprintf('------------------------------------------------------------------------------------'));

disp(sprintf('- - - - -'));

disp(sprintf('-SUM- %7d - - %7d -',a,b));

disp(sprintf('- - - - -'));

disp(sprintf('------------------------------------------------------------------------------------'));

end

Пример вызова:

game2('manual')

Формат входных данных:

mode – параметр, регулирующий режим работы программы:

'matrix' – соответствует выводу платежной матрицы для данной игры;

'manual' – игра двух игроков;

'automatic' – симуляция игры двух игроков (не требует ввода с клавиатуры)

Результаты:

>> game2('automatic')

Number of games = 23

------------------------------------------------------------------------------------

- - - - -

- N - Player A - - Player B -

- - - - -

------------------------------------------------------------------------------------

- - - - -

- 0- 3 - - 2 -

- 0- 2 - - 3 -

- 0- 4 - - 4 -

- 0- 4 - - 4 -

- 0- 2 - - 2 -

- 0- 1 - - 2 -

- 0- 2 - - 5 -

- 0- 2 - - 1 -

- 0- 3 - - 5 -

- 0- 3 - - 5 -

- 0- 1 - - 4 -

- 0- 2 - - 1 -

- 0- 5 - - 2 -

- 0- 1 - - 2 -

- 0- 5 - - 4 -

- 0- 4 - - 1 -

- 0- 3 - - 4 -

- 0- 3 - - 1 -

- 0- 2 - - 4 -

- 0- 3 - - 3 -

- 0- 5 - - 4 -

- 0- 3 - - 4 -

- 0- 3 - - 5 -

- - - - -

------------------------------------------------------------------------------------

- - - - -

-SUM- 200 - - -200 -

- - - - -

------------------------------------------------------------------------------------