行为树,打破滥用循环(二)

优点和缺点

   这种轮询事件以重置树的机制导致使用BT时的第一个主要缺陷:静态行为优先级。 由于行为的优先级在编写时是固定的,因此以静态顺序评估选择特定行为的条件,即始终会在“我们应该闲着”之前检查“我们应该战斗”。 现在想象一下,我们当前正在执行较高优先级的行为,并且由于环境事件,我们希望切换到较低优先级的行为。 由于我们从未在初始树评估中超越高优先级行为,因此我们无法注册具有低优先级行为的任何监视器来触发树重置。 即使我们确实注册了所有事件监视器,如何防止树再次进入更高优先级的行为?
   让我们看一下图4a中的示例,以更好地说明问题。  “投掷手榴弹”行为的优先级低于“躲避掩护”行为,但比“近战冲锋”和“近战”行为具有更高的优先级。 最初对行为进行优先级排序意味着某些事情:特工将优先选择掩护作战而不是其他一切,近战是万不得已的方法,等等……现在假设我们正在研究AI的作战循环,并想尝试某些行动链。 假设我们要遵循以下规则:代理商向玩家投掷手榴弹并且玩家与代理商之间的距离在一定距离之内,则应始终向玩家收费。 此外,此指定距离比常规近战射击距离更长。 在BT的当前状态下,该规则存在两个主要问题:第一个问题是手榴弹投掷后可能不会选择近战炸弹,因为“从掩护格斗”和“从位置格斗”可能是有效的选择, 具有更高的优先级。 这是两者中比较复杂的问题,因此,在我们首先讨论第二个问题之后,我们将重新讨论它。

假设我们已经触发了“近战冲锋”,第二个问题是确保特工在优先级较低的情况下实际上会参与近战作战。 为了达到这个目的,我们通常会添加排除性前提条件,以阻止较高优先级的行为,例如 仅在您距离目标较远时执行。 这意味着对于添加到混战之上的树中的每种行为,我们都需要将该检查添加到其前提条件中。 这会导致新行为的前提条件渗入同一棵树中的其他行为,从而使添加和删除行为变得困难,因为每种行为现在都可能影响树的很大一部分。 我们可以通过在单个行为的范围内添加单个范围分支并在该分支内移动所有范围内的行为来防止跨多个行为的条件泄漏。
   不幸的是,这将阻止我们在违反该规则的特殊情况下使用这些行为,即如果目标已经与另一名特工混战,即使他们接近目标,特工也应“从位置上战斗”。 这种先决条件/优先级处理方式使新行为的实验极其繁琐且容易出错。
   一旦过渡行为开始起作用,行为向其他行为的渗入就变得更加严重,这是指在不同状态之间转换角色的小行为,即,从调查到战斗时,我们可能希望通过动画或视觉方式直观地表明行为过渡 音频的方式不同于我们从闲置过渡到战斗的方式。 在[Anguelov 17]中更详细地讨论了BT背景下的过渡问题,为简洁起见,本章将其省略。

现在,我们要回到投掷手榴弹后正确触发“近战冲锋”的问题。要真正实现预期的行为,则意味着一旦完成了投掷手榴弹的行为并重置了树,我们需要先评估“近战冲锋”的前提条件。 我们不能使用前提条件来阻止较高优先级的状态,因为如果“近战冲锋”条件失败,我们将以“近战搏击”作为唯一的其他选择而结束,这也可能是无效的。 不仅如此,当我们评估“近战冲锋”的条件时,我们还需要使用另一套规则来做到这一点,因为我们首先执行了“投掷手榴弹”。 仅仅为了尝试一个相对简单的游戏规则,这似乎非常复杂。
   解决此问题的一种常用方法是在树的根部有一个全局监视器,该监视器将检查各种条件,如果有效,它将设置一些评估标志,这些标志可用于显式指导树评估。 在我们的示例中,我们可以有一个全局监视器来检查a)我们是否刚刚投掷手榴弹和b)满足近战炸弹的条件,并且在两个条件都为真的情况下,我们将设置“ ForceMeleeCharge”标志 和“ DisableAllBehaviors”标志。 然后,每个分支将基于“ DisableAllBehaviors”标志失败,除了“近战冲锋”行为已被告知明确成功之外。 这种方法在[Ocio 12]中得到扩展和形式化。 在此过程中,我们有效完成的工作是添加了辅助决策树以覆盖原始树。
   我们还创建了不相关分支中的节点之间的隐式过渡,因此在原始非循环BT中引入了循环的概念。 此外,我们已经完全破坏了树的可视化方面,因为现在我们不能再单纯基于视觉表示来推理树的执行流程了。 现实情况是,通过这种方法,我们已将BT隐式转换为昂贵,不可读且容易出错的有限状态机。 现在,我们还试图将循环图表示为一种无循环的有向树(出于所有目的和目的,这是希望的钟声敲响了)。 让我们试着将这一点讲清楚,图5展示了用状态机和BT表示的同一代理循环,而这两种表示在功能上相同,而另一种表示则更容易理解。 不熟悉该系统的新员工或程序员/设计师将大大简化了彼此之间的了解,因此可以更快地上岗,并且在扩展设计时不会犯错。

至此,我们只讨论了与BTs相关的问题和弱点。就强度而言,BTs是描述离散操作序列的最佳格式之一。它们提供了在一个简单的序列中链接动作的能力。它们提供了执行复杂操作序列所需的所有基本流控制功能,还提供了并行执行多个操作序列的能力,允许用户在其他操作之上分层操作,例如在导航之上分层目标/射击/重新加载。最后,我们已经讨论了BTs的其他优点:易于可视化和概念上的简单性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值