Как работает алгоритм поиска луча?

у меня есть вопрос о луча алгоритм поиска.

например, скажем, что 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.


enter image description here

изображение выше говорит все. Обратите внимание, что на каждом шаге(столбец на рисунке) выходят только узлы beam_size, которые выбраны любым методом сортировки, а остальные отбрасываются.

и здесь Это очень интуитивная реализация, которую я сделал, и надеюсь, что это поможет.

Источник изображения:http://opennmt.net/OpenNMT/translation/beam_search/