三角測量A *(TA *)パスファインディングアルゴリズム


11

Demyenが彼の論文Efficient Triangulation-Based Pathfinding(p 。

彼は、通常のA *アルゴリズムを三角測量に適応させ、最終ノードに到達/拡張した後でも、他のより最適なパスを検索する方法を説明しています。通常のA *は、最後のノードが展開されると停止しますが、三角グラフで使用される場合、これが常に最適なパスであるとは限りません。これはまさに私が抱えている問題です。

この問題は、78ページの図5.4に示されています。 ここに画像の説明を入力してください

論文(80ページ)に記載されているgおよびh値の計算方法を理解しています。

そして、検索停止条件は次のとおりです。

if (currentNode.fCost > shortestDistanceFound)
{
    // stop
    break;
}

ここで、currentNodeは、開いているリスト(優先度キュー)からポップされた検索ノードであり、fスコアが最も低くなります。shortestDistanceFoundは、これまでに見つかった最短経路の実際の距離です。

しかし、以前に見つかったパスを今後の検索から除外するにはどうすればよいですか?もう一度検索すると、明らかに同じパスが見つかるからです。クローズリストをリセットしますか?何かを変更する必要がありますが、何を変更する必要があるのか​​わかりません。この論文には疑似コードが欠けているため、参考になります。

回答:


3

私はこれを実装していませんが、読んでいると、次のようなことをすると思います。

shortestDistance = infinity
do A* with modified g cost
    if node.fCost > shortestDistance (section 5.5)
        don't open node
    if node.isGoal()
        run funnel algorithm (string pulling)
        update shortestDistance

違いは、あなたが見つける場合でも、ということであるゴールへのパスを、それは必ずしもありません最短パス。ただし、最短パスの上限を改善し続けるため、すべてのノードを開く必要はありません。最終的に、オープンセットは空になり、これまでに見つけた最適なパスが最短になります。

彼が説明する変更されたgコストは大きな過小評価のように思われるので、それが実際にどれだけうまく機能するかについては疑問です。


不正解かもしれませんが、オープンリストに追加するための条件ではなく、停止条件として解釈しています。以下は、オープンリストに追加するための条件のように聞こえます。「補足として、検索状態の子は、その三角形に対応する状態がその状態の祖先である場合、特定の隣接する三角形に対して生成されません。これは定理4.3.4で述べられているように、最適なパスを削除することはなく、その一部を削除することで短くなる可能性があるため、除外を行うことができます。」
Morrowless
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.