Jump to content

Ветвь и граница

(Перенаправлено с Branch-and-bound )

Ветви и границы ( BB , B&B или BnB ) — это метод решения задач оптимизации путем разбиения их на более мелкие подзадачи и использования ограничивающей функции для исключения подзадач, которые не могут содержать оптимальное решение. Это алгоритмов парадигма разработки для задач дискретной и комбинаторной оптимизации , а также математической оптимизации . Алгоритм ветвей и границ состоит из систематического перебора возможных решений посредством поиска в пространстве состояний : набор возможных решений рассматривается как образующий корневое дерево с полным набором в корне. Алгоритм исследует ветви этого дерева, которые представляют собой подмножества множества решений. Перед перечислением возможных решений ветви ветвь проверяется на соответствие верхним и нижним оценкам оптимального решения и отбрасывается, если она не может дать лучшее решение, чем лучшее, найденное алгоритмом.

Алгоритм зависит от эффективной оценки нижних и верхних границ областей/ветвей пространства поиска. Если границ нет, алгоритм сводится к исчерпывающему перебору.

Этот метод был впервые предложен Эйлсой Лэнд и Элисон Дойг во время проведения исследования в Лондонской школе экономики, спонсируемого British Petroleum, в 1960 году по дискретному программированию . [1] [2] и стал наиболее часто используемым инструментом для решения NP-сложных задач оптимизации. [3] Название «ветвь и границ» впервые появилось в работе Литтла и др. по задаче коммивояжера . [4] [5]

Цель алгоритма ветвей и границ — найти значение x , которое максимизирует или минимизирует значение действительной функции f ( x ) , называемой целевой функцией, среди некоторого набора S допустимых или кандидатов решений . Множество S называется пространством поиска или допустимой областью . В оставшейся части этого раздела предполагается, что минимизация f ( x ) желательна ; это предположение делается без потери общности , поскольку максимальное значение f ( x ) можно найти , найдя минимальное значение g ( x ) = − f ( x ) . Алгоритм B&B работает по двум принципам:

  • Он рекурсивно разбивает пространство поиска на более мелкие пространства, а затем минимизирует f ( x ) на этих меньших пространствах; такое расщепление называется ветвлением .
  • Одно только ветвление означало бы грубый перебор возможных решений и их тестирование. Чтобы улучшить производительность прямого поиска, алгоритм B&B отслеживает границы минимума, который он пытается найти, и использует эти границы для « обрезки » пространства поиска, исключая возможные решения, которые, как он может доказать, не будут содержать оптимальное решение.

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

  • Branch( I ) создает два или более экземпляров, каждый из которых представляет подмножество S I . (Обычно подмножества не пересекаются , чтобы алгоритм не посещал одно и то же решение-кандидат дважды, но это не требуется. Однако оптимальное решение среди S I должно содержаться хотя бы в одном из подмножеств. [6] )
  • bound( I ) вычисляет нижнюю границу значения любого решения-кандидата в пространстве, представленном I , то естьbound ( I ) ≤ f ( x ) для всех x в S I .
  • Solution( I ) определяет, представляет ли я единственное решение-кандидат. (Необязательно, если это не так, операция может выбрать возврат некоторого допустимого решения из числа S I . [6] ) Если решение( I ) возвращает решение, то f (решение( I )) обеспечивает верхнюю границу оптимального целевого значения во всем пространстве возможных решений.

Используя эти операции, алгоритм B&B выполняет рекурсивный поиск сверху вниз по дереву экземпляров , сформированному операцией ветвления. При посещении экземпляра I он проверяет, равна ли граница ( I ) текущей верхней границе или превышает ее; если да, то меня можно безопасно исключить из поиска, и рекурсия остановится. Этот этап сокращения обычно реализуется путем сохранения глобальной переменной, которая записывает минимальную верхнюю границу, наблюдаемую среди всех рассмотренных на данный момент экземпляров.

Общая версия

[ редактировать ]

Ниже приведен скелет общего алгоритма ветвей и границ для минимизации произвольной целевой функции f . [3] Чтобы получить из этого реальный алгоритм, требуется ограничивающая функция , которая вычисляет нижние границы f на узлах дерева поиска, а также правило ветвления для конкретной задачи. Таким образом, представленный здесь общий алгоритм представляет собой функцию более высокого порядка .

  1. Используя эвристику , найдите решение x h задачи оптимизации. Сохраните его значение, B = f ( x h ) . (Если эвристика недоступна, установите B равным бесконечности.) B будет обозначать лучшее решение, найденное на данный момент, и будет использоваться в качестве верхней границы возможных решений.
  2. Инициализируйте очередь для хранения частичного решения без присвоения ни одной переменной задачи.
  3. Цикл, пока очередь не станет пустой:
    1. Удалить узел N из очереди.
    2. Если N представляет единственное решение-кандидат x и f ( x ) < B , то x является лучшим решением на данный момент. Запишите его и установите B f ( x ) .
    3. В противном случае выполните ветвление по N для создания новых узлов N i . Для каждого из них:
      1. Еслиbound ( N i ) > B , ничего не делайте; поскольку нижняя граница этого узла больше верхней границы задачи, она никогда не приведет к оптимальному решению и ее можно отбросить.
      2. В противном случае сохраните N i в очереди.

несколько различных структур данных очереди Можно использовать . Эта очереди FIFO реализация на основе обеспечивает поиск в ширину . Стек ( очередь LIFO) даст алгоритм глубины . Алгоритм ветвей и границ с лучшим приоритетом можно получить, используя очередь приоритетов , которая сортирует узлы по их нижней границе. [3] Примерами алгоритмов поиска по принципу «наилучший результат» с этой предпосылкой являются алгоритм Дейкстры и его потомок A* search . Вариант с глубиной рекомендуется, когда нет хорошей эвристики для получения начального решения, поскольку он быстро дает полные решения и, следовательно, верхние границы. [7]

Псевдокод

[ редактировать ]

C ++ Реализация приведенного выше псевдокода в стиле :

// C++-like implementation of branch and bound, 
// assuming the objective function f is to be minimized
CombinatorialSolution branch_and_bound_solve(
    CombinatorialProblem problem, 
    ObjectiveFunction objective_function /*f*/,
    BoundingFunction lower_bound_function /*bound*/) 
{
    // Step 1 above
    double problem_upper_bound = std::numeric_limits<double>::infinity; // = B
    CombinatorialSolution heuristic_solution = heuristic_solve(problem); // x_h
    problem_upper_bound = objective_function(heuristic_solution); // B = f(x_h)
    CombinatorialSolution current_optimum = heuristic_solution;
    // Step 2 above
    queue<CandidateSolutionTree> candidate_queue;
    // problem-specific queue initialization
    candidate_queue = populate_candidates(problem);
    while (!candidate_queue.empty()) { // Step 3 above
        // Step 3.1
        CandidateSolutionTree node = candidate_queue.pop();
        // "node" represents N above
        if (node.represents_single_candidate()) { // Step 3.2
            if (objective_function(node.candidate()) < problem_upper_bound) {
                current_optimum = node.candidate();
                problem_upper_bound = objective_function(current_optimum);
            }
            // else, node is a single candidate which is not optimum
        }
        else { // Step 3.3: node represents a branch of candidate solutions
            // "child_branch" represents N_i above
            for (auto&& child_branch : node.candidate_nodes) {
                if (lower_bound_function(child_branch) <= problem_upper_bound) {
                    candidate_queue.enqueue(child_branch); // Step 3.3.2
                }
                // otherwise, bound(N_i) > B so we prune the branch; step 3.3.1
            }
        }
    }
    return current_optimum;
}

В приведенном выше псевдокоде функции heuristic_solve и populate_candidates называемые подпрограммами, должны быть предоставлены в соответствии с задачей. Функции f ( objective_function) и связанный ( lower_bound_function) рассматриваются как функциональные объекты в написанном виде и могут соответствовать лямбда-выражениям , указателям на функции и другим типам вызываемых объектов на языке программирования C++.

Улучшения

[ редактировать ]

Когда представляет собой вектор Алгоритмы ветвей и границ можно комбинировать с интервальным анализом. [8] и методы подрядчиков для обеспечения гарантированного соответствия глобальному минимуму. [9] [10]

Приложения

[ редактировать ]

Этот подход используется для решения ряда NP-трудных задач:

Метод ветвей и границ также может быть основой различных эвристик . Например, может возникнуть желание остановить ветвление, когда разрыв между верхней и нижней границами становится меньше определенного порога. Это используется, когда решение «достаточно хорошо для практических целей» и может значительно сократить необходимые вычисления. Этот тип решения особенно применим, когда используемая функция стоимости является зашумленной или является результатом статистических оценок и поэтому точно неизвестна, а известно только, что она лежит в пределах диапазона значений с определенной вероятностью . [ нужна ссылка ]

Связь с другими алгоритмами

[ редактировать ]

Нау и др. представляют обобщение метода ветвей и границ, которое также включает в себя алгоритмы поиска A* , B* и альфа-бета . [16]

Пример оптимизации

[ редактировать ]

Для решения этой проблемы можно использовать ветвь и границу.

Максимизировать с этими ограничениями

и являются целыми числами.

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

две линии.

Третий момент . Это область выпуклой оболочки , поэтому решение лежит в одной из вершин области. Мы можем найти пересечение, используя сокращение строк, что , или со значением 276,667. Мы проверяем другие конечные точки, проводя линию по региону, и обнаруживаем, что это максимум среди реальных значений.

Выбираем переменную с максимальной дробной частью, в данном случае становится параметром метода ветвей и границ. Мы разветвляемся на и получим 276@ . Мы достигли целочисленного решения, поэтому переходим к другой ветви. . Получаем 275,75@ . У нас есть десятичная дробь, поэтому мы разветвляемся к и находим 274.571@ . Пробуем другую ветку и нет реальных решений. Поэтому максимум 276 с и .

См. также

[ редактировать ]
  1. ^ А. Х. Лэнд и А. Г. Дойг (1960). «Автоматический метод решения задач дискретного программирования». Эконометрика . 28 (3): 497–520. дои : 10.2307/1910129 . JSTOR   1910129 .
  2. ^ «Кадровые новости» . www.lse.ac.uk. ​Архивировано из оригинала 24 февраля 2021 г. Проверено 8 октября 2018 г.
  3. Перейти обратно: Перейти обратно: а б с Клаузен, Йенс (1999). Алгоритмы ветвей и границ — принципы и примеры (PDF) (технический отчет). Копенгагенский университет . Архивировано из оригинала (PDF) 23 сентября 2015 г. Проверено 13 августа 2014 г.
  4. Перейти обратно: Перейти обратно: а б Литтл, Джон округ Колумбия; Мурти, Катта Г.; Суини, Дура В.; Карел, Кэролайн (1963). «Алгоритм решения задачи коммивояжера» (PDF) . Исследование операций . 11 (6): 972–989. дои : 10.1287/опре.11.6.972 . hdl : 1721.1/46828 .
  5. ^ Балас, Эгон; Тот, Паоло (1983). Методы ветвей и границ для задачи коммивояжера (PDF) (Отчет). Университета Карнеги-Меллон Высшая школа промышленного управления . Архивировано (PDF) из оригинала 20 октября 2012 г.
  6. Перейти обратно: Перейти обратно: а б Бадер, Дэвид А.; Харт, Уильям Э.; Филлипс, Синтия А. (2004). «Разработка параллельного алгоритма для ветвей и границ» (PDF) . В Гринберге, HJ (ред.). Учебные пособия по новым методологиям и приложениям в исследовании операций . Клювер Академик Пресс. Архивировано из оригинала (PDF) 13 августа 2017 г. Проверено 16 сентября 2015 г.
  7. ^ Мельхорн, Курт ; Сандерс, Питер (2008). Алгоритмы и структуры данных: базовый набор инструментов (PDF) . Спрингер. п. 249.
  8. ^ Мур, RE (1966). Интервальный анализ . Энглвуд Клифф, Нью-Джерси: Прентис-Холл. ISBN  0-13-476853-1 .
  9. ^ Жолен, Л.; Киффер, М.; Дидрит, О.; Уолтер, Э. (2001). Прикладной интервальный анализ . Берлин: Шпрингер. ISBN  1-85233-219-0 .
  10. ^ Хансен, скорая помощь (1992). Глобальная оптимизация с использованием интервального анализа . Нью-Йорк: Марсель Деккер.
  11. ^ Конвей, Ричард Уолтер ; Максвелл, Уильям Л .; Миллер, Луи В. (2003). Теория планирования . Публикации Курьера Дувра. стр. 56–61 .
  12. ^ Фукунага, Кейносукэ; Нарендра, Патренахалли М. (1975). «Алгоритм ветвей и границ для вычисления k -ближайших соседей». Транзакции IEEE на компьютерах (7): 750–753. дои : 10.1109/tc.1975.224297 . S2CID   5941649 .
  13. ^ Нарендра, Патренахалли М.; Фукунага, К. (1977). «Алгоритм ветвей и границ для выбора подмножества функций» (PDF) . Транзакции IEEE на компьютерах . С-26 (9): 917–922. дои : 10.1109/TC.1977.1674939 . S2CID   26204315 .
  14. ^ Хазиме, Хусейн; Мазумдер, Рахул; Сааб, Али (2020). «Разреженная регрессия в масштабе: метод ветвей и границ, основанный на оптимизации первого порядка». arXiv : 2004.06152 [ stat.CO ].
  15. ^ Новозин, Себастьян; Ламперт, Кристоф Х. (2011). «Структурированное обучение и прогнозирование в компьютерном зрении». Основы и тенденции в компьютерной графике и зрении . 6 (3–4): 185–365. CiteSeerX   10.1.1.636.2651 . дои : 10.1561/0600000033 . ISBN  978-1-60198-457-9 .
  16. ^ Нау, Дана С.; Кумар, Випин; Канал, Лавин (1984). «Общая ветвь и граница и ее связь с A∗ и AO∗» (PDF) . Искусственный интеллект . 23 (1): 29–58. дои : 10.1016/0004-3702(84)90004-3 .
[ редактировать ]
  • LiPS – Бесплатная, простая в использовании программа с графическим интерфейсом, предназначенная для решения задач линейного, целочисленного и целевого программирования.
  • Cbc – (Монета или ветвь и разрез) – это решатель смешанного целочисленного программирования с открытым исходным кодом, написанный на C++.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 806c3bab052a4e7ed07c024d40c5457d__1714770780
URL1:https://arc.ask3.ru/arc/aa/80/7d/806c3bab052a4e7ed07c024d40c5457d.html
Заголовок, (Title) документа по адресу, URL1:
Branch and bound - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)