В последние годы в
прикладной математике большое внимание уделяется новому классу задач
оптимизации, заключающихся в нахождении в заданной области точек наибольшего
или наименьшего значения некоторой функции, зависящей от большого числа
переменных. Это так называемые задачи математического программирования,
возникающие в самых разнообразных областях человеческой деятельности и прежде
всего в экономических исследованиях, в практике планирования и организации
производства («Определение наилучшего состава смеси», «Задача об оптимальном
плане выпуска продукции», «Оптимизация межотраслевых потоков», « Задача о
диете», «Транспортная задача» и т.д.).
Линейное
программирование - это наука о методах исследования и отыскания наибольших и
наименьших значений линейной функции, на неизвестные которой наложены линейные
ограничения. Таким образом, задачи линейного программирования относятся к
задачам на условный экстремум функции. Казалось бы, что для исследования
линейной функции многих переменных на условный экстремум достаточно применить
хорошо разработанные методы математического анализа, однако невозможность их
использования можно довольно просто проиллюстрировать.
Действительно,
путь необходимо исследовать на экстремум линейную функцию
Z = С1х1+С2х2+...
+СNxN
при
линейных ограничениях
a11x1 + a22x2 + ... + a1NХN
= b1
a21x1 + a22x2
+ ... + a2NХN
= b2
. . . . . . . . . . . . . . .
aМ1x1
+ aМ2x2 +
... + aМNХN
= bМ
Так
как Z - линейная функция, то Z = Сj, (j = 1, 2, ..., n), то все
коэффициенты линейной функции не могут быть равны нулю, следовательно, внутри
области, образованной системой ограничений, экстремальные точки не существуют.
Они могут быть на границе области, но исследовать точки границы невозможно,
поскольку частные производные являются константами.
Для
решения задач линейного программирования потребовалось создание специальных
методов. Особенно широкое распространение линейное программирование получило в
экономике, так как исследование зависимостей между величинами, встречающимися
во многих экономических задачах, приводит к линейной функции с линейными
ограничениями, наложенными на неизвестные.
Цель данной курсовой
работы: изучить и научиться применять на практике симплекс - метод для решения
задач линейного программирования.
Задачи курсовой заботы:
1.
привести
теоретический материал;
2.
на
примерах рассмотреть симплекс метод;
3.
представить
данную курсовую работу в виде презентации.
Математическое
программирование занимается изучение экстремальных задач и поиском методов их
решения. Задачи математического программирования формулируются следующим
образом: найти экстремум некоторой функции многих переменных f ( x1,
x2, ... , xn ) при ограничениях gi ( x1,
x2, ... , xn ) * bi , где gi
- функция, описывающая ограничения, * - один из следующих
знаков £,
=,
³,
а bi - действительное число, i = 1, ... , m. f называется целевой
функцией.
Линейное программирование
– это раздел математического программирования, в котором рассматриваются методы
решения экстремальных задач с линейным функционалом и линейными ограничениями,
которым должны удовлетворять искомые переменные.
Задачу линейного
программирования можно сформулировать так. Найти max
Графический метод
довольно прост и нагляден для решения задач линейного программирования с двумя
переменными. Он основан на геометрическом представлении допустимых решений и
целевой функции задачи.
Каждое из неравенств
задачи линейного программирования определяет на координатной плоскости некоторую полуплоскость, а
система неравенств в целом – пересечение соответствующих плоскостей. Множество
точек пересечения данных полуплоскостей называется областью допустимых решений
(ОДР). ОДР всегда представляет собой выпуклуюфигуру, т.е. обладающую
следующим свойством: если две точки А и В принадлежат этой фигуре, то и весь
отрезок АВ принадлежит ей. ОДР графически может быть представлена выпуклым
многоугольником, неограниченной выпуклой многоугольной областью, отрезком,
лучом, одной точкой. В случае несовместности системы ограничений задачи ОДР
является пустым множеством.
Для его применения
необходимо, чтобы знаки в ограничениях были вида “меньше либо равно”, а
компоненты вектора b - положительны.
Алгоритм решения
сводится к следующему:
1.
Приведение
системы ограничений к каноническому виду путём введения дополнительных
переменных для приведения неравенств к равенствам.
Если в исходной системе
ограничений присутствовали знаки “ равно ”
или “ больше либо равно
”, то в указанные ограничения добавляются
искусственные
переменные, которые так же вводятся и в целевую функцию со знаками,
определяемыми типом оптимума.
2.
Формируется
симплекс-таблица.
3.
Рассчитываются
симплекс – разности.
4.
Принимается
решение об окончании либо продолжении счёта.
5.
При
необходимости выполняются итерации.
На каждой итерации
определяется вектор, вводимый в базис, и вектор, выводимый из базиса. Таблица
пересчитывается по методу Жордана-Гаусса или каким-нибудь другим способом.
Данный метод решения
применяется при наличии в ограничении знаков
“равно”, “больше либо
равно”, “меньше либо равно” и является модификацией табличного метода. Решение
системы производится путём ввода искусственных переменных со знаком, зависящим
от типа оптимума, т.е. для исключения из базиса этих переменных последние
вводятся в целевую функцию с большими отрицательными коэффициентами m,
а в задачи минимизации - с положительными m. Таким образом, из
исходной получается новая m - задача.
Если в оптимальном
решении m
- задачи нет искусственных переменных, это решение есть оптимальное решение
исходной задачи. Если же в оптимальном решении m - задачи хоть
одна из искусственных переменных будет отлична от нуля, то система ограничений
исходной задачи несовместна и исходная задача неразрешима.
В основу данной
разновидности симплекс-метода положены такие особенности линейной алгебры,
которые позволяют в ходе решения задачи работать с частью матрицы ограничений.
Иногда метод называют методом обратной матрицы.
В процессе работы
алгоритма происходит спонтанное обращение матрицы ограничений по частям,
соответствующим текущим базисным векторам. Указанная способность делает весьма
привлекательной машинную реализацию вычислений вследствие экономии памяти под
промежуточные переменные и значительного сокращения времени счёта, хороша для
ситуаций, когда число переменных n значительно превышает число ограничений m.
В целом, метод отражает
традиционные черты общего подхода к решению задач линейного программирования,
включающего в себя канонизацию условий задачи, расчёт симплекс – разностей,
проверку условий оптимальности, принятие решений о коррекции базиса и
исключение Жордана-Гаусса.
Особенности заключаются
в наличии двух таблиц - основной и вспомогательной, порядке их заполнения и
некоторой специфичности расчётных формул.
Двойственный
симплекс-метод, как и симплекс-метод, используется при нахождении решения задачи
линейного программирования, записанной в форме основной задачи, для которой
среди векторов, составленных из коэффициентов при неизвестных в системе
уравнений, имеется m единичных. Вместе с тем двойственный симплекс-метод можно
применять при решении задачи линейного программирования, свободные члены
системы уравнений которой могут быть любыми числами (при решении задачи
симплексным методом эти числа предполагались неотрицательными).
Общий
вид задачи линейного программирования
,
Ограничения:
1. Правые части всех
ограничений должны быть неотрицательными bi≥0,
i=1,..m.
Если какой-нибудь из коэффициентов bi<
0, то необходимо коэффициенты ограничения слева и справа домножить на "-1"
и изменить знак данного ограничения на противоположный;
2. Все ограничения
должны быть представлены в виде равенств, поэтому при переходе от неравенства к
равенству используют аппарат дополнительных переменных. Если исходные
ограничения определяют расход некоторого ресурса (знак ""), то переменные xj≥0,
j=n+1,…k
следует
интерпретировать как остаток, или неиспользованную часть ресурса. В этом случае
xj– остаточная переменная
и вводится в уравнение со знаком "+". Если исходные ограничения
определяют избыток некоторого ресурса (знак ""), то вводится избыточная
переменная xj≥0,
j=k+1,…N
знаком
"-".
Переменные:
·
Все
переменные должны быть неотрицательными, т.е. xj≥0,
j=1,…n.
·
Если
переменная не имеет ограничения в знаке, то её нужно представить как разность
двух неотрицательных переменных: x=x’-x’’,
где x’≥0,
x’’≥0.
Такую подстановку следует использовать во всех ограничениях, содержащих эту
переменную, а также в выражении для целевой функции. Если такая переменная
попадает в оптимальное решение, то
.
Целевая функция:
·
Подлежит
максимизации или минимизации. max
z= - min(-z)
·
Система
ограничений в виде равенств и неравенств образует выпуклое множество - выпуклый
многогранник. Это множество может быть ограниченным и неограниченным. Целевая
функция задачи линейного программирования также является выпуклой функцией.
Таким образом, задача линейного программирования является частным случаем
задачи выпуклого программирования.
Рассмотрим систему
ограничений задачи линейного программирования в виде равенств
(1)
·
Система
(1) линейных уравнений совместна, если она имеет, по крайней мере, одно
решение.
·
Система
(1) называется избыточной, если одно из уравнений можно выразить в виде
линейной комбинации остальных.
·
В
системе (1) число переменных (неизвестных xj)
n больше, чем число ограничений m. Будем считать, что ранг этой системы равен m
(система не избыточна) и что система (1) совместна. Тогда m переменных из
общего их числа образуют базисные переменные, а остальные (n-m)
переменных называют небазисными.
·
Если
система уравнений имеет решение, то она имеет и базисное решение.
·
Решение
системы уравнений (1) называют допустимым, если все его компоненты
неотрицательны.
·
Если
система линейных уравнений обладает допустимым решением, то она имеет и базисное
допустимое решение. Совокупность всех допустимых решений системы (1) есть
выпуклое множество, т.е. множество решений задачи линейного программирования
выпукло. Так как это множество образовано плоскостями (гиперплоскостями), то
оно имеет вид выпуклого многогранника. Базисное допустимое решение
соответствует крайней точке выпуклого многогранника (его грани или вершине).
Если существует оптимальное решение задачи линейного программирования, то
существует базисное оптимальное решение.
Целевая функция задачи
линейного программирования есть уравнение плоскости (или гиперплоскости для
числа переменных больше трех). Максимальное или минимальное значение целевая
функция задачи линейного программирования достигает либо в вершине выпуклого
многогранника, либо на одной из его граней. Таким образом, решение (решения)
задачи линейного программирования лежит в вершинах выпуклого многогранника и
для его нахождения надо вычислить значения целевой функции в вершинах выпуклого
многогранника, определяемого условиями – ограничениями задачи.
Рассмотрим задачу
линейного программирования в канонической форме:
Найти максимум
(минимум) функции
при условиях
Предполагается, что
решение этой задачи существует. Чтобы найти оптимальное решение, надо найти
допустимые базисные решения, а из них выбрать оптимальное базисное решение.
Симплекс – метод – это
алгебраический метод решения задач линейного программирования. В процессе
вычислений производиться последовательный обход вершин многогранника решений
(ОДР) с проверкой в каждой вершине условий оптимальности. При этом каждый
переход в смежную вершину сопровождается улучшением целевой функции.
Вычислительные
процедуры симплекс – метода
При графическом методе
решения задачи линейного программирования (ЗЛП) оптимальному решению
соответствует всегда одна из угловых (экстремальных) точек пространства решений.
Это результат положен в основу построения симплекс-метода. Симплекс-метод не
обладает наглядностью геометрического представления пространства решений.
Симплекс-метод
реализует упорядоченный процесс, при котором, начиная с некоторой исходной
допустимой угловой точки, осуществляются последовательные переходы от одной
допустимой экстремальной точки к другой, пока не будет найдена точка
оптимального решения.
Обозначим: N–
общее количество переменных в ЗЛП, представленной в канонической форме; n-
количество исходных переменных; m
- количество ограничений, nq
-
количество дополнительных переменных, тогда N=n+nq.
Каждая вершина многогранника решений имеет m
- ненулевых переменных и
(N-m)
- нулевых переменных. Ненулевые переменные называются базисными, нулевые
переменные – небазисными. Дополним систему равенств равенством целевой функции,
при этом будем считать, что z
является m+1 базисной переменной,
которая всегда присутствует в базисе для любой вершины.
Для получения решения
составляется начальный допустимый базис, в котором базисные переменные должны
быть представлены в виде единичных орт. Это означает, что уравнения,
представляющие данную вершину должны включать каждую базисную переменную только
в одной строке с коэффициентом, равным 1.
При выборе начального
допустимого базиса для составления симплекс-таблицы на первом шаге исходные x1,x2
переменные приравниваются к нулю и являются небазисными, среди введённых
дополнительных переменных выбираются переменные с коэффициентами равными
единице. Переменные x3,x4,x5
в равенствах (2) - (4) являются базисными и в z
- строку входят с коэффициентами, равными 0. Для заполнения симплекс-таблицы
необходимо целевую функцию преобразовать к виду
.
Таким образом,
окончательно получаем:
(1)
(2)
(3)
(4)
При составлении
симплекс-таблицы придерживаются следующих правил:
1.
в
крайнем левом столбце располагаются базисные переменные и z;
2.
в
крайнем правом столбце располагаются правые части ограничений;
3.
в
первой строке располагаются переменные в определённом порядке: сначала z,
потом небазисные переменные, базисные переменные располагаются в последних m
столбцах перед правой частью.
св.
z
x1
x2
x3
x4
x5
z
0
1
-C1
-C2
0
0
0
X3
b1
0
a11
a12
1
0
0
X4
b2
0
a21
a22
0
1
0
X5
b3
0
a31
a32
0
0
1
Идею рассмотрим на
примере:
7x1+5x2→max
2x1+3x2≤19
2x1+x2≤13
3x2≤15
3x1≤18
x1≥0,
x2≥0
Запишем задачу в
каноническом виде. При необходимости предварительно неравенство преобразовать
так чтобы все свободные члены были неотрицательными.
Симплекс метод в
последовательном преобразовании системы уравнений до получения нужного решения.
В общем случае те переменные, в системе уравнений, определитель при которых не
равен 0 и является максимумом порядка, называются базисными переменными.
7x1+5x2→max
2x1+3x2+x3
=19
2x1+x2
+x4
=13
3x2
+x5
=15
3x1
+x6
=18
xi≥0,
(i=1,…n)
В нашем случае
базисными переменными являются x3,
x4,x5,x6.
Остальные переменные являются свободными (x1,x2).
Придавая произвольные значения свободным переменным мы будем получать различные
значения базисных. Любое решение системы ограничений задачи называется
допустимым. Опорным называется решение задачи, записанное в каноническом виде в
котором свободные переменные равны 0.
Оптимальное решение
задачи линейного программирования находиться среди опорных решений. Идея симплекс
метода состоит в том, что определенному правилу перебираются опорные решения до
нахождения оптимального среди них, перебирая опорные решения, по существу, мы
перебираем различные базисные переменные, то есть на очередном шаге некоторая
переменная переводится из числа базисных, а вместо нее некоторая переменная из
числа свободных в число базисных.
7x1+5x2→max
x3=19-2x1-3x2
(0;0;19;13;15;18)
x4
=13-2x1-x2
первоначальный опорный план
x5
=15-3x2
x6
=18-3x1 F(x1,
x2 )=7*0+5*0=0
xi≥0,
(i=1,…n)
На интуитивном уровне
понятно, что естественным будет увеличение x1,
так как коэффициент при нем больше чем при x2.
Оставляя x2=0,
мы можем увеличивать до тех пор, пока x3,
x4,
x5,
x6
будут оставаться неотрицательными.
x1=min
{19/2;13/2;∞;18/3}=6
Это означает что при x1=6,
x6=0,
то есть x1-переходит
в число базисных, а x6-в
число свободных.
x1=6-1/3
x6
Выражаем неизвестные
переменные и целевую функцию через свободные переменные:
В целевой функции все
коэффициенты при переменных отрицательны, значение функции увеличивать нельзя,
аналогично преобразовываем остальные переменные, находим опорный план, из
которого определяем x1,x2.
Множество P={λ1x1+
λ2x2+…+
λkxk}
0≤ hi
≤1
для i= 1,…kn
åRi=1,
1≤ i
≤k
выпуклая линейная комбинация точек x1,x2,…xn.
Если k=2, то это множество
называется отрезком. X1,X2
– концы отрезка. Угловой точкой замкнутого множества называется точка, которая
не является нетривиальной линейной комбинацией точек множества (угловая точка).
Нетривиальность
означает, что хотя бы одна из λ отлична от 0 или 1.
Если задача линейного
программирования имеет единственное решение, то оно лежит среди угловых точек
ОДР. А если решение не одно, то среди решений имеется несколько угловых, таких
что множество всех решений является их выпуклой линейной комбинацией.
Симплекс метод
заключается в том, что сначала находится некоторое опорное решение задачи
(первоначальный опорный план), а затем, целенаправленно переходя от одного
опорного плана к другому, ищется оптимальный план. Если таковых несколько, то
находятся все угловые, а множество решений представляется как их линейная
комбинация.
F1=F(x1);
F2=F(x2)
F2-F1=-υkΔk=F2
можно
доказать, где υk
рассмотренный
выше минимум, который определяется при введении k-ой
переменной в базис, а Δk=åсjxj(1)-Сk,
где n
≤
j ≤1,
X1=(x1(1);x2(1)
;…xn(1))-
оценка k-ой переменной, поэтому
если решается задача на максимум, то величина ΔF2
положительной должна быть, Δk
– отрицательная. При решении задач на минимум ΔF2-отрицательная,
Δk - положительная.
Эти величины вычисляются и если среди ΔF2
все
значения не положительны, то при решении задач на минимум наоборот. Если при
решении на максимум среди ΔF2
несколько положительных, то вводим в базис тот вектор, при котором эта величина
достигает максимум, а если задача решается на минимум и среди ΔF2
несколько отрицательных, то в число базисных включается вектор с наименьшим
значением ΔF2,
то есть с наибольшим по абсолютной величине. При выполнении этих условий
гарантируется наибольшее возможное изменении значения функции.
Решение задачи будет
единственным, если для любых векторов xk
не входящих в базис, оценки Δk≠0,
если хотя бы одно из таких Δk=0,
то решение не является единственным, для нахождения другого решения переходим к
другому опорному плану, включая в базис xk,
где Δk=0.
Перебор все такие опорные решений составляют их в линейную комбинацию, которая
и будет решением задачи.
Если для любого
некоторого Δk
противоречащих условию оптимальности коэффициенты при переменной xk≤
0, то система ограничений не ограничена, то есть оптимального плана не
существует.
Двойственная задача
(ДЗ) – это вспомогательная задача линейного программирования, формулируемая с
помощью определённых правил непосредственно из условий прямой задачи.
Заинтересованность в определении оптимального решения прямой задачи путём
решения двойственной к ней задачи обусловлена тем, что вычисления при решении
ДЗ могут оказаться менее сложными, чем при прямой задачи (ПЗ). Трудоёмкость вычислений
при решении ЗЛП в большей степени зависит от числа ограничений, а не от
количества переменных. Для перехода к ДЗ необходимо, чтобы ПЗ была записана в
стандартной канонической форме. При представлении ПЗ в стандартной форме в
состав переменных xj
включаются также избыточные и остаточные переменные.
Двойственная задача
имеет:
1.
m
переменных, соответствующих числу ограничений прямой задачи;
2.
n
ограничений, соответствующих числу переменных прямой задачи.
Двойственная задача
получается путём симметричного структурного преобразования условий прямой
задачи по следующим правилам:
·
Каждому
ограничению bi
ПЗ
соответствует переменная yi
ДЗ;
·
Каждой
переменной xj
ПЗ соответствует ограничение Cj
ДЗ;
·
Коэффициенты
при xj
в
ограничениях ПЗ становятся коэффициентами левой части соответствующего
ограничения ДЗ;
·
Коэффициенты
Cj
при
xj
в
целевой функции ПЗ становятся постоянными правой части ограничения ДЗ;
·
Постоянные
ограничений bi
ПЗ
становятся коэффициентами целевой функции ДЗ.
Если разрешимо иметь
одно решение. Из пары двойственных задач не обязательно симметричных, то имеет
решение (как следствие получает, что если одна задача имеет решение, то не
имеет решение другая) при этом значения целевых функций на обеих задачах
совпадают.
Если (5) и (6) пара
симметричных двойственных задач, то (x01, x02,
... , x0n) и (y01,
y02,
... , y0n)
являются их оптимальными решениями, то компоненты оптимальных решений
удовлетворяются системе.
В данной курсовой
работе были заложены основы математических методов решения задач линейного
программирования. Поэтому большее внимание уделялась следующим разделам: