Как работает алгоритм поиска луча?
у меня есть вопрос о луча алгоритм поиска.
например, скажем, что n = 2
(количество узлов, которые мы собираемся развернуть из каждого узла). Итак, в начале у нас есть только корень, с 2 узлами, которые мы расширяем из него. Теперь из этих двух узлов мы расширяем еще два. Итак, на данный момент у нас есть 4 листа. Мы будем продолжать в том же духе, пока не найдем ответ.
так работает поиск луча? Расширяется ли он только n = 2
каждого узла, или он держит 2 листовых узла все время?
Я думал, что n = 2
означает, что у нас должно быть не более 2 активных узлов от каждого узла, а не два для всего дерева.
есть пример поиска луча на этот сайт. Мне трудно это понять. Я понимаю первую часть
Arad -> Sibiu
Arad -> Timisoara
мы отбрасываем Zerind, потому что n = 2
. Но я не понимаю второй части:--6-->почему Тимишоара отброшен? Разве мы не должны увидеть узлы Тимишоары, а затем решить, какие узлы будут отброшены? Может быть, у Тимишоары узлы лучше, чем у Сибиу?
2 ответов
Если вы не имеете в виду какой-то вариант, который не является консенсусом луч-поиск, нет.
В Луче-Поиск,количество узлов, о которых вы в настоящее время "знаете", ограничено - и не количество узлов, которые вы будете следовать от каждого узла.
это значит, что если n=2
, ваш луч будет не более размера 2-в любое время, поэтому вы начинаете с одного узла, затем обнаруживаете все узлы, которые доступны из него, но отбрасываете их все, кроме двух, и завершите Шаг 1 с 2 узлами.
на Шаге 2 у вас есть два узла, и вы будете расширять оба и снова отбрасывать все узлы-за исключением ровно 2 узлов (всего, а не от каждого!).
в следующих шагах-аналогично, вы будете держать 2 узла после каждого шага.
выбор узла для сохранения обычно выполняется некоторой эвристической функцией, которая оценивает, какой узел ближе всего к цели.
обратите внимание, что поиск Луча не завершен (находит решение, если оно существует) и не оптимален (находит лучшее решение), и лучший способ увидеть это-наблюдать, что когда n=1
, это в основном сводится к best-first-search.
изображение выше говорит все. Обратите внимание, что на каждом шаге(столбец на рисунке) выходят только узлы beam_size, которые выбраны любым методом сортировки, а остальные отбрасываются.
и здесь Это очень интуитивная реализация, которую я сделал, и надеюсь, что это поможет.
Источник изображения:http://opennmt.net/OpenNMT/translation/beam_search/