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

Исследование операций и методы оптимизации

.pdf
Скачиваний:
381
Добавлен:
05.06.2015
Размер:
2 Mб
Скачать

подмножеств на этой итерации ξ(G(k ) ) = min{G(k )} , при этом

UG(k ) = G

, то

υ

i

i

υ

0

 

 

 

 

 

 

решение x* является оптимальным и улучшено быть не может (Рис. 17).

 

 

Действительно, в самом множестве Gυ

лучшего решения быть не может,

аостальные оценки дают «обещание» решений хуже, чем x* .

Впрактических задачах можно ограничиться приближённым решением с точностью до ε.

Пусть получено некоторое решение x ' и за-

дана некоторая абсолютная точность решения ε:

 

 

 

*

)

 

< ε , где

x

*

- неизвестное нам

 

 

 

 

 

f (x ) f (x

 

 

 

точное решение.

 

 

 

 

 

 

Если

=

 

 

 

(k )

)}

 

< ε , то разница

 

 

 

 

f (x ) min{ξ

(Gi

 

 

между точным оптимальным значением и при-

 

ближённым тем более меньше ε.

 

Если

<ε , то δ <ε .

Рис. 17

 

 

 

 

 

 

 

 

 

 

4.6. Алгоритм МВГ для задачи ЛЦП

 

n

 

 

 

 

 

 

 

z = cj xj min ,

 

(4.29)

j=1

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

aj xj

bi ,i =

 

 

,

 

(4.30)

1,m

 

j=1

 

 

 

 

 

 

 

xj - целое, j =

 

, n1 n .

(4.31)

1,n1

Для задачи ЛЦП (4.29), (4.30),

 

(4.31) оценкой множества реше-

 

ний, определяемых (4.30), (4.31),

 

является

оптимальное

значение

 

для задачи ЛП (4.29),

(4.30). На

 

рисунке 18 точка А – решение за-

 

дачи ЛП, а точка В – решение за-

 

дачи ЛЦП. Кроме этого, для ЛЦП

 

можно использовать простое пра-

 

вило ветвления вариантов. Полу-

 

чаем следующий алгоритм:

Рис. 18

 

68

 

1.Отбросим (4.31) и найдем решение задачи ЛП. Если решение автоматически удовлетворяет (4.31), то оно является оптимальным. Иначе переходим ко второму пункту.

2.Рассмотрим какую-нибудь нецелочисленную переменную полученного

решения xl = dl ,l {1, n1} . По этой переменной производится ветвление, все множество решений разбивается на два:

G1(1) : xl [dl ] +1 ,

G2(1) : xl [dl ] .

Пример:

x5

= 4

4

x5

4

.

7

5

 

 

x5

 

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

1.Если решения задачи ЛП нет, то соответствующее ее множество Gl = Θ пустое. Ему необходимо приписать оценку +∞ (для z min ).

2.Если все коэффициенты целевой функции целые, то оценку множества можно заменить на более сильную. Для задачи на min – на величину ]ξ(Gl )[

-ближайшее целое с избытком. Для z max на [ξ(Gi )].

Пример:

z = −x1 x2 min ,

4.32

2x1 +11x2 38

 

x1 + x2 7

,

4.33

4x 5x 5

 

 

1

2

 

 

x1, x2

- целое.

 

4.34

 

 

 

69

Решим задачу (4.32, 4.33). Получим

x0 = (409 , 239 ); ξ(G0 ) = f (x0 ) = −7 ,

G1(1) ={x1 4},

G2(1) ={x1 5}.

Решив эти задачи, получим:

x = 4;

x = 2

8

; ξ(G(1) ) =

 

6

8

 

= −6;

G(1)

= O; ξ(G ) = +∞.

 

 

 

 

1

2

11

1

 

11

 

2

2

 

 

 

 

 

 

 

 

 

G1(1) - перспективное множество. Разбив его на два подмножества по x2, получаем:

G1(,11) : (x2 2) & (1), (2) …

G1(,22) : (x2 3) & (1), (2) …

Переобозначим:

G1,1(1) = G1(2) ; G1,2(1) = G(2)(2) ; G2(1) = G(3)(2) .

Решим задачу на G1(2) . Получим

x 2 = (3

3 ;2); ξG(2) =

 

5

3

= −5

 

 

1

 

4

1

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

 

А на G

(2)

получим :

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

G(2)

: x 2 = (2 1 ;3), ξ(G(2) ) =

 

5 1

 

= −5 ,

2

2

 

2

 

2

 

 

2

 

 

 

 

 

 

 

 

 

 

 

G3(2) = O; ξ = +∞ .

Берем оценку первую по порядку, т.к. одинаковые:

70

G1,1(2) : (x1 3),

G1,2(2) : (x1 4).

Переобозначим (получим 4 подмножества). Решив задачу на G1(3) x1(3) = (3;2); ξ(G1(3) ) = −5 ,

G2(3) = O; ξ(G2(3) ) = +∞

G(3)

x (3)

= (2 1

;3);

ξ(G(3) ) =

 

5

1

 

= −5,

3

3

2

 

3

 

 

2

 

 

 

 

 

 

 

 

 

 

G(3)

= O;ξ(G(3) ) = +∞.

 

 

 

 

 

4

 

4

 

 

 

 

 

 

 

Получено целочисленное решение x1(3) = (3,2). Применим условие оптимальности.

f(3, 2) = -5 = min{-5, +∞, -5, +∞} = -5.

Условие оптимальности выполняется. Решение x1(3) = (3;2) является оптимальным z* = −5 . Изобразим дерево решений (Рис. 19).

 

 

 

 

 

ξ = −7

 

 

 

x1

 

G0

 

 

 

4

x1 5

 

 

ξ = −6

 

 

ξ = ∞

 

 

 

G1(1)

G2(1)

 

x1

2

 

x1

3

 

ξ = −5

G(2)

 

G(2) ξ = −5

 

 

1

 

 

2

 

x1 3

x1

4

 

ξ = −5

G(3)

 

 

G(3)

ξ = ∞

 

1

 

 

2

 

x1 = 3; x2 = 2

Рис. 19

71

4.7. Алгоритмы решения задач булевского программирования

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

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

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

Рассмотрим задачу линейного булевского программирования

L = ci xi max(1) ,

(4.34)

 

 

i=1

 

 

 

 

n

 

 

 

 

 

aij xj

bi ,i =

 

(2) ,

(4.35)

1,m

i=1

 

 

 

 

 

x

j

{

}

 

 

(4.36)

 

0,1 (3) .

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

При большом n придётся проверять все m ограничений, а проверка каждого ограничения – это трудоемкая операция. Рассмотрим процедуру перебора, положенную в основу аддитивного алгоритма Балаша [8].

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

c1 c2 c3 ... cn .

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

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

72

Отформ

Equation

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

Балаш предложил добавить некоторое фильтрующее ограничение. Идея его в том, что незачем проверять вектор на допустимость, если он не превосходит рекорда Z* :

cij xj > Z*.

(4.37)

j=1

 

Если ограничение (4.37) не выполняется, то переходим к следующему вектору, в противном случае – к ограничению (4.35). Если новый вектор удовлетворяет всем ограничениям, то, подставляя его в (4.34), получим новый рекорд Z* и формируем новое фильтрующее ограничение, заменяя Z* на Z**. Если пройден весь список, то последний рекорд даёт решение. При этом мы экономим на проверке ограничений.

Пример: z = 3x1 x2 + 2x3 + x4 max ,

2x1 x2 4x3 + x4 10 ,

3x1 + 2x2 + x3 + 2x4 1,

4x1 x2 2x3 4, xj {0,1},

z = −x2 + x4 +2x3 +3x1 max ,

 

x2 + x4 4x3 + 2x1 10 ,

(1)

2x2 + 2x4 + x3 3x1 1 ,

(2)

x2 +0 x4 2x3 +4x1 4 .

(3)

Составим таблицу и получим первый допустимый вектор (0010); z=2. Составляем фильтрующее ограничение:

(0) x2 + x4 + 2x3 + 3x1 > 2 .

73

Отформа

Equation

Удалено:

Удалено:

Удалено:

Отформа

Equation

Находим новый рекордный вектор (0110); z=3, новое фильтрующее ограничение

(0) x2 + x4 + 2x3 +3x1 > 3 .

Наконец находим новое рекордное значение (1111); z=5. Т.к. список исчерпан, то последний рекорд – это оптимальное решение.

zmax = 5 .

Эффективность процесса можно оценить количеством значков в таблице. В современных алгоритмах (например, в алгоритме Лемке-Шпильберга) порядок перехода от одного вектора к другому меняется в соответствии с анализом коэффициентов модели задачи:

1.Критерий недопустимости – запрещает двигаться к некоторым векторам, которые заведомо недопустимы.

2.Проверяются целевые функции – множеству дается оценка (подробнее см.[7,10,23]).

Таблица 31

 

 

x

 

1

2

3

(0)

z

0

0

0

0

+

-

 

 

 

0

0

0

1

+

-

 

 

2

0

0

1

0

+

+

+

 

 

 

0

0

1

1

+

-

 

+

 

0

1

0

0

 

 

 

-

 

0

1

0

1

+

-

 

+

3

0

1

1

0

+

+

+

+

 

0

1

1

1

+

-

 

+

 

1

0

0

0

 

 

 

-

 

1

0

0

1

 

 

 

-

 

1

0

1

0

 

 

 

-

 

1

0

1

1

+

-

 

+

 

1

1

0

0

 

 

 

-

 

1

1

0

1

 

 

 

-

5

1

1

1

0

 

 

 

-

 

 

 

 

1

1

1

1

+

+

+

+

 

В алгоритме Балаша используются и другие ограничения, позволяющие отсечь некоторые решения (см. [7]). Рассмотрим некоторые из них.

Рассмотрим правило, по которому можно отсеивать варианты. Пусть N - множество индексов всех двоичных векторов. Подмножество множества N, состоящее из таких элементов j, что каждому j поставлено в соответст-

вие xj {0,1} , называется частич-

ным решением, а множество индексов обозначим V.

Переменные xj, номера которых не принадлежат этому подмножеству, называются свободными, множество индексов свободных переменных обозначим S.

Пример: Вектор переменных (x1, x2, x3, x4, x5) N=(1, 2, 3, 4, 5), (x1, 0, 1, x4, x5) - частичное решение, V=(2, 3),

74

Отформ

Equation

Отформ

Equation

Отформ

русский

S = N/V,

S= (1, 4, 5) - номера свободных переменных.

Если частичное решение содержит k переменных, то существует 2n-k различных дополнений частичного решения.

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

Если до этого получен рекорд Z* и если удаётся установить, что для какого – то частичного решения не существует допустимого дополнения, приводящего к лучшему рекорду, то говорят, что частичное решение прозондировано, т.е. что это подмножество можно отсеять.

Балаш установил, что если V определяет переменные зондированного решения, а Z* - ранее достигнутый рекорд, то зондируемое решение x не имеет допустимого дополнения, улучшающего Z*, если выполняется условие:

min(aij ,0) > bi

aij xj , при любом i =

 

,

(4.38)

1,m(5)

j S

jΩ

 

Например, пусть задача содержит ограничения:

x1 + 2x2 +6x3 + 4x4 x5 0 ,

x1 =1, x2 =1, x4 = 0 ,

Ω = (1,3,4), N = (1,2,3,4,5), S ={2,5} .

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

решения.

Отформа

интервал П После: 6 п

Отформа

русский (Р

Отформа

русский (Р

Код поля

Отформа

русский (Р

Отформа

русский (Р

min(aij ,0) = −1;

a1 j xj = 5;

b1 a1 j xj = −5; 1 > −5.

j S

j v

j v

Рассмотрим другое правило отсеивания вариантов. Если для некоторой свободной переменной xk имеет место соотношение

min(aij ,0) +

 

aik

 

> bi a1 j , xj , i =

 

,

 

 

1,m

j S

 

j v

то

75

Отформа

русский (Р

xk

0,

åñëè aik

0,

(4.39)

=

åñëè aik

< 0.

 

1,

 

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

В общем случае это комбинация всех строк ограничений.

Например, используется суммирование левых и правых частей ограничений.

Пример:

Пусть задача состоит из такого решения x1, x2, …, x5, которое имеет ограничения:

-x1 -x2 – x3 <= -1,

2x2 - 2x4+ 2x5 <=0,

xj={0,1}.

Максимизируется функция

Z=2x1+x2+x3 Æ max.

Пусть при некотором частичном решении рекорд составлял Z=2. Определить, имеет ли частичное решение x1=0 допустимое дополнение, улучшающее достигнутый рекорд.

Прибавим к ограничениям фильтрующее ограничение, то есть

2x1 + x2 + x3 3, получим новую систему ограничений:

- x1 x2 x3 -1,

2x2 – 2x4 +2x5 0,

- 2x1 x2 x3 -3.

Сформируем составное ограничение

- 3x1 – 2x3 – 2x4 + 2x5 -4.

76

Отформ

русский

Отформ

русский

Отформ

русский

Отформ

русский

Отформ

русский

Отформ

русский

и применим к нему признак (4.38)

min(aij ,0) = −4,

aij , xj = 0, 4 = −4

j S

jΩ

Получаем - 4= - 4, следовательно, ограничение выполняется, то есть при x1=0 не существует дополнения, улучшающего рекорд Z=2.

На основе полученных правил запишем алгоритм.

1.Пуст ли основной список задач? Если «да», то вычисления окончены и переходим к п.5. Если «нет» - присвоим счетчику числа задач основного списка α значение α := α -1, т.е. вычеркиваем одну задачу. Счётчику числа итераций k := k +1 (в начале, очевидно, k = 1).

2.Существует ли допустимое дополнение при выбранном частичном решении, улучшающее значение рекорда Z*? Проверим условие (4.38).

Если «да», то определяем эти значения по формуле (4.39) и переходим к п.3. Если «нет» - положим Z(k+1) = Zk и переходим к п.1.

3.Содержат ли допустимое дополнение частичного решения и зондируемое решение n переменных?

Если «да» - запоминаем решение, значение рекорда Z* и переходим к п.1. Если «нет» - переходим к п.4.

4.Выбираем любую свободную переменную xi, не входящую в число до-

пустимых переменных. Вводим две задачи в основной список (в одной xi=0, в другой xi=1). Положим Zk = Z(k-1) и переходим к п.1.

Печать результата решения: рекорд и значения переменных либо «задача решения не имеет». Конец алгоритма.

Отформа

Отступ: Сл 17 пт, нум Уровень: 1 нумерации Начать с: 1 слева + Вы + Табуляц Отступ: 0 Поз.табуля левому кра Выровнять

Отформа

Отступ: Сл 17 пт, нум Уровень: 1 нумерации Начать с: 1 слева + Вы + Табуляц Отступ: 0 Поз.табуля левому кра Выровнять

табуляции

Отформа

Отступ: Сл 17 пт, нум Уровень: 1 нумерации Начать с: 1 слева + Вы + Табуляц Отступ: 0 Поз.табуля левому кра Выровнять табуляции

77