当前位置:网站首页>行为树的基本概念及进阶
行为树的基本概念及进阶
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树的内部“知道”该节点是在持续“运行”的,从而在后续的执行过程中“直接”继续执行该节点,而不需要从头开始执行,直到该运行状态的节点返回“成功”或“失败”,从而继续后续的节点。从外面看,就像“阻塞”在了那个“运行”的节点上,其父节点就像不再管理,要一直等运行的子节点结束的时候,其父节点才再次接管
(请注意,这一段说明只是从概念上这样讲,概念上可以这样理解,实际上即使运行状态的节点每次执行也是要返回的,只是其返回值是运行,其父节点对于返回值是运行状态的节点,将使其继续,所以看上去好像父节点不再管理。)。
另一个例子

未完.....
边栏推荐
- 攔截器與過濾器的實現代碼
- Tensor
- phpcms v9商城模块(修复自带支付宝接口bug)
- 在哪个软件上开户比较安全
- In automated testing, there are three commonly used waiting methods: sleep, implicitly\wait, and expected\u conditions
- How to handle the small program tabbar that does not support parameter transfer
- Particles and sound effect system in games104 music 12 game engine
- 1.17 daily improvement of winter vacation learning (frequency school and Bayesian school) and maximum likelihood estimation
- Programming training 7- date conversion problem
- 反爬之验证码识别登录 (OCR字符识别)
猜你喜欢

Yolov5 advanced level 2 installation of labelimg

Selenium builds cookies pool to bypass authentication and anti crawl login

uniapp用uParse实现解析后台的富文本编辑器的内容及修改uParse样式

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

Segmentation of structured light images using segmentation network

Practice is the fastest way to become a network engineer

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

反爬之验证码识别登录 (OCR字符识别)

In depth study paper reading target detection (VII) Chinese version: yolov4 optimal speed and accuracy of object detection

phpcms v9手机访问电脑站一对一跳转对应手机站页面插件
随机推荐
Tensor
小程序实现图片预加载(图片延迟加载)
Pytorch neural network
Backward usage
Selenium builds cookies pool to bypass authentication and anti crawl login
External sorting and heap size knowledge
在哪个软件上开户比较安全
SRv6----IS-IS扩展
Machine learning (Part 2)
[QNX Hypervisor 2.2用户手册]12.1 术语(一)
微信小程序如何转换成百度小程序
Mongodb分片环境搭建和验证(redis期末大作业)
phpcms小程序插件4.0版正式上线
Pytorch build progression
Phpcms applet plug-in version 4.0 was officially launched
Fast construction of neural network
Yolov5 advanced III training environment
Regular Expression 正则表达式
反爬之验证码识别登录 (OCR字符识别)
torch. fft