Симплексный метод решения задачи линейного программирования
Геометрическая интерпретация, которой мы пользовались при решении задач линейного программирования, перестает быть пригодной для этой цели при числе свободных переменных n-m>3, а затруднительна уже при n-m=3. Для нахождения решения задачи линейного программирования в общем случае (при произвольном числе свободных переменных) применяются не геометрические, а вычислительные методы. Из них наиболее универсальным является так называемый симплекс-метод. Данный метод получил несколько различных форм (модификаций) и был разработан в 1947 году Г. Данцигом.
Допустимое множество базисных решений системы линейных уравнений образует в объеме многогранное тело, например тетраэдр, вершины которого угловые точки.
Каждой угловой точке многогранника решений соответствует опорный план (допустимое базисное решение).
Количество перебираемых допустимых базисных решений можно сократить и проводить не беспорядочный перебор, а последовательный по специальному алгоритму, улучшая значение целевой функции.
В тех случаях, когда модель содержит m уравнений, для построения опорных решений используются т переменных, принимающих некоторые положительные значения при нулевых значениях остальных свободных переменных. Вычислительная процедура может быть представлена в виде следующей последовательности.
Итеративный переход от одного допустимого базисного решения проводится направленно от одной вершины области допустимых решении к другой, заключающегося в обмене базисных и свободных переменных: базисная переменная приравнивается к нулю и переходит в свободную, а соответственно свободная переменная переводится на место базисной. Если в столбце свободных членов все элементы положительны, то решение является допустимым. Если в строке целевой функции все элементы неотрицательные, то решение является оптимальным при решении задачи на максимум.
В соответствии с симплексным методом на первом шаге находят начальное опорное решение — допустимый вариант, удовлетворяющий всем ограничениям. Затем последовательно за определенное число итераций направленно осуществляется переход от одного опорного решения к другому вплоть до оптимального. Следует заметить, что на первом шаге в качестве базисных переменных следует выбрать такие т переменные, каждая из которых входит только один раз в одно из т уравнений системы, при этом нет таких уравнений системы, в которые не входит ни одна из этих переменных. При этом если выбранные переменные имеют те же знаки, что и соответствующие им свободные члены в правых частях, то полученное базисное решение будет допустимым. В процессе решения системы линейных уравнений необходимо ориентироваться на сохранение неотрицательности всех переменных, поскольку это определяет допустимость решения.
Д
ля
использования рассмотренного алгоритма
симплексного метода
к минимизации линейной формы связи F(X)
следует
искать максимум функции F1(X)=-
F(X),
а
затем полученное решение
взять с обратным знаком.
Предложенный алгоритм приводит к оптимальному решению для любой модели линейного программирования за конечное число итераций, если система линейных уравнений задачи совместна.
Симплексный метод основан на последовательном переходе от одного базисного решения (опорного плана) задачи линейного программирования к другому опорному плану, при этом значение целевой функции изменяется в лучшую сторону.
Идея симплекс-метода относительно проста. Пусть в задаче линейного программирования имеется n переменных и m независимых линейных ограничений, заданных в форме уравнений. Мы знаем, что оптимальное решение (если оно существует) достигается в одной из опорных точек, где по крайней мере k=n-m из переменных равны нулю. Выберем какие-то k переменных в качестве свободных и выразим через них остальные т базисных переменных. Пусть, например, в качестве свободных выбраны первые k=n-m переменных x1, x2, …, xk, а остальные т выражены через них:
(1)
Предположим, что все свободные переменные х1, х2, ..., хк равны нулю.
При этом мы получим:
Это решение может
быть допустимым или недопустимым. Оно
допустимо, если все свободные члены
,
неотрицательны. Предположим, что это
условие выполнено. Тогда мы
получили опорное решение. Но является
ли оно оптимальным?
Чтобы проверить это, выразим целевую
функцию Z
через свободные переменные х1,
х2,
..., хк:
(2)
Очевидно, что при
х1
= х2
= ... = хк
= 0, Z=
0.
Проверим, может ли быть улучшено
решение, т. е. получено уменьшение функции
Z
c
увеличением каких-нибудь из переменных
х1,
х2,
..., хк
(уменьшать
их мы не можем, так как все они равны
нулю, а отрицательные значения переменных
недопустимы). Если все коэффициенты
,
,
…,
в (2) положительны, то увеличение каких-либо
из переменных х1,
х2,
..., хк
не может
уменьшить Z;
следовательно, найденное опорное решение
является оптимальным.
Если же среди
коэффициентов
,
,
…,
есть
отрицательные, то, увеличивая некоторые
из переменных х1,
х2,
..., хк
(т.е,
коэффициенты при которых отрицательны),
мы можем улучшить решение.
Пусть, например, коэффициент в (2) отрицателен. Значит, есть смысл увеличить х1 т. е. перейти от данного опорного решения к другому, где переменная х1 не равна нулю, а вместо нее равна нулю какая-то другая. Однако увеличивать х1 следует с осторожностью, так чтобы не стали отрицательными другие переменные xk+l, xk+2, ..., хn, выраженные через свободные переменные, в частности через x1 формулами (1).
Например, если коэффициент при х1 в соответствующем хj уравнении (1) отрицателен, то увеличение x1, может сделать хj отрицательным. Наоборот, если среди уравнений (1) нет уравнения с отрицательным коэффициентом при x1, то величину x1 можно увеличивать беспредельно, а, значит, линейная функция Z не ограничена снизу и оптимального решения 03 не существует.
Допустим, что это не так и что среди уравнений (1) есть такие, в которых коэффициент при x1 отрицателен. Для переменных, стоящих в левых частях этих уравнений, увеличение x1 опасно — оно может сделать их отрицательными.
Возьмем одну из таких переменных x1 и посмотрим, до какой степени можно увеличить x1, пока переменная x1 не станет отрицательной. Выпишем l-е уравнение из системы (1):
Здесь свободный
член
0, а коэффициент
отрицателен. Легко понять, что если мы
оставим х2
= х3
= ... = хк
= 0,
то х1
можно
увеличивать только до значения, равного
,
а при дальнейшем увеличении х1
переменная х1
станет отрицательной.
Выберем ту из
переменных xk+l,
xk+2,
..., хn,
которая раньше всех обратится в нуль
при увеличении х1,
т. е. ту, для которой величина
наименьшая. Пусть это будет х1
. Тогда имеет смысл разрешить систему
уравнений (1) относительно других
базисных переменных, исключая из
числа свободных переменных х1
и переводя
вместо нее в группу свободных переменных
хr.
Действительно,
мы хотим перейти от опорного решения,
задаваемого равенствами х1
= х2
= ... = хк
= 0,
к опорному решению, в котором уже
,
а х2
= ... = хк
= хr.
= 0. Первое опорное решение мы получили,
положив равными нулю все прежние
свободные переменные х1,
х2,
..., хк,
второе мы
получим, если обратим в нуль все новые
свободные переменные х2,
х3,
..., хк,
хr.
Базисными переменными при этом будут x1, xk+1, xk+2, …, xr-1, xr+1, …, xn.
Предположим, что уравнения типа (1) для нового набора базисных и свободных переменных составлены. Тогда можно выразить через новые свободные переменные и линейную функцию Z. Если все коэффициенты при переменных в этой формуле положительны, то мы нашли оптимальное решение: оно получится, если все свободные переменные положить равными нулю. Если среди коэффициентов при переменных есть отрицательные, то процедура улучшения решения продолжается: система вновь разрешается относительно других базисных переменных, и так далее, пока не будет найдено оптимальное решение, обращающее функцию Z в минимум.
Рассмотрим алгоритм симплексного метода на примере решения задачи планирования товарооборота предприятия торговли.
К оммерческое предприятие реализует n товарных групп, располагая m ограниченными материально-денежными ресурсами bi> 0 (i=1,m). Известны расходы ресурсов каждого i-вида на реализацию единицы товара по каждой группе, представленной в виде матрицы А = (aij), и прибыль сij получаемая предприятием от реализации единицы товара j-группы. Необходимо определить объем и структуру товарооборота хj (j=1,n), при которых прибыль коммерческого предприятия была бы максимальной.
Математическую модель задачи запишем следующим образом. Определить вектор Х = (хих2, …,хп), который удовлетворяет ограничениям вида:
и обеспечивает максимальное значение целевой функции:
Алгоритм симплексного метода включает следующие этапы:
1. Составление первого опорного плана. Система ограничений задачи, решаемой симплексным методом, задана в виде системы неравенств смысла «<», правые части которых bi> 0. Перейдем от системы неравенств к системе уравнений путем введения неотрицательных дополнительных балансовых переменных. Векторы-столбцы при этих переменных представляют собой единичные векторы и образуют базис, а соответствующие им переменные называются базисными:
где
-
дополнительные переменные,
хj-
базисные
переменные,
Решим эту систему относительно дополнительных переменных:
,
а функцию цели перепишем в виде уравнения
Следует заметить, что опорным решением называется базисное неотрицательное решение.
Полагая, что основные переменные x1 =х2 =х3 = ... хп = 0, получим допустимое базисное решение - опорный план Х1 = (0, 0, ..,, 0, bь b2, ..., bm); F(X1) = 0, который заносим в симплексную таблицу. Она состоит из коэффициентов системы ограничений и свободных членов. Последняя строка таблицы называется индексной и заполняется коэффициентами функции цели, взятыми с противоположным знаком.
Проверка плана на оптимальность. Если значение базисных переменных неотрицательны, то решение является допустимым. Если все коэффициенты индексной строки симплексной таблицы при решении задачи на максимум неотрицательны ( 0), то план является оптимальным. Если найдется хотя бы один коэффициент индексной строки меньше нуля, то план не оптимальный, и его необходимо улучшить.
Определение ведущих столбца и строки. Из отрицательных коэффициентов индексной строки выбираем наибольший по абсолютной величине, что и определяет ведущий столбец, который показывает, какая переменная на следующей итерации перейдет из свободных в базисные.
Затем элементы столбца свободных членов симплексной таблицы делим на элементы того же знака (+/+; -/-) ведущего столбца. Результаты заносим в отдельный столбец Qi, которые должны быть всегда положительны. Строка симплексной таблицы, соответствующая минимальному значению Qi, является ведущей. Она и определяет переменную xi, которая на следующей итерации выйдет из базиса и станет свободной (обмен).
Элемент симплексной таблицы, находящийся на пересечении ведущих столбца и строки, называют разрешающим и выделяют, например, кружком.
4. Построение нового опорного плана. Переход к новому плану осуществляется в результате пересчета симплексной таблицы методом Жордана — Гаусса. Сначала заменим переменные в базисе, т.е. вместо xi в базис войдет переменная хj, соответствующая ведущему столбцу (замена).
Разделим все элементы ведущей строки предыдущей симплексной таблицы на разрешающий элемент и результаты деления занесем в строку следующей симплексной таблицы, соответствующей введенной в базис переменной xj. В результате этого на месте разрешающего элемента в следующей симплексной таблице запишем 1, а в остальных клетках у столбца, включая клетку столбца индексной строки, записываем нули. Остальные новые элементы нового плана находятся по правилу прямоугольника:
,
где СТЭ - элемент старого плана;
РЭ – разрешающий элемент;
А и В – элементы старого плана, образующие прямоугольник с элементами СТЭ и РЭ.
Далее возвращаемся ко второму этапу алгоритма - проверке плана на оптимальность.
При решении задачи линейного программирования на минимум целевой функции признаком оптимальности плана являются отрицательные значения всех коэффициентов индексной строки симплексной таблицы.
Если_в ведущем
столбце все коэффициенты aij
< 0, то
функция цели F(
)
не ограничена
на множестве допустимых планов, т.е.
и задача не имеет решения.
Если в столбце Qi - симплексной таблицы содержатся два или несколько одинаковых наименьших значений, то новый опорный план будет вырожденным (одна или несколько базисных переменных станут равными нулю). Вырожденные планы могут привести к зацикливанию, т.е. к многократному повторению процесса вычислений, не позволяющему получить оптимальный план. В таких случаях для выбора ведущей строки используют метод Креко, который заключается в следующем. Элементы строк, имеющие одинаковые наименьшие значения Qi, делятся на предполагаемые разрешающие элементы, а результаты заносятся в дополнительные строки. За ведущую строку выбирается та, в которой раньше встретится наименьшее частное при чтении таблицы слева направо по столбцам.
Если в оптимальный план вошла дополнительная переменная хп+1, то при реализации такого плана имеются недоиспользованные ресурсы i-го вида в количестве, полученном в столбце свободных членов симплексной таблицы.
Если в индексной строке симплексной таблицы оптимального плана находится нуль, принадлежащий свободной переменной, не вошедшей в базис, а в столбце, содержащем этот нуль, имеется хотя бы один положительный элемент, то задача имеет множество оптимальных планов. Свободную переменную, соответствующую указанному столбцу, можно внести в базис, выполнив соответствующие этапы алгоритма. В результате будет получен второй оптимальный план с другим набором базисных переменных.
