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

advertisement
ВИДЫ ЗАДАЧ ЛИНЕЙНОГО ПРОГРАММИРОВАНИЯ,
СПОСОБЫ ИХ РЕШЕНИЯ
© Дунаев Д.Н.
Уфимский государственный авиационный технический университет,
г. Уфа
В настоящей статье дается введение в линейное программирование,
сферы его применения, а также подходы к решению задач линейного
программирования.
Линейное программирование – это направление математического программирования, изучающее методы решения экстремальных задач, которые
характеризуются линейной зависимостью между переменными и линейным
критерием.
Линейное программирование успешно применяется в военной области,
сельском хозяйстве, экономике, медицине, транспортной отрасли, в социальных науках. Широкому распространению данного метода способствовали высокоэффективные алгоритмы, реализующие данный метод. В частности задачи оптимального планирования производства также могут быть отнесены к задачам линейного программирования.
Общей задачей линейного программирования называется задача нахождения экстремума (максимума или минимума) линейной функции:
Z(x) = c1x1 + c2x2 + … + cnxn
(1)
определенной на некотором выпуклом подмножестве n-мерного пространства. Данное подмножество задается системой уравнений и неравенств:
a11x1 + a12x2 + a13x3 + … + a1nxn  b1
a21x1 + a22x2 + a23x3 + … + a2nxn  b2
a31x1 + a32x2 + a33x3 + … + a3nxn  b3
…
am1x1 + am2x2 + am3x3 + … + amnxn  bm
x1, x2, x3, …, xn  0
(2)
Равенства и неравенства, входящие в систему уравнений, называются
ограничениями. Функция Z(x) называется функцией цели. Любое решение,
удовлетворяющее системе (2) называется планом задачи. План задачи, при
котором целевая функция принимает своем максимальное (минимальное)
значение, называется оптимальным.

Аспирант кафедры Автоматизированных систем управления.
НАУКА И СОВРЕМЕННОСТЬ – 2013
122
Задача линейного программирования может:
‒ иметь единственное решение;
‒ иметь бесчисленное множество решений;
‒ не иметь решения:
 из-за несовместимости системы ограничений;
 из-за неограниченности функции цели на множестве планов.
Методы решения задач линейного программирования:
1. Графический метод.
Графический способ решения ЗЛП может применяться, в случае если
целевая функция содержит две, реже три, неизвестные переменные.
Рассмотрим на примере. Найти максимальное значение целевой функции:
Z(x) = 3x1 + 2x2
(3)
при следующих ограничениях:
x1 + 2x2  6
2x1 + 2x2  8
-x1 + x2  1
x1, x2  0
(4)
Система неравенств (4) образует многоугольник OABCD допустимых
решений (рис. 1).
Рис. 1. Область допустимых решений
Вершины OABCD называются опорными планами. Если задача имеет
единственное решение, то оптимальный план совпадает с одним из опорных планов. Линейная целевая функция на графике перпендикулярна целевому вектору (3; 2) и свое максимальное значение принимает в точке C
(3,33; 1,33) = 12.66.
Технические науки
123
Графический метод очень нагляден, но изобразить графически n-мерное
пространство при n > 3 не представляется возможным. В подобных случаях
применяются другие методы, описанные ниже.
2. Симплекс-метод.
В 1949 году американский математик Джордж Бернард Данциг разработал эффективный метод решения задач линейного программирования (ЗЛП) –
симплекс-метод. Основное свойство симплекс метода заключает в его итерационности. На каждом этапе алгоритм переходит к новому опорному плану, улучшая значение целевой функции. Когда улучшение целевой функции
невозможно процесс останавливается. Решение задачи симплекс методом
предполагает множество однотипных операций, поэтому компьютер становится незаменимым инструментом.
Симплекс метод применим только к задаче в канонической форме. Для
перехода от стандартной задачи к канонической необходимо:
1. обеспечить положительность всех свободных членов b. Если свободный член отрицателен, то все неравенство умножается на -1,
знак неравенства при этом меняется на противоположенный;
2. Все неравенства преобразуются в равенства путем добавления дополнительных переменных. Если знак неравенства «меньше либо
равно», то дополнительная переменная включается со знаком «+», в
противном случае со знаком «-».
В каноническом виде система примет вид:
a11x1 + a12x2 + a13x3 + … + a1nxn + xn+1 = b1
a21x1 + a22x2 + a23x3 + … + a2nxn + xn+2 = b2
…
am1x1 + am2x2 + am3x3 + … + amnxn + xn+m = bm
x1, x2, x3, …, xn+m  0
b1, b2, b3, …, bm  0
(5)
Алгоритм симплекс-метода:
1. Нахождение первоначально базисного решения.
2. Переход к лучшему плану путем преобразования Гаусса-Жордана.
3. Проверка решения на оптимальность.
M переменных системы m линейных уравнений с n переменными, коэффициенты при которых образуют единичную матрицу называют базисными переменными.
Базисным решением системы m линейных уравнений с n переменными
называется решение, в котором n – m небазисных переменных равны нулю.
В случае если все неравенства системы имеют условие «меньше либо
равно», то дополнительные переменные образуют единичную матрицу. Принимая их за базисные, а остальные приравнивая к нулю получаем первоначальное базисное решение. Если не удается найти базисного решения, то в
124
НАУКА И СОВРЕМЕННОСТЬ – 2013
уравнения с условием «больше либо равно» вводятся искусственные переменные. В случае наличия искусственных переменных применяется двухэтапный симплекс метод или м-метод.
3. Метод Штифеля.
Помимо метода Гаусса-Жордана существует еще один метод преобразования систем линейных уравнений – метод жордановых исключений. Применительно к задачам линейного программирования, данный метод получил
название метода Штифеля.
Преимуществом метода Штифеля в сравнении с симплекс-методом является то, что он решает задачи в стандартом виде, без предварительного их
приведения к каноническому. Таким образом, нет необходимости в ведении
дополнительных переменных и дополнительных действий в случае ввода
искусственных переменных. В результате задачи линейного программирования решаются гораздо проще и быстрее, чем традиционным симплексметодом.
4. Методы целочисленного линейного программирования (ЦЛП).
ЦЛП предназначено для решения задач, в которых все или некоторые
переменных должны принимать дискретные или целочисленные значения.
Несмотря на интенсивные исследования известные вычислительные методы решения задач ЦЛП далеки от совершенства.
Примером задач могут быть системы с булевыми переменными, когда
переменная может принимать значения 0 или 1. Или, например, количество
производимых предприятием изделий может быть только целым значением.
Методы решения задач ЦЛП основаны на использовании вычислительных возможностей методов линейного программирования. Обычно алгоритмы ЦЛП включают три шага [1]:
1. «Ослабление» пространства допустимых решений задачи ЦЛП путем замены любой двоичной переменной y непрерывным ограничением 0 ≤ y ≤ 1 и отбрасывания требования целочисленности для
всех остальных переменных. В результате получается обычная задача линейного программирования;
2. Решение задачи линейного программирования и определение ее оптимального значения;
3. Имея полученное (непрерывное) оптимальное решение, добавляем
специальные ограничения, которые итерационным путем изменяют
пространство допустимых решений задачи линейного программирования таким образом, чтобы, в конечном счете, получилось оптимальное решение, удовлетворяющее требованиям целочисленности.
Разработаны два общих метода генерирования специальных ограничений, о которых идет речь при реализации шага 3:
1. Метод ветвей и границ;
2. Метод отсекающих плоскостей.
Технические науки
125
Хотя ни один из упомянутых методов не дает надежных результатов при
решении задачи ЦЛП, опыт вычислений свидетельствует, что метод ветвей
и границ более успешно решает задачу, чем метод отсекающих плоскостей.
Ниже приводятся программы, которые предназначены для решения задач линейного программирования:
1. TORA;
2. LIPS;
3. Стандартная надстройка «поиск решения» в MS Excel.
Среди коммерческих можно выделить AMPL, GAMS, LINGO и MPL.
В настоящей статье дается только поверхностный обзор методов решения
и видов задач линейного программирования. Хорошее описание методов с
многочисленными примерами дается в [1]. Детально познакомиться с методами линейного программирования можно в [4], с методами ЦЛП – в [2, 3].
Список литературы:
1. Таха Хемди А. Введение в исследование операций. – 7-е изд. – М.:
Издательский дом «Вильямс», 2005. – 912 с.
2. Белоусов Е.Г. Введение в выпуклый анализ и целочисленное программирование. – М.: МГУ, 1977.
3. Корбут А.А., Филькельштейн Ю.Ю. Дискретное программирование. –
М.: Наука, 1968.
4. Гольштейн Е.Г., Юдин Д.Б. Линейное программирование: Теория, методы и приложения. – М.: Наука, 1969.
5. LIPS. Linear Program Solver [Электронный ресурс]. – Режим доступа:
http://sourceforge.net/projects/lipside.
МЕТОД ШТИФЕЛЯ В РЕШЕНИИ ЗАДАЧ
ЛИНЕЙНОГО ПРОГРАММИРОВАНИЯ
© Дунаев Д.Н.
Уфимский государственный авиационный технический университет,
г. Уфа
В настоящей статье рассматривается решение задач линейного программирования методом Штифеля.
Наиболее простым методом преобразования линейных уравнений традиционно считается метод Гаусса-Жордана. На основе данного метода реализован симплекс метод решения задач линейного программирования. Однако

Аспирант кафедры Автоматизированных систем управления.
Download