У меня есть тест на ветвь и связанный алгоритм. Я теоретически понимаю, как работает этот алгоритм, но я не смог найти примеров, иллюстрирующих, как этот алгоритм может быть реализован практически.
Я нашел несколько примеров, таких как этот, но я все еще смущен этим. Я также искал проблему коммивояжера и не мог ее понять.
Что мне нужно, так это некоторые проблемы и как можно решить эти проблемы с помощью ветвления и привязки.
Ответы:
Давайте применим Branch и Bound к ранцу , надеюсь, это прояснит вам концепцию.
Обратите внимание, что это называется « Ограничение », потому что обычно оно включает в себя некоторую нижнюю или верхнюю границу: для критерия « даже если я добавлю все оставшиеся элементы, стоимость элементов, которые я вставил, не будет превышать лучшую конфигурацию». До сих пор я обнаружил , что «ценность вашей лучшей конфигурации на данный момент - это нижняя граница для лучшей конфигурации, поэтому все, что никогда не пройдет через эту нижнюю границу, обречено на провал».
Вы можете сделать «Ограничивающую» часть настолько сложной, насколько захотите. Например, задачи целочисленного программирования часто решаются с помощью релаксаций: вы переводите вашу программу в линейную программу, которую вы можете решить за полиномиальное время, а затем вы можете отбросить множество случаев для ваших двоичных переменных, которые никогда не сработают. Затем вы переходите на остальные варианты.
Обратите внимание, что Branch and Bound обычно дает вам только увеличение скорости на практике, но не в теории: трудно сказать, сколько именно дерева поиска вырезано с использованием вашей эвристики. Об этом свидетельствует количество различных эвристик, используемых на практике для решения таких задач. Если вам не повезло, оставшееся дерево поиска остается огромным, даже с большим количеством ограничений.
источник
Рассмотрите планирование , задачу назначения заданий с определенной продолжительностью и сроками для машин. Мы предполагаем дискретное время. Многие такие проблемы являются NP (O) -hard.
Версия решения этой проблемы NP-трудна; это можно увидеть по сокращению от 3PARTITION .
Интересно, что если мы допустим приоритетное вытеснение , то есть замену активных заданий, проблема может быть решена за квадратичное время с помощью эвристики «Самый ранний срок исполнения» («Измененные сроки исполнения»). Нетрудно видеть, что оптимальное решение этого варианта может быть не хуже оптимального решения исходной задачи.
Теперь, чтобы применить Branch & Bound к этой проблеме, нам нужно исправить некоторые параметры:
Вы должны сделать это для каждого приложения B & B.
Для конкретного примера рассмотрим этот экземпляр :1∣ri∣Lmax
с время обработки заданий, даты выпуска и сроки исполнения.pi ri di
При выполнении B & B, как указано выше, это происходит:
Этот GIF не зацикливается. Перезагрузите его в новой вкладке, чтобы увидеть с самого начала.
[ источник ] [ статическая версия ]
Обратите внимание, что из 41 узла только четыре посещаются правильно, и только для десяти рассчитываются нижние границы.
источник