ゲームAIのデシジョンツリーと行動ツリーの違い


64

AIゲーム開発のディシジョンツリーとビヘイビアツリーの違いは何ですか?どちらのアプリケーションを他のアプリケーションよりも使用しますか?

回答:


80

この2つはかなり異なります。実際のインジケータは名前にあります。決定木は、単に決定を下すためのものです。動作ツリーは、動作を制御するためのものです。説明させてください。2つの主な違いは、トラバースの方法です。同様に、レイアウト方法とノードの「タイプ」が異なります。

決定木は毎回ルートからリーフまで評価されます。デシジョンツリーが適切に機能するためには、各親の子ノードが、そのノードのすべての可能な決定を表す必要があります。ノードに「はい、いいえ、たぶん」と回答できる場合は、「はい」、「いいえ」、「たぶん」の3つの子が必要です。これは、エンドノードに到達するまで、常に下位ノードが通過することを意味します。トラバーサルは常にダウンしています。グラフィカル形式:

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

ものすごく単純。ルートから開始し、評価に基づいて1、2または3を選択します。3を選択します。その後、他の評価を行ってBまたはBを選択します。左側のBがマジックBです。

ビヘイビアツリーの評価は異なります。最初に評価される(またはリセットされる)ときは、ルートから開始し(親ノードはセレクターのように動作します)、各子は左から右に評価されます。子ノードは優先度に基づいて順序付けられます。子ノードのすべての条件が満たされると、その動作が開始されます。ノードが動作を開始すると、そのノードは「実行中」に設定され、動作を返します。ツリーが次に評価されるときに、最も優先度の高いノードが再びチェックされ、「実行中の」ノードになると、中断した場所を取得することがわかります。ノードは、終了状態に達する前に一連のアクションと条件を持つことができます。いずれかの条件が失敗すると、トラバーサルは親に戻ります。次に、親セレクターは次の優先順位の子に移動します。ここでグラフィカルなフォームを試します。

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

トラバーサルはルートから始まり、子1に進み、子の状態(「近くの敵」など)をチェックします。条件は失敗し、走査はツリーを上に戻り、ノード2に進みます。ノード2には実行されるアクションがあります(パスを見つけるようなものかもしれません)。次に動作(パスをたどるようなもの)。次のパスは実行中に設定され、ツリーは実行中としてその状態を返します。失敗または完了したノードは「準備完了」に戻ります。次に、次にチェックするときに、最も優先度の高いノードから再び開始します。再び失敗するため、ノード2に進みます。動作が実行されていることがわかります。また、振る舞いが完了したこともわかるため、完了としてマークを付けて返します。その後、ツリーはリセットされ、再び使用できる状態になります。

ご覧のとおり、ビヘイビアツリーはより複雑です。動作ツリーはより強力であり、より複雑な動作を可能にします。決定木は理解しやすく、実装が簡単です。そのため、より複雑な動作が必要な場合、または動作をより詳細に制御する場合は、動作ツリーを使用します。デシジョンツリーは、動作ツリーの一部として使用することも、単純なAIに単独で使用することもできます。

ビヘイビアツリーがどのように解析されるかについての十分な理解は、ここにあります


素晴らしい説明とイラスト。「子ノードのすべての条件が満たされている場合...」と言うと、セレクターとシーケンスには条件またはリーフノードのみ、つまりアクションが含まれていますか?
無料のランサー

1
子ノードは、より多くの子を持つ動作、アクション、条件、またはセレクターです。それらは左から右に評価されます。
マイケルハウス

素晴らしい投稿ですが、私はまだ未解決の質問があると思います(個別に投稿します)。アニメーションGIFの作成には何を使用しましたか?

0-2-Bが実行されている場合、0-2-Aは再びプレイされるべきではない??? github.com/pirobot/pi_trees/issues/1
devside

@ nopnop77 0-2条件がまだ0-2-Bに評価される場合ではありません。0〜2が再評価されていることがわかりますが、再度Aが選択されることはありません。
MichaelHouse
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.