当前位置:网站首页>行为树的基本概念及进阶
行为树的基本概念及进阶
2022-06-26 08:41:00 【LixiSchool】
原链接:https://www.behaviac.com/concepts/
总结
行为树的基本概念:
- 执行每个节点都会有一个结果(成功,失败或运行)
- 子节点的执行结果由其父节点控制和管理
- 返回运行结果的节点被视作处于运行状态,处于运行状态的节点将被持续执行一直到其返回结束(成功或失败)。在其结束前,其父节点不会把控制转移到后续节点。
其中理解运行状态是理解行为树的关键,也是使用好行为树的关键。
前言
开发游戏AI的目标之一就是要找到一个简单,可扩展的编辑逻辑的方案,从而加速游戏开发的迭代速度。在“行为系统图”中,行为系统(Behavior System)响应游戏中的各种信息,进行决策以挑选接下来将要执行的行动并且监控该行动的执行。

知识模型(Knowledge Model)是对游戏世界中各种信息的抽象。
在行为系统中,有限状态机(FSM,Finite State Machine)最为经典,FSM模型的优势之一是简单。但是FSMs需要用转换(Transition)连接状态(State),因此,状态(State)失去了模块性(Modularity)。

什么是行为树
行为树,英文是Behavior Tree,简称BT,是由行为节点组成的树状结构:

对于FSM,每个节点表示一个状态,而对于BT,每个节点表示一个行为。同样是由节点连接而成,BT有什么优势呢?
在BT中,节点是有层次(Hierarchical)的,子节点由其父节点来控制。每个节点的执行都有一个结果(成功Success,失败Failure或运行Running),该节点的执行结果都由其父节点来管理,从而决定接下来做什么,父节点的类型决定了不同的控制类型。节点不需要维护向其他节点的转换,节点的模块性(Modularity)被大大增强了。实际上,在BT里,由于节点不再有转换,它们不再是状态(State),而是行为(Behavior)。
由此可见,BT的主要优势之一就是其更好的封装性和模块性,让游戏逻辑更直观,开发者不会被那些复杂的连线绕晕。
一个例子

上图中,3号Sequence节点有3个子节点,分别是:
– 4号Condition节点
– 5号Action节点
– 6号Wait节点
而3号节点的父节点是2号的Loop节点。
先补充下各节点类型的执行逻辑(详见节点说明):
- 序列(Sequence)节点:顺序执行所有子节点返回成功,如果某个子节点失败返回失败。
- 循环(Loop)节点:循环执行子节点到指定次数后返回成功,如果循环次数为-1,则无限循环。
- 条件(Condition)节点:根据条件的比较结果,返回成功或失败。
- 动作(Action)节点:根据动作结果返回成功,失败,或运行。
- 等待(Wait)节点:当指定的时间过去后返回成功。
执行说明
- 如果4号条件节点的执行结果是成功,其父节点3号节点则继续执行5号节点,如果5号动作节点返回成功,则执行6号等待节点,如果6号节点返回成功,则3号节点全部执行完毕且会返回成功,那么2号节点继续下个迭代。
- 如果4号条件节点的执行结果是失败,其父节点3号节点则返回失败不再继续执行子节点,并且2号节点继续下个迭代。
进阶
聪明的读者可能会问,上面的例子中只讲了成功或失败的情况,但如果动作要持续一段时间呢?如果5号节点,Fire需要持续一段时间呢?
- 节点的执行结果可以是“成功”,“失败”,或“运行”。
- 对于持续运行一段时间的Fire动作,其执行结果持续返回“运行”,结束的时候返回“成功”。
- 对于持续运行一段时间的Wait动作,其执行结果持续返回“运行”,当等待时间到达的时候返回“成功”。
当节点持续返回“运行”的时候,BT树的内部“知道”该节点是在持续“运行”的,从而在后续的执行过程中“直接”继续执行该节点,而不需要从头开始执行,直到该运行状态的节点返回“成功”或“失败”,从而继续后续的节点。从外面看,就像“阻塞”在了那个“运行”的节点上,其父节点就像不再管理,要一直等运行的子节点结束的时候,其父节点才再次接管
(请注意,这一段说明只是从概念上这样讲,概念上可以这样理解,实际上即使运行状态的节点每次执行也是要返回的,只是其返回值是运行,其父节点对于返回值是运行状态的节点,将使其继续,所以看上去好像父节点不再管理。)。
另一个例子

未完.....
边栏推荐
- Checkerboard generation + camera calibration + stereo matching
- Selenium 搭建 Cookies池 绕过验证反爬登录
- Phpcms applet plug-in tutorial website officially launched
- Yolov5进阶之三训练环境
- Yolov5进阶之二安装labelImg
- Principle of playing card image segmentation
- PD快充磁吸移动电源方案
- 20220623 Adobe Illustrator入门
- [IVI] 15.1.2 system stability optimization (lmkd Ⅱ) psi pressure stall information
- Google Chrome collection
猜你喜欢

PD快充磁吸移動電源方案

Yolov5进阶之四训练自己的数据集

Yolov5进阶之一摄像头实时采集识别

ThreadLocal

Autoregressive model of Lantern Festival
![[300+ continuous sharing of selected interview questions from large manufacturers] column on interview questions of big data operation and maintenance (I)](/img/cf/44b3983dd5d5f7b92d90d918215908.png)
[300+ continuous sharing of selected interview questions from large manufacturers] column on interview questions of big data operation and maintenance (I)

Fourier transform of image

phpcms小程序插件api接口升级到4.3(新增批量获取接口、搜索接口等)

isinstance()函数用法

Slider verification - personal test (JD)
随机推荐
Phpcms V9 background article list adds one click push to Baidu function
什么是乐观锁,什么是悲观锁
phpcms v9商城模块(修复自带支付宝接口bug)
Tensor
uniapp用uParse实现解析后台的富文本编辑器的内容及修改uParse样式
HDU - 6225 little boxes (\u int128)
Dedecms applet plug-in is officially launched, and one click installation does not require any PHP or SQL Foundation
小程序首页加载之前加载其他相关资源或配置(小程序的promise应用)
commonJS和ES6模块化的区别
浅谈一下Type-C接口发展历程
phpcms v9去掉phpsso模块
QT_ AI
编程训练7-日期转换问题
9. code generation
远程工作的一些命令
修复小程序富文本组件不支持video视频封面、autoplay、controls等属性问题
Phpcms mobile station module implements custom pseudo static settings
Phpcms applet plug-in version 4.0 was officially launched
PD fast magnetization mobile power supply scheme
Code de mise en œuvre de l'intercepteur et du filtre