行为树(Behavior Tree)简介

行为树(Behavior Tree) 在行为树中,根节点是AI的起点,通过遍历子节点来决策AI的行为。前两个通知其父节点其操作是成功还是失败。下次树被选择时,该节点将再次被选择,此时它将再次有机会成功,失败或继续运行。行为树(Behavior Trees)是一种在游戏开发中广泛使用的AI设计模式,主要用于描述AI的行为和决策过程,实现更加智能和自然的游戏AI。它由多个节点组成,每个节点代表一个行为或决策,按照特定的方式连接在一起,形成一个树状结构。行为树通过模拟树状结构来描述AI的行为和决策过程,使得AI的行为更加灵活、自然和智能。 阅读详情

// 行为树(Behavior Tree)
// 每个节点执行后返回 成功/失败
// 行为树由4种节点构成:
// (1)Composite Node
//    <1>Selector Node
//    <2>Sequence Node
//    <3>Parallel Node
// (2)Decorator Node
// (3)Condition Node
// (4)Action Node
// 由于行为树的结构和XML文件很类似,因此用XML来动态配置行为树是一个不错的方法.

// VC2008

#include "stdafx.h"
#include <list>

// 节点基类
template<typename EventT>
class BehaviorTreeNode
{
public:
 BehaviorTreeNode(){};
 virtual ~BehaviorTreeNode(){};

public:
 virtual bool Behavior(const EventT& e) { return true; };
};

// 策略接口
class BehaviorTreeBranchStrategy
{
public:
 BehaviorTreeBranchStrategy(){};
 virtual ~BehaviorTreeBranchStrategy(){};
 virtual void BehaviorBegin() {};
 virtual void BehaviorEnd() {};
 virtual bool IsContinue() { return true; };
 virtual bool GetResult() { return true; };
};
 
// 非叶子节点
template<typename EventT>
class BranchNode : public BehaviorTreeNode<EventT>
{
public:
 BranchNode() : m_pStrategy(0) { };
 virtual ~BranchNode() {};

public:
 virtual void AddNode(BehaviorTreeNode<EventT>* pAddNode)
 {
  if(pAddNode != 0)
  {
   m_listChildNode.push_back(pAddNode);
  }
 }
 virtual void RemoveNode(BehaviorTreeNode<EventT>* pRemoveNode)
 {
  if(pRemoveNode != 0)
  {
   m_listChildNode.remove(pRemoveNode);
  }
 }

 virtual BehaviorTreeBranchStrategy* GetStrategy() const
 {
  return m_pStrategy;
 }
 virtual void SetStrategy(BehaviorTreeBranchStrategy* pStrategy)
 {
  m_pStrategy = pStrategy;
 }

 virtual bool Behavior(const EventT& e)
 {
  if(m_pStrategy == 0)
  {
   return false;
  }

  m_pStrategy->BehaviorBegin();
  for(std::list<BehaviorTreeNode<EventT> >::iterator it = m_listChildNode.begin();
   it != m_listChildNode.end(); ++it)
  {
   if( !m_pStrategy->IsContinue() )
   {
    break;
   }

   m_pStrategy->Behavior( it->Behavior(e) );  
  }

  m_pStrategy->BehaviorEnd();
  return m_pStrategy->GetResult();
 }

protected:
 // 子节点
 std::list<BehaviorTreeNode<EventT> > m_listChildNode;
 // 策略
 BehaviorTreeBranchStrategy* m_pStrategy;
};


int _tmain(int argc, _TCHAR* argv[])
{

 return 0;
}

 

行为树(Behavior trees) 文章目录行为树组合节点次序节点选择节点并行节点修饰节点逆变节点成功节点重复节点叶子节点 行为树 行为树由多种不同类型的节点组成,这些节点都会返回三种状态中的一种作为节点的运行结果。三种状态分别是: 成功 - Success 失败 - Failure 运行中 - Running 前两个,正如它们的名字一样,是用来向它们的父节点通知运行的成功或失败。第三种是指还在运行中,结果还未确定,会在下一个 Tick 的时候再去检查这个节点的运行结果。这个功能非常重要,它可以让一个节点持续运行一段时间来维持某些行为。比 阅读详情

相关推荐

BehaviorTree之概念讲解(一)

BehaviorTree简介,即C语言实现一颗行为树

su_fei_ma_su的博客 2112

行为树(Behavior Tree)详细介绍

源自: https://www.gamasutra.com/blogs/ChrisSimpson/20140717/221339/Behavior_trees_for_AI_How_they_work.php 行为树是控制AI实体决策流程的分层节点树。 在树的范围内,叶子是控制AI实体的实际命令,而形成分支的则是各种类型的效用节点,它们控制AI沿着树走,以达到最适合这种情况的命令序列。 这些树可能非常深,节点调用执行特定功能的子树,允许开发人员创建行为库,这些行为库可以链接在一起以提供非常令人信服的AI行为

weixin_42313598的博客 3万+

第 12 天:行为树(Behavior Tree),让 AI 更智能!

🚀 UE5 C++ AI 智能巡逻 & 追踪玩家! 本文详细讲解 如何使用 Unreal Engine 5 内置任务(Task) 让 AI 在 地图上随机巡逻,并通过 AI Perception(感知系统) 发现玩家后切换为 追踪模式。我们使用 Move To 任务 控制 AI 移动,并在 Behavior Tree + Blackboard 里组织 AI 逻辑,实现 自动巡逻 & 目标追踪,让 AI 更加智能。🎮 跟随本教程,让你的 AI 具备真正的战术行为!🔥

m0_37643873的博客 3363

行为树(Behavior Tree)介绍

在这篇文章中,我将介绍行为树及其所有术语,将其与有限状态机进行对比,分享一些例子和软件库,并一如既往地给你留下一些资源,如果你想了解更多。

ronnie88597的博客 6425

Unity3D Behavior Tree行为树简单介绍及资源分享

昨天看了下《失控玩家》这个电影,发现一直以来也没有认真去研究过游戏AI的设计,于是今天就想边记录边学习的方式去研究游戏AI设计思路。 平台暂时还是基于U3D,官方暂时还没有AI插件,所以这边还是用U3D的第三方插件Behavior Tree。核心包可以点击链接下载U3D行为树1.6.6核心包。 行为树行为树,顾名思义肯定是树状结构,Behavior Tree也离不开这点,参考下图。 游戏的一个行为树AI最终其实就是图上的树状结构,由一个一个的节点组成。而在Behavior中,整体将这个节点分为..

u013833925的专栏 2192

【ROS】Nav2源码之nav2_behavior_tree(行为树)详解

行为树,即Behavior Tree,简称BT,是Nav2中新引入的流程控制机制,该机制的加入使其在上层业务流程控制上更加灵活。行为树的决策方式基于他的树形数据结构,在需要进行决策时,从树的根节点出发,按照一定顺序遍历子节点,遍历的过程中进行一系列的条件判断,决策得到最后的行为节点并执行。行为树是树:执行时从根节点开始按照指定的顺序遍历,直到到达终结状态。叶子节点都是可执行的行为:叶子节点会进行具体的操作,可以是一个简单的检测操作,也可以是一个更复杂的操作,节点会返回状态信息(成功,失败,运行中)。

郭老二 1877

行为树 Behavior Tree 原理 一

行为树 Behavior Tree 原理 行为树 树形结构图如下一棵倒置的树 行为树采用节点描述行为逻辑,主要有:选择节点、顺序节点、并行节点、修饰节点、随机节点、条件节点、行为节点。一棵行为树表示一个AI逻辑。要执行这个 AI 逻辑,需要从根节点开始遍历整棵树,遍历执行的过程中,父节点根据自身的类型,确定需要如何执行、执行哪些子节点并继续执行,子节点执行完毕后,会将执行结果反馈给父节点。...............

lq 1万+

IOPaint模型部署教程

IOPaint是一款功能全面且强大的AI图像处理工具,它不仅免费开源,还由SOTA(State-of-the-Art,即最先进)AI模型驱动,为图像编辑和修复带来了前所未有的便利和高效。以下是对IOPaint的详细介绍:

SJJS_1的博客 1540

Behavior-tree 在ROS中的应用(入门)

Behavior-tree 在ROS中的应用综述(入门)放在最开始的话关于BT在ROS中应用的资料汇总关于行为树的基本知识行为树的编程 放在最开始的话 Behavior-tree(BT,行为树)自诞生以来也有很多年了,并且在AI游戏设计中有着非常广泛的应用,但是博主最近在学习BT在ROS中的编程应用时,浏览了国内各大论坛上的博文,发现内容甚少。于是,秉着“前人栽树,后人乘凉”的美德,博主也来种一回树。 本文主要涉及了一些资料的推荐以及基础编程指北,所用的环境是Ubuntu 18,ROS版本是melodic,

atticus00的博客 3450

gnuradio+b210实现FM收音机

gnuradio+b210实现FM收音机环境介绍FM接收1 Flow Graph2 变量参数FM发射1 Flow Graph 环境介绍 Name Version gnuradio 3.7.14.0 uhd 3.15.0.0 ubuntu 18.04 usrp b210 参考 https://www.ijedr.org/papers/IJEDR1702038.pdf Audio File Transmission using GNURADIO and USRP FM接

u011745228的博客 5126

RK3588s Camera ISP调优详解(一)ISP调试工具及环境配置(附下载途径)

本文主要介绍了rkisp tuner工具的连接与使用,并附上了工具及依赖库的下载地址

zongheng_raobo的博客 6271

使用行为树(Behavior Tree)实现游戏AI

静态是使用行为树需要非常着重的一个要点:即使系统需要某些”动态”性。其实诸如Stimulus这类动态安插的Node看似强大,但却破坏了本来易于理解的静态性,弊大于利。Halo3相对于Halo2对BT AI的一个改进就是去除Stimulus的动态性。取而代之的做法是使用Behavior Masks,Encounter Attitude,Inhibitions。原则就是保持全部Node静态,只是根据事件和环境来检查是否启用Node。

fenghuo_yuanma的博客 1392

如何给K8S配置一个具有永久有效的kubeconfig

在 Amazon EKS 环境中,Kubernetes 的认证机制与 AWS IAM 深度集成,通过aws-iam-authenticator动态生成临时凭证。这种设计虽然增强了安全性,但给需要持久化凭证的工具链(如 CI/CD 系统中的 KubeVela)带来了挑战。具体表现为:临时凭证失效​​:默认 Token 有效期为 15 分钟至 1 小时;​​IAM 角色限制​​:直接使用aws eks get-token生成的凭证无法持久化

小杨同学的博客 660

关于行为树(Behavior Tree)的理解。

前言 最近看到项目里有个行为树编辑器,然后就顺道看看这是个什么东西。然后看到挺多写行为树的都是关于Behavior Designer这个Unity插件的。而关于行为树(Behavior Tree)这个东西的描述就有点抽象。但为了搞清楚什么是行为树。然后我就下载了几个手写的行为树源码,比对下来也各有不同。感觉写的对我比较有帮助的是这个 点击跳转。 以下都是我对这些源码测试后对这个行为树的理解。我只说比较概念化的东西帮助理解。 行为树简介 行为树是一个包含逻辑节点和行为节点的树结构,每次需要找出一个行为的时候,

Gipsyz的博客 2176

【四足机器人项目实战】四足机器人弹簧倒立摆(SLIP)动力学模型

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言1.动力学建模构型方法2.四足机器人动力学模型(1)多体动力学模型【针对躯干+脚建模】方法一:VMC(VirtualModelController)模型方法二:SLIP模型(2)浮基单体动力学模型【针对躯干建模】【用于MPC】 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对四足机器人动力学模型-VMC、SLIP和浮动机体模型做个简

qq_35635374的博客 7311

034、MLCA 多尺度局部上下文注意力的 YOLOv11 适配:轻量级金字塔式空间上下文聚合

本文介绍了一种将多尺度局部上下文注意力(MLCA)模块集成到YOLOv11模型中的方法,以解决小目标检测中空间信息丢失的问题。MLCA采用金字塔式局部上下文聚合策略,通过不重叠的网格划分实现轻量级空间注意力计算,相比全局注意力机制能更好地保留小目标特征。 作者详细记录了实现过程,包括模块定义、参数调优和训练技巧,特别指出避免使用BN而改用GroupNorm以提升训练稳定性。在VisDrone数据集上的实验表明,MLCA-YOLOv11在参数量和计算量基本不变的情况下,mAP提升2.5%,其中行人检测提升3.

sundong_81的博客 279

java 行为树_使用行为树(Behavior Tree)实现游戏AI

———————————————————————谈到游戏AI,很明显智能体拥有的知识条目越多,便显得更智能,但维护庞大数量的知识条目是个噩梦:使用有限状态机(FSM),分层有限状态机(HFSM),决策树(Decision Tree)来实现游戏AI总有那么些不顺意。试试Next-Gen AI的行为树(Behavior Tree)吧。虽说Next-Gen AI,但距其原型提出已有约10年时间,而微软Ha...

weixin_42332497的博客 1217

【STM32系统】基于STM32设计的锂电池电量/电压检测报警器系统

本设计旨在研究一个基于STM32F103C8T6微控制器的锂电池电量/电压检测报警器系统,应用于便携式电子设备电池管理。系统通过STM32的ADC模块对18650锂电池电压进行采集,利用LCD1602显示模块实时显示电池电压,当检测到电池电量不足或电压异常时,蜂鸣器报警模块会发出警报提醒用户。系统采用简单的硬件结构和优化的软件架构,通过对实际电池电压数据的检测、处理和显示,实现了低功耗、实时监测的锂电池管理功能。本文将介绍系统的设计原理、硬件电路、软件实现以及调试测试过程。

嵌入式阿齐Archie 1万+

行为树(Behavior tree)

简介: 游戏AI - 行为树Part1:简介 - 知乎 关于行为树的基础概念 - DesignYourDream - 博客园 Unity AI决策-行为树_a592733740的博客-优快云博客 基础概念: 【AI】行为树学习(1) - 知乎 行为树是一种数据结构,可以完成:自顶向下的,通过一些条件来搜索这颗树,最终确定需要做的行为(叶节点),并且执行它。 行为树是一个包含逻辑节点和行为节点的树结构,每次需要找出一个行为的时候,会从树的根节点出发,遍历各个节点,找出和当前数据相符合的行为。

holly_poppy_的博客 4731

【AI智能体】Dify 搭建数据分析应用实战操作详解

Dify 搭建数据分析应用实战详解

congge 7295

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Unity+Behavior Tree行为树 Behavior Designer 行为树任务(四)

下面的内容是对官方文档的简单翻译加上一下笔记,没有认真核对下面翻译的内容,可能存在错别错字之类的地方,敬请谅解!

liang_704959721的专栏 5335

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

行为树 Behavior Tree C#实现 二

行为树 Behavior Tree C#实现 前篇介绍了 行为树 Behavior Tree 的原理。 本篇通过前篇原理完成 Behavior Tree 的实现。 1、节点类型枚举 NodeType namespace BehaviorTree { /// /// 行为树节点类型 /// public enum NodeType {.........

lq 6284

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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

我想通过一个例子来介绍一下行为树的基本概念,会比较容易理解,看下图: 这是我们为一个士兵定义的一颗行为树(可以先不管这些绿圈和红圈是干吗的),首先,可以看到这是一个树形结构的图,有根节点,有分支,而且子节点个数可以任意,然后有三个分支,分别是巡逻(Patrol),攻击(Attack),逃跑(Retreat),这个三个分支可以看成是我们为这个士兵定义的三个大的行为(Behavior),当然,如...

9624 7217
上一篇: 简单有限状态机(FSM)
下一篇: 表驱动的自动状态机(FSM)
双杯献酒
博客等级 码龄25年 102粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值