gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:37:21 25 4
gpt4 key购买 nike

我正在尝试使用 C# 创建“行为树”。

对于不知道的人来说,行为树基本上是一个框架,您可以围绕它构建 AI。有定序器、选择器、装饰器、复合 Action 和其他东西。

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

非常感谢!

最佳答案

我刚刚看了那个实现,我发现自己想知道为什么相对简单的东西需要这么多代码。

根据您的说法,您需要一种简单的行为组合方式。我认为这里的行为是从状态到代理的零个或多个 Action 的映射。您可以使用 C# lambda 非常轻松地对其进行建模。例如:

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(); }
}

树的叶子是简单的 Actions,可以做一些适合状态的事情。您只需执行树即可“运行”树。

如果你想变得更有趣,你可以参数化这个方案来使状态明确。

希望这对您有所帮助。

---- 附录----

Jason 询问了如何使用这种方法的示例,所以这里有一个简单的“AI”巡逻 guard 示例(我假设 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));

要让 guard 做某事,只需调用 patrollingGuardBehaviour()。请注意,各种子操作和测试可以作为具有正确签名的方法来实现,而不是作为 lambda 内联。您可以将其他组合器添加到 SelectorSequencer,例如,用于并行事件。

关于c# - 在 C# 中创建 AI 行为树 - 如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4241824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com