nextupprevious

Next:4.9 Динамическое программирование
Up:4 Разработка алгоритмов
Previous:4.7 Усовершенствование поиска с возвращением


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

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

ЦЕНА$(a_1, a_2,\ldots, a_k)$= ЦЕНА$(a_1,a_2, \ldots, a_{k-1})+ C(a_k)$,
где $C(a_k) \geq 0$ -- функция, определенная для всех $a_k$).

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

минимум := бесконечность;  (* максимальное представимое число *)

цена := 0; $k$ := 1; Вычислить $S_1$;
while$k >$ 0 do
        while (Не пусто $S_k$) and (цена $<$ минимум) do
                (*  Продвижение:*)

                В качестве $a_k$ взять наименьший элемент из $S_k$, удалив его из $S_k$;
                цена := ЦЕНА ($a_1, a_2, ..., a_k$);
                if (($a_1, a_2, ..., a_k$) -- решение) & (цена $<$ минимум) then
                    минимум := цена;

                    Хранить далее ($a_1, a_2, ..., a_k$) как решение с наименьшей ценой
                end;
                if$k<r$then  (* Смысл r см. в п. 4.4 *)
                        k:=k - 1; Вычислить $S_k$
                end
        end;

        (* Возврат *)

        $k := k - 1$; цена := ЦЕНА ($a_1, a_2, ..., a_k$)
end.

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

Next:4.9 Динамическое программирование
Up:4 Разработка алгоритмов
Previous:4.7 Усовершенствование поиска с возвращением


© В.Н. Касьянов, Е.В.Касьянова,2004