行为树基础入门


前言

由于最近报的一个社团面试需要了解行为树,并写作一个读书报告。因此我也花费许多时间了解了一些相关知识,但它的内容实在太多了,只整理了一些基础的内容复,供新手了解,如有错误还请指出。

一、行为树是什么?

行为树(BT)与状态机(FSM),分层状态机(HFSM)三种技术在机器人以及游戏设计中常被提及。状态机主要包括1:状态2:事件3:监护条件4:动作5:转移等几个重要条件。类似于一个条件一个条件的转移和判断有点像“if…else” 语句,因此当条件多时就不够灵活,而行为树行为树(BT)是一种构建自主代理(例如机器人或计算机游戏中的虚拟实体)中的不同任务之间的切换的方式,是一个包含逻辑节点和行为节点的树结构,每次需要找出一个行为的时候,会从树的根节点出发,遍历各个节点,找出第一个和当前数据相符合的行为。行为树通过有序的逻辑分层在一定程度上解决了状态机的灵活性等问题,同时行为树是创建模块化和反应性复杂系统的一种非常有效的方式。

二、行为树结构

1.直观结构展示

在这里插入图片描述
这个来自百度
在这里插入图片描述
自制的比较丑

2.

行为树顾名思义,是一种树形结构,有根节点,组合节点和叶节点。行为树本质上是一种决策树,其真正的行为发生在叶节点上,一般称为行为节点(Action Node)(行为节点用来完成具体的操作),叶节点上还有条件节点(条件节点可以理解为一个if判断语句,当条件的测试结果为true时向父节点传递success,结果为false时向父节点传递failure)。其余节点可以统称为组合节点(Control Node),也即那些非根和叶节点。组合节点其实就是“组合控制”其子节点,子节点可以是叶节点,也可以是组合节点,所谓“执行控制节点”,就是执行其定义的控制逻辑。

1:常用的组合节点主要有

1选择节点(Selector):选择其子节点的某一个执行(只执行“一”个子节点)
2序列节点(Sequence):将其所有子节点依次执行,也就是说当前一个返回“完成”状态后,再运行下一个子节点
3并行节点(Parallel):不同于选择和顺序节点依次执行每个节点,并行节点是“同时”执行所有的节点。
4修饰节点(Decorator):修饰节点只包含一个子节点,用来以某种方式来改变这个子节点的行为。

2:选择节点可以继续分类:

1:带权值的选择节点(Weighted Selector)这种选择节点,预先为每一个分支标注一个“权值”(Weight Value),然后当我们选择的时候,采用随机选择的方式来选,随机时会参考权值,并且保证已经被测试过的节点的不会再被测试,直到有一个节点的前提被满足,或者测试完所有的节点。带权值的选择节点对于子节点前提由于随机的存在,所以子节点的前提可以任意,而不会发生“永远无法执行”的情况,我们通常会把所有子节点的前提设为相同,以更好的表现出权值带来的概率上的效果。当所有子节点的权值一样时,这种选择节点就成为了随机选择节点(Random Selector)
2:不带优先级的选择节点(Non-priority Selector)该选择节点的选择顺序是从上一个执行过的子节点开始选择,如果前提满足,则继续执行此节点,如果条件不满足,则从此节点开始,依次判断每一个子节点的前提,当找到一个满足条件的子节点后,则执行该节点。这种方式,是基于一种称之为“持续性”的假设寻找方式不存在哪个节点优先判断的问题,所以对于前提的设置的要求,就是要保证“互斥”(Exclusion),互不相同。
3:带优先级的选择节点(Priority Selector)该选择节点每次都是自左向右依次选择,当发现找到一个可执行的子节点后就停止搜索后续子节点。这样的选择方式,就存在一个优先级的问题,也就是说最左边的节点优先级最高,因为它是被最先判断的。对于这种选择节点来说,它的子节点的前提设定,必须是“从小到大”的方式(前面的不包含后面的),否则后续节点都会发生“永远不会执行”的情况。

3:节点的状态返回:

主要有成功(Success),失败(Failed),运行中(Running)。
1对于选择节点:按照某种规律对子节点迭代,有一个返回TRUE则该选择节点整体停止迭代.
2对于序列节点:按顺序对子节点进行迭代,当所有子节点返回TRUE时,该节点返回TRUE,有一个节点返回FALSE则停止迭代,该节点返回FALSE。
3 对于并行节点:
返回与其采用的状态有关:
Parallel Selector Node: 一False则返回False,全True才返回True。
Parallel Sequence Node: 一True则返回True,全False才返回False。
Parallel Hybird Node: 指定数量的Child Node返回True或False后才决定结 果。

三:主要优点

行为树主要有以下几个优点:
1:内部分层:因此可以进行复杂的行为组合,树本身可以作为子树存在,子树可重用和可组合可以作为更大更复杂树的节点包含在内,局部进行一种重复或复合组合。
2:直观性:行为树可以方便地把复杂的AI知识条目组织得非常直观。编译器中的行为树可以树形结构体现在屏幕上,整体的逻辑以及分层意义明显直观易于理解。
3:扩展性:可以设计制作和特定项目有关的组合结点和修饰节点。
4:静态性:整棵树的规划无需在运行时动态调整,为很多优化和预编辑都带来方便。


总结

本文只是自己经过多篇文章的综合以后写的,主要参考了“AI分享站”和CSDN中“Travis_X”的博客中行为树笔记以及“rain_love_snow”的“FSM(状态机)、HFSM(分层状态机)、BT(行为树)的区别”该篇博客。如有错误还请指出,感谢各位。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
线段树是一种用来解决区间查询问题的数据结构。在CSND的线段树入门指南中,介绍了线段树的基本原理和实现方法,并且提供了进阶内容来扩展应用。 线段树的基本原理是将待查询的区间划分为若干个较小的子区间,并将每个子区间的信息预处理保存在树节点中。通过在树上的查询和更新操作,可以有效地解决区间最值、区间修改、区间合并等问题。 在入门阶段,CSND的指南首先介绍了线段树的基本结构和构建方法。通过递归思想和分治策略,可以将一个区间划分为两个子区间,并依次构建子区间的线段树,最终构建出整个区间的线段树。通过优化构建过程,如使用线性时间复杂度的构建方法,可以提高线段树的构建效率。 在进阶阶段,CSND的指南介绍了线段树的应用扩展。例如,可以使用线段树解决静态区间最值查询问题,即在一个不可修改的区间中快速计算最大或最小值。另外,还可以使用线段树解决动态区间修改问题,即可以在区间内进行元素的插入、删除、更新等操作,并支持快速的查询操作。 此外,CSND的指南还介绍了线段树的一些常见优化技巧,如懒惰标记、矩阵树状数组等。这些优化方法可以进一步提高线段树的查询和更新效率,适用于一些特殊的应用场景。 总的来说,通过CSND的线段树入门进阶指南,我们可以全面了解线段树的基本原理和常见应用,并学会使用线段树解决各种区间查询问题。这对于算法竞赛、数据结构设计等领域都具有重要的实用价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天天写点代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值