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

Загребаев Методы матпрограммирования 2007

.pdf
Скачиваний:
124
Добавлен:
16.08.2013
Размер:
10.97 Mб
Скачать

xn+1 = −{βi } + {αij }x j ,

(1.14)

j ω

 

где xn+1 – дополнительная переменная, на которую также накладывается условие целочисленности, {αij } , {βi } – дробные части от

соответствующих чисел, ω – множество индексов свободных переменных.

Как известно, дробная часть положительного числа d определяется по формуле:

{d} = d [d ] ,

где [d ] – ближайшее целое число, не превосходящее d (для отрицательных чисел последнее соотношение может не выполняться).

Например, для числа 5,8 будем иметь: {d}= 0,8 , а для числа 5,9 , соответственно, получим, {d}= 0,1 .

Очевидно, что 0 {d}<1 и d = {d}+ [d ].

Докажем, что построенное отсечение (1.14) исключает текущее оптимальное решение, но сохраняет все допустимые значения переменных в целочисленной задаче. Такое отсечение является пра-

вильным.

Введем понятие правильного отсечения более строго.

Определение. Пусть x * – оптимальное решение задачи (1.11), (1.12), не являющееся целочисленным. Неравенство

n

µ j x j ≤ µ0

j=1

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

1)для вектора x * неравенство не выполняется;

2)если x – целочисленное допустимое решение задачи (т.е. удовлетворяет условиям (1.12)), то для x неравенство выполняется.

Теорема. Пусть x * – оптимальное решение задачи (1.11), (1.12). Если xi* – нецелое число, то неравенство

91

{αij }x j {βi }

(1.15)

jω

 

является правильным отсечением.

(Уравнение (1.14) получается из неравенства (1.15) при добавлении ослабляющей переменной xn+1 , что необходимо для приве-

дения задачи к каноническому виду при решении симплексметодом.)

Доказательство.

а) Пусть x* – базисное решение. Тогда

 

*

= βi

нецелое, следовательно, {βi } > 0;

xi

 

 

= 0,

(1.16)

x*

j ω.

 

j

 

 

Таким образом, получим,

{αij }x j = 0 ,

jω

т.е. из неравенства (1.15) следует, что {βi } 0 . Это противоречит

условию (1.16).

б) Пусть x – целочисленное, допустимое решение задачи. Следовательно, оно удовлетворяет системе ограничений. Рассмотрим i -ю строку системы ограничений, а именно:

xi = βi αij x j , jω

что эквивалентно

xi = [βi ] +{βi } ([αij ] +{αij })x j .

jω

Запишем это уравнение по-другому:

xi [βi ] + [αij ]x j ={βi } {αij }x j . jω jω

Итак, левая часть уравнения – целое число, следовательно, правая часть уравнения (обозначим ее через z) – тоже целое число:

z ={βi } {αij }x j – целое.

jω

92

Причем z <1, так как {βi } <1, а {αij } 0 и x j 0 .

Отсюда следует, что z > −1 , но так как z – целое число, то z 0 , или, с учетом предыдущего выражения,

{βi } + {αij }x j 0 , т.е.

{αij }x j {βi } .

jω

jω

Таким образом, доказано, что любое целочисленное допустимое решение задачи удовлетворяет неравенству (1.15).

Алгоритм метода отсечения.

1.Найти оптимальное решение задачи линейного программирования (1.11), (1.12) без учета условия целочисленности.

Если все базисные переменные полученного решения целые, то целочисленная задача решена. В противном случае перейти к шагу 2.

2.Выбрать (в оптимальном решении) дробную базисную пере-

менную с максимальной дробной частью xi и построить дополни-

тельное линейное ограничение по i -й строке последней симплекстаблицы

xn+1 = −{βi } + {αij }x j . jω

3.Добавить к исходной задаче (1.11) – (1.13) новое ограничение

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

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

Замечания.

1. После введения отсечения в число ограничений задача становится задачей с недопустимым базисом, так как появляется отрицательный свободный член –

{βi } , поэтому решение задачи осуществляется двойственным симплекс-методом.

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

93

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

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

На рис. 1.8 приведен пример поиска оптимального решения методом ветвей и границ.

Рис. 1.8. Принцип формирования дерева метода ветвей и границ

Для данного примера, допустимое решение f1 лучше f2 , однако решения f6 и f5 , которые получены из решения f1 , оказались хуже чем f2 . В результате, оптимальным решением является f7 .

Как правило, метод ветвей и границ применяется к задачам следующего вида:

94

найти

max f (x)

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

n

 

 

 

= c0 + c j x j

j=1

 

 

 

n

 

 

 

 

 

 

 

aij x j bi ,

j =

1, m

;

 

j=1

 

 

 

 

 

 

 

M j x j N j ,

j =

 

;

x j 0 целые.

 

1, n

Числа

M j , N j – целые

числа.

Возможна ситуация, когда

M j = 0 , а

N j = ∞. В этом случае последнее условие просто экви-

валентно условию неотрицательности x .

Идея метода такова: сначала решается обычная задача линейного программирования. Если решение не целое, т.е. имеется дробная

базисная

переменная, например xi* , тогда из ограничения

M i xi Ni для xi формируют два ограничения:

Здесь [xi* ]

[xi* ]+1 xi Ni и M i xi [xi* ] .

– целая часть переменной xi* .

Это можно проиллюстрировать рис. 1.9.

Рис. 1.9. Формирование областей поиска решения

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

Алгоритм метода ветвей и границ.

0-я итерация. Первоначальный список задач состоит из исходной задачи без условия целочисленности. За начальную оценку це-

95

левой функции f)1 (x) берут либо очевидное минимальное значение целевой функции при допустимых значениях переменных, либо fˆ1 (x) = −∞ в трудных случая.

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

2. Если выбранная задача не имеет решения или если полученное оптимальное значение целевой функции меньше текущей

оценки fˆ k (x) , то оставить в качестве оценки целевой функции

fˆ k (x) , т.е. положить fˆ k +1 (xk +1 ) = fˆ k (x) . Перейти к шагу 1.

В противном случае, т.е. если выбранная задача имеет решение

ˆ k

(x) ,

и оптимальное значение целевой функции больше оценки f

перейти к шагу 3.

3. Если полученное оптимальное решение задачи целочисленное, то зафиксировать его, принять в качестве новой оценки

fˆ k +1 (x) полученное оптимальное значение целевой функции и

вернуться к шагу 1.

В противном случае, т.е. если решение задачи не является целочисленным, перейти к шагу 4.

4. Выбрать любую дробную переменную xi* из полученного оп-

тимального решения и дополнить основной список двумя новыми задачами, отличающимися от решенной только i-м ограничением.

В первой задаче i-е ограничение имеет вид:

M i xi [xi* ] ,

а во второй

[xi* ]+1 xi Ni .

5. Сохранить имеющуюся оценку целевой функции для следующей итерации, т.е. положить fˆ k +1 (x) = fˆ k (x) , и перейти к шагу 1.

96

1.7.5. Метод зондирования решений

Данным методом решают задачу целочисленного программирования с булевыми переменными:

найти

 

 

n

 

 

 

c j x j

 

max f (x) =

 

 

 

j=1

 

 

 

 

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

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

aij x j

bi , i =

1, m

;

j=1

 

 

 

 

 

 

 

0,

 

 

 

 

 

 

j =1, n .

 

 

x j =

 

 

 

1,

 

 

 

 

 

 

Решением задачи является набор переменных {x1 , x2 , ..., xn }, каждая из которых принимает значение 0 или 1. Всего существует

2n таких наборов. Для получения решения поставленной задачи линейного программирования, в сущности, необходимо перебрать все эти наборы. Непосредственный перебор приводит к длительным вычислениям. Метод зондирования позволяет эти вычисления сократить. Метод относится к классу «ветвей и границ».

Совокупность l переменных, где 1 ≤ l ≤ n , принимающих значения 0 или 1 называется пробным зондированием. Переменные, не входящие в пробное решение, называются свободными. Любой конкретный набор свободных переменных образует дополнение пробного решения. Если имеется n переменных, l из которых вхо-

дят в пробное решение, то можно построить 2n−l дополнений пробного решения.

Пусть n = 8 и пробное решение имеет вид {x3 =1, x6 = 0}, тогда

число свободных переменных равно n − l = 8 2 = 6 . Произвольным дополнением пробного решения будет, например, такой набор свободных переменных

{x1 =1, x2 = 0, x4 = 0, x5 =1, x7 =1}.

Всего же можно составить 26 = 64 дополнений пробного решения.

97

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

Пример. Пусть требуется найти

max {f (x) = x1 +8x2 + 4x3 + 9x4 x5 + 3x6 }.

Предположим, что оценка целевой функции на k -й итерации fˆ k (x) =15 .

Рассмотрим пробное решение {x2 = 0, x3 =1, x4 = 0}, оценка целевой функции, следовательно, будет

fˆ k +1 (x) = x1 + 4 x5 + 3x6 .

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

x =1, x

5

= 0, x

6

=1 ) – это f (x) = 8 . А текущая оценка f k (x) =15 .

1

 

 

Следовательно, нельзя подобрать дополнения пробного решения, увеличивающего значение целевой функции.

Теорема дополнения. Дополнения, улучшающего пробное решение, не существует, если выполняется хотя бы одно из неравенств:

min(aij ,0) > bi

 

aij x j , i =

 

 

 

1, m +1;

по свободным

 

 

 

попробным

 

 

 

переменным

 

 

 

переменным

 

 

 

где

 

 

 

 

 

 

ˆ k

 

 

 

a

 

= −c

 

,

b

 

(x) 1 .

m+1, j

j

m+1

= − f

 

 

 

 

 

 

 

 

Теорема расширения.

Свободную переменную xk можно

включить в пробное решение, если хотя бы при одном i выполняется неравенство

min(aij ,0) +

 

aik

 

> bi

aij x j , i =

 

 

 

 

1, m +1.

по свободным

 

 

 

 

по пробным

переменным

переменным

98

Причем

xk

= 0,

если

aik

0;

xk

=1,

если

aik

< 0.

Алгоритм метода зондирования решений.

0-я итерация. 1. Взять в качестве оценки целевой функции fˆ1 (x) нуль или сумму всех отрицательных коэффициентов целе-

вой функции (в трудных случаях fˆ1 (x) = −∞ ).

2. Сформировать первое пробное решение, состоящее из одной переменной. Переменную xl , входящую в первое пробное решение

выбрать произвольно или, чтобы улучшить сходимость, выбрать переменную, имеющую максимальный коэффициент в целевой функции. Занести в основной список две задачи. В одной из них xl = 0 , в другой – xl =1 .

k-я итерация. 1. Прекратить вычисления, если основной список пуст. В противном случае выбрать задачу из основного списка.

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

целевой функции превосходит текущую оценку

ˆ k

(x) . Если тако-

f

го дополнения не существует оставить оценку

ˆ k +1

(x) =

ˆ k

(x) и

f

 

f

вернуться к шагу 1.

В противном случае перейти к шагу 3.

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

4.Если расширенное пробное решение является полным, т.е. содержит все n переменных, то (если значение целевой функции

ˆ k +1

(x)

превышает оценку) зафиксировать его, принять оценку f

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

В противном случае перейти к шагу 5.

5. Выбрать любую свободную переменную xk , не входящую в пробное решение. Внести в основной список две задачи. В одной из них xk = 0 , в другой xk =1.

99

6. Если в полученных задачах пробные решения не являются полными, то взять значение fˆ k +1 (x) = fˆ k (x) и вернуться к шагу 3.

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

значения целевой функции.

 

 

ˆ k

(x) . Вы-

Сравнить их с оценкой f

 

брать и зафиксировать решение у которого

f (x) >

ˆ k

(x) , поло-

f

жить

ˆ k +1

(x) = f (x) . Если

таких решений

нет,

то

положить

f

 

ˆ k +1

(x) =

ˆ k

(x) , а полученные задачи отбросить.

 

 

 

f

f

 

 

 

 

Перейти к шагу 1.

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

Пример 1. Метод отсечения. Найти

max{f (x) = 21x1 +11x2 }

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

7x1 + 4x2 13 , x1 , x2 0 целые.

В канонической форме задача выглядит так: найти

max {f (x) = 21x1 +11x2 }

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

 

7x1 + 4x2 + x3 =13 ;

 

 

 

 

x1 , x2 ,

x3 0 целые.

 

 

 

1. Решение задачи симплекс-методом.

 

 

 

Составим симплекс-таблицу (табл. 1.38).

 

 

 

 

 

 

 

 

 

Таблица 1.38

 

 

 

 

 

 

 

 

Базис

Свободный член

 

x1

 

x2

x3

 

x3

13

 

7

 

4

1

 

f (x)

0

 

–21

 

–11

0

 

100