行为树(Behavior Tree)实践(1)– 基本概念

原文:http://www.aisharing.com/archives/90

行为树(Behavior Tree)实践(1)– 基本概念

自从开博以来,每天都会关心一下博客的访问情况,看到一些朋友的订阅或者访问,不胜欣喜,也促使我去写一些更好的博文,来和大家分享和交流,从访问统计来看,有相当一部分是来自于搜索引擎的流量,关键字以“行为树”,或者“Behavior Tree”居首位,我想大家对此可能有些兴趣,加上,这几年反反复复一直在AI中研究和运用行为树,所以这次就来谈谈关于行为树(Behavior Tree)的一些东西,以前也写过一些文章(1,2,3)来讨论行为树,不过已经是一两年前的事情了,较之以前,这次会更为系统,也会添加一些我新的思考和感悟。所谓行为树实践,其实在我脑海里就是Practice in Behavior Tree,没法子,受英文教材影响太多了:)

我想通过一个例子来介绍一下行为树的基本概念,会比较容易理解,看下图:

bv-tree-1

这是我们为一个士兵定义的一颗行为树(可以先不管这些绿圈和红圈是干吗的),首先,可以看到这是一个树形结构的图,有根节点,有分支,而且子节点个数可以任意,然后有三个分支,分别是巡逻(Patrol),攻击(Attack),逃跑(Retreat),这个三个分支可以看成是我们为这个士兵定义的三个大的行为(Behavior),当然,如果有更多的行为,我们可以继续在根节点中添加新的分支。当我们要决策当前这个士兵要做什么样的行为的时候,我们就会自顶向下的,通过一些条件来搜索这颗树,最终确定需要做的行为(叶节点),并且执行它,这就是行为树的基本原理。

值得注意的是,我们标识的三大行为其实并不是真正的决策的结果,它只是一个类型,来帮助我们了解这个分支的一些行为是属于这类的,真正的行为树的行为都是在叶节点上,一般称之为行为节点(Action Node),如下图红圈表示的

bv-tree-action-node

这些叶节点才是我们真正通过行为树决策出来的结果,如果用我以前提到的那个层次化的AI结构来描述的话,这些行为结果,相当于就是一个个定义好的“请求”(Request),比如移动(Move),无所事事(Idle),射击(Shoot)等等。所以行为树是一种决策树,来帮助我们搜寻到我们想要的某个行为。

行为节点是游戏相关的,因不同的游戏,我们需要定义不同的行为节点,但对于某个游戏来说,在行为树上行为节点是可以复用的,比如移动,在巡逻的分支上,需要用到,在逃跑分支上,也会用到,这种情况下,我们就可以复用这个节点。行为节点一般分为两种运行状态:

  1. 运行中(Executing):该行为还在处理中
  2. 完成(Completed):该行为处理完成,成功或者失败

除了行为节点,其余一般称之为控制节点(Control Node),用树的“学名”的话,就是那些父节点,如下图绿圈表示

bv-tree-control-node

控制节点其实是行为树的精髓所在,我们要搜索一个行为,如何搜索?其实就是通过这些控制节点来定义的,从控制节点上,我们就可以看出整个行为树的逻辑走向,所以,行为树的特点之一就是其逻辑的可见性。

我们可以为行为树定义各种各样的控制节点(这也是行为树有意思的地方之一),一般来说,常用的控制节点有以下三种

  1. 选择(Selector):选择其子节点的某一个执行
  2. 序列(Sequence):将其所有子节点依次执行,也就是说当前一个返回“完成”状态后,再运行先一个子节点
  3. 并行(Parallel):将其所有子节点都运行一遍

用图来表示的话,就是这样,依次为选择,序列和并行

bv-tree-sel

bv-tree-seq

bv-tree-pal

可以看到,控制节点其实就是“控制”其子节点(子节点可以是叶节点,也可以是控制节点,所谓“执行控制节点”,就是执行其定义的控制逻辑)如何被执行,所以,我们可以扩展出很多其他的控制节点,比如循环(Loop)等,与行为节点不同的是,控制节点是与游戏无关的,因为他只负责行为树逻辑的控制,而不牵涉到任何的游戏代码。如果是作为一个行为树的库的话,其中就一定会包含定义好的控制节点库。

如果我们继续考察选择节点,会产生一个问题,如何从子节点中选择呢?选择的依据是什么呢?这里就要引入另一个概念,一般称之为前提(Precondition),每一个节点,不管是行为节点还是控制节点,都会包含一个前提的部分,如下图

bv-tree-precondition

前提就提供了“选择”的依据,它包含了进入,或者说选择这个节点的条件,当我们用到选择节点的时候,它就是去依次测试每一个子节点的前提,如果满足,则选择此节点。由于我们最终返回的是某个行为节点(叶节点),所以,当前行为的“总”前提就可以看成是:

当前行为节点的前提 And 父节点的前提 And 父节点的父节点的前提 And….And 根节点的前提(一般是不设,直接返回True)

行为树就是通过行为节点,控制节点,以及每个节点上的前提,把整个AI的决策逻辑描述了出来,对于每次的Tick,可以用如下的流程来描述:

action = root.FindNextAction(input);
if action is not empty then
action.Execute(request,  input)  //request是输出的请求
else
print “no action is available”

从概念上来说,行为树还是比较简单的,但对AI程序员来说,却是充满了吸引力,它的一些特性,比如可视化的决策逻辑,可复用的控制节点,逻辑和实现的低耦合等,较之传统的状态机,都是可以大大帮助我们迅速而便捷的组织我们的行为决策。希望这次简单的介绍,对大家有所帮助,能力有限,不一定能表述的很清楚,有问题,或者有指教的,都请和我多多交流,最后,我对这个士兵的巡逻分支画了一个示意图,供大家参考:

S — 选择节点   Se — 序列节点

bv-tree-patrol-example

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246201.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity 2017 Game Optimization 读书笔记 Dynamic Graphics (4)

Optimizing Unity UI 本章讲探讨一些能够提升UGUI性能的优化方法。 1.Use more Canvases 一个Canvas的主要任务就是管理它层级下的所有UI元素,并且通过Draw Call去渲染它们。其中Canvas一个重要的事儿就是对这些元素进行合批来减少draw call。但是如果对Canvas或…

Unity 2017 Game Optimization 读书笔记 Dynamic Graphics (5) Shader优化

Shader optimization Fill Rate和 Memory Bandwidth开销最大的地方就是Fragment Shader。开销多大取决于Fragment Shader的复杂程度:多少纹理需要采样,多少数学计算函数需要使用等等。GPU的并行特性意味着在线程中如果任何地方存在瓶颈,都会…

团队行为心理学读书笔记(5)执行力背后的行为心理学

违纪行为若没有得到及时惩处,就会蔓延 破窗效应 美国斯坦福大学心理学家菲利普辛巴杜在1969年进行了一项实验,他把两辆一模一样的汽车停在了不同的两个社区,其中,一个社区是加州帕洛阿尔托的中产阶级区,另一个则是治…

Unity 2017 Game Optimization 读书笔记 Dynamic Graphics (6)

1. Use less texture data 这条优化技巧非常直接,减少texture的数据量,减少分辨率或者降低位数,虽然可能会降低渲染质量。但是通常使用16-bit textures并不会明显的感觉到渲染效果下降。 MipMap技术可以有效减少VRAM和Texture Cache之间来回…

LeetCode 面试题57 - II(剑指offer) 和为s的连续正数序列

今天毕业五年了,一直忙于工作和享受,自从当年找完工作后就一直没有再刷过题,作为搬砖的码农,觉得还是应该养成长期刷题的习惯坚持下去。之前坚持了每天被一会单词,如今雅思一本也快看完了,从今天开始准备在…

反走样技术相关文章

https://zhuanlan.zhihu.com/p/28800047 https://zhuanlan.zhihu.com/p/57503957 https://zhuanlan.zhihu.com/p/33444125 https://zhuanlan.zhihu.com/p/33444429 走样的原因及其分类 说到走样,首先要说的就是采样。这也算是很多图形学专著中提到反走样相关技…

求n的阶乘的算法框图_单片机常用的14个C语言算法

问:怎么每天看到这种文章?答:只需搜索公众号"51单片机学习网"免费关注算法(Algorithm):计算机解题的基本思想方法和步骤。算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述&#xff…

LeetCode 286. 墙与门 多源BFS和DFS

思路1&#xff1a; DFS&#xff0c;对于每个门进行一次DFS搜索&#xff0c;记录每个位置对每个门的距离&#xff0c;当有更小距离的门时更新这个数值 public void WallsAndGates(int[][] rooms) {for (int i 0; i < rooms.GetLength(0); i){for (int j 0; j < rooms[i]…

安卓手机充电慢_非 iPhone 12 独享,安卓系统手机也能用 MagSafe 充电|手机|安卓系统|充电器|安卓手机...

关于苹果日前的新品发布会&#xff0c;最让我感兴趣的并不是它的主角 iPhone 12 系列&#xff0c;而是一同推出的 MagSafe。因为它不仅解决了使用无线充电时必须对准的问题&#xff0c;而且还能让用户边充电边玩游戏。不过最近外媒发现&#xff0c;MagSafe 并不是 iPhone 12 专…

贝塞尔曲线

文章参考于&#xff1a;https://www.jianshu.com/p/0c9b4b681724 https://gameinstitute.qq.com/community/detail/129188 贝赛尔曲线的前世今生&#xff1a; 贝塞尔曲线&#xff0c;这个命名规则一眼看上去大概是一个叫贝塞尔的数学家发明的。但&#xff0c;贝塞尔曲线依据…

如何控制局域网网速_单臂路由|N1盒子(OpenWRT)单线多拨实现网速叠加

受于某些现实条件&#xff0c;有些同学苦于家里的网络带宽太小无法尽情冲浪。如何在不额外花钱升级宽带的情况下提升家里网络呢&#xff1f;且看一个盒子加路由器即可实现网络单线多拨&#xff0c;成倍提升网速完成网速叠加。题图是我家里的路由器加N1盒子。前置条件光猫有超级…

linux离线安装redmine_Linux 下一款非常好用的翻译软件

前面有一个半月的时间&#xff0c;我非常详细且非常基础的介绍了 Ubuntu 18.04 desktop 桌面系统的安装和基本使用&#xff0c;在知乎上也开了一个专栏《Linux 漫游之旅》&#xff0c;上面记录了所有的文章&#xff0c;这个专栏的目的呢是手把手教新接触 Linux 操作系统的朋友如…

团队行为心理学读书笔记(6)沟通背后的行为心理学

要多听少讲&#xff0c;因为人有两只耳却只有一张嘴 是否具备较高的倾听技巧是有效沟通的关键&#xff0c;管理者应从如下五个方面培养自己的倾听技巧&#xff1a; &#xff08;1&#xff09;与下属保持眼神接触。眼神直接表明了管理者是否在积极倾听下属的讲话&#xff0c;与…

vivo应用商店电脑版_VIVO应用商店代理商江湖的那些关系

VIVO应用商店代理商江湖的那些关系需要源文件清晰版本加微信wps007其他干货文章如何不花钱或者少花钱把ASO的活给干了&#xff1f;2020最新主流安卓应用市场ASO技巧以及注意事项App推广的高阶玩法&#xff0c;一箭双星&#xff01;今日头条定向优化技巧今日头条广告创意优化指南…

UnityShader RenderTypeQueue 渲染顺序

整理自这两篇博文 https://blog.csdn.net/u013477973/article/details/80607989?depth_1-utm_sourcedistribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_sourcedistribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1 https://www.jianshu.com/…

华为阅读下载的文件在哪里找_华为手机还要天天清理内存?1键关闭这2个设置,手机用到2035年...

阅读本文前&#xff0c;请您先点击上面的蓝色字体“科技荟 ”&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到最新文章了。每天都有分享。完全是免费订阅&#xff0c;请放心关注。 华为手机还要天天清理内存&#xff1f;1键关闭这2个设置&#xff0c;手机用到…

C#委托(delegate、Action、Func、predicate)和事件

C#委托(delegate、Action、Func、predicate)和事件 - 园子的蜗牛 - 博客园 C#之委托 - 摸鱼王 - 博客园 C函数指针与C#委托之间有何联系 - 51CTO.COM 帮你理清 C# 委托、事件、Action、Func|func|调用|action|代码_网易订阅

pyautogui 打包 运行 窗口_试试动态窗口管理器 dwm 吧

以不到 2000 标准行的代码写就的 dwm&#xff0c;是一个速度极快而功能强大&#xff0c;且可高度定制的窗口管理器。-- Adam Šamalk(作者)如果你崇尚效率和极简主义&#xff0c;并且正在为你的 Linux 桌面寻找新的窗口管理器&#xff0c;那么你应该尝试一下 动态窗口管理器(dy…

Unity3d烘焙常见黑斑解决方法(适用5.x、2017、2018、2019版)

很多Unity3d初学者在烘焙场景时&#xff0c;由于没有经验&#xff0c;模型上常常出现一些怪异的"黑斑"、“撕裂”、”硬边”、“漏光”现象&#xff08;如下图所示&#xff09;&#xff0c;反复调试&#xff0c;问题依然得不到解决&#xff0c;搞得精疲力尽&#xff…

ArcMap 导入 wrl_flmic拍摄的素材如何无损导入电脑

点击上方“九尾短视频研习室” 可以订阅哦&#xff01;今天分享使用 iPhone 或者安卓版 filmic 拍摄的素材&#xff0c;如何无损导入到win 或 Mac 电脑中~01iPhone Mac使用 iPhone 和 Mac 的朋友&#xff0c;可以使用“隔空投送”无线传输&#xff0c;但是这个过程中&#xff…