Исследование операций и методы оптимизации
.pdfподмножеств на этой итерации ξ(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