Если поиск A * с эвристическим евклидовым расстоянием допускает диагональные перемещения, будет ли он по-прежнему оптимальным? - PullRequest
1 голос
/ 06 марта 2019

Так что, если у меня есть поиск A * в лабиринте 10х10 с 10 препятствиями, и я позволю себе диагональные перемещения внутри него, будет ли он по-прежнему оптимальным?

Мой ответ таков: он все равно будет оптимальным,и это потому, что Евклидово расстояние вычисляет расстояние по прямой линии между двумя точками, так что оно в любом случае пересекает пространство поиска по диагонали, так что я не думаю, что это будет иметь значение, или оно может даже улучшить его?Не уверен, правильно ли я думаю.

1 Ответ

1 голос
/ 08 марта 2019

Это зависит от стоимости диагональных ходов.

Рассмотрим ситуацию равномерной стоимости : стоимость диагонального перемещения такая же, как и стоимость не диагональной ( Чебышеврасстояние ).

A* - Diagonal distance - uniform cost

В этом случае расстояние между зеленой и красной точкой составляет 6.В общем:

def chebyshev_distance(node):
    dx = abs(node.x - goal.x)
    dy = abs(node.y - goal.y)
    return max(dx, dy)

, в то время как эвристическое евклидово расстояние:

def heuristic(node):
    dx = abs(node.x - goal.x)
    dy = abs(node.y - goal.y)
    return sqrt(dx * dx + dy * dy)

дает heuristic ≅ 6.71 и переоценивает стоимость пути, что приводит к недопустимой эвристике ( может ненайти оптимальный путь ).

В общем:

max (| d x |, | d y |) = | Макс |= sqrt (Макс 2 ) ≤ sqrt (Макс 2 + min 2 ) = sqrt (d x 2 + d y 2 )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...