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

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

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

1 ответ

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

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

В этом случае расстояние между зеленой и красной точкой 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 |) = | Max | = sqrt(макс. 2) ≤ sqrt(макс. 2 + min 2) = sqrt(д х 2 + д у 2)

Другие вопросы по тегам