5. Методы решения дискретных задач
Мы убедились, что с помощью булевых переменных можно решать часто встречающиеся задачи оптимизации. Но как решать?
Есть три метода решения задач с булевыми переменными:
метод ветвей и границ;
метод сплошного перебора;
метод фильтрующего ограничения.
Методом ветвей и границ задачи дискретного программирования решаются, как обычные задачи целочисленного программирования. При этом на каждую переменную накладывается два требования:
Совершенно очевидно, что выполнение этих двух требований обеспечивает получение в решении значений [0; 1] т. е. равных 0 или 1.
Пример 4. Требуется решить систему методом сплошного перебора:
max L = 3 1 - 2 2 + 5 3
Решение. Так как 1, 2, 3 могут принимать значения 0 или 1 в любом сочетании, рассмотрим все возможные сочетания (табл. 5) в следующей последовательности.
Таблица 5.
№ варианта |
1 |
2 |
3 |
(1) |
(2) |
(3) |
(4) |
L |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
2 |
1 |
0 |
0 |
1 |
1 |
1 |
4 |
3 |
3 |
0 |
1 |
0 |
2 |
4 |
1 |
0 |
-2 |
4 |
0 |
0 |
1 |
-2 |
1 |
0 |
1 |
5 |
5 |
1 |
0 |
1 |
0 |
2 |
1 |
5 |
8 |
6 |
1 |
1 |
0 |
3 |
5 |
2 |
4 |
1 |
Требование |
|
|
|
<2 |
<4 |
<3 |
<6 |
max |
Заполнить все возможные сочетания допустимых значений 1, 2, 3.
Определить и записать значения левых частей ограничений (1)-(4) и целевой функции.
Вычеркнуть те варианты, в которых не удовлетворяется хотя бы одно ограничение, как приводящие к недопустимым решениям.
Из оставшихся вариантов принимается тот, в котором целевая функция максимальна. В примере max L = 8 — в шестом варианте (оптимальном), в котором = = 1; .
Из этого примера видно, что в данном случае всего вариантов будет 23 = 8 и для каждого варианта надо вычислить четыре ограничения и целевую функцию, т. е. выполнить N = 8(4 + 1) = 40 вычислительных операции. Значит, в общем случае N = 2n(m + 1), где n — число переменных, m – число ограничений. Следовательно, при увеличении размерности задачи число вычислений резко возрастает (табл. 6).
Таблица 6.
n |
ТО |
||
4 |
10 |
15 |
|
3 |
40 |
88 |
120 |
5 |
160 |
352 |
512 |
10 |
5120 |
11264 |
16384 |
Для сокращения трудоемкости полного перебора применяют различные методы.
Метод фильтрующего ограничения предполагает следующую последовательность действий.
Принимают некоторые значения 1, 2, 3, например: 1, 0, 0.
Определяют значение целевой функции при таком на боре переменных L = 3 1 - 2 2 + 5 3 = 3*1 – 2*0 + 5*0 = 3.
Далее устанавливают новые значения переменных и целевой функции; причем если полученная целевая функция меньше 3, то этот вариант не рассматривают. Дли исключения возможного рассмотрения такого варианта, вводят дополнительное ограничение 3 1 - 2 2 + 5 3 ≥ 3, которое называют фильтром (Ф).
Составляют таблицу (табл. 7), в которой для каждого варианта проверяют выполнение всех ограничений, включая Ф.
Если вычисление прекращается и величины не определены, то в клетках таблицы ставится прочерк.
Введение фильтрующего ограничения Ф привело к сокращению числа вычисляемых величин (24 вместо 40, т. е. 60%).
№ варианта |
1 |
2 |
3 |
F = Ф |
(1) |
(2) |
(3) |
(4) |
1 |
0 |
0 |
0 |
- |
- |
- |
- |
- |
2 |
1 |
0 |
0 |
3 |
1 |
1 |
1 |
4 |
3 |
0 |
1 |
0 |
-2 |
- |
- |
- |
- |
4 |
1 |
1 |
0 |
1 |
- |
- |
- |
- |
5 |
0 |
0 |
1 |
5 |
-1 |
1 |
0 |
1 |
6 |
1 |
0 |
1 |
8 |
0 |
2 |
1 |
5 |
7 |
0 |
1 |
1 |
3 |
1 |
5 |
- |
- |
8 |
1 |
1 |
1 |
6 |
2 |
6 |
- |
- |
Требование |
|
|
|
> 3 |
< 2 |
< 4 |
< 3 |
< 6 |
Число вычислений можно уменьшить, если фильтр будет не постоянным для всего цикла вычислений, а изменяющимся, т. е. если в ходе вычислений при каком-либо наборе переменных значение целевой функции окажется лучше, чем у фильтра, то это новое допустимое решение принимают для следующих вычислений в качестве нового фильтра. Такой фильтр называют адаптивным.
Например, из таблицы видно, что в пятом варианте Ф = 5. Поэтому для дальнейших вычислений в качестве фильтрующего ограничения принимаем 3 1 - 2 2 + 5 3 ≥ 5 (Ф1). Однако для следующего варианта значение целевой функции будет еще больше (Ф = 8) и в качестве фильтрующего ограничения принимается 3 1 - 2 2 + 5 3 ≥ 8 (Ф2). Для седьмого и восьмого вариантов значение целевой функции не удовлетворяет требованиям фильтра Ф2 и значения ограничений не вычисляем. Значит, трехкратный фильтр (Ф, Ф1, Ф2) позволил сократить вычисления еще на 4, т. е. надо выполнить 20 вычислений вместо 40 (50%). Более значительное сокращение трудоемкости достигается методом Беллмана с фильтром, где наибольший Ф получают сразу.