2013-10-05 2 views
4

У меня проблема с попыткой выяснить, как реализовать систему поиска траектории для шахматной изометрической карты.Исследуемый изометрический Pathfinder

Я прочитал алгоритм A * и попытался посмотреть, как он будет отображаться на изометрической карте, и результаты привели меня сюда.

Таким образом, проблема лежит здесь (я сожалею о дешевом дисплее)

enter image description here

Итак, я в настоящее время на зеленой черепицей (2,3), и я пытаюсь найти путь к красной плитке (3,1).

Основываясь на алгоритме A *, я пытаюсь вычислить значение F соседних плит (я сделал это только для этих 3 плиток).
Поскольку изображение отображает значение F (2,1) ниже (2,2), и это является матерью всех проблем, диагональные плитки с j + 2 и j-2 будут иметь (почти) каждый раз более низкое значение F, чем «логический» выбор.
Итак, вместо того, чтобы идти (2,2), он перейдет к (2,1).

Как я могу решить эту проблему? Может кто-нибудь подскажет мне, что мне делать?

+1

Как вы рассчитываете G и H? О, и исходя из данных значений, похоже, что ваш H не является [допустимым] (http://en.wikipedia.org/wiki/Admissible_heuristic). Это займет 10, чтобы получить от (2,2) до (3,1), но вы говорите, что требуется 20 (т. Е. Вы переоцениваете). – Dukeling

+0

Я вычисляю расстояние между (x1, y1) и (x2, y1) как это H = (Math.Abs ​​(x2-x1) + Math.Abs ​​(y2-y1)) * 10, как для G, я использую 10 для прямых путей и 14 для диагоналей. –

ответ

3

Основываясь на данных значениях, похоже, что ваш H не admissible. Так как для получения от (2,3) до (2,2) требуется 10, я полагаю, что он должен взять 10, чтобы получить от (2,2) до (3,1), но ваш H говорит, что требуется 20 (т.е. вы переоценивать).

Один из возможных H - это прямое расстояние до цели (или что-то вроде Manhattan distance или евклидова).

На нашем первом этапе мы исследуем всех соседей. Наши G значения будут выглядеть следующим образом: (G = зеленый, R = красной)

14 
    10 10 
14 R 14 
    10 10 
G 14 

Давайте H, как что-то вроде Манхэттена расстояния, где 14 является диагональным прыжком и 10 является переходом к непосредственному соседу. На самом деле это идеальная эвристика для этого примера, поскольку она точно такая же, как и фактическое расстояние. Это будет отличаться, если на пути есть препятствия.

Тогда мы получим значения Н как:

34 
    24 30 
14 R 34 
    10 24 
G 14 

Таким образом, наши значения F (= G + H) являются:

48 
    34 40 
28 R 48 
    20 34 
G 28 

Затем найти минимум, который 20, исследовать все это (неизведанных) соседей и найти минимум, что будет целью в этом случае.

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

+0

Как распознать диагональный прыжок? –

+2

@SanduCezar Я не уверен.Как работает ваша система координат? Я мог бы получить его, если '(1,5)' было '(2,5)', то похоже, что 2 строки имеют одну и ту же координату x. Казалось бы, с этим сложно работать, по крайней мере, расчет не будет таким прямым. В качестве более простого варианта просто разделите ваш текущий H на 2, чтобы сделать это (т. Е. Умножить на 5 вместо 10), хотя это будет хуже - для достижения результата потребуется больше времени. – Dukeling

+0

О, простите об этом. Кажется, я ошибся, жаль снова за путаницу, да, ты прав, это должно было быть (2,5) вместо (1,5). –

Смежные вопросы