行为树BehaviorTree

主要依托于BehaviorTree.CPP进行介绍。

1 基本概念

1.1 是什么与用来做什么

官网 https://www.behaviortree.dev/docs/learn-the-basics/BT_basics
Unlike a Finite State Machine, a behavior Tree is a tree of hierarchical nodes that controls the flow of execution of “tasks”.
用于任务流控制的多层节点树。不是有限状态机。(有限状态机不能表示同时做多件事情,任务流可能会出现同时做多件事情,都结束后执行另外一件事情,任务流的本质是单起点有向图)

BehaviorTree.CPP 是一个c++库,能够比较方便的集成到应用中。

1.2 tick和node

1 tick (时间步脉冲,类似于bpmn的token)
每一个tick都会从tree的根节点root传递到叶节点leaf。

2 每个节点收到tick后会执行callback,并返回状态
SUCCESS
FAILURE
RUNNING

3 节点会传递tick给其子节点,每个节点类型都有其规则来确定是否,何时或多少次数的传递tick给某一个子节点。

4 叶节点。具体执行某个任务的节点,Action nodes是最普遍的叶节点。

1.3 节点类型

节点分为3类,控制节点,装饰节点,叶节点,其中叶节点是负责执行具体事务的节点,其它节点的作用是流程控制。根据功能的区别,每一种节点还可以继续细分。

叶节点分为条件节点与动作节点。
控制节点可以分顺序节点等。
在这里插入图片描述

节点类型说明
ControlNode 控制节点常用节点类型为顺序节点
DecoratorNode 装饰节点可修改子节点的返回,可多次tick子节点; Retry和 Inverter类型节点
ConditionNode 条件节点不会返回running
ActionNode 动作节点执行某个任务的节点,分为同步和异步,同步会阻塞直到结束,返回 SUCCESS or FAILURE ,异步可能会返回RUNNING

1.3.1 控制节点

1)顺序节点
顺序执行。如果全部成功则执行成功,如果一个失败则不执行后续节点,直接返回失败。
顺序执行,直到失败返回失败,如果全部成功返回成功。
相当于以下结构:

if( activity1 ){
	if( activity2 ){
		if(activity3  ){
			
			return success;
		} else{
			return failure;
		}
	} else{
		return failure;
	}
} else{
	return failure;
}

2)Fallback节点。
顺序执行,直到成功返回成功,如果全部失败返回失败。
在行为树(Behavior Tree)的上下文中,FallbackNodes 通常被用于创建一个"或"(OR)逻辑:子节点将按照特定的顺序执行,只要有一个子节点成功(返回SUCCESS),则整个 FallbackNode 也被视为成功,并且不会进一步执行其它的子节点。但是,如果所有子节点都失败了(返回FAILURE),则 FallbackNode 本身也会返回 FAILURE。
相当于以下结构:

if( activity1 ){
	return success;
} else{
	if( activity2 ){
		return success;
	} else{
		if(activity3  ){
			return success;
		} else{
			return failure;
		}
	}
}

2 BehaviorTree.CPP 4.5使用

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

​Delphi通过Map文件查找内存地址出错代码所在行​

一 什么是MAP文件 什么是 MAP 文件?简单地讲, MAP 文件是程序的全局符号、源文件和代码行号信息的唯一的文本表示方法,它可以在任何地方、任何时候使用,不需要有额外的程序进行支持。而且,这是唯一能找出程序崩溃的地方…

容器化实践:DevOps环境下的容器交付流程

DevOps的兴起是为了应对市场和消费者对技术应用的不断增长的需求。它的目标是构建一个更快的开发环境,同时保持软件的高质量标准。DevOps还致力于在敏捷开发周期中提升软件的整体品质。这一目标的实现依赖于多种技术、平台和工具的综合运用。 结合容器化技术与DevO…

新品发布 | 捷云等保一体机2.0全新上市,助力中小企业破解等保难题

等保2.0时代,随着网络威胁不断复杂化和组织化,作为网络安全“弱势群体”的中小企业,等保建设工作正面临着安全意识、管理、人才、资金捉襟见肘等问题,主要体现在以下两个方面: 等保建设流程复杂 中小企事业单位缺乏专…

C++入门 string(1)

目录 string类简介 string类的常用接口说明 string类对象的常见构造 string类对象的访问及遍历操作 operator[ ] begin end rbegin rend string类简介 string是表示字符串的字符串类该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的…

2024年工业设计与制造工程国际会议(ICIDME 2024)

2024年工业设计与制造工程国际会议 2024 International Conference on Industrial Design and Manufacturing Engineering 会议简介 2024年工业设计与制造工程国际会议是一个集结全球工业设计与制造工程领域精英的盛会。本次会议旨在为业界专家、学者、工程技术人员提供一个分享…

偏微分方程算法之抛物型方程差分格式编程示例三(C-N格式)

目录 一、研究问题 二、C++代码 三、结果分析 一、研究问题 已知其精确解为。分别取以下三种步长: ①

人大京仓数据库关闭大小写敏感

人大京仓数据库关闭大小写敏感 1、先删除data(Kingbase\ES\V8\)文件夹下的所有文件夹 2、接着找到initdb.exe所在位置,我的位置是在这里D:\Kingbase\ES\V8\Server\bin,然后输入cmd,运行一下 initdb -E UTF-8 -D C:\Kingbase\ES…

中国新兴的数字证书品牌——JoySSL

JoySSL是一个基于全球可信顶级根创新推出的新一代https数字证书,也是中国为数不多的自主品牌SSL证书。以下是关于JoySSL的详细介绍: 1 品牌背景: JoySSL是网盾安全旗下的产品,专注于网络安全技术服务、安全防护系统集成、数据安…

Craig Federighi 和 John Giannandrea 在 WWDC 上谈论苹果智能技术

WWDC 主题演讲结束后,苹果公司的克雷格-费德里吉(Craig Federighi)和约翰-吉安南德雷亚(John Giannandrea)坐下来,更深入地讨论了苹果智能公司在人工智能方面所做的努力,包括该公司是如何训练模…

【Vue】获取模块内的actions方法

目标: 掌握模块中 action 的调用语法 (同理 - 直接类比 mutation 即可) 注意: 默认模块中的 mutation 和 actions 会被挂载到全局,需要开启命名空间,才会挂载到子模块。 调用语法: 直接通过 store 调用 $store.di…

机器学习笔记:focal loss

1 介绍 Focal Loss 是一种在类别不平衡的情况下改善模型性能的损失函数最初在 2017 年的论文《Focal Loss for Dense Object Detection》中提出这种损失函数主要用于解决在有挑战性的对象检测任务中,易分类的负样本占据主导地位的问题,从而导致模型难以…

C#项目实战

事件 public delegate void NumManipulationHandler(NumEventArgs e); // 基于上面的委托定义事件 public event NumManipulationHandler ChangeNum;public class Program{public static void Main(){NumEvent even new NumEvent(0);even.ChangeNum EventAction.Action;even…

【全篇】C语言从入门到入土

【全篇】C语言从入门到入土 文章目录 【全篇】C语言从入门到入土第一章 前言如何去学习,学习方法论 第二章 初识1.代码编译工具2.c程序的基础框架3.数据的表现形式变量1.要先定义后使用(变量名的定义是由自己决定的,一般倾向于顾文生义&#…

Python基础教程(九):Lambda 函数

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

道路堵塞监测识别摄像机

道路堵塞监测识别摄像机是现代城市交通管理的重要利器,其功能多样、效果显著,对缓解交通拥堵、提高通行效率有着重要作用。 该摄像机采用高清摄像头,能够实时捕捉道路上的交通情况。无论是车辆密度还是行驶速度,都能清晰记录&…

从零手写实现 nginx-17-nginx.conf 全局的默认配置

前言 大家好,我是老马。很高兴遇到你。 我们为 java 开发者实现了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何处理的,可以参考我的另一个项目: 手写从零实现简易版 tomcat minicat 手写 nginx 系列 …

Android Studio历史版本

android studio的历史版本

BCZYYb(钡铈锆钇镱)主要用作电解质 我国技术研究与生产步伐正在加快

BCZYYb(钡铈锆钇镱)主要用作电解质 我国技术研究与生产步伐正在加快 BCZYYb,钡铈锆钇镱氧化物,钙钛矿结构,外观为白色至浅黄色粉末状,主要用作电解质,功能是传输离子,具有化学稳定性…

Python 基础语法详解(五)

Python 基础语法详解(五) Python 循环语句14.1 while 循环实操:①重要命令:continue 和 break②while 循环使用 else 语句实操:③pass 语句 14.2 for 循环实操:①上实操——通过索引序列迭代元素②for 循环…

OCP-042之:Oracle实例管理

2. Oracle实例管理 2.1 Instance管理 Oracle实例(instance)是一组Oracle后台进程和内存结构的集合。 后台进程主要包括SMON,PMON,DBWR,CKPT和LGWR等;内存结构包括数据库高速缓冲区、重做日志缓冲区、共享池、大池等组成系统全局区(SGA)的重要组件。实例主要实现对数据库的…