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

Методы оптимизации / Методы оптимизации

.pdf
Скачиваний:
527
Добавлен:
01.06.2015
Размер:
2.64 Mб
Скачать

79

трехлетний период. Необходимо определить совокупность проектов, которой соответствует максимум суммарной прибыли.

Задача сводится к решению типа "да нет" относительно каждого проекта. Определим двоичные переменные хj:

1, если проект j утвержден,

x j 0, если проект j не утвержден.

Задача ЦЛП будет записана следующим образом. Максимизировать z = 20х1 + 40х2 + 20х3 + 15х4 + 30х5

при ограничениях

5x1 + 4х2 + 3х3 + 7х4 + 8х5 25, х1 + 7х2 + 9х3 + 4х4 + 6x5 25, 8x1 + 10х2 + 2х3 + x4 + 10x5 25,

х1, х2, х3, х4, x5 = 0 или 1.

Оптимальным целочисленным решением является х1 = х2 = х3 = х4 = 1, х5 = 0 с z = 95 млн руб. Это решение означает, что необходимо выбрать для финансирования все проекты, кроме пятого.

Интересно сравнить решение данной задачи ЦЛП с решением "обычной" задачи ЛП с теми же ограничениями, но без условия целочисленности переменных. Задача линейного программирования

получается в результате замены условия хj =

0 или 1 на

ограничение

0 хj 1 для всех j. Эта задача имеет решение х1

= 0,5789, х2

= х3 = х4 = 1,

х5 = 0,7368 и z = 108,68 (млн руб.). Такое решение с точки зрения целочисленной задачи лишено смысла, так как две переменные принимают дробное значение. Можно было бы попытаться округлить полученный результат, что привело бы к х1 = х5 = 1. Полученное при этом решение является недопустимым, так как нарушаются ограничения задачи. Более существенным в этой ситуации является то, что округление применять нельзя, так как хj представляет решение типа "да нет", для которого дробные значения лишены смысла.

6.2. Методы решения задач целочисленного программирования

Методы решения задач целочисленного линейного программирования основаны на использовании вычислительных возможностей методов линейного программирования. Обычно алгоритмы целочисленного программирования включают три шага.

Шаг 1. "Ослабление" пространства допустимых решений задачи

80

целочисленного линейного программирования путем замены любой двоичной переменной y непрерывным ограничением 0 у 1 и отбрасывания требования целочисленности для всех остальных переменных. В результате получается обычная задача линейного программирования.

Шаг 2. Решение задачи линейного программирования и определение ее оптимального решения.

Шаг 3. Имея полученное (непрерывное) оптимальное решение, добавляем специальные ограничения, которые итерационным путем изменяют пространство допустимых решений задачи линейного программирования таким образом, чтобы, в конечном счете, получилось оптимальное решение, удовлетворяющее требованиям целочисленности.

Разработаны два общих метода генерирования специальных ограничений, о которых идет речь при реализации шага 3.

1.Метод ветвей и границ.

2.Метод отсекающих плоскостей.

Хотя ни один из упомянутых методов не дает надежных результатов при решении задачи целочисленного линейного программирования, опыт вычислений свидетельствует, что метод ветвей и границ более успешно решает задачу, чем метод отсекающих плоскостей.

6.2.1. Метод ветвей и границ

Основы этого метода объясним на численном примере.

Пример 6.2

Рассмотрим следующую задачу целочисленного линейного программирования.

Максимизировать z = 1 + 4х2 при ограничениях

х1 + х2 5, 10x1 + 6х2 45,

х1, х2 0 и целые.

На рис. 6.1 пространство допустимых решений задачи целочисленного линейного программирования представлено точками. Соответствующая начальная задача линейного программирования (обозначим ее ЛП0) получается путем отбрасывания условий целочисленности. Ее оптимальным решением будет х1 = 3,75, х2= 1,25 и z = 23,75.

81

Рис. 6.1 Так как оптимальное решение задачи ЛП0 не удовлетворяет условия

целочисленности, метод ветвей и границ изменяет пространство решений задачи линейного программирования так, что, в конечном счете, получается оптимальное решение задачи целочисленного линейного программирования. Для этого сначала выбирается одна из целочисленных переменных, значение которой в оптимальном решении задачи ЛП0 не является целочисленным. Например, выбирая х1 = 3,75, замечаем, что область 3 < х1 < 4 пространства допустимых решений задачи ЛП0 не содержит целочисленных значений переменной х1 и, следовательно, может быть исключена из рассмотрения, как бесперспективная. Это эквивалентно замене исходной задачи ЛП0 двумя новыми задачами линейного программирования ЛП1 и ЛП2, которые определяются следующим образом:

пространство допустимых решений ЛП1 = пространство допустимых решений ЛП0 + (х1 3),

пространство допустимых решений ЛП2 = пространство допустимых решений ЛП0 + (х1 4).

На рис. 6.2 изображены пространства допустимых решений задач ЛП1 и ЛП2. Оба пространства содержат все допустимые решения исходной задачи ЦЛП. Это означает, что задачи ЛП1 и ЛП2 "не потеряют" решения начальной задачи ЛП0.

82

Рис. 6.2

Если мы продолжим разумно исключать из рассмотрения области, не содержащие целочисленных решений (такие, как 3 < х1 < 4), путем введения надлежащих ограничений, то в конечном счете получим задачу линейного программирования, оптимальное решение которой удовлетворяет требованиям целочисленности. Другими словами, будем решать задачу ЦЛП путем решения последовательности непрерывных задач линейного программирования.

Новые ограничения х1 3 и х1 4 взаимоисключаемы, так что задачи ЛП1 и ЛП2 необходимо рассматривать как независимые задачи линейного программирования, что и показано на рис. 6.3. Дихотомизация задач ЛП основа концепции ветвления в методе ветвей и границ. В этом случае х1

называется переменной ветвления.

Рис. 6.3

83

Оптимальное решение задачи ЦЛП находится в пространстве допустимых решений либо задачи ЛП1, либо ЛП2. Следовательно, обе подзадачи должны быть решены. Выбираем сначала задачу ЛП1 (выбор произволен), имеющую дополнительное ограничение х1 3.

Максимизировать z = 5х1 + 4х2 при ограничениях

х1 + х2 5, 10x1 + 6х2 45, х1 3,

х1, х2 0.

Оптимальным решением задачи ЛП1 является х1 = 3, х2 = 2 и z = 23. Оптимальное решение задачи ЛП1 удовлетворяет требованию

целочисленности переменных х1 и х2. В этом случае говорят, что задача ЛП1 прозондирована. Это означает, что задача ЛП1 не должна больше зондироваться, так как она не может содержать лучшего решения задачи ЦЛП.

Мы не можем в этой ситуации оценить качество целочисленного решения, полученного из рассмотрения задачи ЛП1, ибо решение задачи ЛП2 может привести к лучшему целочисленному решению (с большим значением целевой функции z). Пока мы можем лишь сказать, что значение z = 23 является нижней границей оптимального (максимального) значения целевой функции исходной задачи ЦЛП. Это значит, что любая нерассмотренная подзадача, которая не может привести к целочисленному решению с большим значением целевой функции, должна быть исключена из рассмотрения, как бесперспективная. Если же нерассмотренная подзадача может привести к лучшему целочисленному решению, то нижняя граница должна быть надлежащим образом изменена.

При значении нижней границы z = 23 исследуем задачу ЛП2 (единственную оставшуюся нерассмотренную подзадачу). Так как в задаче ЛП0 оптимальное значение целевой функции равно 23,75 и все ее коэффициенты являются целыми числами, то невозможно получить целочисленное решение задачи ЛП2 (пространство решений которой более узко, чем в задаче ЛП0), которое будет лучше имеющегося. В результате мы отбрасываем подзадачу ЛП2 и считаем ее прозондированной.

Реализация метода ветвей и границ завершена, так как обе подзадачи ЛП1 и ЛП2 прозондированы (рассмотрение первой привело к нахождению

84

целочисленного решения, а второй — к заключению, что ее возможное целочисленное решение не может быть лучше имеющегося). Следовательно, мы заключаем, что оптимальным решением задачи ЦЛП является решение, соответствующее нижней границе, а именно х1 = 3, х2 = 2 и z = 23.

Остались без ответа два вопроса, связанные с реализацией описанной вычислительной процедуры.

1.Можно ли было в задаче ЛП0 выбрать переменную х2 в качестве

переменной ветвления вместо х1?

2.Можно ли было при выборе подзадачи для зондирования решить сначала задачу ЛП2 вместо ЛП1?

Ответы на оба вопроса положительные. Однако последующие вычисления могут значительно отличаться. Ситуация, когда первой решается задача ЛП2, иллюстрируется схемой вычислений (рис. 6.4), подтверждающей высказанную мысль. Оптимальным решением задачи ЛП2

является х1 = 4, х2 = 0,83 и z = 23,33.

Рис. 6.4

Поскольку значение переменной х2 (= 0,83) не является целым числом, задача ЛП2 исследуется дальше. Рассматриваем подзадачи ЛП3 и ЛП4, используя ветви х2 0 и х2 1 соответственно. Это означает, что

пространство решений ЛП3 = пространство решений ЛП2 + (х2 0) = = пространство решений ЛП0 + (х1 4) + (х2 0),

пространство решений ЛП4 = пространство решений ЛП2 + (х2 1) =

85

=пространство решений ЛП0 + (х1 4) +(х2 1).

Унас есть три нерассмотренные подзадачи, которые должны быть решены, ЛП1, ЛП3 и ЛП4. Предположим, что мы произвольно выбрали первой задачу ЛП4. Эта задача не имеет решения и, следовательно, является прозондированной. В качестве следующей выберем подзадачу ЛП3. Ее оптимальным решением является х1 = 4,5, x2 = 0 и z = 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, z = 20) и, следовательно, порождает нижнюю границу (z = 20) оптимального значения целевой функции задачи ЦЛП. Теперь остается лишь подзадача ЛП1, решение которой также является целочисленным (х1 = 3, х2 = 2, z = 23). Следовательно, нижнюю границу значений целевой функции полагаем равной 23. Так как все подзадачи прозондированы, оптимальным решением задачи ЦЛП является решение, соответствующее последней нижней границе, а именно х1 = 3, х2 = 2 и z = 23.

Последовательность решения подзадач, показанная на рис. 6.4 (ЛП0, ЛП2, ЛП4, ЛП3, ЛП6, ЛП5, ЛП1), является наихудшей; тем не менее, она встречается на практике. Этот пример указывает на основную слабость метода ветвей и границ: как выбирать следующую подзадачу для исследования и как выбирать для нее переменную ветвления?

В процессе решения, представленного на рис. 6.3, мы случайно наткнулись на хорошую нижнюю границу значений целевой функции на самой первой подзадаче ЛП1, что позволило прозондировать ЛП2 без детальных исследований и закончить вычисления. По существу, мы завершили вычисления, решив лишь одну подзадачу. В процессе решения, представленном на рис. 6.4, мы были вынуждены исследовать семь подзадач, и лишь тогда завершились вычисления метода ветвей и границ. Хотя имеются эвристические соображения, позволяющие "угадать", какая из

86

ветвей может привести к улучшенному решению задачи ЦЛП, не существует строгой теории, которая всегда обеспечивала бы надежные результаты.

Теперь сформулируем алгоритм метода ветвей и границ в общем случае. Предположим, что рассматривается задача максимизации. Зададим нижнюю границу оптимального значения целевой функции z задачи ЦЛП равной . Положим i = 0.

Шаг 1. (Зондирование и определение границы) Выбираем i ю

подзадачу линейного программирования ЛПi для исследования. Решаем ЛПi

изондируем ее, при этом возможна одна из трех ситуаций.

1.Оптимальное значение целевой функции задачи ЛПi не может улучшить текущей нижней границы.

2.ЛПi приводит к лучшему допустимому целочисленному решению, чем текущая нижняя граница.

3.ЛПi не имеет допустимых решений.

Возможны два случая.

1.Если задача ЛПi прозондирована, нижняя граница изменяется только при условии, что найдено лучшее решение задачи ЦЛП. Если все подзадачи прозондированы, необходимо закончить вычисления: оптимальным решением задачи ЦЛП является то, которое соответствует текущей нижней границе, если такая существует. Иначе положить i = i + 1 и повторить шаг 1.

2.Если задача ЛПi не прозондирована, переходим к шагу 2 для выполнения ветвления.

Шаг 2. (Ветвление) Выбираем одну из целочисленных переменных хj, оптимальное значение хj* которой в оптимальном решении задачи ЛПi не является целым числом. Исключаем из пространства допустимых решений область [хj*] < хj < [хj*] + 1 (где [хj*] — наибольшее целое, не превосходящее хj*) путем формирования двух подзадач ЛП, которые соответствуют

ограничениям хj [хj*] и хj [хj*] + 1. Положим i = i + 1 и переходим к шагу 1.

Описанный алгоритм применим для решения задач максимизации. Для решения задач минимизации в алгоритме необходимо заменить нижнюю границу верхней (начальное значение которой равно z = + ).

Алгоритм метода ветвей и границ непосредственно распространяется на задачи частично целочисленного ЛП (в которых лишь некоторые из

87

переменных должны принимать целочисленные значения). Если некоторая переменная является непрерывной, мы просто никогда не выбираем ее в качестве переменной ветвления. Допустимая подзадача определяет новую границу для значения целевой функции, если значения дискретных переменных являются целочисленными и значение целевой функции улучшено по сравнению с текущей границей.

6.2.2. Аддитивный алгоритм для задач с двоичными переменными

Любая целочисленная переменная х, значения которой не превышают конечной верхней границы и (т.е. 0 x и), может быть выражена через двоичные переменные с помощью представления

х = 20 у0 + 21 у1 + 22у2 + ... + 2kук,

где k — наименьшее целое число, удовлетворяющее условию 2k + 1 – 1 u, а у0, у1, …, уk — двоичные переменные. Это представление, а также простой алгоритм (описанный ниже) решения задач ЦЛП с двоичными переменными породили надежду, что общая задача ЦЛП может быть решена более эффективно как задача с двоичными переменными. К сожалению, это направление развития методов ЦЛП не оправдало возлагаемые на него надежды.

Впервые специальный алгоритм решения задач с двоичными переменными, названный аддитивным, был предложен в 1965 г., через семь лет после создания метода ветвей и границ. Первоначально алгоритм не был связан с методом ветвей и границ, так как не требовал решения задач линейного программирования; его основные операции сводились лишь к сложению и вычитанию. Однако вскоре обнаружилась связь между этими алгоритмами. Оказалось, что аддитивный алгоритм является специальным случаем метода ветвей и границ.

Замысел эвристического зондирования в аддитивном алгоритме требует представления задачи с двоичными переменными в удобной форме, удовлетворяющей следующим требованиям.

1.В выражении целевой функции все коэффициенты должны быть неотрицательными, и целевая функция должна подлежать минимизации.

2.Все ограничения должны быть типа " ", возможно с отрицательными правыми частями. Эти ограничения превращаются затем в равенства путем введения непрерывных дополнительных переменных в левые части ограничений.

88

Любая задача с двоичными переменными может удовлетворить эти условия, что демонстрирует следующий пример.

Пример 6.3

Приведем следующую задачу с двоичными переменными к виду, удовлетворяющему требованиям аддитивного алгоритма.

Максимизировать z = 3х1 5х2 при ограничениях x1 + х2 = 5,

4х1 + 6х2 4, x1, х2 = 0 или 1.

Сначала преобразуем задачу в задачу минимизации с ограничениями типа " ".

1.Умножим z на 1, чтобы получить целевую функцию w = 3х1 + 5х2, которую следует минимизировать.

2.Преобразуем ограничение равенство в два ограничения неравенства типа " ", для этого введем неравенства x1 + х2 5 и –х1 х2 5.

3.Умножаем второе ограничение на 1 и получаем 4x1 6х2 4. Используя в ограничениях дополнительные переменные s1, s2 и s3,

запишем задачу следующим образом. Минимизировать w = 3х1 + 5х2 при ограничениях

x1 + х2 + s1 = 5,

–х1 х2 + s2 = 5,4x1 6х2 + s3 = 4, x1, х2 = 0 или 1,

s1, s2, s3 0.

Чтобы обеспечить неотрицательность коэффициентов целевой функции, выполним подстановку хj = 1 х'j для всех переменных хj с отрицательным коэффициентом в выражении целевой функции. В данном случае необходима подстановка х1 = 1 х'1, после чего также надо уточнить значения правых частей ограничений. Далее аддитивный алгоритм будет иметь дело с переменными х'1 и х2.

Как и в методе ветвей и границ, ветвление в аддитивном алгоритме основывается на переменной ветвления хj. Главное отличие в том, что здесь две ветви соответствуют строгим равенствам хj = 0 и хj = 1, так как хj является двоичной переменной. Определение границы трактуется таким же образом, как и в методе ветвей и границ, — улучшенное целочисленное

Соседние файлы в папке Методы оптимизации