Я изучаю алгоритм A * и алгоритм Дейкстры. И выяснилось, что единственная разница - это эвристическое значение, используемое алгоритмом A *. Но как я могу получить это эвристическое значение на моем графике? Я нашел примерный график для алгоритма A * (от A до J). Ребята, вы можете мне помочь, как рассчитываются эти эвристические значения. введите описание изображения здесь

КРАСНЫЕ числа обозначают эвристическое значение.

Моя текущая проблема заключается в создании побега из лабиринта.

3
Min Khant Lu 14 Мар 2018 в 18:58

2 ответа

Лучший ответ

Чтобы получить эвристику, оценивающую (нижнюю границу) минимальную стоимость пути между двумя узлами, есть две возможности (о которых я знаю):

Знания о нижележащем пространстве, частью которого является график

В качестве примера предположим, что узлы - это точки на плоскости (с координатами x и y), а стоимость каждого ребра - это евклидово расстояние между соответствующими узлами. В этом случае вы можете оценить (нижнюю границу) стоимость пути от узла U до узла V, вычислив евклидово расстояние между U.position и V.position.

Другой пример - это сеть дорог, где вы знаете, что она лежит на поверхности земли. Стоимость на краях может означать время в пути в минутах. Чтобы оценить стоимость пути от узла U до узла V, вы можете вычислить расстояние по дуге между ними и разделить его на максимально возможную скорость движения.

Встраивание графиков

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

Например, вы можете определить ориентир L на своем графике. Затем вы предварительно рассчитываете расстояние между каждым узлом графика и ориентиром и сохраняете это расстояние в узле. Чтобы оценить расстояние по пути во время поиска A *, теперь вы можете использовать предварительно рассчитанные расстояния следующим образом: Расстояние по пути между узлами U и V ограничено снизу величиной |dist(U, L) - dist(V,L)|. Вы можете улучшить эта эвристика с использованием более чем одного ориентира.

Для вашего графика вы можете использовать узел A и узел H в качестве ориентиров, что даст вам вложение графика, как показано на изображении ниже. Вам нужно будет предварительно вычислить кратчайшие пути между узлами A и H и всеми другими узлами, чтобы вычислить это вложение. Если вы хотите оценить, например, расстояние между двумя узлами B и J, вы можете вычислить расстояние в каждом из двух измерений и использовать максимальное из двух расстояний в качестве оценки. Это соответствует норме L-бесконечности.

graph embedding

1
SaiBot 22 Мар 2018 в 07:34

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

Это конкретная проблема и проявляется в разных формах для разных задач. Для вашего графика хорошей эвристикой может быть: фактическое расстояние от узла до места назначения, измеренное с помощью дюймовой ленты или сантиметровой шкалы. Забавно, но именно так это сделал мой профессор колледжа. Он взял дюймовую ленту на черной доске и получил очень хорошую эвристику.

Таким образом, h (A) может быть 10 единиц, что означает длину, измеренную по шкале физически от A до J.

Конечно, для того, чтобы ваш алгоритм работал, эвристика должна быть допустимой , в противном случае он мог бы дать вам неправильный ответ.

2
Sumeet 14 Мар 2018 в 16:15