首页 > 其他分享 >[原]行为树模式(BT)和有限状态机模式(FSM)

[原]行为树模式(BT)和有限状态机模式(FSM)

时间:2024-09-29 09:22:48浏览次数:10  
标签:状态 FSM 模式 状态机 BT 行为 节点

概述

有限状态机(Finite State Machine, FSM)行为树(Behavior Tree, BT)都是用于游戏开发、机器人学以及其他需要实现复杂行为逻辑的领域中常用的设计模式。它们各自有独特的优点和缺点,适用于不同的场景。

有限状态机模式 (FSM)

定义:

有限状态机是一种数学模型,用来表示一个系统可以处于的状态集合以及这些状态之间的转换规则。每个状态都有相关的动作或活动,并且只有特定事件发生时才能从一个状态转移到另一个状态。

优点:

  • 简单直观:FSM很容易理解和实现,特别是对于简单的任务。
  • 易于调试:因为状态间的转换是明确的,所以问题更容易追踪和修复。
  • 性能高:在处理相对直接的行为逻辑时,FSM通常能够提供很好的性能。
  • 状态明确:每个状态的行为都是独立定义的,状态转移逻辑清晰。

缺点:

  • 难以扩展:随着状态数量的增长,管理所有可能的状态转换会变得非常困难。
  • 灵活性低:如果需求变更频繁,则修改现有的FSM可能会比较麻烦。
  • 不适合复杂逻辑:当涉及到多个条件判断或者循环结构时,使用FSM就显得不太合适了。

示例应用:

1.在视频游戏中控制角色的基本行动如行走、跳跃等,每个动作对应于一种状态。

2.假设有一个简单的交通灯系统,包含红灯、黄灯和绿灯三种状态。每种状态下,交通灯的行为(即灯光颜色)是固定的。当满足特定条件(如时间间隔)时,交通灯会从一种状态转变到另一种状态。这就是一个典型的FSM应用场景。

行为树模式 (BT)

定义:

行为树是一种基于节点的数据结构,通过组合不同的节点来形成复杂的行为决策流程。主要包含几种类型的节点:选择节点、序列节点、条件节点及执行节点等。

优点:

  • 良好的模块化设计:允许开发者将大的问题分解成更小的部分来解决。
  • 高度可复用性:同一棵行为树可以在不同情境下被重用。
  • 支持并发操作:能够在同一时间运行多条路径。
  • 强大的表达能力:能很好地描述出具有层次性和优先级的任务。

缺点:

  • 学习曲线较陡峭:相比于FSM来说,理解并正确地构建一棵有效的BT需要更多的知识和技术背景。
  • 计算成本较高:尤其是在处理大量并发路径的情况下,可能导致性能开销较大。
  • 维护难度大:随着项目规模扩大,保持行为树的清晰度与合理性成为挑战。

示例应用:

1.AI敌人智能体根据玩家的位置决定是否攻击、逃跑还是寻找掩护,这种情况下使用行为树可以更好地组织和管理各种决策逻辑。

2.在游戏开发中,行为树常用于控制NPC(非玩家角色)的行为。例如,一个NPC的行为树可能包含多个节点,如“巡逻”、“攻击玩家”、“寻找物品”等。这些节点会根据当前的环境和NPC的状态来决定执行哪个行为。通过这种方式,NPC可以表现出更加智能和灵活的行为。

 

两者对比

 

有限状态机模式行为树模式
定义 表示有限个状态以及状态间转移的数学模型 描述复杂行为和决策过程的树状结构
优点 设计简单、状态明确、易于调试 灵活性高、可读性强、可扩展性好、适应性强
缺点 状态爆炸、可扩展性差、难以处理复杂行为 实现复杂、性能开销、调试难度
应用场景 适用于状态较少、逻辑简单的系统 适用于需要高度灵活性和复杂决策逻辑的系统

有限状态机FSM   更适合那些状态固定且变化不多的情况。

行为树BT  则更加适合需要灵活应对多种情况并且具有一定复杂度的行为控制系统。

标签:状态,FSM,模式,状态机,BT,行为,节点
From: https://www.cnblogs.com/lyggqm/p/18438847

相关文章

  • Reactor模式
    Reactor模式许多高性能的服务器软件离不开Reactor模式.像高性能缓存Redis,高性能web服务器Nginx,高性能的网络组件Netty,高性能的消息中间件Kafka,RocketMQ等.那什么是Reactor模式呢?借用DougLea大师的话来说,就是:Reactor模式由Reactor线程,Handles处理器两大角色组成,它们的......
  • 设计模式之模板方法模式
    模板方法模式模板方法模式是一种行为型设计模式,它定义了一个操作中的算法的框架,并将一些步骤的执行延迟到子类中。通过这种方式,模板方法使得子类可以在不改变算法的结构的情况下,重定义算法中的某些特定步骤。核心组成:抽象类(AbstractClass):这个抽象类包含模板方法本身,同时也可......
  • 软件设计模式概述
    概述软件设计内容软件体系结构—宏观设计,模块软件设计模式—中间级别,类,接口,模块数据结构与算法—微观设计,方法是什么设计经验的总结七个常用原则单一职责原则就一个类而言,应该仅有一个引起他变化的原因为什么当一个类职责过多,一个职责的变化可能影响......
  • C++设计模式
    C++设计模式提供了一些常见的问题和解决方案,帮助我们写出更清晰、更高效、更容易维护的代码。1.单例模式:就像整形诊所里有一个特别的规定,全世界只能有一个人拥有某款独一无二的鼻子,其他人都不能复制。(确保一个类只有一个实例,并提供一个全局访问点。)classSingleton{priva......
  • 结构型设计模式详解与对比:优化你的系统设计
    结构型设计模式(StructuralDesignPatterns)主要关注类和对象的组合,以形成更大的结构。它们通过识别实体之间的关系,帮助设计师确保系统的各个部分能够协同工作。以下是几种常见的结构型设计模式及其详细介绍和对比:一,代理模式(ProxyPattern)用途:为另一个对象提供一个替身......
  • 商场促销——策略模式
    文章目录商场促销——策略模式商场收银软件增加打折简单工厂实现策略模式策略模式实现策略与简单工厂结合策略模式解析商场促销——策略模式商场收银软件时间:2月27日22点地点:大鸟房间人物:小菜、大鸟“小菜,给你出个作业,做一个商场收银软件,营业员根据客户所......
  • 如果再回到从前——备忘录模式
    文章目录如果再回到从前——备忘录模式如果再给我一次机会……游戏存进度备忘录模式备忘录模式基本代码游戏进度备忘如果再回到从前——备忘录模式如果再给我一次机会……时间:5月6日18点地点:小菜、大鸟住所的客厅人物:小菜、大鸟"小菜,今天上午看NBA了吗?"大......
  • 开源链动2+1模式AI智能名片小程序源码:放大特色,构建独特竞争力
    摘要:本文探讨在当今社会背景下,开源链动2+1模式AI智能名片小程序源码如何通过坚持与众不同来构建独特竞争力。在信息传播便捷但个体易同质化的时代,拥有特色是脱颖而出的关键,而这种模式下的小程序源码具有独特的发展潜力。一、引言当今社会,一方面互联网使信息传播便捷高效,另一......
  • 多线程下单例模式延迟初始化的实现
    多线程下单例模式延迟初始化的实现前言synchronized修饰方法双重检查锁定双重检查锁定的问题基于volatile的双重锁定方案类初始化总结前言在程序开发中,存在一些开销较高的资源,例如数据库连接等,我们使用单例模式保证其唯一并且进行延迟初始化,只有当使用的时候才进行......
  • keepalived+nginx实现高可用的案例详解(主主模式)
    文章目录前言keepalived主备模式和主主模式有什么区别1.主备模式(Master-BackupMode)2.主主模式(Active-ActiveMode或DualMasterMode)主备模式vs主主模式的区别总结:环境案例实现具体步骤ngx1ngx2验证前言keepalived主备模式和主主模式有什么区别Keepali......