在C#中创建AI行为树 - 如何?

Jas*_*son 9 c# artificial-intelligence behavior-tree

我试图使用C#创建一个"行为树".

对于任何不知道的人来说,行为树基本上是一个可以构建AI的框架.有顺序器,选择器,装饰器,复合动作和其他东西.

我找到了一个单独的库,它在C#中建立了一个"行为树",位于这里(http://code.google.com/p/treesharp/)但我无法理解如何实际使用它,因为没有示例代码我可以借鉴.这里的任何人都可以制作一些简单的示例代码来说明如何实际使用这个框架..或者你可能知道在C#中使用行为树的另一种方式?

非常感谢!

Raf*_*afe 14

我只是看了一下这个实现,我发现自己想知道为什么这么多代码需要相对简单的东西.

根据你的说法,你想要一种简单的组合行为方式.我认为,这里的行为是代理从状态到零或更多动作的映射.您可以使用C#lambdas轻松地对此进行建模.例如:

Action Selector(Func<bool> cond, Action ifTrue, Action ifFalse) {
  return () => { if cond() then ifTrue() else ifFalse() };
}

Action Sequencer(Action a, Action b) {
  return () => { a(); b(); }
}
Run Code Online (Sandbox Code Playgroud)

树的叶子是简单的动作,可以执行适合于状态的操作.只需执行它即可"运行"一棵树.

如果您想获得幻想,可以参数化此方案以使状态显式化.

希望这可以帮助.

----附录----

Jason问了一个如何使用这种方法的例子,所以这里是一个简单的"AI"巡逻守卫示例(我假设WorldState对应于行为树评估时的环境描述):

Func<bool> ifPlayerIsInSight = () => ...true iff WorldState shows guard can see player...;

Action shootAtPlayer = () => { ...aim guard's weapon at player and fire... };

Func<bool> ifUnderFire = () => ...true iff WorldState shows guard hears player gunfire...;

Action takeCover = () => { ...guard runs for nearest shelter... };

Action walkBackAndForthGuardingDoorway = () => { ...default guard patrol behaviour... };

Action patrollingGuardBehaviour =
  Selector(ifPlayerIsInSight, shootAtPlayer,
    Selector(ifUnderFire, takeCover,
      walkBackAndForthGuardingDoorway));
Run Code Online (Sandbox Code Playgroud)

为了让守卫做点什么,只需打电话patrollingGuardBehaviour().请注意,各种子动作和测试可以实现为具有正确签名的方法,而不是内联为lambdas.您可以添加其他组合程序,以SelectorSequencer,例如,用于并行活动.