Практика № 4, 5, 6. Симплекс-метод решения задачи линейного программирования. Хасанов А. Ю
.docПрактические занятия №4,5,6 (6 час.)
Тема: Симплекс-метод решения задачи линейного программирования.
Рассматриваемые вопросы:
описание симплекс-алгоритма;
применение симплекс-алгоритма при решении задачи ЛП;
поиск допустимого базисного решения;
примеры использования симплекс-метода.
Симплекс-алгоритм.
Геометрическая интерпретация, которой мы пользовались при решении задач линейного программирования (ЛП), перестает быть пригодной для этой цели при числе свободных переменных n – m >= 3. Для нахождения решения задачи ЛП в общем случае (при произвольном числе свободных переменных) применяются не геометрические, а вычислительные методы. Из них наиболее универсальным является так называемый симплекс-метод.
Идея симплекс-метода относительно проста. Пусть в задаче ЛП имеется n переменных и m независимых линейных ограничений, заданных в форме уравнений, т.е. задача ЛП формулирована в канонической форме. Мы знаем, что оптимальное решение (если оно существует) достигается в одной из угловых точек (вершин ОДР), где по крайне мере k = n – m из переменных равны нулю. Выберем какие-то k переменных в качестве свободных и выразим через них остальные m базисных переменных. Пусть, например, в качестве свободных выбраны первые k = n – m переменных x1 , x2 , … xk , а остальные m выражены через них:
xk+1 = ak+1,1x1 + ak+1,2x2 + … + ak+1,kxk + bk+1
xk+2 = ak+2,1x1 + ak+2,2x2 + … + ak+2,kxk + bk+2
… (1)
xn = an,1x1 + an,2x2 + … + an,kxk + bn
Если положить все свободные переменные x1 , x2 , … xk равными нулю, то мы получим решение:
x1 = 0, x2 = 0, … xk = 0, xk+1 = bk+1, xk+2 = bk+2, … , xn = bn,
которое называется базисным. Это решение может быть допустимым или недопустимым. Оно допустимо, если все свободные члены bk+1, bk+2, … , bn неотрицательны. Если это условие выполняется, то полученное решение называется допустимым базисным решением или опорным решением. Допустимое базисное решение соответствует одной из угловых точек ОДР (вершин ОДР). Предположим, что условие не отрицательности свободных членов выполнено. Тогда мы имеем допустимое базисное решение, но является ли оно оптимальным? Чтобы проверить это, выразим целевую функцию
z = c1x1 + c2x2 + … + cnxn , (2)
которую требуется минимизировать, через свободные переменные x1 , x2 , … xk:
z = d0 + d1x1 + … + dkxk , (3)
Для этого надо в (2) подставить (1), выражение базисных переменных через свободные и привести подобные члены. Очевидно, что при x1 = 0, x2 = 0, … xk = 0 z = d0 , т.е. d0 – это значение целевой функции при допустимом базисном решении. Посмотрим, не можем ли мы улучшить решение, т.е. уменьшить целевую функцию z, увеличивая какие-нибудь из переменных x1, x2, … xk (уменьшать их мы не можем, т.к. все они равны нулю, а отрицательные значения переменных недопустимы). Если все коэффициенты d1, d2 , … dk в формуле (3) положительны, то, увеличивая какие-то из переменных x1, x2 , … xk сверх нуля, мы не сможем уменьшить целевую функцию z; следовательно, найденное нами допустимое базисное решение является оптимальным. Если же среди коэффициентов d1, d2 , … dk в формуле (3) есть отрицательные, то, увеличивая некоторые из переменных x1, x2 , … xk , а именно – те, коэффициенты при которых отрицательны, мы можем улучшить решение, т.е. уменьшить z.
Пусть, например, коэффициент d1 в формуле (3) отрицателен. Значит, есть смысл увеличить х1, т.е. перейти от данного допустимого базисного решения (опорного решения) к другому, где переменная х1 не равна нулю, а вместо нее равна нулю какая-то другая, т.е. перейти от одной вершины ОДР к другой вершине. Увеличение х1 “полезно” для целевой функции z, делает меньше. Однако увеличивать х1 надо осторожно, так чтобы не стали отрицательными другие переменные xk+1, xk+2 , … , xn , выраженные через свободные переменные, в частности, через х1 формулами (1). Так как остальные свободные переменные x2 , … xk остаются равными нулю, то изменения базисных переменных xk+1, xk+2 , … , xn от увеличения х1 выражаются формулами:
xk+1 = ak+1,1x1 + b1
xk+2 = ak+2,1x1 + b2
… (4)
xn = an,1 x1 + bn
Посмотрим, опасно ли для переменных xk+1, xk+2 , … , xn увеличение х1 , т.е. может ли оно делать их отрицательными? Да, опасно, если коэффициент при х1 в соответствующем уравнении отрицателен. Если среди уравнений (4) нет уравнения с отрицательным коэффициентом при х1 , то величину х1 можно увеличивать беспредельно, а, значит, целевая функция z не ограничена снизу и оптимального решения задачи ЛП не существует.
Допустим, что это не так и что среди уравнений (4) есть такие, в которых коэффициент при х1 отрицателен. Для переменных, стоящих в левых частях уравнений, увеличение х1 опасно – оно может сделать их отрицательными. Возьмем одну из таких переменных хl и посмотрим, до какой степени можно все же увеличить х1, пока переменная хl не станет отрицательной? Выпишем l–ое уравнение из системы (4)
xl = al,1x1 + bl
Здесь свободный член bl >= 0, а коэффициент al,1 отрицателен. Легко понять, что мы можем увеличивать х1 только до значения, равного - bl / al,1 , а при дальнейшем увеличении х1 переменная хl станет отрицательной.
Выберем ту из переменных xk+1, xk+2 , … , xn , которая раньше всех обратиться в нуль при увеличении х1 , т.е. ту, для которой величина - bl / al,1 меньше всего. Пусть этой переменной будет хr . Тогда имеет смысл “пере разрешить” систему уравнений (1) относительно базисных переменных, выведя из числа свободных переменных х1 и переведя вместо нее в группу свободных переменных хr . Действительно, мы хотим перейти от допустимого базисного решения, задаваемого равенствами x1 = 0, x2 = 0, … xk = 0, к допустимому базисному решению, в котором уже x1 <> 0, а x2 = 0, … xk = 0,хr = 0. Первое допустимое базисное решение мы получили, если обратим в нуль все новые свободные переменные x1, x2, … xk ; второе мы получим, если обратим в нуль прежние переменные x2, … xk, хr . Базисными переменными при этом будут x1,xk+1 , … ,хr-1, хr+1, … , хn .
Предположим, уравнения типа (1) для нового набора базисных и свободных переменных составлены. Тогда можно выразить через новые свободные переменные и целевую функцию z. Если все коэффициенты при переменных в этой формуле положительны, то мы нашли относительное решение: оно получится, если все свободные переменные положить равными нулю. Если среди коэффициентов при переменных есть отрицательные, то процедура улучшения решения продолжается: система вновь пере разрешается относительно других базисных переменных, и так далее, пока не будет найдено оптимальное решение, обращающее целевую функцию z в минимум, или не будет установлено, что целевая функция не ограничена снизу, т.е. задача ЛП не имеет решения.
Изложенное выше является содержанием симплекс-алгоритма. Суть симплекс-алгоритма состоит в установлении для имеющегося допустимого базисного решения является ли оно оптимальным. Если нет, то в указании как перейти к новому допустимому базисному решению, в котором значение целевой функции будет не больше, чем в предыдущем решении.
Примеры использования симплекс-алгоритма для решения задачи линейного программирования.
Пример 1.
Имеется задача линейного программирования в стандартной форме, т.е. с ограничениями – неравенствами.
z = 5x1 + 2x3 min
- 5x1 – x2 + 2x3 <= 2
- x1 + x3 + x4 <= 5
- 3x1 + 5x4 <= 7
xj >= 0, j = 1,2,3,4
Решение
Так как симплекс-алгоритм разработан для задач ЛП в канонической форме, где требуется минимизировать целевую функцию, то нам требуется перейти от ограничений – неравенств к ограничениям равенствам. Для этого введем добавочные переменные x5, x6, x7 такие, что:
- 5x1 – x2 + 2x3 + х5 = 2
- x1 + x3 + x4 + х6 = 5 (5)
- 3x1 + 5x4 + х7 = 7
х5 >= 0, х6 >= 0, х7 >= 0
Таким образом, мы сформулировали исходную задачу ЛП в канонической форме, т.е. с ограничениями равенствами. Число переменных n = 7 на 4 превышает число уравнений m = 3. Значит, четыре переменных могут быть выбраны в качестве свободных.
Из системы уравнений (5) видно, что в качестве свободных переменных проще всего выбрать x1, x2, x3, х4. Тогда базисные переменные x5, x6, x7 выражаются через свободные так:
5x1 + x2 – 2x3 + 2 = х5
x1 – x3 – x4 + 5 = х6 (6)
3x1 – 5x4 + 7 = х7
Этому набору свободных и базисных переменных соответствует базисное решение: x1 = x2 = x3 = x4 = 0, x5 = 2, x6 = 5, x7 = 7, которое является допустимым (x5 >= 0, x6 >= 0, x7 >= 0) и при этом z = 0. но является ли это решение оптимальным? Нет! Потому что в выражении целевой функции z, которая выражена через свободные переменные x1 и x3, коэффициент при x3 отрицателен. Значит, увеличивая x3, можно уменьшить z.
Попробуем увеличить x3. проследим по уравнениям (6), опасно ли это для других переменных? Для этого выпишем как изменяются базисные переменные при увеличении переменной x3, тогда как переменные x1, x2, x4 остаются равными нулю.
х5 = - 2x3 + 2
х6 = - x3 + 5
х7 = 7
Да, опасно для x5 и x6 – в эти уравнения переменная x3 входит с отрицательным коэффициентом, значит, при увеличении x3 соответствующие переменные x5 и x6 могут стать отрицательными.
Посмотрим, какие из этих переменных x5 или x6 раньше обратится в нуль при увеличении x3. Очевидно, x5: она станет равной нулю при x3 = 1, а величина x6 – только при x3 = 5. Поэтому выбираем переменную x5 и вводим ее в число свободных вместо x3. Чтобы “пере разрешить” систему (5) относительно новых базисных переменных x3, x6, x7 поступим следующим образом. В системе (6) уравнение, соответствующее выбранной переменной x5, разрешим относительно новой базисной переменной x3:
х3 = 5/2 * x1 + 1/2 * x2 – 1/2 * x5 + 1
Это выражение подставим вместо x3 в остальные уравнения системы (6). Итак, мы привели систему (5) к виду:
х3 = 5/2 * x1 + 1/2 * x2 – 1/2 * x5 + 1
х6 = - 3/2 * x1 – 1/2 * x2 – x4 + 1/2 * x5 + 4 (7)
х7 = 3 x1 – 5x4 + 7
со свободными переменными x1, x2, x4, x5 и базисными x3, x6, x7.
Выразим целевую функцию z через новые свободные переменные:
z = 5 x1 – 2x3 = 5x1 – 2(5/2 * x1 + 1/2 * x2 – 1/2 * x5 + 1) = - x2 + x5 - 2 (8)
Этому новому набору свободных и базисных переменных соответствует новое допустимое базисное решение:
x1 = x2 = x4 = x5 = 0, x3 = 1, x6 = 4, x7 = 7.
Значение целевой функции при этом решении равно z = -2. Это уже лучше, чем прежнее значение z = 0. Но является ли это решение оптимальным? Все еще нет, т.к. коэффициент при x2 в выражении (8) отрицателен. Итак, будем увеличивать x2. Посмотрим, для какой из переменных, стоящих в левых частях системы (7), это может быть “опасно”. Для этого выпишем как изменяются базисные переменные при увеличении переменной x2, тогда как остальные свободные переменные x1, x4, x5 остаются равными нулю,
х3 = 1/2x2 + 1
х6 = -1/2 * x2 + 4
х7 = 7
Только для x6 (в первое уравнение x2 входит с положительным коэффициентом, а в третье совсем не входит).
Итак, обменяем местами переменные x2 и x6 – первую выведем из числа свободных, а вторую – введем. Для этого разрешим уравнение, соответствующее переменной x6, системы (7) относительно x2 и подставим его в остальные уравнения системы (7). Получили еще один вид системы (5):
x2 = -3x1 – 2x4 + x5 – 2x6 + 8
х3 = x1 – x4 – x6 + 5
х7 = 3 x1 – 5x4 + 7
Выразим целевую функцию z через новые свободные переменные:
z = -2x2 + x5 – 2= – (–3x1 – 2x4 + x5 – 2x6 + 8) + x5 – 2 = 3x1 + 2x4 + 2x6 – 10 (9)
Новому набору свободных и базисных переменных соответствует новое допустимое базисное решение:
x1 = x4 = x5 = x6 = 0, x2 = 8, x3 = 5, x7 = 7.
Целевая функция z равна –10 для этого решения. Является ли это решение оптимальным? На этот раз – да, т.к. коэффициенты при всех свободных переменных в выражении (9) неотрицательны.
Пример 2.
Имеется задача линейного программирования.
z = 2x1 + x2 max
x1 – x2 <= 10
x1 <= 20
x1 >= 0, x2 >= 0
Решение
Для того чтобы применить симплекс-алгоритм необходимо перейти от задачи максимизации к эквивалентной задаче минимизации и от ограничений – неравенств к ограничениям – равенствам. Задача, удовлетворяющая указанным требованиям и эквивалентная исходной, будет выглядеть так:
z = – 2x1 – x2 min
x1 – x2 + x3 = 10
x1 + x4 = 20 (10)
xj >= 0, j = 1,2,3,4
Выберем в качестве базисных переменные x3 и x4 , а в качестве свободных переменные x1 и x2. Тогда базисные выражаются через свободные следующим образом:
х3 = - x1 + x2 + 10 (11)
x4 = - x1 + 20
Этому набору свободных и базисных переменных соответствует базисное решение: x1 = x2 = 0, x3 = 10, x4 = 20.
Это решение является допустимым базисным решением. Значение целевой функции z равно 0 для этого решения, но это решение не является оптимальным, т.к. коэффициенты при свободных переменных x1 и x2 в целевой функции, выраженной через них, являются отрицательными.
Таким образом, целевую функцию z мы можем уменьшить, увеличивая как переменную x1 , так и x2. Но надо выбрать только одну. Выберем ту, коэффициент которой в целевой функции максимален по абсолютной величине. Этот выбор обеспечивает наибольшее увеличение z при одинаковом изменении альтернативных переменных x1 и x2.
Итак, переменную x1 переведем в базисные. Тогда изменение бывших базисных переменных x3 и x4 при увеличении x1 определяется формулами
х3 = - x1 + 10
x4 = - x1 + 20
Отсюда видно, что свободной переменной вместо x1 будет x3. Тогда новые базисные переменные x1 и x4 выражаются через новые свободные x2 и x3 следующим образом:
x1 = x2 – x3 + 10
x4 = –x2 + x3 + 10 (12)
Эти формулы получены из (11), где уравнение, соответствующее x3 , разрешается относительно новой базисной переменной x1 и полученное выражение подставляется в остальные уравнения системы (11).
Целевая функция, выраженная через новые свободные переменные, имеет вид:
z = – 2x1 – x2 = –2(x2 – x3 + 10) – x2 = – 3x2 + 2x3 – 20
Этому набору свободных и базисных переменных соответствует базисное решение: x2 = x3 = 0, x1 = 4, x4 = 20, и при этом z = – 20.
Это решение не является оптимальным, ибо коэффициент в целевой функции при переменной x2 отрицательный. Следовательно, увеличивая x2 мы можем уменьшить значение целевой функции. Посмотрим, как при этом изменяются базисные переменные x1 и x4. Из системы уравнений (12) вытекает
x1 = x2 + 10
x4 = –x2 + 10
Ясно, что переменные x2 и x4 меняются местами, т.е. новой свободной переменной вместо x2 будет x4. Из уравнения, соответствующего x4, системы (12), найдем выражение базисной переменной x2 через новые свободные x3 и x4. Подставив это выражение в остальные уравнения системы (12), получим
х1 = –x4 + 20
x2 = x3 – x4 + 10
Целевая функция z, выраженная через новые свободные переменные x3 и x4, выглядит так:
z = – 3x2 + 2x3 – 20 = –3(x3 – x4 + 10) + 2 x3 – 20 = – x3 + 3x4 – 50
Допустимое базисное решение, соответствующее этому набору свободных и базисных переменных, имеет вид: x3 = x4 = 0, x1 = 20, x2 = 10. Но это решение, тоже, не является оптимальным, ибо коэффициент при x3 в z отрицателен. Поэтому при увеличении x3 целевая функция z будет уменьшаться. При этом базисные переменные x1 и x2 будут изменяться в соответствии с выражениями:
х1 = 20
x2 = x3 + 10
Но эти выражения показывают, что при любом увеличении переменной x3 базисные переменные x1 и x2 остаются неотрицательными, т.е. x3 можно увеличивать сколько угодно. А так при этом целевая функция z уменьшается до минус бесконечности, то, следовательно, задача оптимального решения не имеет.
Заметим, что в рассмотренных примерах нам не пришлось искать начальные допустимые базисные решения: они сразу же получались, когда делали свободные переменные равными нулю. Это объясняется тем, что в первых уравнениях, выражающих базисные переменные через свободные, все свободные члены были не отрицательными и, значит, первое же попавшееся базисное решение оказывалось допустимым. Если это окажется не так, то нам понадобится предварительный этап поиска какого-либо допустимого базисного решения, чтобы с его помощью запустить симплекс-алгоритм нахождения оптимального решения. К счастью, и эту задачу можно решить, используя симплекс-алгоритм. Приступим к рассмотрению этого вопроса.
