逃げるための経路探索


61

ご存知のように、ポイントAからポイントBに至る2次元環境で最適なパスを見つけるには、多くの解決策があります。

しかし、オブジェクトがポイントAにあり、ポイントBからできるだけ早く遠くまで離れたい場合、どのようにパスを計算しますか?

少しの背景情報:私のゲームは、タイルベースではないが、浮動小数点精度の2D環境を使用しています。動きはベクトルベースです。経路探索は、ゲームワールドを歩行可能または歩行不可能な長方形に分割し、コーナーからグラフを作成することによって行われます。ダイクストラアルゴリズムを使用して動作するポイント間のパスファインディングはすでにあります。逃亡アルゴリズムのユースケースは、特定の状況では、ゲーム内のアクターが別のアクターを危険として認識し、そこから逃げるということです。

些細な解決策は、「安全な」距離に到達するか、または俳優が恐怖で覆う壁に到達するまで、脅威とは反対の方向にベクトルで俳優を移動することです。

このアプローチの問題は、アクターが簡単に回避できる小さな障害物によってブロックされることです。壁に沿って移動しても脅威に近づくことはできませんが、そもそも障害物を避けたほうが賢く見えます。

ここに画像の説明を入力してください

もう1つの問題は、マップジオメトリの行き止まりです。状況によっては、存在は、より速く離れるが、トラップされる行き止まりで終わるパス、または最初は危険からそれほど遠くに行かないことを意味する別のパスから選択する必要があります(または少し近づいても)、その一方で、最終的にははるかに遠く離れてしまうという点で、はるかに長期的な報酬があります。だから、離れるの短期報酬の高速は何とか離れるの長期報酬に対して評価されなければならない遠いです

ここに画像の説明を入力してください

また、攻撃者が小さな脅威に近づき、はるかに大きな脅威から逃れることを受け入れる必要がある状況には、別の評価の問題があります。しかし、すべての軽度の脅威を完全に無視するのも愚かなことです(そのため、この図の俳優は右上の領域で軽度の脅威を回避するために邪魔になりません)。

ここに画像の説明を入力してください

この問題の標準的な解決策はありますか?


8
+1素晴らしいビジュアルで素晴らしい質問。それは本当に質問を明確にします。
マイケルハウス

回答:


24

これは最善の解決策ではないかもしれませんが、このゲームのために逃げるAIを作成するのに役立ちました。

ステップ1.ダイクストラのアルゴリズムをA *に変換します。これは、目標までの最小距離を測定するヒューリスティックを追加するだけで簡単になります。このヒューリスティックは、ノードのスコアリング時にこれまでに移動した距離に追加されます。とにかくこの変更を行う必要があります。パスファインダーが大幅に向上するからです。

ステップ2.ヒューリスティックのバリエーションを作成します。ターゲットまでの距離を推定する代わりに、危険からの距離を測定し、この値を無効にします。これはターゲットに到達しないため(存在しないため)、特定の反復回数の後、特定の距離に到達した後、またはすべての可能なルートが処理された後に、ある時点で検索を終了する必要があります。このソリューションは、指定された制限のある最適なエスケープルートを見つけるパスファインダーを効果的に作成します。


1
通常、ステップ2のヒューリスティックは許容されるヒューリスティックを与えないため、危険から直線距離のようなものを使用するだけであることに注意してください。もちろん、それはとにかくそれを使用しようとすることができないという意味ではありませんが、最適なエスケープパスを生成しない可能性があります。この「逆A *」の実際の許容可能なヒューリスティックを取得するには、通常のA * /ダイクストラを使用して、各正方形の危険からの実際の距離を計算する必要があると思います。
イルマリカロネン

+1結果への努力が及ぶ限り、これはあなたの支出に見合う最高の価値を与えると思います。
マイケルハウス

33

アクターに逃げるのを賢くしたいのなら、単純なダイクストラ/ A *パスファインディングはそれをカットしません。その理由は、敵からの最適な脱出経路を見つけるために、俳優は敵がどのように追跡して移動するかを考慮する必要があるためです。

次のMSペイント図は、敵からの距離を最大化するために静的な経路探索のみを使用すると、次善の結果になる特定の状況を示しています。

P字型迷路で敵から逃げる俳優の図

ここで、緑の点は赤の点から逃げており、進むべき道は2つあります。右側のパスを進むと、赤い点の現在の位置からさらに遠くに移動できますが、最終的には緑の点を行き止まりに閉じ込めます。代わりに、最適な戦略は、緑の点が円の周りを走り続け、赤の点とは反対側にとどまることです。

このようなエスケープ戦略を正しく見つけるには、ミニマックス検索などの敵対的検索アルゴリズム、またはアルファベータプルーニングなどの改良が必要です。上記のシナリオに十分な検索深度で適用されたこのようなアルゴリズムは、右端の行き止まりのパスを取得すると必然的にキャプチャにつながることを正しく推測しますが、円にとどまることはありません(緑のドットがアウトランを超えることができる限り)赤いもの)。

もちろん、いずれかのタイプのアクターが複数ある場合、これらすべてが個別に、またはアクターが協力している場合は一緒に、独自の戦略を計画する必要があります。このような複数の俳優の追跡/脱出戦略は、驚くほど複雑になる可能性があります。たとえば、逃げる俳優にとって考えられる戦略の1つは、敵をより魅力的なターゲットに導くことで敵をそらすことです。もちろん、これは他のターゲットの最適な戦略などに影響します...

実際には、多くのエージェントを使用して非常に深い検索をリアルタイムで実行することはおそらくできないため、ヒューリスティックに多く頼らなければなりません。これらのヒューリスティックの選択により、アクターの「心理学」が決定されます。アクターがどのように行動するか、さまざまな戦略にどれほど注意を払うか、アクターがどの程度協力的または独立的かなどです。


7

パスファインディングがあるので、問題を減らして良い目的地を選ぶことができます。

マップ上に絶対に安全な目的地がある場合(たとえば、脅威がアクターを追いかけることができない出口など)、1つまたは複数の近くの目的地を選択し、パスコストが最も低いものを見つけます。

逃げる俳優に武装した友人がいる場合、または地図に俳優が免疫を持っているが脅威はないハザードが含まれている場合は、そのような友人またはハザードの近くの空きスポットを選択し、その経路を見つけます。

あなたの逃げる俳優が、脅威が興味を持っているかもしれない他の俳優よりも速い場合、その他の俳優の方向であるがそれを超えた点を選び、その点まで経路を見つけます:「クマを追い越す必要はありません。 、あなたを追い越すだけです。」

逃げる、脅威を殺す、または気を散らす可能性がなければ、あなたの俳優は運命づけられていますよね?だから、実行する任意のポイントを選択し、あなたがそこに着いて、脅威がまだあなたを追いかけているなら、何が起こるのか:ターンして戦う。


7

適切なターゲット位置を指定することは多くの状況で難しい場合があるため、2D占有グリッドマップに基づく次のアプローチは検討する価値があります。一般に「値の反復」と呼ばれ、勾配下降/上昇と組み合わせて、シンプルでかなり効率的な(実装に応じて)パス計画アルゴリズムを提供します。そのシンプルさにより、モバイルロボット工学、特に屋内環境でナビゲートする「シンプルロボット」でよく知られています。上記のように、このアプローチは、次のようにターゲット位置を明示的に指定せずに、開始位置から離れたパスを見つける手段を提供します。可能であれば、target-positionをオプションで指定できることに注意してください。また、アプローチ/アルゴリズムは幅優先の検索を構成し、

バイナリの場合、2D占有グリッドマップは占有グリッドセル用であり、他の場所ではゼロです。この占有値は、範囲[0,1]でも連続的である可能性があることに注意してください。以下に戻ります。特定のグリッドセルg iの値はV(g iです。

基本バージョン

  1. グリッドセルg 0に開始位置が含まれると仮定します。セットV(G 0)= 0、およびput G 0を FIFOキューに。
  2. キューから次のグリッドセルg iを取得します。
  3. g iのすべての隣人g jに対して:
    • g jが使用されておらず、以前にアクセスされていない場合:
      • V(g j)= V(g i)+1
      • g jを訪問済みとしてマークします。
      • FIFOキューにg jを追加します。
  4. 所定の距離しきい値にまだ到達していない場合は(2.)に進み、そうでない場合は(5.)に進みます。
  5. パスは、g 0から始まる最も急な勾配上昇に従って取得されます。

ステップ4に関する注意。

  • 上記のように、ステップ(4.)では、カバーされる最大距離を追跡する必要があります。これは、明確化/簡潔化の理由で上記の説明では省略されています。
  • 目標位置が指定されている場合、目標位置に到達するとすぐに反復が停止します。つまり、ステップ(3.)の一部として処理/訪問されます。
  • もちろん、グリッドマップ全体を単純に処理すること、つまり、すべての(無料の)グリッドセルが処理/訪問されるまで続行することもできます。制限要因は、明らかに解像度と併せてグリッドマップのサイズです。

拡張機能とさらなるコメント

更新式V(g j)= V(g i)+1は、V(g j)を縮小することにより、あらゆる種類の追加のヒューリスティックを適用する余地を十分に残しています。または、特定のパスオプションの値を減らすための追加コンポーネント。すべてではないにしても、ほとんどの場合、このような変更は、[0,1]からの連続値を持つグリッドマップを使用してうまく、一般的に組み込むことができます。たとえば、障害物の境界に沿って1から0へのトランジションを追加すると、「俳優」は障害物のない状態を保つことができます。このようなグリッドマップは、たとえば、ぼかし、重み付き拡張などによってバイナリバージョンから生成できます。脅威と敵を大きなぼかし半径を持つ障害物として追加すると、これらに近いパスにペナルティが課せられます。次のように、グリッドマップ全体で拡散プロセスを使用することもできます。

V(g j)=(1 /(N + 1))×[V(g j)+ sum(V(g i))]

ここで、「合計」は、隣接するすべてのグリッドセルの合計を指します。たとえば、バイナリマップを作成する代わりに、初期(整数)値は脅威の大きさに比例し、障害物は「小さな」脅威を提示します。拡散プロセスを適用した後、グリッド値を[0,1]にスケーリングする必要があり、障害、脅威、および敵が占めるセルを1に設定/強制する必要があります。そうでない場合、更新式のスケーリングは期待どおりに動作しません。

この一般的なスキーム/アプローチには多くのバリエーションがあります。障害物などの値は小さい可能性がありますが、フリーグリッドセルの値は大きいため、目的に応じて最終ステップで勾配降下が必要になる場合があります。いずれにせよ、アプローチは、IMHO、驚くほど汎用性が高く、実装がかなり簡単で、潜在的にかなり高速です(grid-map-size / resolutionに依存)。最後に、特定のターゲット位置を想定しない多くのパス計画アルゴリズムと同様に、行き詰まりに陥る明らかなリスクがあります。ある程度まで、このリスクを減らすために最後のステップの前に専用の後処理ステップを適用することが可能かもしれません。

Java-Script(?)の図を使用した別の簡単な説明を次に示しますが、この図は私のブラウザーでは機能しませんでした:(

http://www.cs.ubc.ca/~poole/demos/mdp/vi.html

計画の詳細については、次の本を参照してください。値の反復については、第2章、セクション2.3.1最適な固定長計画で具体的に説明します。

http://planning.cs.uiuc.edu/

Derikさんのお役に立てば幸いです。


3

捕食者に焦点を合わせてはどうですか?適切な密度で、プレデターの位置に360度レイキャストします。そして、避難サンプルを持つことができます。そして、最高の避難所を選択してください。

ケース1

ケース2


0

Star Trek Onlineで動物の群れに対して行っているアプローチの1つは、開いた方向を選択し、一定の距離を置いて動物を高速でスポーン解除することです。しかし、それは主に、あなたがあなたを攻撃することを怖がらせるはずの群れのための栄光を与えられた脱スポーンアニメーションであり、実際の戦闘Mobには適していません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.