
Автоматизация конструкторского и технологического проектирования
..pdf
91
ν1 + ν2 ≤ 20; −ν1 + 4ν2 ≤ 20; ν1,ν2 ≥ 0.
Так как целевая функция и ограничения зависят всего лишь от двух переменных, их можно представить в виде прямых на плоскости ν1 O ν2. Эта графическая интерпретация задачи показана на рисунке 3.6, где определяемые прямыми ограничения показаны сплошными линиями, а линии равного уровня целевой функции – пунктирными. Стрелки на каждой граничной прямой показывают, с какой стороны прямой выполняется ограничение.
n2
n1 + n2 = 20
20
15 |
|
|
|
|
|
|
-n1 + 4n2 = 20 |
|
||
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
||
|
|
|
|
B |
|
|
|
|
|
|
8 |
|
|
|
|
|
|
|
|
|
|
A |
|
|
|
|
F = –68 |
|
||||
5 |
|
|
|
|
|
|||||
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
C |
n1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
|
|
|
|
|
|
||
|
|
12 |
15 |
20 |
||||||
|
|
|
||||||||
|
|
|
|
|
||||||
Направление |
|
|
|
|
|
|
|
|
|
|
убывания F |
|
|
F = 0 |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
Рис. 3.6 – Геометрическая интерпретация задачи линейного программирования
Для точек внутри заштрихованной области ОАВС и на ее границах выполняются ограничения задачи. Эта область называется допустимой, а точки внутри области и на её границах представляют собой допустимые решения за-

92
дачи. Допустимых решений множество, и необходимо найти одно из них, ми-
нимизирующее целевую функцию F. |
|
Штриховыми линиями на |
рисунке 3.6 изображены прямые |
F′ = −3ν1 − 4ν2 = 0 и F′′ = −3ν1 − 4ν2 |
= −68. Эти прямые параллельны и пред- |
ставляют собой две линии равного уровня F со значениями 0 и –68 соответственно. Целевая функция убывает в направлении вектора, обратного градиенту
∂F
− ∂ν1 = 3 , ∂F 4
∂ν2
показанному на рисунке 3.6 пунктирной стрелкой.
Линией уровня F с наименьшим значением целевой функции, имеющей хотя бы одну общую точку с областью допустимых значений, является прямая, проходящая через точку В с координатами (12,8). Минимальное значение целевой функции равно –68. Заметим, что оптимальное решение задачи достигается в вершине допустимой области, а сама область является выпуклой, причем решение соответствует строгому выполнению равенств для ограничений задачи, и число переменных, не равных нулю, равно числу ограничений в задаче. Это эквивалентно равенству нулю двух добавочных переменных, которые необходимо было бы ввести в ограничения задачи для приведения ее к стандартной форме. Такие решения, в которых не равны нулю столько переменных, сколько в стандартной форме задачи ограничений-равенств, а остальные переменные равны нулю, называются опорными решениями задачи линейного программирования; они всегда соответствуют одной из вершин многоугольника ограничений. Переменные, не равные нулю, называются допустимым базисным решением задачи, или просто базисом, остальные переменные – небазисными или нулевыми.
Эти выводы можно распространить и на случай многомерной задачи. В случае n переменных каждое уравнение-ограничение представляет собой плоскость в n-мерном пространстве. Фигура, образованная этими плоскостями, образует область допустимых значений переменных и называется симплексом. Для нашего частного случая двумерной задачи симплекс представляет собой многоугольник на плоскости.
Одно из основных утверждений линейного программирования показывает, что для того, чтобы задача линейного программирования имела оптималь-

93
ное решение, симплекс должен быть выпуклым, т. е. допустимая область определения переменных является выпуклым множеством.
·····························································
Опорные решения задачи линейного программирования соот-
ветствуют вершинам симплекса ограничений, в которых не равны нулю и положительны m переменных по числу уравненийограничений, образующих допустимое базисное решение, и равны нулю остальные n–m переменных, образующих небазисное решение.
Оптимальное решение задачи линейного программирования, если оно существует, является одним из опорных решений.
·····························································
Эти утверждения подтверждаются рассмотренным ранее графическим примером. Оптимальное решение задачи было получено в одной из вершин симплекса ограничений и представляет собой одно из опорных решений.
························· Выводы ·························
Приведенные утверждения свидетельствуют, что при поиске оптимального решения достаточно вычислить только все опорные решения и определить значение целевой функции в них. Однако с возрастанием числа переменных и ограничений эти вычисления оказываются очень трудоемкими. Более рациональное решение обеспечивает симплекс-метод, который позволяет, отправляясь от какого-либо допустимого базисного решения, т. е. вершины симплекса, перейти к соседнему базисному решению, в котором значение целевой функции будет меньше, причем остальные варианты не вычисляются. Оптимальное решение задачи линейного программирования симплекс-методом получается за конечное число шагов.
·······································································
························· Пример ·························
Рассмотрим процедуру симплекс-метода подробнее.
Работа симплекс-метода начинается с выбора опорного решения V0 , содержащего m базисных ненулевых переменных и n–m небазисных нулевых переменных νi , i = 1,...,n. Для упрощения записи положим, что базисные пере-
94
менные представляют собой первые m переменных вектора V0 в задаче (3.20). Так как в задаче имеется m уравнений-ограничений, то m базисных переменных ν1,...,νm могут быть выражены через оставшиеся n–m небазисных переменных νm+1,...,νn и уравнения-ограничения могут быть преобразованы от (3.20) к виду
ν1 = D1 − α1,m+1νm+1 − α1,m+2νm+2 − ... − α1,nνn
................................................................................, |
(3.21) |
νm = Dm − αm,m+1νm+1 − αm,m+2νm+2 − ... − αm,nνn
где Di – постоянные, αij – преобразованные коэффициенты матрицы ограни-
чений A в задаче (3.20).
На основании (3.21) и (3.20) целевая функция F также может быть записана как функция от νm+1,...,νn :
(3.22) где F0 – постоянная, βi – преобразованные коэффициенты целевой функции.
·······································································
Так как в допустимом базисном решении переменные ν1,...,νm должны быть неотрицательны, а переменные νm+1,...,νn равны нулю по определению, то νi = Di ≥ 0, i = 1,...,m, иначе не выполняются условия неотрицательности переменных и опорное решение не является допустимым решением задачи.
Условие оптимальности опорного решения может быть записано в виде βi ≥ 0, i = m +1,...,n, так как в этом случае увеличение любой небазисной переменной νi , i = m +1,...,n, от нулевого значения будет приводить к возрастанию целевой функции по сравнению с F0 . Если же некоторые из коэффициентов βi отрицательны, то базисное допустимое решение не является оптимальным, так как увеличение от нуля небазисных переменных, входящих в целевую функцию с отрицательными коэффициентами, приведет к её уменьшению относительно
F0 .
Выделим из нулевых переменных с βi < 0 переменную νl , входящую в целевую функцию с максимальным по модулю отрицательным коэффициентом βi < 0, βi = min{βi ,i = m + 1,...,n} . При переходе к новому опорному решению

95
эту переменную целесообразно включить в число базисных и выбрать ее максимально возможной, чтобы сильнее уменьшить значение целевой функции. При этом одну из базисных переменных необходимо будет перевести в нулевую, чтобы вновь полученное решение соответствовало вершине симплекса ограничений. Это будет переменная νk , k [1,...,m], которая быстрее всего до-
стигнет нулевого значения при увеличении νl от нуля. Другими словами,
νk = Dk − αkiνl для всех k = 1,...,m стремится к нулю быстрее при увеличении значения νl . Это означает, что αkl > 0 и значение Dk αkl ≥ 0 минимально для всех базисных переменных: Dk
αkl = min{Di
αil ,i = 1,...,m}. Равенство нулю
νk позволяет определить максимально возможное значение вводимой в базис переменной νl следующим образом:
νk = 0 = Dk − αklνl ; νl = Dk αkl . |
(3.23) |
Как следует из (3.21), изменение переменной νl , ранее относящейся к допустимому базисному решению, приведет к изменению остальных базисных переменных и теперь улучшенный допустимый базис определится как
|
|
|
D − a |
|
(D |
a |
|
), i = 1,...,m, i ≠ k, |
i ≠ l, |
||||||
|
|
|
|
|
i il |
|
|
k |
|
kl |
|
|
|||
V6 |
|
|
|
|
|
|
|||||||||
= |
|
= Dk |
a |
|
, i ≠ l. |
|
|||||||||
|
|
|
ν |
i |
kl |
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
||||
Нулевыми переменными в этом новом опорном решении, соответствую- |
|||||||||||||||
щем новой вершине симплекса, будут |
|
|
|||||||||||||
|
|
|
|
|
|
|
ν |
i |
, |
i = k, |
i = m +1,...,n, i ≠ l, |
|
|||
|
|
|
Vn |
|
= |
|
i = k, |
|
|
||||||
|
|
|
|
|
|
|
νi , |
|
|
||||||
целевая функция F будет равна |
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
F = ∑ciνi . |
(3.24) |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i Vn |
|
·····························································
При этой процедуре может понадобиться возврат к исходной точке и выбор новой вводимой в базис переменной из числа входящих в целевую функцию с отрицательными коэффициентами, если значение F окажется больше F0 . Если же F < F0 , то система урав- нений-ограничений переформировывается относительно новых ба-

96
зисных переменных и описанный процесс продолжается итеративно до тех пор, пока все βi не станут положительными.
·····························································
························· Пример ·························
Рассмотрим в качестве примера использования симплекс-метода решенную ранее графически задачу линейного программирования. В стандартной форме эта задача может быть записана следующим образом:
F = −3ν1 − 4ν2 → min
при условиях:
ν1 + ν2 + ν3 = 20, −ν1 + 4ν2 + ν4 = 20,
ν1...ν4 ≥ 0.
·······································································
·····························································
Здесь ν3 ,ν4 – дополнительные переменные, введенные в задачу для приведения ее к стандартной форме. Начальное допустимое базисное решение очевидно:
|
= |
|
ν |
= 20 |
|
, |
||
|
|
|
|
|||||
V |
|
3 |
= 20 |
|
||||
|
б |
|
ν |
4 |
|
|
||
|
|
|
|
|
|
|
|
небазисные переменные:
Vн = ν1 = 0 . ν2 = 0
·····························································
В соответствии с (3.21) выразим базисные переменные ν3 и ν4 через нулевые:
ν3 = 20 − ν1 − ν2 , ν4 = 20 − ν1 − 4ν2.
Целевая функция, записанная подобно (3.22) через нулевые переменные, не изменяет вида:
F0 = −3ν1 − 4ν2.

97
·····························································
Поскольку коэффициенты в целевой функции F при нулевых
переменных ν1 и ν2 не положительны, то начальное допустимое базисное решение не оптимально. Максимальный по модулю отрицательный коэффициент в целевой функции будет у переменной ν2 , поэтому на следующей итерации ее необходимо ввести в базис. С другой стороны, отношение D4 α42 при α42 > 0 минимально по модулю для базисной переменной v4, поэтому её при переходе к новому опорному решению необходимо вывести из базиса. Вводимая в базис переменная определится соотношением (3.23): ν4 = 0 = = 20 + ν1 − 4ν2 , откуда следует ν2 = 5.
·····························································
Определим, используя (3.24), новые базисные переменные ν3 и ν2 и новую целевую функцию:
ν3 = 15,
ν2 = 5,
F = −20.
Так как F уменьшилась по сравнению с F0 , то новое допустимое базисное решение позволяет сделать еще один шаг симплекс-методом, для чего выразим новые базисные переменные ν2 и ν3 и целевую функцию через нулевые
переменные ν1 и ν4 :
ν2 = 5 + jν1 − jν4 , ν3 = 15 + 54ν1 − jν4 , F = −20 − 4ν1 + ν4.
························· Выводы ·························
Из последних соотношений видно, что новое опорное решение также не является оптимальным, так как нулевая переменная νi входит в целевую функцию с отрицательным коэффициентом и на следующем шаге симплекс-метода переменная νi должна быть введена в базис. Базисная переменная ν3 , напро-

98
тив, при переходе к новому опорному решению должна быть из базиса выведена, так как α31 > 0 и отношение D3 α31 минимально по модулю для базисных переменных. Значение вводимой в базис переменной ν1 определится из равенства нулю базисной переменной:
ν3 = 15 − 54ν1 = 0, откуда ν1 = 12.
Подобно предыдущим шагам, определим новые базисные переменные и улучшенное значение целевой функции:
ν1 = 12, ν2 = 8, F = −68.
Выразим базисные переменные ν1 и ν2 и функцию качества F через нулевые переменные ν3 и ν4 :
ν1 = 12 − 45ν3 +1
5ν4 ,
ν2 = 8 −15ν3 −1
5ν4 ,
F = −68 +165ν3 +1
5ν4.
·······································································
························· Выводы ·························
Вполучившемся опорном решении нулевые переменные ν3 и ν4 входят
вцелевую функцию с отрицательными коэффициентами, что свидетельствует об его оптимальности. Решение, полученное симплекс-методом, полностью совпадает с решением, полученным ранее графическим путём. В качестве упражнения можно проверить, что при выборе других начальных опорных решений процедура симплекс-метода приведет к тому же оптимальному решению.
·······································································
·····························································
Этот итеративный процесс обычно представляется в виде так называемых симплекс-таблиц, упрощающих вычисление коэффициентов при переменных в уравнениях-ограничениях и целевой функции. Однако при большом числе переменных такое решение требует очень больших затрат машинного времени и неудобно для реализации на ЭВМ, поэтому в программных реализациях используется модифицированный симплекс-метод, или метод жорданова исключения.

99
·····························································
Методы решения целочисленной задачи линейного программирования
В начале п. 3.3 приводились примеры формулировки задач линейного программирования, в которых переменные могут принимать только целочисленные значения. Такие задачи являются частным случаем задач дискретного программирования, когда переменные принимают определенный ряд дискретных значений, не обязательно целочисленных. Дискретные задачи математического программирования образуют обширный класс нерегулярных задач, в которых область допустимых решений является невыпуклой и несвязной и определяется ограничениями двух типов: обычными регулярными и условиями дискретности. В дальнейшем ограничимся только целочисленными задачами линейного программирования, которые могут быть сформулированы следующим образом: минимизировать целевую функцию
F = CT V → min
при наличии регулярных ограничений A V = A и ограничений
|
Dj ≤ ν j ≤ u j , |
j = 1,...,r, |
(3.25) |
|||
где ν j – целые числа, Dj |
и u j – нижняя и верхняя целочисленные границы |
|||||
j -го индекса переменной ν |
|
|
|
T |
– включает коэффициенты при базис- |
|
j |
, вектор C |
|||||
|
|
|
|
|
|
ных и нулевых переменных.
Если r < n, где n – общее число переменных в задаче, то задачу называют частично целочисленной, если же r = n, то задачу называют полностью целочисленной.
·····························································
Невыпуклость и несвязность области допустимых решений задачи (3.25) делает невозможным применение стандартных алгоритмов линейного программирования. Поэтому большинство известных алгоритмов решения целочисленных задач основано на регуляризации задачи, т. е. многократном решении непрерывных задач с последующей дискретизацией переменных за счет введения новых ограничений. Рассмотрим один из методов решения задач целочисленного программирования – методы ветвей и границ, получивший наибольшее распространение для решения комбинаторных задач.

100
·····························································
·····························································
Основная идея метода ветвей и границ заключается в осуществлении на каждом шаге решения задачи ветвления по одной из базисных нецелочисленных переменных путем разбиения задачи на две, в одну из которых вводится дополнительное ограничение
Dj |
≤ ν j ≤ N j , |
(3.26) |
а в другую – ограничение |
|
|
N j+1 ≤ ν j |
≤ u j , j = 1,...,m, |
(3.27) |
где N j – целое число, m – число ограничений.
·····························································
·····························································
Каждая из этих задач решается как обычная задача линейного
программирования в непрерывном пространстве изменения переменных с игнорированием требований их целочисленности. Этот процесс повторяется для различных j и различных N j до тех пор,
пока все требуемые переменные не окажутся целочисленными. Очевидно, что эффективность процесса зависит и от того, по какой переменной ν j осуществляется ветвление и как выбирается величи-
на целочисленного значения средней границы переменной.
·····························································
·····························································
Для выбора значения N j может быть использован следующий прием: перед началом ветвления по переменной ν j задача (3.25) решается в непрерывном пространстве и определяется оптимальное значение всех переменных, в том числе и значение ν j . Затем пола-
гается N j = νj опт , где νj опт – целая часть оптимального значения переменной ν j при решении в непрерывном пространстве.
·····························································
Выполняя процесс ветвления по переменной, формируют левую задачу линейного программирования добавлением в задачу (3.25) ограничения (3.26):