Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методы решения задач оптимизации. Учебное пособие

.pdf
Скачиваний:
1
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]