Материал: lab1

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

Лабораторная работа №1

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

Реализуем эту игру в MATLAB.

clc;

A = [0 0]; B = [0 0];

AV = 0; BV = 0;

flag = input('Играем/Матрица? (1/0): ');

while flag == 1

A(1) = input('[Игрок 1] Введи свою цифру: ');

A(2) = input('[Игрок 1] Введи предпологаемую цифру противника: ');

clc

B(1) = input('[Игрок 2] Введи свою цифру: ');

B(2) = input('[Игрок 2] Введи предпологаемую цифру противника: ');

clc

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

win = 'Ничья!';

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

win = 'Ничья!';

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

AV=AV+sum(A);

win = 'Победил [Игрок 1]';

else

BV=BV+sum(B);

win = 'Победил [Игрок 2]';

end

fprintf('\nРезультат: %s\nСчет: %d\n', win, AV-BV);

flag = input('Продолжаем? (1/0): ');

end

fprintf('\nМатрица:\n');

matrix = zeros(4, 4);

val = [[1; 1], [1; 2], [2; 1], [2; 2]];

AV = 0; BV = 0;

for i = 1:4

for j = 1:4

AV = 0; BV = 0;

A = val(:, i); B = val(:, j);

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

matrix(i, j) = 0;

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

matrix(i, j) = 0;

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

AV=AV+sum(A);

else

BV=BV+sum(B);

end

matrix(i, j) = AV-BV;

end

end

disp(matrix)

Работа алгоритма:

  1. Можно выбрать хотим ли мы играть, или хотим увидеть платежную матрицу.

  2. Если играем, то ход делает первый игрок:

  3. Далее программа сама отчищает консоль и ходит второй игрок:

  4. Программа выводит результаты:

  5. Можно вывести платежную матрицу для этой игры:

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

Таким образом стратегии для фирм А и В связаны с выбором моментов i и j предложения своего товара на рынок сбыта. А, выбирая момент i, стремится максимизировать свой доход. В преследует прямо противоположную цель – минимизировать доход игрока А.

Составить платежную матрицу игры для n=5 и С=100.

fprintf('\nМатрица:\n');

matrix = zeros(5, 5);

n = 5; c = 100;

for i = 1:n

for j = 1:n

if i==j

matrix(i, j) = c*(n - i + 1)/2;

elseif i < j

matrix(i, j) = c*(j - i);

else

matrix(i, j) = c*(n - i + 1);

end

end

end

disp(matrix)

Результат:

Задача 3. Для отопления коттеджа в зимний период используется уголь, цена на который зависит от времени года и характера зимы. Летом тонна угля стоит 7.5 ден. ед., в мягкую зиму – 8.5, в обычную – 9.0, а в холодную – 9.5. Расход угля в отопительный сезон полностью определяется характером зимы: на мягкую зиму достаточно 6 тонн, на обычную требуется 7, а в холодную расходуется 8. Арендатор может запасать топливо с лета и, в случае необходимости, пополнять его зимой. Однако продать неиспользованный уголь возможности не будет.

fprintf('\nМатрица:\n');

matrix = zeros(3, 3);

val1 = [6, 7, 8];

val2 = [8.5, 9.0, 9.5];

for i = 1:3

for j = 1:3

if (val1(j)-val1(i)) > 0

matrix(i,j) = -7.5*val1(i) - (val1(j)-val1(i))*val2(j);

else

matrix(i,j) = -7.5*val1(i);

end

end

end

disp(matrix)

Результат:

Задание 4. Используя графическую иллюстрацию решения задачи линейного программирования с ограничениям неравенствами (не менее трех) для двух независимых переменных, составить четыре задачи линейного программирования для следующих случаев:

- решение (максимум и (или) минимум целевой функции) существует и единственно;

- бесчисленное множество решений;

- решение не существует (целевая функция неограниченна на допустимом множестве);

- решение не существует (допустимое множество пусто).

Условия задач записать в трех видах:

- с ограничениями равенствами;

- неравенствами;

- смешанными.

Поскольку ответ Вам известен, получите его средствами MATLAB (команда linprog)

Оформите отчет в редакторе Word с набором формул и рисунками.

  1. Задача максимизации (обращаем функцию). Решение единственно.

f = [-1 -1]';

A = [1 0; 0 1];

b = [5 5]';

lb = [0 0];

[x, fv] = linprog(f,A,b,[],[],lb)

x =

5.0000

5.0000

fv =

-10.0000

  1. Задача максимизации (обращаем функцию). Решений бесконечно много.

f = [-1 -1]';

A = [1 1; 0 0];

b = [3 0]';

lb = [0 0];

[x, fv] = linprog(f,A,b,[],[],lb)

Optimization terminated.

x =

1.5000

1.5000

fv =

-3.0000

  1. Задача максимизации (обращаем функцию). Решений нет.

f = [-1 -1]';

A = [1 -100; 0 0];

b = [0 0]';

lb = [0 0];

[x, fv] = linprog(f,A,b,[],[],lb)

Exiting: One or more of the residuals, duality gap, or total relative error

has grown 100000 times greater than its minimum value so far:

the dual appears to be infeasible (and the primal unbounded).

(The primal residual < TolFun=1.00e-08.)

x =

1.0e+21 *

5.1913

0.0519

fv =

-5.2433e+21

  1. Задача максимизации (обращаем функцию). Решений нет. Многугольник решений с нулевой площадью.

f = [-1 -1]';

A = [0 -1; 1 1];

b = [-6 5]';

lb = [0 0];

[x, fv] = linprog(f,A,b,[],[],lb)

x = linspace(0,5, 500);

hold on; grid on;

plot(x, x.*0,'b')

plot(x.*0, x,'b')

plot(x, -x + 5,'b')

plot(x, x.*0+5,'b')

Exiting: One or more of the residuals, duality gap, or total relative error

has grown 100000 times greater than its minimum value so far:

the primal appears to be infeasible (and the dual unbounded).

(The dual residual < TolFun=1.00e-08.)

x =

0.0000

5.9801

fv =

-5.9801