FIRST, идеальный путь был (в порядке важности):
1. shortest
Моя эвристика (f) была:
manhattan distance (h) + path length (g)
Это было ошибкой, потому что он предпочитал пути, которые отклонялисьпо направлению к цели, затем змею обратно.
ВТОРОЙ, идеальный путь был:
1. shortest
2. approaches the destination from the same y coordinate (if of equal length)
Моя эвристика осталась прежней.Я проверил второй критерий в конце, после достижения цели.Эвристика была сделана немного неэффективной (чтобы исправить проблему поворота), что также привело к тому, что всегда находились необходимые соседние координаты.
THIRD, идеальный путь:
1. shortest
2. approaches the destination from the same y coordinate (if of equal length)
3. takes the least number of turns
Теперь я попыталсяэвристика (f):
manhattan distance (h) + path length (g) * number of turns (t)
Это, конечно, работает для критериев № 1 и № 3 и по существу устраняет проблему отклонения.К сожалению, теперь это настолько эффективно, что тестирование по критерию №2 в конце не работает, поскольку набор исследуемых узлов недостаточно велик, чтобы восстановить оптимальное решение.
Может кто-нибудь посоветовать мне, как вписать критерии №2 вмой эвристический (f), или как еще решить эту проблему?
КРИТЕРИИ 2 пример: Если цель (4,6) и пути к (3,6) и (4,5) имеютравной длины, то идеальное решение должно пройти через (3,6), потому что оно приближается из плоскости Y вместо (4,5), которая исходит из плоскости X.Однако, если длина не идентична, то предпочтительнее выбирать кратчайший путь независимо от того, к какой плоскости он приближается.