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

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

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

89

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

1.Подзадача не может привести к допустимому решению.

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

3.Подзадача имеет допустимое целочисленное решение.

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

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

Пример 6.4 (Аддитивный алгоритм)

Необходимо решить следующую задачу с двоичными переменными. Максимизировать 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.

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

1.Умножаем целевую функцию на 1.

2.Умножаем третье ограничение на 1.

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

4.Чтобы все коэффициенты целевой функции были положительны,

применяем подстановки у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,

90

x1, x2, x3, x4, x5 = 0 или 1.

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

Базис

x1

х2

х3

x4

x5

s1 s2 s3

Решение

s1

1 1

1

2

1 1

0

0

1

s2

7

0

3

4 3

0

1

0

2

s3

11

6

0

3 3

0

0

1

1

 

 

 

 

 

 

 

 

 

 

Коэффициенты целевой

3

2

5

2

3

 

 

 

 

функции

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

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

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

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

91

приведенной таблицы, переменная х3 не может быть выбрана в качестве переменной ветвления, так как ее коэффициенты во втором и третьем ограничениях неотрицательны. Следовательно, положив х3 = 1, мы лишь увеличим (по абсолютной величине) отрицательные значения дополнительных переменных s2 и s3. Каждая же из оставшихся двоичных переменных имеет, по крайней мере, один отрицательный коэффициент во втором и третьем ограничениях. Следовательно, комбинация этих переменных может привести к положительным значениям дополнительных переменных. Таким образом, лишь переменные x1, х2, х4 и х5 можно рассматривать в качестве возможных кандидатов на переменную ветвления.

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

I j

min{0, si aij} ,

 

по в семi

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

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

I j

(отрицательное значение si при заданном x j 1) .

 

по в семi

Например, если мы положим х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.5 изображены две ветви, соответствующие х5 = 1 и х5 = 0, и образованные при этом узлы 1 и 2. Вершина 1 дает допустимое значение дополнительных переменных (s1, s2, s3) = (2, 1, 2) и z = 3. Следовательно, узел 1 прозондирован, и значение

z = 3 определяет текущую верхнюю границу оптимального значения целевой функции.

92

Рис. 6.5 Прозондировав узел 1, переходим к узлу 2, для которого х5 = 0. Здесь

имеем (s1, s2, s3) = (1, 2, 1) и z = 0, т.е. решение недопустимо. Переменные х1, х2, х3 и х4 являются возможными кандидатами на переменную ветвления. (Заметим, что хотя решения в узлах 0 и 2 идентичны, узел 2 отличается тем, что переменная х5 не является больше претендентом на ветвление.) Как и в вершине 0, здесь переменная х3 бесперспективна, так как не уменьшает (по абсолютной величине) отрицательных значений дополнительных переменных s2 и s3. Кроме того, значение x3 = 1 приводит к значению целевой функции, равному 5, что хуже текущего значения верхней границы z = 3. Переменная х1 также бесперспективна, так как соответствующий коэффициент в целевой функции равен 3, поэтому значение х1 = 1 не приводит к улучшению имеющегося значения целевой функции. Для оставшихся переменных х2 и х4 вычисляем меру недопустимости: I2 = 2, I4 = 1. Следовательно, в узле 2 переменной ветвления будет х4.

На рис. 6.6 показаны ветви х4 = 1 и x1 = 0, которые ведут к узлам 3 и 4 соответственно. В узле 3 (определенном ограничениями х5 = 0 и х4 = 1) имеем решение (s1, s2, s3) = ( 1, 2, 2), z = 2, которое не является допустимым. Кандидатами на ветвление являются переменные х1, х2 и х3. Однако, увеличивая значение любой из них до 1, мы ухудшим значение целевой

функции z по сравнению с текущей верхней границей ( z = 3). Следовательно, все переменные исключены из кандидатов на ветвление, и узел 3 прозондирован.

Далее

в узле

4, определенном ограничениями

х5

= х4 = 0, имеем

(s1, s2, s3) =

(1, 2,

1), z = 0. Переменные х1 и

х3

исключаются из

претендентов на ветвление в силу теста на верхнюю границу. Оставшуюся переменную х2 нельзя исключить из рассмотрения на основании тестов. Следовательно, х2 является переменной ветвления.

93

Рис. 6.6

На рис. 6.7 показаны узлы 5 и 6, исходящие из узла 4. В узле 5 имеем (s1, s2, s3) = (2, 2, 5), z = 2, и переменные х1 и х3 являются кандидатами на ветвление. Переменная х1 исключается тестом на верхнюю границу, а х3 как тестом на верхнюю границу, так и тестом на допустимость дополнительных переменных. Это значит, что узел 5 прозондирован. Узел 6 также прозондирован, ибо ни х1, ни х3 не могут привести к улучшению допустимого решения.

Рис. 6.7

Теперь все узлы (рис. 6.7) прозондированы, поэтому метод ветвей и границ заканчивает работу. Оптимальное решение найдено в узле 1, т.е. х5 = 1, z = 3, все остальные переменные равны нулю. Отсюда получаем решение исходной задачи:

y1 = y2 = 1, y3 = y4 = y5 = 0,w = 5.

Из рис. 6.7 видно, чем меньше ветвей, ведущих к прозондированному узлу, тем эффективнее алгоритм. Например, вершина 1 определена посредством фиксирования одной ветви (х5 = 1), и ее зондирование

94

автоматически отвечает за 25 1 = 16 двоичных решений (все решения, для которых х5 = 1). Узел 3 определен путем фиксирования двух двоичных переменных, и его зондирование отвечает лишь за 25 2 = 8 двоичных решений.

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

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

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

Пример 6.5

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

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

12х1 + 3х2 6,

7х1 +x2 35,

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

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

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

 

 

1

 

1

 

и z =

 

1

. Затем прибавляем отсечение

 

4

 

, 3

 

 

66

 

 

 

 

 

 

 

2

 

2

 

 

 

2

 

I, которое вместе с ограничениями исходной задачи линейного

программирования приводит к оптимальному решению (х1, х2) =

 

 

4

 

с

 

4

 

, 3

 

 

 

 

7

 

 

95

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

Рис. 6.8

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

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

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

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

Пример 6.6

При дополнительных переменных х3 и х4 для ограничений 1 и 2 задачи

96

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

Базис

x1

x2

x3

x4

Решение

z

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

 

 

 

 

 

 

Оптимальным непрерывным решением является х1 = 4 12 , x2 = 3 12 , x3 = 0, x4 = 0 и z = 66 12 . Целочисленное отсечение получается в предположении, что

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

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

z уравнение: z + 2263 x3 + 2231 х4 = 66 12 , x2 уравнение: х2 + 227 х3 + 221 х4 = 3 12 ,

х1 уравнение: х1 221 х1 + 223 х4 = 4 12 .

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

z + 2263 x3 + 2231 х4 = 66 12 (производящая z строка).

Для построения дробного отсечения каждый из нецелочисленных коэффициентов раскладывается на целую и дробную части при условии, что

дробная часть является строго положительной. Например,

5

=

 

 

1

 

,

 

2

 

 

 

 

2

 

 

 

2

 

 

 

 

 

 

 

97

 

 

 

 

 

 

 

 

 

 

 

 

7

= 3

2

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

3

 

 

 

 

 

Разложение коэффициентов производящей z строки приводит к

следующему уравнению:

 

 

 

 

 

 

 

 

 

 

 

 

 

z +

2

19

x3

+ 1

9

х4

=

66

1

.

 

 

 

 

 

22

 

22

 

 

 

2

 

При переносе всех целочисленных слагаемых в левую часть уравнения,

а всех дробных слагаемых в правую часть получаем

 

 

z + 2х3 + х4 66 =

1

 

19

x3

9

х4.

 

 

 

22

 

2

22

 

 

 

Поскольку все переменные в рассматриваемой

задаче принимают

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

 

1

 

19

 

 

 

9

 

 

 

1

 

19

 

9

 

 

 

 

 

 

 

 

 

x

 

 

 

 

х =

 

 

 

x

 

x

.

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

22

 

3

 

22

4

 

2

 

22 3

22 4

 

Поскольку х3, х4 0, выражение в скобках является неотрицательным.

Поэтому величина

1

 

 

 

19

x3

 

 

9

х4, будучи целочисленной, не может

2

 

22

22

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

превышать 1. Следовательно, необходимое условие целочисленности можно записать следующим образом:

12 1922 x3 229 х4 0.

Это и есть отсечение, порожденное z строкой. Нетрудно убедиться, что ранее найденное оптимальное непрерывное решение х1 = 4 12 , х2 = 3 12 , х3 = 0,

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

Аналогично построим отсечение, исходя из производящей х1 строки

или x2 строки. Рассмотрим сначала х1 строку. Имеем

 

x1

1

х3 +

 

 

3

х4

= 4

1

 

(производящая х1 строка).

 

22

 

 

22

 

 

2

 

 

 

 

 

 

 

 

Операция разложения приводит к уравнению

 

 

 

 

 

 

 

 

 

21

 

3

 

 

 

1

 

 

 

x1 +

 

1

 

х3

+ 0

 

х4

= 4

 

 

.

 

 

 

22

2

 

 

 

 

 

 

22

 

 

 

 

 

Соответствующим отсечением является неравенство

98

2221 х3 223 х4 + 12 0.

Аналогично

x2 + 227 х3 + 221 х4 = 3 12 (производящая х2 строка) записывается в виде

х2

+

0

7

 

х3 +

 

0

1

 

х4 =

 

3

1

.

 

 

 

 

 

 

22

 

 

 

 

22

 

 

 

 

2

 

Следовательно, в данном случае отсечение имеет вид

227 х3 221 х4 + 12 0.

Любое из трех отсечений может быть использовано на первой итерации метода отсекающих плоскостей.

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

227 х3 221 х4 + s1 = 12 , s1 0 (отсечение 1).

Это ограничение добавляется в качестве дополнительного в оптимальную симплекс таблицу задачи линейного программирования.

Базис

x1

х2

x3

х4

s1

Решение

z

0

0

63/22

31/22

0

66,5

 

 

 

 

 

 

 

x2

0

1

7/22

1/22

0

3,5

x1

1

0

1/22

3/22

0

4,5

s1

0

0

7/22

1/22

1

0,5

 

 

 

 

 

 

 

Таблица представляет оптимальное, но недопустимое решение. Для восстановления допустимости решения применим двойственный симплекс метод, что приведет к следующей симплекс таблице.

Базис

x1

х2

x3

х4

s1

Решение

z

0

0

0

1

9

62

 

 

 

 

 

 

 

 

х2

0

1

0

0

1

3

 

x1

1

0

0

1/7

1/7

4

4

 

7

 

 

 

 

 

 

 

 

 

x3

0

0

1

1/7

22/7

1

4

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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