Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Методы решения задач оптимизации. Учебное пособие
.pdf
7.5. Транспортная модель с промежуточными пунктами
91
Рис. 7.2.
Решение транспортной модели

8. Целочисленное линейное программирование
92
8. ЦЕЛОЧИСЛЕННОЕ ЛИНЕЙНОЕ
ПРОГРАММИРОВАНИЕ
8.1. Методы решения задач целочисленного программирования
Методы решения задач целочисленного линейного программирования основаны на использовании вычислительных возможностей методов линейного программирования. Обычно алгоритмы целочисленного
программирования включают три шага [5].
Шаг 1. "Ослабление" пространства допустимых решений задачи
целочисленного линейного программирования путем замены любой двоичной переменной y непрерывным ограничением 0 у 1 и отбрасывания
требования целочисленности для всех остальных переменных. В результате получается обычная задача линейного программирования.
Шаг 2. Решение задачи линейного программирования и определение ее оптимального решения.
Шаг 3. Имея полученное (непрерывное) оптимальное решение, добавляем специальные ограничения, которые итерационным путем изменяют пространство допустимых решений задачи линейного программирования таким образом, чтобы, в конечном счете, получилось оптимальное
решение, удовлетворяющее требованиям целочисленности.
Разработаны два общих метода [5] генерирования специальных
ограничений, о которых идет речь при реализации шага 3.
1. Метод ветвей и границ.
2. Метод отсекающих плоскостей.
Хотя ни один из упомянутых методов не дает надежных результатов при решении задачи целочисленного линейного программирования,
опыт вычислений свидетельствует, что метод ветвей и границ более
успешно решает задачу, чем метод отсекающих плоскостей.
8.2. Метод ветвей и границ
Приведем алгоритм метода ветвей и границ в общем виде [5].
Предположим, что рассматривается задача максимизации. Зададим ниж-

8.2. Метод ветвей и границ
93
нюю границу оптимального значения целевой функции f задачи ЦЛП равной –. Положим i = 0.
Шаг 1. (Просмотр и определение границы.) Выбираем i-ю подзада-
чу линейного программирования ЛПi для исследования. Решаем ЛПi и
зондируем ее, при этом возможна одна из трех ситуаций:
а) оптимальное значение целевой функции задачи ЛПi не может
улучшить текущей нижней границы;
b) ЛПi приводит к лучшему допустимому целочисленному реше-
нию, чем текущая нижняя граница;
с) ЛПi не имеет допустимых решений.
Возможны два случая:
а) если задача ЛПi просмотрена, нижняя граница изменяется только
при условии, что найдено лучшее решение задачи ЦЛП. Если все подзадачи
просмотрены, необходимо закончить вычисления: оптимальным решением
задачи ЦЛП является то, которое соответствует текущей нижней границе,
если такая существует. Иначе положить i = i + 1 и повторить шаг 1;
b) если задача ЛПi не просмотрена, переходим к шагу 2 для выполнения ветвления.
Шаг 2. (Ветвление.) Выбираем одну из целочисленных перемен-
ных хj оптимальное значение хj* которой в оптимальном решении задачи
ЛПi не является целым числом. Исключаем из пространства допустимых
решений область [хj*] < хj < [хj*] + 1 (где [v] – наибольшее целое, не превосходящее v) путем формирования двух подзадач ЛП, которые соответствуют ограничениям хj [хj*] и хj [хj*] + 1.
Положим i = i + 1 и переходим к шагу 1.
Для решения задач минимизации в алгоритме необходимо заменить
нижнюю границу верхней (начальное значение которой равно f = +).
Пример 8.1. Рассмотрим алгоритм метода ветвей и границ на сле-
дующем примере [5].
Рассмотрим следующую задачу целочисленного линейного программирования.
Максимизировать f = 5х1 + 4х2 при ограничениях
х1 + х2 5,
10x1 + 6х2 45,

8. Целочисленное линейное программирование
94
х1, х2 0 и целые.
На рис. 8.1 пространство допустимых решений задачи целочислен-
ного линейного программирования представлено точками. Соответствующая начальная задача линейного программирования (обозначим ее ЛП0)
получается путем отбрасывания условий целочисленности. Ее оптимальным решением будет х1 = 3,75, х2= 1,25 и f = 23,75.
Так как оптимальное решение задачи ЛП0 не удовлетворяет усло-
вию целочисленности, метод ветвей и границ изменяет пространство решений задачи линейного программирования так, что, в конечном счете,
получается оптимальное решение задачи целочисленного линейного программирования. Для этого сначала выбирается одна из целочисленных
переменных, значение которой в оптимальном решении задачи ЛП0 не
является целочисленным. Например, выбирая х1 = 3,75, замечаем, что область 3 < х1 < 4 пространства допустимых решений задачи ЛП0 не содержит целочисленных значений переменной х1 и, следовательно, может
быть исключена из рассмотрения, как бесперспективная.
Рис. 8.1.
Оптимальное нецелочисленное решение задачи

8.2. Метод ветвей и границ
95
Это эквивалентно замене исходной задачи ЛП0 двумя новыми задачами линейного программирования ЛП1 и ЛП2, которые определяются
следующим образом:
пространство допустимых решений ЛП1 = пространству допустимых решений ЛП0 + (х1 3);
пространство допустимых решений ЛП2 = пространству допустимых решений ЛП0 + (х1 4).
На рис. 8.2 изображены пространства допустимых решений задач
ЛП1 и ЛП2. Оба пространства содержат все допустимые решения исходной задачи ЦЛП. Это означает, что задачи ЛП1 и ЛП2 "не потеряют" решения начальной задачи ЛП0.
Если мы продолжим разумно исключать из рассмотрения области,
не содержащие целочисленных решений (такие, как 3 < х1 < 4), путем вве-
дения надлежащих ограничений, то в конечном счете получим задачу линейного программирования, оптимальное решение которой удовлетворяет
требованиям целочисленности. Другими словами, будем решать задачу
ЦЛП путем решения последовательности непрерывных задач линейного
программирования.
Рис. 8.2.
Разбиение начального пространства

8. Целочисленное линейное программирование
96
Новые ограничения х1 3 и х1 4 взаимоисключаемы, так что зада-
чи ЛП1 и ЛП2 необходимо рассматривать как независимые задачи линейного программирования. Дихотомизация задач ЛП – основа концепции
ветвления в методе ветвей и границ. В этом случае х1 называется пере-
менной ветвления.
Оптимальное решение задачи ЦЛП находится в пространстве допустимых решений либо задачи ЛП1, либо ЛП2. Следовательно, обе подзадачи должны быть решены. Выбираем сначала задачу ЛП1 (выбор произволен), имеющую дополнительное ограничение х1 3.
Максимизировать f = 5х1 + 4х2 при ограничениях
х1 + х2 5,
10x1 + 6х2 45,
х1 3,
х1, х2 0.
Оптимальным решением задачи ЛП1 является х1 = 3, х2 = 2 и f = 23.
Оптимальное решение задачи ЛП1 удовлетворяет требованию целочисленности переменных х1 и х2. В этом случае говорят, что задача ЛП1
просмотрена. Это означает, что задача ЛП1 не должна больше рассматриваться, так как она не может содержать лучшего решения задачи ЦЛП.
Мы не можем в этой ситуации оценить качество целочисленного
решения, полученного из рассмотрения задачи ЛП1, ибо решение задачи
ЛП2 может привести к лучшему целочисленному решению (с большим
значением целевой функции f). Пока мы можем лишь сказать, что значение f = 23 является нижней границей оптимального (максимального) значения целевой функции исходной задачи ЦЛП. Это значит, что любая
нерассмотренная подзадача, которая не может привести к целочисленному решению с большим значением целевой функции, должна быть исключена из рассмотрения, как бесперспективная. Если же нерассмотренная подзадача может привести к лучшему целочисленному решению, то
нижняя граница должна быть надлежащим образом изменена.
При значении нижней границы f = 23 исследуем задачу ЛП2 (единственную оставшуюся нерассмотренную подзадачу). Так как в задаче ЛП0
оптимальное значение целевой функции равно 23,75 и все ее коэффици-

8.2. Метод ветвей и границ
97
енты являются целыми числами, то невозможно получить целочисленное
решение задачи ЛП2 (пространство решений которой более узко, чем в
задаче ЛП0), которое будет лучше имеющегося. В результате мы отбрасываем подзадачу ЛП2 и считаем ее рассмотренной.
Реализация метода ветвей и границ завершена, так как обе подзадачи
ЛП1 и ЛП2 рассмотрены (рассмотрение первой привело к нахождению целочисленного решения, а второй – к заключению, что ее возможное целочисленное решение не может быть лучше имеющегося). Следовательно, мы
заключаем, что оптимальным решением задачи ЦЛП является решение,
соответствующее нижней границе, а именно х1 = 3, х2 = 2 и f = 23.
В случае, если в качестве переменной ветвления мы выбрали бы
переменную х2 последующие вычисления будут существенно отличаться.
Ситуация, когда первой решается задача ЛП2, иллюстрируется схемой
вычислений (рис. 8.3), подтверждающей высказанную мысль. Оптимальным решением задачи ЛП2 является х1 = 4, х2 = 0,83 и f = 23,33.
Рис. 8.3.
Схема вычислений

8. Целочисленное линейное программирование
98
Поскольку значение переменной х2 = 0,83 не является целым числом, задача ЛП2 исследуется дальше. Рассматриваем подзадачи ЛП3 и
ЛП4, используя ветви х2 0 и х2 1 соответственно. Это означает, что
‒ пространство решений ЛП3 = пространству решений ЛП2 +
+ (х2 0) = пространство решений ЛП0 + (х1 4) + (х2 0);
‒ пространство решений ЛП4 = пространству решений ЛП2 +
+ (х2 1) = пространство решений ЛП0 + (х1 4) +(х2 1).
У нас есть три нерассмотренные подзадачи, которые должны быть
решены, ЛП1, ЛП3 и ЛП4. Предположим, что мы произвольно выбрали
первой задачу ЛП4. Эта задача не имеет решения и, следовательно, является прозондированной. В качестве следующей выберем подзадачу ЛП3.
Ее оптимальным решением является х1 = 4,5, x2 = 0 и f = 22,5. Нецелочисленное значение переменной х1 = 4,5 порождает две ветви решений при
х1 4 и х1 5 и соответствующие им подзадачи ЛП5 и ЛП6. При этом
‒ пространство решений ЛП5 = пространству решений ЛП0 +
+ (х1 4) + (х2 0) + (х1 4);
‒ пространство решений ЛП6 = пространство решений ЛП0 +
+ (х1 4) + (х2 0) + (х1 5).
Теперь не рассмотрены лишь подзадачи ЛП1, ЛП5 и ЛП6. Подзадача ЛП6 прозондирована, так как не имеет допустимых решений. Далее,
подзадача ЛП5 имеет целочисленное решение (х1 = 4, х2 = 0, f = 20) и, следовательно, порождает нижнюю границу (f = 20) оптимального значения
целевой функции задачи ЦЛП. Теперь остается лишь подзадача ЛП1, решение которой также является целочисленным (х1 = 3, х2 = 2, f = 23). Следовательно, нижнюю границу значений целевой функции полагаем равной 23. Так как все подзадачи прозондированы, оптимальным решением
задачи ЦЛП является решение, соответствующее последней нижней границе, а именно х1 = 3, х2 = 2 и f = 23.
Последовательность решения подзадач, показанная на рис. 8.3 (ЛП0,
ЛП2, ЛП4, ЛПЗ, ЛП6, ЛП5, ЛП1), является наихудшей; тем не менее, она
встречается на практике. Этот пример указывает на основную слабость метода ветвей и границ: как выбирать следующую подзадачу для исследования и как выбирать для нее переменную ветвления?

8.3. Метод отсекающих плоскостей
99
8.3. Метод отсекающих плоскостей
Данный метод, как и метод ветвей и границ, начинает работу с оп-
тимального решения "обычной" (непрерывной) задачи линейного программирования [5]. Однако вместо ветвления и построения границ этот
метод видоизменяет пространство допустимых решений, последовательно
прибавляя специальным образом построенные ограничения (именуемые
отсечениями). Рассмотрим сначала идею этого метода на графическом
примере, а затем покажем, как отсечения строятся алгебраически.
Пример 8.4. Продемонстрируем применение метода отсекающих
плоскостей для решения следующей задачи ЦЛП [5].
Максимизировать f = 7х1 + 10х2 при ограничениях:
12х1 + 3х2 6,
7х1 +x3 35,
х1, х2 0 и целые.
Данный метод путем добавления отсечений (отсекающих плоскостей) преобразует пространство допустимых решений соответствующей
задачи линейного программирования в выпуклый многогранник, вершина
которого, соответствующая оптимуму, является целочисленной и представляет решение исходной задачи. На рис. 8.4 показан пример двух таких отсечений. Мы начинаем с оптимального решения непрерывной задачи линей-
ного программирования (х1, х2) =
11
43
22
,
и f =
1
66
2
. Затем прибавляем
отсечение I, которое вместе с ограничениями исходной задачи линейного
программирования приводит к оптимальному решению (х1, х2) =
4
43
7
,
с
f = 62. После этого прибавляется отсечение II, которое вместе с отсечением
I и исходными ограничениями приводит к оптимальному решению (х1, х2) =
= (4, 3) с f = 58. Последнее решение является полностью целочисленным,
как и требуется.
Прибавленные отсечения не отбрасывают ни одной исходной допустимой целочисленной точки, но должны проходить, по меньшей мере,

8. Целочисленное линейное программирование
100
через одну целочисленную точку (допустимую или недопустимую). Этим
основным требованиям должно удовлетворять любое отсечение.
Рис. 8.4.
Построение отсечений
В общем случае может потребоваться любое (конечное) число отсечений для достижения полностью целочисленной экстремальной точки.
В действительности количество необходимых отсечений не зависит от
размерности задачи в том смысле, что для решения задачи с небольшим
количеством переменных и ограничений может потребоваться больше
отсечений, чем для задачи большой размерности [5].
Алгебраический способ определения отсечений. Метод отсекающих плоскостей начинает работу с решения непрерывной задачи линейного программирования [5]. В симплекс-таблице, соответствующей оптимальному решению задачи линейного программирования, выбираем строку (называемую производящей), для которой базисная переменная нецелочисленная. Искомое отсечение строится на основании дробных составляющих коэффициентов производящей строки. По этой причине его
называют дробным отсечением.
Сейчас мы выведем уравнение дробного отсечения. Построение отсечения объясняется на численном примере [5], а не на сложных математических конструкциях.
Пример 8.5. При дополнительных переменных х3 и х4 для ограничений 1 и 2 задачи из примера 8.4 оптимальная симплекс-таблица соответствующей задачи линейного программирования имеет следующий вид.
Базис
x1 x2
x3
x4
Решение
f 0 0
63/22
31/22
66,5
x2
0 1 7/22
1/22
3,5
x1
1 0 –1/22
3/22
4,5
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
