tutuhu
(tutuhu)
1
ビヘイビアツリーをランダム分岐させる方法があれば教えて頂けますでしょうか
例えば添付画像のように「Sequence」から伸びた先に33%の確率でA,B,Cのどれかに進み、
成功すると再度Sequenceから開始するようにしようと思っています。
(もちろんSequenceは使用しなくても問題ないです。 )
A、B、C、それぞれのタスクの開始時に
66%の確率で失敗させる仕組みをBPで記載することで同様のことができると考えていますが、
あまりスマートな感じがしなかっため、
何かビヘイビアツリー自体にそういう機能があれば教えて頂ければと思います。
T_Sumisaki
(T_Sumisaki)
2
Sequenceではダメですね
Taskのどれか一つ、という場合にはSelectorを使いましょう
デフォルトのBehaviorTreeにはランダムに何かをする、というTaskやDecoratorは無いため、自作する必要があります
ランダムに成功失敗を判定するDecoratorを作成し、AとBにつけるのが良いでしょう
CにつけないのはFailoverのためです
Cも失敗して何も起こらなくてもいい、と言うならつけても構いません
T_Sumisaki
(T_Sumisaki)
3
単に乱数を使用して判定しているだけであるため、偏りは出ますが、ごく簡易な実装としてはこれで十分でしょう
連続で同じTaskを選びたくない場合はCooldownあたりを付けておくと良いです
mgsue
(mgsue)
4
横から質問失礼します.
シンプルな実装でわかりやすかったのですが,
理解促進のために質問させてください.
左側にあるタスクのほうがより実行されやすいということでしょうか?
中学生レベルの数学かもしれませんが,2番目のタスクは67%の確率で計算が始まり,それから33%で実行??
T_Sumisaki
(T_Sumisaki)
5
そうですね
いわゆる「ハズレくじを箱に戻す」問題と同じように、左側(先に判定する側)がTrueを引き当てる確率が高くなります
なのでもう少し厳密に確率を制御するなら、全Task公平に判定できるような実装にする必要があるでしょう
別Task内で確率に基づいて分岐条件を計算し、それをBlackboardに書き込み、分岐のDecoratorでそれを参照する、などの形ですね
tutuhu
(tutuhu)
6
タスクの内容まで記載をありがとうございます!
やはり各々に成功失敗の実装が必要みたいですね
私の疑問の方はお答えいただいた内容で解決しておりますので、こちらクローズとさせて頂きます。