Короткий ответ - да, есть ситуации, в которых A * не лучший алгоритм для решения проблемы.Однако существует несколько способов оценить, что составляет алгоритм best для поиска решения.
Если вы рассматриваете best с точки зрения производительности множественного поиска из одного источника по многим адресатам , то вам следует рассмотреть возможность использования более подходящего подхода (* Алгоритм Дейкстры ).
Если вы рассматриваете best с точки зрения производительности , то в некоторых особых случаях DFS и BFS будут значительно превосходить A *.Исходя из прошлого опыта, это происходит для очень маленьких, почти тривиальных графов, но для более сильного утверждения потребуется тщательное тестирование и профилирование.
Если вы рассматриваете best с точки зрения длина пути , то есть какова длина конечного пути, созданного алгоритмом, тогда A * эквивалентен любому другому оптимальному алгоритму поиска.
Если вы рассматриваете best вВ терминах полнота , то есть будет ли алгоритм всегда находить путь к цели, если такой путь существует.Если это так, то A * эквивалентен любому другому полному алгоритму (например, поиск в ширину).
Если вы рассматриваете best в случаях, когда некоторые из веса на графике отрицательны , тогда вам нужно будет использовать специальный алгоритм для решения этих проблем (например, bellman-ford )
Если вы считаете лучшим в случаях, когда эвристика недоступна , тогда вы должны вернуться к h(x,y)=0 forall states x and y
.В этом случае A * эквивалентен лучшему первому поиску.
Если вы рассматриваете best в случаях, связанных с планированием движения в непрерывных конфигурационных пространствах , тогда A * можетработать адекватно в низких измерениях, но хранение графа поиска начинает становиться нецелесообразным при больших измерениях, и необходимость использования вероятностно полных алгоритмов возрастает (например, RRT , Bi-RRT, RDT)
Если вы рассматриваете лучший в тех случаях, когда график является частично наблюдаемым , вы знаете только подмножество всех возможных вершин и ребер в графе в любое время, и вам нужночтобы изменить состояние, чтобы наблюдать больше графика, вам нужен альтернативный алгоритм, разработанный для этого (например, Keonig's Lifelong Planning A *, LPA *, делает именно это).
Если вы рассматриваете лучший в тех случаях, когда график меняется со временем , что часто встречается в робототехнике, когда вы включаете движущееся препятствиеs, тогда вам нужен алгоритм, который предназначен для этого (например, D * Стента или D * -Lite Кенига и Лихачева).