游戏AI的决策树和行为树之间的区别


Answers:


80

两者是完全不同的。真正的指示符在名称中。决策树仅用于决策。行为树用于控制行为。请允许我解释。两者的主要区别在于它们的遍历方式,同样,它们的布置方式和节点“类型”也不同。

每次都从根到叶评估决策树。为了使决策树正常工作,每个父级的子节点必须代表该节点的所有可能决策。如果可以回答一个节点“是,否,也许”,则必须有三个子节点:是节点,否节点和可能节点。这意味着始终有一些下层节点要遍历,直到到达末端节点为止。遍历总是向下的。图形形式:

在此处输入图片说明

很简单 我们从根开始,并基于一些评估,选择1、2或3。我们选择3。然后我们进行一些其他评估,然后选择B或B ...好吧,我从下面重复使用了该图形。假装左边的B是魔法B。

行为树有不同的评估。第一次对其进行评估(或重置)时,它们从根开始(父节点的行为类似于选择器),并且每个子级从左到右进行评估。子节点根据其优先级排序。如果满足所有子节点的条件,则其行为将开始。当节点开始行为时,该节点将设置为“正在运行”,并返回该行为。下次对树进行评估时,它将再次检查优先级最高的节点,然后谈到“正在运行”的节点时,它将知道从停止的地方开始。在达到结束状态之前,节点可以具有一系列操作和条件。如果任何条件失败,则遍历将返回到父级。然后,父选择器移至下一个优先级子级。我将在这里尝试使用图形形式:

在此处输入图片说明

遍历从根开始,转到子项1,检查子项条件(类似“附近有敌人吗?”之类的东西)。条件失败,遍历将向后移动到树上,继续前进到节点2。节点2具有已执行的操作(可能类似于查找路径)。然后是一种行为(类似遵循路径的行为)。以下路径设置为running,并且树返回其状态为running。失败或完成的节点将返回“就绪”。然后,下一次我们检查时,我们将从优先级最高的节点重新开始。它再次失败,因此我们继续进行第二个节点。在那里,我们发现有行为正在运行。我们还发现行为已完成,因此我们将其标记为完成并返回。然后将树重置并准备再次运行。

如您所见,行为树更加复杂。行为树更强大,并允许更复杂的行为。决策树易于理解且易于实现。因此,当您想要更复杂的行为或对行为进行更多控制时,可以使用行为树。决策树可以用作行为树的一部分,也可以单独用于简单的AI。

这里可以找到对如何解析行为树的一些很好的了解。


很棒的解释和插图。因此,当您说“如果满足所有子节点的条件...”时,选择器和序列是否包含条件或仅包含叶节点(即动作)?
免费Lancer,

1
子节点是具有更多子节点的行为,动作,条件或选择器。从左到右对它们进行评估。
MichaelHouse

很棒的帖子,尽管我认为我还有一个悬而未决的问题(将单独发布)。您用什么来创建动画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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.