Линейное программирование

Содержание



Содержание

1. Пояснительная записка

1.1.Введение

2. Теоретическая часть

2.1 Элементы теории матричных игр

2.2 Решение матричных игр в чистых стратегиях 

2.3 Решение матричных игр в смешанных стратегиях путём сведения к задаче линейного программирования

	3. Практическая часть

3.1 Построение математической модели задачи 

3.2 Выбор метода решения и привидения задачи к каноническому виду

3.3 Решение задачи путем сведения к задаче линейного программирования

- Блок схема к поставленной задачи

- Программа к поставленной задачи (программный код)

3.4 Анализ результата решения поставленной задачи

4. Вывод курсового проектирования

Заключение

Список основных источников


Пояснительная записка курсового проектирования 



Цель данного курсового проекта - составить план производства требуемой продукции, обеспечивающий максимальную прибыль от выпускаемой продукции, свести данную задачу к задаче линейного программирования, решить её симплекс - методом и составить программу для решения задачи этим методом на ЭВМ. 

1. КРАТКИЙ ОБЗОР АЛГОРИТМОВ РЕШЕНИЯ ЗАДАЧ ДАННОГО ТИПА 1.1 Математическое программирование.

Математическое программирование занимается изучение экстремальных задач и поиском методов их решения. Задачи математического программирования формулируются следующим образом : найти экстремум некоторой функции многих переменных f ( x1, x2, ... , xn ) при ограничениях gi ( x1, x2, ... , xn ) ( bi , где gi - функция, описывающая ограничения, ( - один из следующих знаков ( , ( , ( , а bi - действительное число, i = 1, ... , m. f называется функцией цели ( целевая функция ). Линейное программирование - это раздел математического программирования, в котором рассматриваются методы решения экстремальных задач с линейным функционалом и линейными ограничениями, которым должны удовлетворять искомые переменные. Задачу линейного программирования можно сформулировать так . Найти max [pic] при условии : a11 x1 + a12 x2 + . . . + a1n xn ( b1 ; a21 x1 + a22 x2 + . . . + a2n xn ( b2 ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . am1 x1 + am2 x2 + . . . + amn xn ( bm ; x1 ( 0, x2 ( 0, . . . , xn ( 0 . Эти ограничения называются условиями не отрицательности. Если все ограничения заданы в виде строгих равенств, то данная форма называется канонической. В матричной форме задачу линейного программирования, записывают следующим образом. Найти max cT x при условии A x ( b ; x ( 0 , где А - матрица ограничений размером (m(n), b(m(1) - вектор-столбец свободных членов, x(n ( 1) - вектор переменных, сТ = [c1, c2, ... , cn ] - вектор-строка коэффициентов целевой функции. Решение х0 называется оптимальным, если для него выполняется условие сТ х0 ( сТ х , для всех х ( R(x). Поскольку min f(x) эквивалентен max [ - f(x) ] , то задачу линейного программирования всегда можно свести к эквивалентной задаче максимизации. Для решения задач данного типа применяются методы: 

1) графический; 

2) табличный ( прямой, простой ) симплекс - метод; 

3) метод искусственного базиса; 

4) модифицированный симплекс - метод; 

5) двойственный симплекс - метод. 

1.2 Табличный симплекс - метод Для его применения необходимо, чтобы знаки в ограничениях были вида “ меньше либо равно ”, а компоненты вектора b - положительны. Алгоритм решения сводится к следующему : 

1. Приведение системы ограничений к каноническому виду путём введения дополнительных переменных для приведения неравенств к равенствам. 

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

3. Формируется симплекс-таблица. 

4. Рассчитываются симплекс- разности. 

5. Принимается решение об окончании либо продолжении счёта. 

6. При необходимости выполняются итерации. 

7. На каждой итерации определяется вектор, вводимый в базис, и вектор, выводимый из базиса. Таблица пересчитывается по методу Жордана Гаусса или каким-нибудь другим способом. 

1.3 Метод искусственного базиса. Данный метод решения применяется при наличии в ограничении знаков “ равно ”, “ больше либо равно ”, “ меньше либо равно ” и является модификацией табличного метода. Решение системы производится путём ввода искусственных переменных со знаком, зависящим от типа оптимума, т.е. для исключения из базиса этих переменных последние вводятся в целевую функцию с большими отрицательными коэффициентами, а в задачи минимизации с положительными. Таким образом, из исходной получается новая задача. Если в оптимальном решении задачи нет искусственных переменных, это решение есть оптимальное решение исходной задачи. Если же в оптимальном решении задачи хоть одна из искусственных переменных будет отлична от нуля, то система ограничений исходной задачи несовместна и исходная задача неразрешима. 

1.4 Модифицированный симплекс-метод. В основу данной разновидности симплекс-метода положены такие особенности линейной алгебры, которые позволяют в ходе решения задачи работать с частью матрицы ограничений. Иногда метод называют методом обратной матрицы. В процессе работы алгоритма происходит спонтанное обращение матрицы ограничений по частям, соответствующим текущим базисным векторам. Указанная способность делает весьма привлекательной машинную реализацию вычислений вследствие экономии памяти под промежуточные переменные и значительного сокращения времени счёта. Хорош для ситуаций, когда число переменных n значительно превышает число ограничений m. В целом, метод отражает традиционные черты общего подхода к решению задач линейного программирования, включающего в себя канонизацию условий задачи, расчёт симплекс -разностей, проверку условий оптимальности, принятие решений о коррекции базиса и исключение Жордана Гаусса. Особенности заключаются в наличии двух таблиц - основной и вспомогательной, порядке их заполнения и некоторой специфичности расчётных формул. 

ПОСТАНОВКА ЗАДАЧИ:

	Для производства трёх видов продукции используется три вида сырья. Нормы затрат каждого из видов сырья на единицу продукции данного вида, запасы сырья, а также прибыль с единицы продукции.

Определить план выпуска продукции для получения максимальной прибыли. Оценить каждый из видов сырья, используемых для производства продукции.

Соответственно:

1. Первое с чего начинаем, это строим математическую модель задачи;

	2. Выбираем метод решения задачи и приводим задачу к каноническому виду;

	3. Решаем задачу путём сведения к задаче линейного программирования;

	4. Затем строим блок схему к задачи с написанием программы на языке С++Builder 6.;

	5. Дальнейшим этапом моей работы будет анализ результата решения выполненной мною задачи.



1.1 Введение



1 Математические методы

Математическое моделирование как инструмент познания завоевывает все новые и новые позиции в различных областях деятельности человека. Оно становится главенствующим направлением в проектировании и исследовании новых систем, анализе свойств существующих систем, выборе и обосновании оптимальных условий их функционирования и т.п.

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

Общее в моделях то, что во всех случаях модель в определённом смысле заменяла сам исследуемый объект. Вместо исходного объекта (оригинала) использовалась его модель, модель являлась представлением объекта в некоторой форме, отличной от формы его реального существования.

Модель – это материальный или идеальный объект, который строится для изучения исходного объекта (оригинала) и который отражает наиболее важные качества и параметры оригинала.

Практически во всех науках о природе, живой и неживой, об обществе, построение и использование моделей является мощным орудием познания. Реальные объекты и процессы бывают столь многообразны и сложны, что лучшим способом изучения часто является построение модели, отражающей лишь какую – то часть реальности.

В любом случае модель строится для с целью узнать про объект что – либо новое или сохранить об объекте информацию, которая может стать недоступной в будущем.

Как правило, процесс изучения, связанный с использованием моделей и называемый моделированием не заканчивается созданием одной модели. Построив модель и получив с её помощью, какие – либо результаты, соотносят их с реальностью и если это соотношение даёт неудовлетворительные результаты, то в построенную модель вносят коррективы или даже создают другую модель. В случае достижения хорошего соответствия с реальностью выясняют границы применения модели. Это очень важный вопрос, он решается путём сравнения модели с оригиналом путём сравнения предсказаний, полученных с помощью компьютерной модели. Если это сравнение даёт удовлетворительные результаты, то модель принимают на вооружение, если нет, приходится создавать другую модель.

Математическое моделирование относится к классу знакового моделирования, при этом модели могут создаваться из любых математических объектов, чисел, функций, уравнений, графиков, графов.

Практически во всех науках построение и использование моделей является мощным орудием познания.

В моделировании существует два пути:

Модель может быть похожей копией объекта, выполненной из другого материала и в другом масштабе, с отсутствием ряда деталей.

Модель может отражать реальность более абстрактно – словесным описанием формализованным по каким – то правилам, соотношениям.

Существует следующая классификация абстрактных моделей:

Вербальные

Эти модели используют последовательности предложений на формализованных диалектах естественного языка для описания той или иной области действительности.

Математические

Это очень широкий класс знаковых моделей, основанных на формальных языках над конечными алфавитами, широко использующих те или иные математические методы.

Информационные

Это класс знаковых моделей описывающих информационные процессы в системах самой разнообразной природы.

Граница между вербальными, математическими и информационными моделями может быть проведена весьма условно; можно считать информационные методики подклассом математических моделей.

Математическая модель выражает существенные черты объекта или процесса языком уравнений и других математических средств. Огромный толчок развитию математическому моделированию дало появление ЭВМ, хотя сам метод появился тысячи лет назад.

Понятие «аналитическое» решение и «компьютерное» решение не противостоят друг другу, так как:

Всё чаще компьютеры при математическом моделировании используются не только для численных расчётов, но и для аналитических преобразований.

Результат аналитического исследования часто выражен в столь сложной форме, что при взгляде на неё не складывается восприятие описываемого ею процесса. Эту формулу можно протабулировать, представить графически, проиллюстрировать в динамике, то есть проделать то, что называется визуализацией абстракции.

2 Симплекс метод решения задач линейного программирования 

Симплекс метод - универсальный метод для решения линейной системы уравнений или неравенств и линейного функционала. 

Для привидения системы ограничений неравенств к каноническому виду, необходимо в системе ограничений выделить единичный базис.

Ограничения вида «»- ресурсные ограничения. Справа находится то что мы используем на производстве, слева - то что получаем. При таких ограничения вводят дополнительные переменные с коэффициентом «+1», образующие единичный базис. В целевую функцию эти переменные войдут с коэффициентом «0».

Ограничения вида «=». Часто бывает, что несмотря на то что ограничения имеют вид равенства, единичный базис не выделяется или трудно выделяется. В этом случае вводятся искусственные переменные для создания единичного базиса - Yi. В систему ограничений они входят с коэффициентом «1» , а в целевую функцию с коэффициентом «M», стремящимся к бесконечности (при Fmin - «+M», при Fmax - «-M»).

Ограничения вида «» - Плановые ограничения. Дополнительные переменные (X), несущие определенный экономический смысл - перерасход ресурсов или перевыполнение плана, перепроизводство, добавляются с коэффициентом «-1», в целевую функцию - с коэффициентом «0». А искусственные переменные (Y) как в предыдущем случае.

Алгоритм симплекс метода.

(первая симплекс таблица)

Пусть система приведена к каноническому виду. 



X1+ 				q1,m+1 Xm+1 + …. + q1,m+n Xm+n = h1

X2+			q1,m+1 Xm+1 + …. + q1,m+n Xm+n = h1

X3+		q1,m+1 Xm+1 + …. + q1,m+n Xm+n = h1

……………………………………………………………….

Xm+ qm,m+1 Xm+1 + …. + qm,m+n Xm+n =hm



В ней m базисных переменных, k свободных переменных. m+k=n - всего переменных.



Fmin= C1X1+ C2X2+ C3X3+....+ CnXn



Все hi должны быть больше либо равны нулю, где i=1,2...m. На первом шаге в качестве допустимого решения принимаем все Xj=0 (j=m+1,m+2,...,m+k). При этом все базисные переменные Xi=Hi.

Для дальнейших рассуждений вычислений будем пользоваться первой симплекс таблицей (таблица 3.1).



Таблица 1.

C

 Б

H

C1

C2

…

Cm

 Cm+1

…

Cm+k







X1

X2

…

Xm

Xm+1

…

Xm+k

 C1

C2

C3

:

:

Cm

 X1

X2

X3

:

:

Xm

 h1

h2

h3

:

:

hm

1

0

0

:

:

0

0

1

0

:

:

0

:

:

:

:

:

:

0

0

0

:

:

0

q1,m+1

q2,m+1

q3,m+1

:

:

qm,m+1

:

:

:

:

:

:

q1,m+k

q2,m+k

q3,m+k

:

:

qm,m+k



F=

F0





…

m

m+1

…

m+k



Первый столбец- коэффициенты в целевой функции при базисных переменных.

Второй столбец - базисные переменные.

Третий столбец - свободные члены (hi0).

Самая верхняя строка - коэффициенты при целевой функции.

Вторая верхняя строка - сами переменные, входящие в целевую функцию и в систему ограничений.

Основное поле симплекс метода - система коэффициентов из уравнения.

Последняя строка - служит для того, чтобы ответить на вопрос: «оптимален план или нет».



Для первой итерации F0= ci*hi.



m - оценки они рассчитываются по формуле:

j =  ciqij-cj.

Индексная строка позволяет нам судить об оптимальности плана:

При отыскании Fmin в индексной строке должны быть отрицательные и нулевые оценки.

При отыскании Fmax в индексной строке должны быть нулевые и положительные оценки.

Переход ко второй итерации:

Для этого отыскиваем ключевой (главный) столбец и ключевую (главную) строку.

Ключевым столбцом является тот в котором находится наибольший положительный элемент индексной строки при отыскании Fmin или наименьший отрицательный элемент при отыскании Fmax.

Ключевой строкой называется та, в которой содержится наименьшее положительное частное от деления элементов столбца H на соответствующие элементы ключевого столбца.

На пересечении строки и столбца находится разрешающий элемент.

На этом этапе осуществляется к переходу к последующим итерациям.

Переход к итерациям:

Выводится базис ключевой строки, уступая место переменной из ключевого столбца со своим коэффициентом.

Заполняется строка вновь введенного базиса путем деления соответствующих элементов выделенной строки предыдущей итерации на разрешающий элемент.

Если в главной строке содержится нулевой элемент, то столбец, в котором находиться этот элемент переноситься в последующую итерацию без изменения.

Если в главном столбце имеется нулевой элемент, то строка, в которой он находиться переноситься без изменения в последующую итерацию.

Остальные элементы переносятся по формуле:







Метод искусственного базиса.(Вторая симплекс таблица)

При использовании искусственного базиса необходимо добиваться выхода искусственных переменных из базиса и введение в него независимых переменных. Для этой цели можно также использовать симплекс метод, причем решение распадается на две фазы:

Построение искусственного базиса и оптимизация функции суммы искусственных переменных, т.е. F0=Y1+Y2+…+Yn = 0 (Fmin). Если при этом F0=0, то искусственный базис мы вывели из состава переменных, переходим ко второй фазе – решаем задачу по первой симплекс таблице с действительными переменными. Если же F00, т.е. искусственный базис не выведен из состава переменных – ОЗЛП решений не имеет.

Решение преобразованной системы ограничений с заданной целевой функцией и действительными переменными. При этом столбцами искусственных переменных в симплекс методе пренебрегаем.

Замечания:

При решении задач на max с искусственным базисом следует переходить к решению на min, меняя лишь только целевую функцию: 

Fmax = - Fmin.

При решении ЗЛП с искусственным базисом особое внимание следует обратить на вычисление элементов индексных строк.

a) Для столбцов X вычисление элементов идет по формулам:



j =  qij.

 yi = y1+y2+…+yR.

Hi=F0.



Примечание: только для строк Y.

б) Для столбцов Y работает старая формула:



j =  ciqij-cj.


2. Теоретическая часть



Математические модели

Математическая модель — приближенное описание объекта моделирования, выраженное с помощью математической символики.

Математические модели появились вместе с математикой много веков назад. Огромный толчок развитию математического моделирования придало появление ЭВМ. Применение вычислительных машин позволило проанализировать и применить на практике многие математические модели, которые раньше не поддавались аналитическому исследованию. Реализованная на компьютере математическая модель называется компьютерной математической моделью, а проведение целенаправленных расчетов с помощью компьютерной модели называется вычислительным экспериментом.

Этапы компьютерного математического моделирования изображены на рисунке (1). Первый этап —определение целей моделирования. Эти цели могут быть различными:

модель нужна для того, чтобы понять, как устроен конкретный объект, какова его структура, основные свойства, законы развития и взаимодействия с окружающим миром (понимание);

модель нужна для того, чтобы научиться управлять объектом (или процессом) и определить наилучшие способы управления при заданных целях и критериях (управление);

модель нужна для того, чтобы прогнозировать прямые и косвенные последствия реализации заданных способов и форм воздействия на объект (прогнозирование).

Построение математической модели. На этом этапе происходит переход от абстрактной формулировки модели к формулировке, имеющей конкретное математическое представление. Математическая модель — это уравнения, системы уравнений, системы неравенств, дифференциальные уравнения или системы таких уравнений .

Классификация математических моделей

В основу классификации математических моделей можно положить различные принципы. Можно классифицировать модели по отраслям наук (математические модели в физике, биологии, социологии и т.д.). Можно классифицировать по применяемому математическому аппарату (модели, основанные на применении обыкновенных дифференциальных уравнений, дифференциальных уравнений в частных производных, стохастических методов, дискретных алгебраических преобразований и т.д.). 

Наконец, если исходить из общих задач моделирования в разных науках безотносительно к математическому аппарату, наиболее естественна такая классификация:

● дескриптивные (описательные) модели;

● оптимизационные модели;

● многокритериальные модели;

● игровые модели.




Рис. (1).Блок схема математического моделирования.



2.1 Элементы теории матричных игр



СВЕДЕНИЕ МАТРИЧНОЙ ИГРЫ К ЗАДАЧЕ ЛИНЕЙНОГО ПРОГРАММИРОВАНИЯ

Предположим, что цена игры положительна (u > 0). Если это не так, то согласно свойству 6 всегда можно подобрать такое число с, прибавление которого ко всем элементам матрицы выигрышей даёт матрицу с положительными элементами, и следовательно, с положительным значением цены игры. При этом оптимальные смешанные стратегии обоих игроков не изменяются.

Итак, пусть дана матричная игра с матрицей А порядка m х n. Согласно свойству 7 оптимальные смешанные стратегии х = (х1, ..., хm), y = (y1, ..., yn) соответственно игроков 1 и 2 и цена игры u должны удовлетворять соотношениям.

 

 



Разделим все уравнения и неравенства в (1) и (2) на u (это можно сделать, т.к. по предположению u > 0) и введём обозначения :



 ,  ,



Тогда (1) и (2) перепишется в виде :



, , , ,

, , , .



Поскольку первый игрок стремится найти такие значения хi и, следовательно, pi , чтобы цена игры uбыла максимальной, то решение первой задачи сводится к нахождению таких неотрицательных значений pi , при которых



, . 

Поскольку второй игрок стремится найти такие значения yj и, следовательно, qj, чтобы цена игры uбыла наименьшей, то решение второй задачи сводится к нахождению таких неотрицательных значений qj, , при которых



, . 



Формулы (3) и (4) выражают двойственные друг другу задачи линейного программирования (ЛП).

Решив эти задачи, получим значения pi , qj  и u.Тогда смешанные стратегии, т.е. xi и yj получаются по формулам :



 



Пример. Найти решение игры, определяемой матрицей.







Решение. При решении этой игры к каждому элементу матрицы А прибавим 1 и получим следующую матрицу







Составим теперь пару взаимно-двойственных задач :

 



Решим вторую из них



Б.п.

 q1

 q2

 q3

 q4

 q5

 q6

Решение

 a

Отношение

 

 -1

 -1

 -1

 0

 0

 0

 0

 -3

 

 q4

 1

 2

 0

 1

 0

 0

 1

 5

 —

 q5

 1

 0

 1

 0

 1

 0

 1

 4

 

 q6

 2

 1

 0

 0

 0

 1

 1

 5

 —



Б.п.

 q1

 q2

 q3

 q4

 q5

 q6

Решение

 a

Отношение

 

 0

 -1

 0

 0

 1

 0

 1

 1

 

 q4

 1

 2

 0

 1

 0

 0

 1

 5

 

 q3

 1

 0

 1

 0

 1

 0

 1

 4

 —

 q6

 2

 1

 0

 0

 0

 1

 1

 5

 



Б.п.

 q1

 q2

 q3

 q4

 q5

 q6

Решение

 a

Отношение

 

 

 0

 0

 

 1

 0

 

 

 

 q2

 

 1

 0

 

 0

 0

 

 

 

 q3

 1

 0

 1

 0

 1

 0

 1

 4

 

 q6

 

 0

 0



 0

 1

 

 

 



Из оптимальной симплекс-таблицы следует, что



(q1, q2, q3) = (0;; 1),



а из соотношений двойственности следует, что



( p1, p2, p3) = (; 1; 0).

Следовательно, цена игры с платёжной матрицей А1 равна



. ,



а игры с платёжной матрицей А :



.



При этом оптимальные стратегии игроков имеют вид:



Х = (х1, х2, х3) = (uр1; uр2; uр3) = = 

Y = (y1, y2, y3) = (uq1; uq2; uq3) = = .



2.2 Решение матричных игр в чистых стратегиях



Матричная игра двух игроков с нулевой суммой может рассматриваться как следующая абстрактная игра двух игроков.

Первый игрок имеет m стратегий i = 1,2,...,m, второй имеет n стратегий j = 1,2,...,n. Каждой паре стратегий (i,j) поставлено в соответствие число аij, выражающее выигрыш игрока 1 за счёт игрока 2, если первый игрок примет свою i-ю стратегию, а 2 – свою j-ю стратегию.

Каждый из игроков делает один ход: игрок 1 выбирает свою i-ю стратегию (i=), 2 – свою j-ю стратегию (j=), после чего игрок 1 получает выигрыш аij за счёт игрока 2 (если аij< 0, то это значит, что игрок 1 платит второму сумму | аij | ). На этом игра заканчивается.

Каждая стратегия игрока i=; j =  часто называется чистой стратегией.

Если рассмотреть матрицу



А = 



то проведение каждой партии матричной игры с матрицей А сводится к выбору игроком 1 i-й строки, а игроком 2 j-го столбца и получения игроком 1 (за счёт игрока 2) выигрыша аij.

Главным в исследовании игр является понятие оптимальных стратегий игроков. В это понятие интуитивно вкладывается такой смысл: стратегия игрока является оптимальной, если применение этой стратегии обеспечивает ему наибольший гарантированный выигрыш при всевозможных стратегиях другого игрока. Исходя из этих позиций, игрок 1 исследует матрицу выигрышей А следующим образом: для каждого значения i (i =) определяется минимальное значение выигрыша в зависимости от применяемых стратегий игрока 2



аij (i = )



т.е. определяется минимальный выигрыш для игрока 1 при условии, что он примет свою i-ю чистую стратегию, затем из этих минимальных выигрышей отыскивается такая стратегия i = iо, при которой этот минимальный выигрыш будет максимальным, т.е. находится



аij = =  (1).


Определение. Число , определённое по формуле (1) называется нижней чистой ценой игры и показывает, какой минимальный выигрыш может гарантировать себе игрок 1, применяя свои чистые стратегии при всевозможных действиях игрока 2.

Игрок 2 при оптимальном своём поведении должен стремится по возможности за счёт своих стратегий максимально уменьшить выигрыш игрока 1. Поэтому для игрока 2 отыскивается

аij , т.е. определяется max выигрыш игрока 1, при условии, что игрок 2 применит свою j-ю чистую стратегию,

 затем игрок 2 отыскивает такую свою j = j1 стратегию, при которой игрок 1 получит min выигрыш, т.е. находит



aij = =  (2).



Определение. Число , определяемое по формуле (2), называется чистой верхней ценой игры и показывает, какой максимальный выигрыш за счёт своих стратегий может себе гарантировать игрок 1.

Другими словами, применяя свои чистые стратегии игрок 1 может обеспечить себе выигрыш не меньше , а игрок 2 за счёт применения своих чистых стратегий может не допустить выигрыш игрока 1 больше, чем .

Определение. Если в игре с матрицей А =, то говорят, что эта игра имеет седловую точку в чистых стратегиях и чистую цену игры



u = =.



Седловая точка – это пара чистых стратегий (iо,jо) соответственно игроков 1 и 2, при которых достигается равенство  = . В это понятие вложен следующий смысл: если один из игроков придерживается стратегии, соответствующей седловой точке, то другой игрок не сможет поступить лучше, чем придерживаться стратегии, соответствующей седловой точке. Математически это можно записать и иначе:



 



где i, j – любые чистые стратегии соответственно игроков 1 и 2; (iо,jо) – стратегии, образующие седловую точку.

Таким образом, исходя из (3), седловой элемент  является минимальным в iо-й строке и максимальным в jо-м столбце в матрице А. Отыскание седловой точки матрицы А происходит следующим образом: в матрице А последовательно в каждой строке находят минимальный элемент и проверяют, является ли этот элемент максимальным в своём столбце. Если да, то он и есть седловой элемент, а пара стратегий, ему соответствующая, образует седловую точку. Пара чистых стратегий (iо,jо) игроков 1 и 2, образующая седловую точку и седловой элемент , называется решением игры. При этом iо и jо называются оптимальными чистыми стратегиями соответственно игроков 1 и 2.



2.3 Решение матричных игр в смешанных стратегиях путём сведения к задаче линейного программирования



Исследование в матричных играх начинается с нахождения её седловой точки в чистых стратегиях. Если матричная игра имеет седловую точку в чистых стратегиях, то нахождением этой седловой точки заканчивается исследование игры. Если же в игре нет седловой точки в чистых стратегиях, то можно найти нижнюю и верхнюю чистые цены этой игры, которые указывают, что игрок 1 не должен надеяться на выигрыш больший, чем верхняя цена игры, и может быть уверен в получении выигрыша не меньше нижней цены игры. Улучшение решений матричных игр следует искать в использовании секретности применения чистых стратегий и возможности многократного повторения игр в виде партии. Этот результат достигается путём применения чистых стратегий случайно, с определённой вероятностью.

Определение. Смешанной стратегией игрока называется полный набор вероятностей применения его чистых стратегий.

Таким образом, если игрок 1 имеет m чистых стратегий 1,2,...,m, то его смешанная стратегия x – это набор чисел x = (x1, ..., xm) удовлетворяющих соотношениям



xi >= 0 (i = 1,m), = 1.



Аналогично для игрока 2, который имеет n чистых стратегий, смешанная стратегия y – это набор чисел



y = (y1, ..., yn), yj >= 0, (j = 1,n), = 1.



Так как каждый раз применение игроком одной чистой стратегии исключает применение другой, то чистые стратегии являются несовместными событиями. Кроме того, они являются единственными возможными событиями.

Чистая стратегия есть частный случай смешанной стратегии. Действительно, если в смешанной стратегии какая-либо i-я чистая стратегия применяется с вероятностью 1, то все остальные чистые стратегии не применяются. И эта i-я чистая стратегия является частным случаем смешанной стратегии. Для соблюдения секретности каждый игрок применяет свои стратегии независимо от выбора другого игрока.

Определение. Средний выигрыш игрока 1 в матричной игре с матрицей А выражается в виде математического ожидания его выигрышей

E (A, x, y) == x A yT



Первый игрок имеет целью за счёт изменения своих смешанных стратегий х максимально увеличить свой средний выигрыш Е (А, х, y), а второй – за счёт своих смешанных стратегий стремится сделать Е (А, х, y) минимальным, т.е. для решения игры необходимо найти такие х и y, при которых достигается верхняя цена игры



 Е (А, х, y).



Аналогичной должна быть ситуация и для игрока 2, т.е. нижняя цена игры должна быть



 Е (А, х, y).



Подобно играм, имеющим седловые точки в чистых стратегиях, вводится следующее определение: оптимальными смешанными стратегиями игроков 1 и 2 называются такие наборы хо, уо соответственно, которые удовлетворяют равенству



 Е (А, х, y) = Е (А, х, y) = Е (А, хо, уо).



Величина Е (А, хо ,уо) называется при этом ценой игры и обозначается через u.

Имеется и другое определение оптимальных смешанных стратегий: хо, уо называются оптимальными смешанными стратегиями соответственно игроков 1 и 2, если они образуют седловую точку:


Е (А, х, уо)<= Е (А, хо, уо)<= Е (А, хо, у)



Оптимальные смешанные стратегии и цена игры называются решением матричной игры.

Основная теорема матричных игр имеет вид :

Теорема (о минимаксе). Для матричной игры с любой матрицей А величины



 Е (А, х, y) и  Е (А, х, y) существуют и равны между собой.



Игра m × n в общем случае не имеет наглядной геометрической интерпретации. Ее решение достаточно трудоемко при больших m и n, однако принципиальных трудностей не имеет, поскольку может быть сведено к решению задачи линейного программирования. 

Пусть игра m × n задана платежной матрицей p = (aij ), i = 1, 2, ..., m; j = 1, 2, ..., n. Игрок А обладает стратегиями A1 , A2 , ..., Am , игрок В — стратегиями B1 , B2 , ..., Bm . Необходимо определить оптимальные стратегии S*A = ( p*1 , p*2 , ... , p*m ) и S*B = ( q*1 , q*2 , ... , q*n ), где p*i, q*j — вероятности применения соответствующих чистых стратегий Ai , Bj, p*1 + p*2 +...+ p*m =1, q*1 + q*2 +...+ q*n = 1.

Оптимальная стратегия S*A удовлетворяет следующему требованию. Она обеспечивает игроку А средний выигрыш, не меньший, чем цена игры v, при любой стратегии игрока В и выигрыш, равный цене игры v, при оптимальной стратегии игрока B. Без ограничения общности полагаем v > 0: этого можно добиться, сделав все элементы aij ≥ 0. Если игрок А применяет смешанную стратегию S*A = ( p*1 , p*2 , ... , p*m ) против любой чистой стратегии Bj игрока В, то он получает средний выигрыш, или математическое ожидание выигрыша aj = a1j p1 + a2j p2 +...+ am j pm , о = 1, 2, ..., n (т.е. элементы j-го столбца платежной матрицы почленно умножаются на соответствующие вероятности стратегий A1 , A2 , ..., Am и результаты складываются).

Для оптимальной стратегии S*A все средние выигрыши не меньше цены игры v, поэтому получаем систему неравенств:



		(2.3.1)

	

Каждое из неравенств можно разделить на число v > 0. Введем новые переменные:



	x1 = p1/v, x2 = p2/v , ..., pm/v 	(2.3.2)



Тогда система (2.3.1) примет вид:



		(2.3.3)



Цель игрока А — максимизировать свой гарантированный выигрыш, т.е. цену игры v. 

Разделив на v ≠ 0 равенство p1 + p2 + ...+ pm = 1 , получаем, что переменные x1 (i = 1, 2, ..., m) удовлетворяют условию: x1 + x2 + ...+ xm = 1/v. Максимизация цены игры v эквивалентна минимизации величины1/v, поэтому задача может быть сформулирована следующим образом: определить значения переменных xi ≥ 0, i = 1, 2, ..., m, так, чтобы они удовлетворяли линейным ограничениям (2.3.3) и при этом линейная функция



	Z = x1 + x2 + ...+ xm,	(2.3.4)


обращалась в минимум. Это задача линейного программирования. Решая задачу (2.3.3)—( 2.3.4), получаем оптимальное решение p*1 + p*2 + ...+ p*m и оптимальную стратегию SA . 

Для определения оптимальной стратегии S*B = (q*1 + q*2 + ...+ q*n) следует учесть, что игрок В стремится минимизировать гарантированный выигрыш, т.е. найти . Переменные q1 , q2 , ..., qn удовлетворяют неравенствам:



		(2.3.5)



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



	yj = qj/v, j = 1, 2, ..., n, 	(2.3.6)



то получим систему неравенств:



		(2.3.7)



Переменные yj (1, 2, ..., n) удовлетворяют условию . 

Игра свелась к следующей задаче 

Определить значения переменных yj ≥ 0, j = 1, 2, ..., n, которые удовлетворяют системе неравенств (2.3.7) и максимизируют линейную функцию

	Z' = y1 + y2 + ...+ yn,	(2.3.8)



Решение задачи линейного программирования (2.3.6), (2.3.7) определяет оптимальную стратегию S*B = (q*1 + q*2 + ...+ q*n) . При этом цена игры



	v = 1 / max, Z' = 1 / min Z 	(2.3.9)



Составив расширенные матрицы для задач (2.3.3), (2.3.4) и (2.3.7), (2.3.8), убеждаемся, что одна матрица получилась из другой транспонированием:







Таким образом, задачи линейного программирования (2.3.3), (2.3.4) и (2.3.7), (2.3.8) являются взаимно-двойственными. Очевидно, при определении оптимальных стратегий в конкретных задачах следует выбрать ту из взаимно-двойственных задач, решение которой менее трудоемко, а решение другой задачи найти с помощью теорем двойственности. 

	
3. Практическая часть 

	

	Постановка задачи: Для производства трёх видов продукции используется три вида сырья. Нормы затрат каждого из видов сырья на единицу продукции данного вида, запасы сырья, а также прибыль с единицы продукции приведены в таблице:

	

Продукция/сырьё

А

В

С

Запасы сырья, ед.

 I

4

2

0

≤ 19

II

0

1

1

= 8

III

1

2

0

≤ 24

Прибыль, ден. ед.

3

7

2

≥ max



Определить план выпуска продукции для получения максимальной прибыли, чтобы сырьё IIвида было израсходовано полностью. Оценить каждый из видов сырья, используемых для производства продукции.

Вид таблицы по заданию поставленной задачи:



Вид сырья

Нормы затрат сырья (кг) на единицу продукции



А

В

С

I

II

III

4

0

1

2

1

2

0

1

0

Цена единицы продукции (руб.)

3

7

2



Решение поставленной задачи: 

Предположим, что производится x1 изделий А, изделий В и изделий С. Для определения оптимального плана производства нужно решить задачу, состоящую в максимизации целевой функции


3.1.Построим математическую модель задачи:



тогда функция цели: 



Z-0 = 3X1 + 7X2 + 2X3 – совокупная прибыль от продажи произведенной продукции, которую требуется максимизировать.



Подсчитаем затраты сырья:

Сырье 1-го типа: 4 х1 + 2 х2 + 0 х3 , по условию затраты не превосходят 19,

Сырье 2-го типа: 0 х1 + 1 х2 + 1 х3, по условию затраты не превосходят 8,

Сырье 3-го типа: 1x1 + 2x2 + 0x3, по условию затраты не превосходят 24.

при следующих условиях:



4

X1

+

2

X2

+

0

X3

+

X4

≤

19

0 

X1

+

1

X2

+

1

X3

+

X5

=

8

1

X1

+

2

X2

+

0

X3

+

X6

≤

24



X1, X2, X3 ≥ 0.

4X1+2X2+X4 ≤ 19

X2 + X3 +X5 = 8

X1+ 2X2+X6 ≤24



3.2 Выбираем метод решения и приводим задачу к каноническому виду:



Пришли к задаче линейного программирования:

припишем каждому из видов сырья, используемых для производства продукции. Тогда общая оценка сырья, используемого на производство продукции, составит: 

Получили математическую модель. Необходимо максимизировать функцию цели ↓



Z-0 (x1, x2, x3) = 3X1 + 7X2 + 2X3 → max 



Введем дополнительные переменные X4, X5, X6. 



 Z-0=

3

X1

+

7

X2

+

2

X3

(max)

при системе ограничений:





















Преобразуем первое ограничение:



4

X1

+

2

X2

+

0

X3

+

X4

=

19

0 

X1

+

1

X2

+

1

X3

+

X5

=

8

1

X1

+

2

X2

+

0

X3

+

X6

=

24



Получили задачу:



4X1+2X2+X4 = 19

X2 + X3 +X5 = 8

X1+2X2 +X6 =24



3.3 Решаем задачу путем сведения к задаче линейного программирования:



Xi≥0 ; 0-Z= -3X1- -7X2- -2X3 



Приведем задачу к канонической форме.

Задача линейного программирования записана в канонической форме, если она формулируется следующим образом.

Требуется найти вектор , доставляющий максимум линейной форме







при условиях







где 

Решим задачу симплекс-методом

Строим начальную симплекс-таблицу:

Базисные переменные

X1

X2

X3





X4

X5

X6

Свободные члены

X4

4

2

0





1

0

0

19

X5

0

1

1





0

1

0

8

X6

1

2

0





0

0

1

24

0-Z

-3

-7

-2





0

0

0

0

















Так как в столбце свободных членов нет отрицательных элементов, то найдено допустимое решение. Так как в строке 0-Z есть отрицательные элементы, то полученное решение не оптимально. Для определения ведущего столбца найдем максимальный по модулю отрицательный элемент в строке 0-Z (-7). А ведущая строка та, у которой наименьшее положительное отношение свободного члена к соответствующему элементу ведущего столбца.

Пересчитаем таблицу:

Базисные переменные

X1

X2

X3

X4

X5

X6





Свободные члены

X4

4

-2

-2

1

0

0





3

X2

0

1

1

0

1

0





8

X6

1

-2

-2

0

0

1





8

0-Z

-3

7

5

0

0

0





56



Так как в столбце свободных членов нет отрицательных элементов, то найдено допустимое решение. Так как в строке 0-Z есть отрицательные элементы, то полученное решение не оптимально. Для определения ведущего столбца найдем максимальный по модулю отрицательный элемент в строке 0-Z (-3). А ведущая строка та, у которой наименьшее положительное отношение свободного члена к соответствующему элементу ведущего столбца.

Тогда каноническую форму задачи ЛП можно представить в следующем матричном виде эквивалентном первоначальному:



Z=CX →max,

AX=B,

X≥0.



где 0 - нулевая матрица-столбец той же размерности, что и матрица X.

замечание.

Не ограничивая общности, можно полагать, что свободные члены неотрицательны, т.е. b i ≥ 0, где i =¯1,m (иначе ограничительные уравнения можно умножить на (-1)).


Пересчитаем таблицу:



Базисные переменные

X4

X5

X3

Свободные члены

X1

1/4

-1/2

-1/2

3/4

X2

0

1

1

0

X6

-1/4

-3/2

-3/2

29/4

0-Z

3/4

11/2

7/2

233/4



Эта таблица является последней, по ней читаем ответ задачи.

Найдено оптимальное базисное решение:

При котором Z max = 233/4= 58,25 ден. ед.

План производства:

X1 =3/4= 0,75; X2 = 0; X3 = 0; X4 = 3; X5 = 0; X6 = 29/4= 7,25

Соответственно по решению, вычисляем:

Z= 3*0,75+7*0+2*0+3+7,25= 24

Z= 24

Ответ поставленной задачи: План выпуска продукции (Z) для получения максимальной прибыли, при том, что сырьё IIвида было израсходовано полностью равен 24 (Z= 24). Из хода решения задачи по условию мы видим, что оценен каждый из видов сырья, используемых для производства продукции.


Блок-схемы основных процедур при решении и программировании задач

	Алгоритм программы → Рис. 1. ↓



Начало







Ввести функцию цели   Z-0 = 3X1 + 7X2 + 2X3









Ввести данные из задачи

4

X1

+

2

X2

+

0

X3

+

X4

≤

19

0    

X1

+

1

X2

+

1

X3

+

X5

=

8

1

X1

+

2

X2

+

0

X3

+

X6

≤

24









 









Найти max  j     c’ j  =  c’ s









Да



Остановка.

Оптимум найден



c’ s   0  ?









Нет



Да

Остановка.

Введены неверные данные



Все  a’ is   0  ?











Вычислить    b’ i  /  a’ is   для 

всех   a’ is  >  0







Промежуточное копирование в буфер





Вычислить    b’ i  /  a’ is   для 

всех   a’ is  >  0











Вычислить    b’ i  /  a’ is   для 

всех   a’ is  >  0









Рисунок 1 –Алгоритм программы для решения ЗЛП (частный случай)

Программа к поставленной задачи (код программы)

	Программа - реализующая решение задачи для производства всех видов продукции с использованием всех видов сырья. Нормы затрат каждого из видов сырья на единицу продукции данного вида, запасы сырья, а также прибыль с единицы продукции.

Программа определяет:

План выпуска продукции для получения максимальной прибыли. 

1. Описание работы программы, листинг программы

1.1 Обоснование выбора языка

Программа для решения данной задачи составлена на языке C++.C++ представляет собой систему программирования. Как любая подобная система,C++ предназначена для разработки программ и имеет две характерные особенности: создаваемые с ее помощью программы могут работать не только под управлением Windows,но и в системе MS-DOS.

C++ представляет собой наиболее полный пакет объектно-ориентированного программирования. Язык прост в применении и базируется на C#,что упрощает создание программ, людям, знакомым с данным языком. 

1.2 Описание работы программы

Программа составлена для общего случая. В первую матрицу вводятся ее члены в обычных дробях. Программа переводит эти дроби в десятичные и составляет каноническую форму. Затем происходит процесс формирования первой симплекс таблицы.

Следующим этапом программа начинает составлять итерации, до тех пор пока не будет найдено оптимальное решение (в данном случае составлено 2 итерации).

Программа выводит данные в строку F/ 

Листинг программы

//-------------------------------------------------------------------------------------------

#include <stdio.h>

#include <string.h>

#include <math.h>





#define PRECISION "%6.2f"	// формат вывода дробных чисел

#define PRECISION2 "%.2f"	// он же только целая часть любой длины



#define MAXDIGIT	1000000 // должно быть очень большое число (больше всех)



typedef enum

{

	NEXT_ITERATION,		// нужно продолжать итерации

	PLAN_OPTIMAL,		// найден оптимальный опорный план

	ODR_BREAK,			// ОДР разомкнута

	ODR_EMPTY,			// ОДР пустая

	DUAL_DONE			/* первый этап (построение опорного плана) окончен,

					переходим к поиску оптим.оп.плана (обычный Симплекс) */

} plan_t;





int cn=0;			// длина вектора исходного ур-я

int cnr=0;			/*	cn, только без членов == 0 (cnr==cn_real)

						нужно только для вывода сокращенной таблицы */

float *c = NULL;	// исходное ур-е



int m=0, n=0;		// размеры матрицы условий

float **a = NULL;	// матрица условий

float *b = NULL;	// столбец свободных членов матрицы условий



int *base = NULL;	// базовые переменные



float zb=0;			// оценки оптимальности b

float *za = NULL;	// оценки оптимальности a



int base_column = -1;	// разрешающий столбец

int base_row = -1;		// разрешающая строка



bool full_table = true;	// вид выводимой таблицы: true==полная, false==сжатая





void FreeMem ()

{

	delete[] za;

	delete[] base;

	delete[] b;



	for (int i=0; i<m; i++)

		delete[] a[i];

	delete[] a;



	delete[] c;

}



bool ReadInput (char *filename)

{

	int i,j;

	FILE *f = fopen(filename, "r");

	if (NULL == f)

		return false;





	// исходное ур-е

	fscanf(f, "%i", &cn);

	c = new float [cn];



	cnr=cn;



	for (i=0; i<cn; i++)

	{

		fscanf(f, "%f", &c[i]);

		if (0 == c[i]) cnr--;

	}





	// матрица условий

	fscanf(f, "%i %i", &n, &m);

	a = new float* [m];



	for (i=0; i<m; i++)

		a[i] = new float[n];



	b = new float [m];



	for (j=0; j<m; j++)

	{

		for (i=0; i<n; i++)

			fscanf(f, "%f", &a[j][i]);



		fscanf(f, "%f", &b[j]);

	}





	// базовые переменные

	base = new int [m];



	for (j=0; j<m; j++)

	{

		fscanf(f, "%i", &base[j]);

		--base[j];

	}





	// флаг - полную или сжатую таблицу выводить ?

	int flag = 1;



	fscanf(f, "%i", &flag);

	full_table = flag ? true : false;





	fclose(f);



	za = new float[n];



//	for(i=0;i<n;i++)za[i]=0;// !!! только для отладки !!!



	return true;

}



// Вычисление оценок оптимальности {za==delta_j[] and zb==Z}

void EvaluationOptimal ()

{

	int i,j;

	zb=0;

	for (i=0; i<n; i++) za[i]=0;



	for (j=0; j<m; j++)

	{

		for (i=0; i<n; i++)

			za[i] += c[base[j]]*a[j][i];



		zb += c[base[j]]*b[j];

	}



	for (i=0; i<n; i++)

		za[i] -= c[i];

}



// Построение опорного плана (этот этап только в двойственном симплекс-методе)

plan_t BuildPsevdoPlan ()

{

	int i,j;

	base_column = -1;	// разрешающий столбец

	base_row = -1;		// разрешающая строка

	float acc; // временно: аккумулятор - будет хранить min, max, etc.





	acc = 0; // min отрицательное значение b

	for (j=0; j<m; j++)

		if (b[j] < acc)

		{

			acc = b[j];

			base_row = j;

		}



	if (-1 == base_row)

		return DUAL_DONE;





	acc = -MAXDIGIT; // max отношение za к отрицат. эл-там в строке base_row

	for (i=0; i<n; i++)

	{

		float temp;

		if (a[base_row][i] < 0 && (temp = za[i]/a[base_row][i]) > acc)

		{

			acc = temp;

			base_column = i;

		}

	}



	if (-1 == base_column)

		return ODR_EMPTY;





	return NEXT_ITERATION;

}



// Проверка опорного плана на оптимальность

plan_t CheckStrongPlan ()

{

	int i,j;

	float za_min = 0;

	base_column = -1;	// разрешающий столбец

	base_row = -1;		// разрешающая строка



	// выбор разрешающего столбца

	for (i=0; i<n; i++)

	{

		if (za[i] >= 0)

			continue;

		else if (za[i] < za_min)

		{

			za_min = za[i];

			base_column = i;

		}

	}



	if (-1 == base_column)

		return PLAN_OPTIMAL;





	za_min = MAXDIGIT;



	// выбор разрешающей строки

	for (j=0; j<m; j++)

	{

		if (a[j][base_column] > 0)

		{

			float t = b[j]/a[j][base_column];

			if (t < za_min)

			{

				za_min = t;

				base_row = j;

			}

		}

	}



	if (-1 == base_row)

		return ODR_BREAK;



	return NEXT_ITERATION;

}



// Преобразование таблицы по ф-лам Жордана-Гаусса

void JGTransformation (int base_row, int base_column)

{

	// проверка на всякий случай: чтобы не было деления на нуль

	if (0 == a[base_row][base_column]) return;



	base[base_row] = base_column;



	int i,j;



	float **a2 = new float* [m];	// матрица условий

	float *b2 = new float [m];	// столбец свободных членов матрицы условий

	memcpy(b2,b,m*sizeof(float));



	for (j=0; j<m; j++)

	{

		a2[j] = new float[n];

		memcpy(a2[j],a[j],n*sizeof(float));

	}





	for (j=0; j<m; j++)

	{

		for (i=0; i<n; i++)

		{

			if (i == base_column)

			{

				a2[j][i] = (float) (j == base_row ? 1 : 0);

			}

			else

			{

				if (j == base_row)

					a2[j][i] = a[j][i]/a[base_row][base_column];

				else

					a2[j][i] = a[j][i] - a[base_row][i]*a[j][base_column]/

						a[base_row][base_column];

			}

		}



		if (j == base_row)

			b2[j] = b[j]/a[base_row][base_column];

		else

			b2[j] = b[j] - b[base_row]*a[j][base_column]/

				a[base_row][base_column];

	}







	memcpy(b,b2,m*sizeof(float));

	delete[] b2;



	for (j=0; j<m; j++)

	{

		memcpy(a[j],a2[j],n*sizeof(float));

		delete[] a2[j];

	}



	delete[] a2;

}



// проверка: входит ли номер столбца в число базисных переменных

bool InBase (int num)

{

	for (int j=0; j<m; j++)

		if (num == base[j])

			return true;



	return false;

}



// вывод линии символов

void Rule (char c, int amount = full_table ? 5+(n+2)*8 : 5+(cnr+1)*8)

{

	for (int i=0; i<amount; i++)

		printf("%c", c);

	printf("\n");

}



// вывод Симплекс-таблицы

void ShowTable ()

{

	int i,j;



	static int iteration = 0;

	printf("[%i]\n", iteration++);





	if (full_table)



		// полная таблица

	{

		Rule('=');

		printf("Баз.| | |");

		for (i=0; i<cn; i++)

				printf(PRECISION " |", c[i]);

		printf("\nпер.| Ci | Bi |");

		Rule('-', n*8);

		printf(" | | |");

		for (i=0; i<cn; i++)

			printf(" x%i |", i+1);

		printf("\n");

		Rule('=');





		for (j=0; j<m; j++)

		{

			printf(" x%i |" PRECISION " |" PRECISION " |",

				base[j]+1, c[base[j]], b[j]);



			for (i=0; i<n; i++)

				printf(PRECISION "%c|", a[j][i],

					base_column == i && base_row == j ?'*':' ');

			printf("\n");

		}

		Rule('=');





		printf(" Z | --- |" PRECISION " |", zb);

		for (i=0; i<n; i++)

			printf(PRECISION " |", za[i]);

		printf("\n");

		Rule('-');

	}

	else



		// сжатая таблица

	{

		Rule('=');

		printf("БvС>|");

		for (i=0; i<cn; i++)

		{

			if (!InBase(i))

				printf(" x%i |", i+1);

		}

		printf(" Bi |\n");

		Rule('=');





		for (j=0; j<m; j++)

		{

			printf(" x%i |", base[j]+1);

			for (i=0; i<n; i++)

			{

				if (!InBase(i))

					printf(PRECISION "%c|", a[j][i],

						base_column == i && base_row == j ?'*':' ');

			}

			printf(PRECISION" |\n", b[j]);

		}

		Rule('=');





		printf(" Z |");

		for (i=0; i<n; i++)

		{

			if (!InBase(i))

				printf(PRECISION " |", za[i]);

		}

		printf(PRECISION " |\n", zb);

		Rule('-');

	}





	if (base_column > -1 && base_row > -1)

		printf("Разрешающий столбец:%2i\nРазрешающая строка: %2i\n\nX=(",

			base_column+1, base_row+1);

	else

		printf("\nX=(");





	for (i=0; i<n; i++)

	{

		int basen = -1;



		for (j=0; j<m; j++)

			if (base[j] == i) {basen = j; break;}



		printf(PRECISION2 "%c ", -1==basen?0:b[basen], i!=n-1?',':')');

	}





	printf("\nZ=" PRECISION2 "\n\n\n", zb);

}



int main (int argc, char *argv[])

{

	if (argc < 2)

	{

		printf("Missing argument\n");

		return -1;

	}



	if (!ReadInput(argv[1]))

	{

		printf("Error open file %s.\n", argv[1]);

		return -1;

	}





	printf("*** ДВОЙСТВЕННЫЙ СИМПЛЕКС-МЕТОД ***\n\n");

	plan_t plan;

	bool dual_done = false;



	for (int k=0; k<2*m+1; k++)

	{

		if (k) JGTransformation(base_row, base_column);

		EvaluationOptimal();



		if (dual_done)

		{

			plan = CheckStrongPlan();

		}

		else

		{

			plan = BuildPsevdoPlan(); // only in dual-simplex

			if (DUAL_DONE == plan)

			{

				dual_done = true;

				plan = CheckStrongPlan();

			}

		}



		ShowTable();



		if (NEXT_ITERATION != plan)

		{

			char *s;

			switch (plan)

			{

			case PLAN_OPTIMAL: s="Опорный план оптимальный"; break;

			case ODR_BREAK: s="Область допустимых решений разомкнутая"; break;

			case ODR_EMPTY: s="Область допустимых решений пустая"; break;

			}



			printf("\n%s.\n", s);

			break;

		}

	}





	FreeMem();

	return 0;

}	

																									//-----------------------------------------------------------------------------------------	



Результат работы программы

Работу программы мы можем проанализировать по результату . Здесь мы видим первоначальную матрицу, которая представлена в виде симплекс таблицы и результат преобразования таблицы. Результат преобразования таблицы представлен в виде симплекс таблицы, подобной первоначальной.

Проанализировав данные полученные с помощью программы и сравнив их с результатами вычислений можно сделать вывод, что полученные результаты равны между собою, а это значит что программа работает верно. 

3.4. Анализ результата решения поставленной задачи

																1. Задачи анализа, источники информации

Необходимым условием выполнения планов по производству продукции, снижению ее себестоимости, росту прибыли, рентабельности является полное и своевременное обеспечение предприятия сырьем и материалами необходимого ассортимента и качества. Рост потребности предприятия в материальных ресурсах может быть удовлетворен экстенсивным путем (приобретением или изготовлением большего количества материалов и энергии) или интенсивным (более экономным использованием имеющихся запасов в процессе производства продукции). 

Первый путь ведет к росту удельных материальных затрат на единицу продукции, хотя себестоимость ее может при этом и снизиться за счет увеличения объема производства и уменьшения доли постоянных затрат. Второй путь обеспечивает сокращение удельных материальных затрат и снижение себестоимости единицы продукции. Экономное использование сырья, материалов и энергии равнозначно увеличению их производства.

Задачи анализа обеспеченности и использования материальных ресурсов:

а) оценка реальности планов материально-технического снабжения, степени их выполнения и влияния на объем производства продукции, ее себестоимость и другие показатели;

б) оценка уровня эффективности использования материальных ресурсов;

в) выявление внутрипроизводственных резервов экономии материальных ресурсов и разработка конкретных мероприятий по их использованию.

Источниками информации для анализа материальных ресурсов являются план материально-технического снабжения, заявки, договоры на поставку сырья и материалов, формы статистической отчетности о наличии и использовании материальных ресурсов и о затратах на производство, оперативные данные отдела материально-технического снабжения, сведения аналитического бухгалтерского - учета о поступлении, расходе и остатках материальных ресурсов и др.

2. Анализ обеспеченности предприятия материальными ресурсами

При анализе обеспеченности предприятия материальными ресурсами в первую очередь проверяют качество плана материально-технического снабжения. Проверку реальности плана начинают с изучения норм и нормативов, которые положены в основу расчета потребности предприятия в материальных ресурсах. Затем проверяется соответствие плана снабжения потребностям производства продукции и образования необходимых запасов исходя из прогрессивных норм расхода материалов. Важным условием бесперебойной работы предприятия является полная обеспеченность

потребности в материальных ресурсах источниками покрытия. Очи могут быть внешними и внутренними. К внешним источникам относятся материальные ресурсы, поступающие от поставщиков в соответствии с заключенными договорами. 

Внутренние источники - это сокращение отходов сырья, использование вторичного сырья, собственное изготовление материалов и полуфабрикатов, экономия материалов в результате внедрения достижений научно-технического прогресса. Реальная потребность в завозе материальных ресурсов со стороны - это разность между общей потребностью в определенном виде материала и суммой собственных внутренних источников ее покрытия.

По заданной задачи мы видим, что:

	Для производства трёх видов продукции используется три вида сырья. Нормы затрат каждого из видов сырья на единицу продукции данного вида, запасы сырья, а также прибыль с единицы продукции.

	

Вид сырья

Нормы затрат сырья (кг) на единицу продукции



А

В

С

I

II

III

4

0

1

2

1

2

0

1

0

Цена единицы продукции (руб.)

3

7

2



1. Первое, что я сделал, это определил план выпуска продукции для получения максимальной прибыли, с учетом того что бы сырьё IIвида было израсходовано полностью. 



Z-0 = 3X1 + 7X2 + 2X3



4

X1

+

2

X2

+

0

X3

+

X4

≤

19

0 

X1

+

1

X2

+

1

X3

+

X5

=

8

1

X1

+

2

X2

+

0

X3

+

X6

≤

24



X1, X2, X3 ≥ 0.

4X1+2X2+X4 ≤ 19

X2 + X3 +X5 = 8

X1+ 2X2+X6 ≤24



Второе, оценил каждый из видов сырья, используемых для производства продукции.



Z-0 = 3X1 + 7X2 + 2X3 → max 



Ввел дополнительные переменные X4, X5, X6. 



Z-0=

3

X1

+

7

X2

+

2

X3

(max)



Ограничения:



4

X1

+

2

X2

+

0

X3

+

X4

=

19

0 

X1

+

1

X2

+

1

X3

+

X5

=

8

1

X1

+

2

X2

+

0

X3

+

X6

=

24



3. Построил математическую модель задачи;



4X1+2X2+X4 = 19

X2 + X3 +X5 = 8

X1+2X2 +X6 =24

	

	4. Выбрал метод решения задачи и привел задачу к каноническому виду;

	

	Xi≥0 ; 0-Z= -3X1- -7X2- -2X3 

	

	
5. Решил задачу путём сведения к задаче линейного программирования;

	

Базисныепеременные

X1

X2

X3





X4

X5

X6

Свободныечлены

X4

4

2

0





1

0

0

19

X5

0

1

1





0

1

0

8

X6

1

2

0





0

0

1

24

0-Z

-3

-7

-2





0

0

0

0















Пересчитал таблицу:



Базисные переменные

X1

X2

X3

X4

X5

X6





Свободные члены

X4

4

-2

-2

1

0

0





3

X2

0

1

1

0

1

0





8

X6

1

-2

-2

0

0

1





8

0-Z

-3

7

5

0

0

0





56



Пересчитал таблицу:

Базисные переменные

X4

X5

X3

Свободные члены

X1

1/4

-1/2

-1/2

3/4

X2

0

1

1

8

X6

-1/4

-3/2

-3/2

29/4

0-Z

3/4

11/2

7/2

233/4



Нашел оптимальное базисное решение

Затем построил блок схему к задачи с написанием программы и выводом на печать программного кода.

Анализом моего результата решения состоит из правил оптимального решения задачи из поставленного условия.

Порядок работы с симплекс таблицей

Первая симплекс-таблица подвергается преобразованию, суть которого заключается в переходе к новому опорному решению.

Алгоритм перехода к следующей таблице такой:

Просматривается последняя строка (индексная) таблицы и среди коэффициентов этой строки (исключая столбец свободных членов ) выбирается наименьшее отрицательное число при отыскании max, либо наибольшее положительное при задачи на min. Если такового нет, то исходное базисное решение является оптимальным и данная таблица является последней; просматривается столбец таблицы, отвечающий выбранному отрицательному (положительному) коэффициенту в последней строке - ключевой столбец, и в этом столбце выбираются положительные коэффициенты. 

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

Этот коэффициент называется разрешающим, а строка в которой он находится ключевой; в дальнейшем базисная переменная, отвечающая строке разрешающего элемента, должна быть переведена в разряд свободных, а свободная переменная, отвечающая столбцу разрешающего элемента, вводится в число базисных. Строится новая таблица, содержащая новые названия базисных переменных: разделяем каждый элемент ключевой строки (исключая столбец свободных членов) на разрешающий элемент и полученные значения записываем в строку с измененной базисной переменной новой симплекс таблицы.. Строка разрешающего элемента делится на этот элемент и полученная строка записывается в новую таблицу на то же место в новой таблице все элементы ключевого столбца = 0, кроме разрезающего, он всегда равен 1. Столбец, у которого в ключевой строке имеется 0,в новой таблице будет таким же строка, у которой в ключевом столбце имеется 0, в новой таблице будет такой же в остальные клетки новой таблицы записывается результат преобразования элементов старой таблицы: В результате получаем новую симплекс-таблицу, отвечающую новому базисному решению. Теперь следует просмотреть строку целевой функции (индексную), если в ней нет отрицательных значений (в задачи на нахождение максимального значения), либо положительных (в задачи на нахождение минимального значения) кроме стоящего на месте (свободного столбца), то значит, что оптимальное решение получено. В противном случае, переходим к новой симплекс таблице по выше описанному алгоритму.


4. ВЫВОДЫ И РЕКОМЕНДАЦИИ ПО ПРАКТИЧЕСКОМУ ИСПОЛЬЗОВАНИЮ 



Целью курсового проекта было решение задач линейного программирования симплекс-методом, составление алгоритма, составление программы по алгоритму и вывод результата на экран. 

Для нахождения оптимального решения можно пойти наиболее простым способом с точки зрения лица которое непосредственно производит решение задачи. Для более быстрого решения задачи можно воспользоваться языками программирования, что приведет к более быстрому решению задачи.

Он основан на пересчёте коэффициентов в системе уравнений и целевой функции при перемене мест свободной и базисной переменных можно формализовать и свести к преобразованию симплекс-таблицы.

Симплекс-метод является вычислительной процедурой представленной в алгебраической форме. Он непосредственно применяется к общей задаче линейного программирования в стандартной форме.

В данном проекте был составлен оптимальный план выпуска продукции каждого вида, обеспечивающий максимальную прибыль.

В выводе своего проектирования хочу подвести итог в целом “Решению матричных игр в смешанных стратегиях” .

Классификацию игр можно проводить: по количеству игроков, количеству стратегий, характеру взаимодействия игроков, характеру выигрыша, количеству ходов, состоянию информации и т.д.

В зависимости от количества игроков различают игры двух и n игроков. Первые из них наиболее изучены. Игры трёх и более игроков менее исследованы из-за возникающих принципиальных трудностей и технических возможностей получения решения. Чем больше игроков - тем больше проблем.

По количеству стратегий игры делятся на конечные и бесконечные. Если в игре все игроки имеют конечное число возможных стратегий, то она называется конечной. Если же хотя бы один из игроков имеет бесконечное количество возможных стратегий игра называется бесконечной.

По характеру взаимодействия игры делятся на:

1) бескоалиционные: игроки не имеют права вступать в соглашения, образовывать коалиции;

2) коалиционные (кооперативные) – могут вступать в коалиции.

В кооперативных играх коалиции наперёд определены.

По характеру выигрышей игры делятся на: игры с нулевой суммой (общий капитал всех игроков не меняется, а перераспределяется между игроками; сумма выигрышей всех игроков равна нулю) и игры с ненулевой суммой.

По виду функций выигрыша игры делятся на: матричные, биматричные, непрерывные, выпуклые, сепарабельные, типа дуэлей и др.

Матричная игра – это конечная игра двух игроков с нулевой суммой, в которой задаётся выигрыш игрока 1 в виде матрицы (строка матрицы соответствует номеру применяемой стратегии игрока 2, столбец – номеру применяемой стратегии игрока 2; на пересечении строки и столбца матрицы находится выигрыш игрока 1, соответствующий применяемым стратегиям).

Для матричных игр доказано, что любая из них имеет решение и оно может быть легко найдено путём сведения игры к задаче линейного программирования.

Биматричная игра – это конечная игра двух игроков с ненулевой суммой, в которой выигрыши каждого игрока задаются матрицами отдельно для соответствующего игрока (в каждой матрице строка соответствует стратегии игрока 1, столбец – стратегии игрока 2, на пересечении строки и столбца в первой матрице находится выигрыш игрока 1, во второй матрице – выигрыш игрока 2.)

Для биматричных игр также разработана теория оптимального поведения игроков, однако решать такие игры сложнее, чем обычные матричные.

Непрерывной считается игра, в которой функция выигрышей каждого игрока является непрерывной в зависимости от стратегий. Доказано, что игры этого класса имеют решения, однако не разработано практически приемлемых методов их нахождения.

Если функция выигрышей является выпуклой, то такая игра называется выпуклой. Для них разработаны приемлемые методы решения, состоящие в отыскании чистой оптимальной стратегии (определённого числа) для одного игрока и вероятностей применения чистых оптимальных стратегий другого игрока. Такая задача решается сравнительно легко.


Заключение курсового проектирования по теме задания ”Решение матричной игры в смешанных стратегиях”



Чтобы описать игру, необходимо сначала выявить ее участников. Это условие легко выполнимо, когда речь идет об обычных играх типа шахмат, канасты и т.п. Иначе обстоит дело с “рыночными играми”. Здесь не всегда просто распознать всех игроков, т.е. действующих или потенциальных конкурентов. Практика показывает, что не обязательно идентифицировать всех игроков, надо обнаружить наиболее важных. Игры охватывают, как правило, несколько периодов, в течение которых игроки предпринимают последовательные или одновременные действия. Эти действия обозначаются термином “ход”. Действия могут быть связаны с ценами, объемами продаж, затратами на научные исследования и разработки и т.д. Периоды, в течение которых игроки делают свои ходы, называются этапами игры. Выбранные на каждом этапе ходы в конечном счете определяют “платежи” (выигрыш или убыток) каждого игрока, которые могут выражаться в материальных ценностях или деньгах (преимущественно дисконтированная прибыль). Еще одним основным понятием данной теории является стратегия игрока. Под ней понимаются возможные действия, позволяющие игроку на каждом этапе игры выбирать из определенного количества альтернативных вариантов такой ход, который представляется ему “лучшим ответом” на действия других игроков. Относительно концепции стратегии следует заметить, что игрок определяет свои действия не только для этапов, которых фактически достигла конкретная игра, но и для всех ситуаций, включая и те, которые могут и не возникнуть в ходе данной игры.

Важна и форма предоставления игры. Обычно выделяют нормальную, или матричную, форму и развернутую, заданную в виде дерева. Чтобы установить первую связь со сферой управления, игру можно описать следующим образом. Два предприятия, производящие однородную продукцию, стоят перед выбором. В одном случае они могут закрепиться на рынке благодаря установлению высокой цены, которая обеспечит им среднюю картельную прибыль ПK. При вступлении в жесткую конкурентную борьбу оба получают прибыль ПW. Если один из конкурентов устанавливает высокую цену, а второй – низкую, то последний реализует монопольную прибыль ПM, другой же несет убытки ПG. Подобная ситуация может, например, возникнуть когда обе фирмы должны объявить свою цену, которая впоследствии не может быть пересмотрена. При отсутствии жестких условий обоим предприятиям выгодно назначить низкую цену. Стратегия “низкой цены” является доминирующей для любой фирмы: вне зависимости от того, какую цену выбирает конкурирующая фирма, самой всегда предпочтительней устанавливать низкую цену. Но в таком случае перед фирмами возникает дилемма, так как прибыль ПK (которая для обоих игроков выше, чем прибыль ПW) не достигается. Стратегическая комбинация “низкие цены/низкие цены” с соответствующими платежами представляет собой равновесие Нэша, при котором ни одному из игроков невыгодно сепаратно отходить от выбранной стратегии. Подобная концепция равновесия является принципиальной при разрешении стратегических ситуаций, но при определенных обстоятельствах она все же требует усовершенствования. Что касается указанной выше дилеммы, то ее разрешение зависит, в частности, от оригинальности ходов игроков. 


Список основных источников опорной литературы



1. Б.Банди, Основы линейного программирования. М: Высшая мат.,1989г. 

2. Б.Т Кузнецов Математические методы и модели исследования операций. М: Юнити,2005г.

3. В.Н. Ашихмин и др. Введение в математическое моделирование, М: Логос, 2005г.

4. Т.Л. Партыко, И.И. Попов. Математические методы, М: Форум, 2003г.

5. В.В. Фаронов. Программирование на языке С++, СПб.: Питер, 2006г.