Двунаправленный поиск
Двунаправленный поиск — это алгоритм поиска в графе , который находит кратчайший путь от начальной вершины до целевой вершины в ориентированном графе . Он выполняет два одновременных поиска: один вперед от исходного состояния и один назад от цели, останавливаясь, когда они встречаются. Причина такого подхода в том, что во многих случаях он быстрее: например, в упрощенной модели сложности задачи поиска, в которой оба поиска расширяют дерево с коэффициентом ветвления b , а расстояние от начала до цели равно d , каждый из два поиска имеют сложность O ( b д /2 ) (в нотации Big O ), а сумма этих двух времен поиска намного меньше, чем O ( b д ) сложность, которая может возникнуть в результате одного поиска от начала до цели.
Эндрю Голдберг и другие объяснили правильные условия завершения двунаправленной версии алгоритма Дейкстры . [1]
Как и в поиске A* , двунаправленный поиск может руководствоваться эвристической оценкой оставшегося расстояния до цели (в прямом дереве) или от начала (в обратном дереве).
Айра Пол ( 1971 ) был первым, кто разработал и реализовал двунаправленный эвристический алгоритм поиска. Деревья поиска, исходящие из начального и целевого узлов, не смогли встретиться в середине пространства решений. Алгоритм BHFFA исправил этот дефект Шампо (1977).
Решение, найденное однонаправленным алгоритмом A* с использованием допустимой эвристики, имеет кратчайшую длину пути; то же самое свойство справедливо и для двунаправленной эвристической версии BHFFA2, описанной де Шампо (1983). BHFFA2 имеет, среди прочего, более строгие условия завершения, чем BHFFA.
Описание
[ редактировать ]Двунаправленный эвристический поиск — это поиск в пространстве состояний из некоторого состояния. в другое государство , поиск из к и из к одновременно. Он возвращает действительный список операторов, к которым при применении даст нам .
Хотя может показаться, что для обратного поиска операторы должны быть обратимыми, необходимо лишь иметь возможность найти по любому узлу , набор родительских узлов такой, что существует некоторый допустимый оператор от каждого из родительских узлов к . В области поиска маршрута это часто сравнивают с улицей с односторонним движением: не обязательно иметь возможность ехать в обоих направлениях, но необходимо, стоя в конце улицы, определить начало улицы. как возможный маршрут.
Аналогично, для тех ребер, которые имеют обратные дуги (т.е. дуги, идущие в обоих направлениях), не обязательно, чтобы каждое направление имело одинаковую стоимость. При обратном поиске всегда будет использоваться обратная стоимость (т.е. стоимость дуги в прямом направлении). Более формально, если это узел с родителем , затем , определяемый как стоимость от к .(Ауэр Кайндл 2004)
Терминология и обозначения
[ редактировать ]- коэффициент ветвления дерева поиска
- стоимость, связанная с переездом из узла узел
- стоимость от корня до узла
- эвристическая оценка расстояния между узлами и цель
- начальное состояние
- состояние цели (иногда , не путать с функцией)
- текущее направление поиска. По соглашению, равно 1 для прямого направления и 2 для обратного направления (Kwa 1989)
- противоположное направление поиска (т.е. )
- дерево поиска в направлении d. Если , корень , если , корень
- листья (иногда называемый ). Именно из этого набора выбирается узел для расширения. В двунаправленном поиске их иногда называют «границами поиска» или «волновыми фронтами», имея в виду, как они выглядят, когда поиск представлен графически. В этой метафоре «столкновение» происходит, когда во время фазы расширения обнаруживается, что узел одного волнового фронта имеет преемников на противоположном волновом фронте.
- нелистовые узлы . Этот набор содержит узлы, уже посещенные поиском.
Подходы к двунаправленному эвристическому поиску
[ редактировать ]Двунаправленные алгоритмы можно условно разделить на три категории: «Вперед-вперед», «Вперед-назад» (или «Вперед-к-концу») и поиск по периметру (Каиндл Кайнц, 1997). Они различаются функцией, используемой для расчета эвристики.
Спереди назад
[ редактировать ]Алгоритмы Front-to-Back рассчитывают значение узла используя эвристическую оценку между и корень противоположного дерева поиска, или .
«Спереди назад» — наиболее активно исследуемая из трех категорий. На данный момент лучшим алгоритмом (по крайней мере, в области головоломок «Пятнадцать ») является алгоритм BiMAX-BS*F, созданный Ауером и Кайндлом (Auer, Kaindl 2004).
Спереди вперед
[ редактировать ]Алгоритмы Front-to-Front вычисляют значение h узла n, используя эвристическую оценку между n и некоторым подмножеством узлов. . Каноническим примером является BHFFA ( двунаправленный эвристический фронт-фронтальный алгоритм ), [2] где функция h определяется как минимум всех эвристических оценок между текущим узлом и узлами на противоположном фронте. Или формально:
где возвращает допустимую (т.е. не завышенную) эвристическую оценку расстояния между узлами n и o .
Метод Front-to-Front страдает от чрезмерных вычислительных затрат. Каждый раз, когда узел n помещается в открытый список, его стоимость необходимо рассчитать. Это включает в себя вычисление эвристической оценки от n до каждого узла в противоположном множестве OPEN , как описано выше. Наборы OPEN увеличиваются в размерах экспоненциально для всех доменов с b > 1 .
Ссылки
[ редактировать ]- ^ Эффективные алгоритмы кратчайшего пути «точка-точка»
- ^ де Шампо 1977/1983
- де Шампо, Деннис; Синт, Лени (1977), «Улучшенный двунаправленный эвристический алгоритм поиска», Journal of the ACM , 24 (2): 177–191, doi : 10.1145/322003.322004 .
- де Шампо, Деннис (1983), «Снова двунаправленный эвристический поиск», Журнал ACM , 30 (1): 22–32, doi : 10.1145/322358.322360 .
- Поль, Ира (1971), «Двунаправленный поиск», Мельцер, Бернард; Мичи, Дональд (ред.), Machine Intelligence , vol. 6, Издательство Эдинбургского университета, стр. 127–140 .
- Рассел, Стюарт Дж .; Норвиг, Питер (2002), «3.4 Стратегии неинформированного поиска», Искусственный интеллект: современный подход (2-е изд.), Прентис Холл .