Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методы оптимизации / Презентация к лекциям по курсу Методы оптимизации Раздел 8.pptx
Скачиваний:
184
Добавлен:
01.06.2015
Размер:
307.32 Кб
Скачать

Шаг 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.

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

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

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

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

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

г де k — наименьшее целое число, удовлетворяющее условию 2k + 1 – 1 u, а у0, у1, …, уk — двоичные переменные. Это представление, а также простой алгоритм

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

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

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

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

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

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

Пример 6.3-2

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

Максимизировать

z = 3х1 - 5х2

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

x1 + х2 = 5,

 

 

4х1 + 6х2 4,

 

x1, х2 = 0 или 1.

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

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

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

с) Умножаем второе ограничение на -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

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

Подзадача не может привести к допустимому решению. Подзадача не может улучшить верхнюю границу целевой функции. Подзадача имеет допустимое целочисленное решение.

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

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

Пример 6.3-3. (Аддитивный алгоритм)

Необходимо решить следующую задачу с двоичными переменными. Максимизировать z = 3у1 + 2у2 - 5y3 - 2у4 + 3у5

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

у1 + у2 + y3 + 2у4 + у5 4, 7у1 + 3у3 - 4у4 + 3у5 8, 11у1 - 6у2 + 3у4 - 3у5 3, у1, у2, y3, у4, у5 = 0 или 1.

Эту задачу нетрудно представить в форме, удовлетворяющей аддитивному алгоритму. Для этого нужно выполнить следующие действия (см. пример 9.3-2).

а) Умножаем целевую функцию на -1. b) Умножаем третье ограничение на -1.

с) Вводим дополнительные переменные s1, s2 и s3 для преобразования ограничений в равенства.

d) Чтобы все коэффициенты целевой функции были положительны, применяем подстановки у1 = 1 – х1, у2 = 1 - х2, у5 = 1 - x5, y3 =x3 и y4 =x4.

Указанные преобразования приводят к следующей целевой функции (проверьте!). Минимизировать z' = 3x1 + 2x2 + 5x3 + 2x4 + 3x5 - 8

Для удобства будем игнорировать константу -8 и заменим z' + 8 на z, так что преобразованная задача принимает следующий вид.

Минимизировать z = 3x1 + 2x2 + 5x3 + 2x4 + 3x5 при ограничениях

- x1 - x2 + x3 + 2x4 - x5 + s1 = 1, -7x1 + 3х3 - 4x4 - 3x5 + s2 = -2, 11x1 - 6x2 - 3x4 - 3x5 + s3 = -1, x1, x2, x3, x4, x5 = 0 или 1.

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

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

Так как все двоичные переменные равны нулю, дополнительные переменные принимают следующие значения:

(s1, s2, s3) = (1, -2, -1)

при этом z = 0. Если бы все дополнительные переменные были неотрицательными, мы сделали бы вывод, что рассматриваемое решение, в котором все двоичные переменные равны нулю, является оптимальным. Поскольку некоторые из дополнительных переменных являются недопустимыми (так как отрицательные), необходимо увеличить значение одной или нескольких двоичных переменных до 1, чтобы получить допустимое решение (или прийти к выводу, что задача допустимого решения не имеет).

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

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

переменной ветвления, так как ее коэффициенты во втором и третьем ограничениях неотрицательны. Следовательно, положив х3 = 1, мы лишь

увеличим (по абсолютной величине) отрицательные значения дополнительных переменных s2 и s3. Каждая же из оставшихся двоичных переменных имеет, по

крайней мере, один отрицательный коэффициент во втором и третьем ограничениях. Следовательно, комбинация этих переменных может привести к положительным значениям дополнительных переменных. Таким образом, лишь переменные x1, х2, х4 и х5 можно рассматривать в качестве возможных

кандидатов на переменную ветвления.

Выбор переменной ветвления из возможных претендентов основан на использовании меры недопустимости дополнительной переменной. Эта мера, основанная на предположении, что значение двоичной переменной хj будет

увеличено до 1,

где si — текущее значение дополнительной переменной, аij — коэффициент при переменной хj в i-том ограничении.

В действительности Ij, есть не что иное, как сумма значений отрицательных

дополнительных переменных, являющаяся результатом увеличения значения переменной хj до 1. Сложная на вид формула может быть упрощена

следующим образом.

Например, если мы положим х1 = 1, то получим s1 = 1 – (­1) = 2, s2 = ­2 ­ (­7) = 5 и s3 = ­1 ­ 11 = ­12. Следовательно, I1 = ­12. Аналогично, I2 = ­2, I4 = ­1 и I5 = 0 (напомним, что переменная х3 была исключена из претендентов на переменную ветвления, как бесперспективная). Так как I5 имеет наименьшую меру недопустимости, переменная х5 выбирается в качестве переменной ветвления. На рис. 6.10 изображены две ветви, соответствующие х5 = 1 и х5 = 0, и образованные при этом узлы 1 и 2. Вершина 1 дает допустимое значение дополнительных переменных (s1, s2, s3) = (2, 1, 2) и z = 3. Следовательно, узел 1 прозондирован, и значение = 3 определяет текущую верхнюю границу оптимального значения целевой функции.

Рис. 6.10

Тесты, предложенные в примере 6.3­3, являются явно эвристическими, и их эффективность в исключении переменных, которые не могут инициировать процесс ветвления, зависит от того, насколько "умными" мы их конструируем. В действительности полный аддитивный алгоритм включает более сильные тесты, чем те, которые показаны в примере 6.3­3. Однако все они основаны на эвристических рассуждениях.

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

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

Пример 6.3-4

Продемонстрируем применение метода отсекающих плоскостей для решения следующей задачи ЦЛП.

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

12х1 + 3х2 6,

7х1 +x3 35, х1, х2 0 и целые.

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

исходной задачи. На рис. 6.13

пример двух таких отсечений. Мы

начинаем с оптимального решения непрерывной задачи линейного

программирования (х1, х2) = ( , ) и z = .

прибавляем отсечение I,

которое вместе с ограничениями исходной задачи линейного программирования приводит к оптимальному решению (х1, х2) = (4 , с z = 62.

После этого прибавляется отсечение II, которое вместе с отсечением I и исходными ограничениями приводит к оптимальному решению (х1, х2) = (4, 3) с

z = 58. Последнее решение является полностью целочисленным, как и требуется.

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

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

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

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

Сейчас мы выведем уравнение дробного отсечения. Построение отсечения

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