A-star は、ヒューリスティックが「許容可能」であり、残りの距離を過大評価しないことを意味する場合、メトリック関数に従って最短パスを提供することが保証されます (必ずしも「鳥が飛ぶように」ではありません)。
このリンクを確認してください: http://theory.stanford.edu/~amitp/GameProgramming/Heuristics.html
実装エラーの特定を支援するために、メトリックとヒューリスティックの両方の詳細が必要になります。
更新:
OP のメトリック関数は、直交移動の場合は 10、対角線移動の場合は 14 です。
OPのヒューリスティックは直交する動きのみを考慮しているため、「許容できない」。より安価な対角移動を無視することで過大評価します。
過度に保守的なヒューリスティックの唯一のコストは、最小パスを見つける前に追加のノードを訪問することです。過度に積極的なヒューリスティックのコストは、最適でないパスが返される可能性です。OP は次のヒューリスティックを使用する必要があります。
7 * (deltaX + deltaY)
これは、直接斜めのパスの可能性をわずかに過小評価しているため、パフォーマンスも高くなるはずです。
更新 #2:
パフォーマンスを実際に絞り出すために、これは非常に高速でありながら最適に近いものです。
7 * 分 (デルタ X、デルタ Y) + 10 * ( 最大 (デルタ X、デルタ Y) - 最小 (デルタ X、デルタ Y) )
更新 #3:
上記の7は 14/2 から派生したもので、14 はメトリックの対角コストです。
ヒューリスティックな変更のみ。メトリックは「ビジネス ルール」であり、残りのすべてを駆動します。六角形グリッドの A-star に興味がある場合は、ここで私のプロジェクトをチェックしてください: http://hexgridutilities.codeplex.com/
更新 #4 (パフォーマンスについて):
A-star に対する私の印象は、O(N^2) パフォーマンスの領域とほぼ O(N) パフォーマンスの領域の間でずれているということです。しかし、これはグリッドまたはグラフ、障害物の配置、開始点と終了点に大きく依存するため、一般化するのは困難です。既知の特定の形状またはフレーバーのグリッドおよびグラフには、より効率的なさまざまなアルゴリズムがありますが、多くの場合、より複雑になります。タンスターフル。