Алгоритм поиска *

Я хотел бы кое-что уточнить в отношении следующего примера поиска A *:

A* Search Example

Разделы, выделенные красными эллипсами, - это области, которые я не понимаю; кажется, что {S,B} f=2+6=8 было взято/перемещено/скопировано из Expand S (см. выше) и использовано в Expand A. Также представляется, что {S,A,X} f=(1+4)+5=10 был взят/скопирован/скопирован из Expand A и используется в Expand B.

Может кто-нибудь объяснить, почему это происходит? Я умею хорошо читать график и не испытываю проблем с его интерпретацией - это просто факт, что я не знаю , почему вышеупомянутые пути/маршруты были дублированы в другом месте.

Спасибо.

Ответ 1

Это занимает текущий лучший элемент, удаляет его и заменяет его расширением (вставка новых элементов в соответствующие позиции в списке). Подумайте об этом так:

Развернуть S:

  • {S,A} f = 1+5 = 6
  • {S,B} f = 2+6 = 8

Разверните A:

  • {S,A} f = 1+5 = 6дел >
  • {S,B} f = 2+6 = 8
  • {S,A,X} f = (1+4)+5 = 10
  • {S,A,Y} f = (1+7)+8 = 16

Развернуть B:

  • {S,B} f = 2+6 = 8дел >
  • {S,A,X} f = (1+4)+5 = 10
  • {S,B,C} f = (2+7)+4 = 13
  • {S,A,Y} f = (1+7)+8 = 16
  • {S,B,D} f = (2+1)+15 = 18

Ответ 2

Пути не дублируются, они просто остаются в виде путей, которые алгоритм еще не изучил. A * работает, поддерживая открытый набор, это набор узлов, который алгоритм уже знает, как достичь (и по какой цене), но он еще не пытался их расширить.

На каждой итерации алгоритм выбирает node для расширения из открытого набора (тот, который имеет наименьшую функцию f - функция f является суммой стоимости, которую алгоритм уже знает, что требуется для перехода к node (g) и оценки алгоритма, сколько будет стоить, чтобы получить от node до цели (h, эвристический).

http://en.wikipedia.org/wiki/A*_search_algorithm

посмотрите на псевдокод там, так как вы можете видеть, что используется открытый набор. Итак, нижняя строка - это не то, что алгоритм работает путем дублирования\копирования\перемещения путей или узлов с одной итерации на другую - он просто выполняет свою работу над одним и тем же набором узлов (конечно, узлы добавляются и удаляются из коллекции).

Надеюсь, что это поможет...