☰
HRL-BT HDRL-BT:分层强化学习驱动的自适应行为树
2026/10/19 3:52:51 网站建设 项目流程

(本文为ChatGPT根据2023年论文《基于强化学习的行为树决策模型优化方法研究》原文思想自动生成)

在游戏 AI、机器人控制、智能决策等领域,**行为树(Behavior Tree,BT)**是一种非常经典的决策模型。

它最大的优点是:简单、直观、可解释、容易维护。

例如,一个 NPC 遇到敌人时,可以设计成:

Selector ├── 敌人很近 → 攻击 ├── 敌人存在 → 追击 ├── 血量低 → 逃跑 └── 默认 → 巡逻

这套逻辑非常容易理解。

但问题也很明显:

如果所有行为都靠人工规定,那么 AI 最终只是“按照规则执行”,而不是“自己学习”。

当环境越来越复杂时,我们不得不不断增加 Condition、Selector 和 Action:

if 敌人在附近: if 自己血量高: 攻击 else: 逃跑 else: if 有任务: 执行任务 else: 巡逻

规则越来越多,行为树也越来越复杂。

更重要的是:

人可以规定“有哪些行为”,但很难把所有情况下“应该选择哪个行为”都提前写出来。

这正是强化学习可以发挥作用的地方。


一、核心思想:让行为树负责结构,让强化学习负责决策

这项工作的核心思想可以概括成一句话:

规则约束行为边界,强化学习优化行为选择。

传统行为树中,一个 Selector 通常按照固定优先级选择子节点。

例如:

Selector ├── Attack ├── Escape ├── Search └── Patrol

传统方式可能永远按照:

Attack → Escape → Search → Patrol

的顺序检查。

强化学习则可以介入这个过程:

Selector ├── Attack ← Q值 ├── Escape ← Q值 ├── Search ← Q值 └── Patrol ← Q值

此时 Selector 不再简单地按照固定优先级执行,而是根据当前状态选择当前看来最值得执行的行为。

因此,行为树和强化学习形成了一种互补关系:

行为树强化学习
描述行为结构学习行为选择
提供先验知识从环境反馈中优化
保证行为可解释提高环境适应能力
限制搜索范围探索更优策略

这也是后续 QL-BT、HRL-BT 和 HDRL-BT 的共同基础。


二、QL-BT:第一次让行为树“学会选择”

最直接的方案,是把Q-Learning引入行为树。

传统 Selector:

Selector ↓ 按照固定优先级选择 Child

QL-BT:

Selector ↓ 根据 Q(s, a) 选择 Child ↓ 执行 Action ↓ 获得 Reward ↓ 更新 Q 值

核心伪代码其实非常简单:

def select_action(state, actions): q_values = [Q[state, action] for action in actions] if random() < epsilon: return random_choice(actions) return actions[argmax(q_values)]

执行完成后,再利用强化学习更新:

Q[state, action] = Q[state, action] + \ alpha * ( reward + gamma * max(Q[next_state, a]) - Q[state, action] )

这样,行为树仍然负责组织行为,但 Selector 开始通过经验调整选择策略。

例如:

状态:敌人在附近,自己血量较低 Attack → Q = 2.1 Escape → Q = 8.7 Search → Q = 1.2 Patrol → Q = 0.5

Selector 自然会更倾向于选择:

Escape

而不是依赖程序员提前写死:

if health < 30: escape()

这就是从规则驱动向学习驱动迈出的第一步。


三、问题来了:Q表可能“爆炸”

QL-BT 虽然解决了“固定规则”的问题,但很快会遇到强化学习中的经典问题:

状态空间和动作空间太大。

假设一个智能体有:

100种状态 10种动作

Q 表只有:

100 × 10 = 1000

个值。

但如果状态变成:

1000 × 100 × 50 × 20

那么状态空间很快就无法直接用 Q 表表示。

更麻烦的是,传统 QL-BT 往往还是把整个行为决策问题看成:

State ↓ Action ↓ State ↓ Action

也就是说,所有决策都处于一个扁平的空间里。

现实中的复杂任务却通常不是这样的。

比如一个 FPS 智能体的任务可能是:

完成任务 ├── 找到敌人 │ └── 消灭敌人 ├── 找到补给 │ └── 获取弹药 ├── 找到医疗包 │ └── 恢复生命 └── 找到出口 └── 逃离

显然:

“找敌人”和“找出口”属于不同层次的决策。

如果把所有东西放进一个巨大的 Q 表里学习,就会非常困难。

于是就有了下一个关键思想。


四、HRL-BT:把“行为树的层级”变成“强化学习的层级”

HRL-BT,也就是:

Hierarchical Reinforcement Learning Behavior Tree

核心思想是:

既然行为树本身已经具有层级结构,那么为什么不直接利用这种层级结构帮助强化学习?

传统强化学习可能是:

State ↓ Action ↓ State ↓ Action ↓ ...

HRL-BT 则变成:

Root │ ┌─────────┴─────────┐ ↓ ↓ 战斗任务 生存任务 │ │ ┌────┴────┐ ┌────┴────┐ ↓ ↓ ↓ ↓ 攻击 追击 逃跑 找药

这里出现了一个非常重要的概念:

Option

在层次强化学习中,一个 Option 可以理解为:

一个能够持续执行多个时间步的高级行为。

例如:

Option = “寻找敌人”

它并不是一次动作,而可能包含:

观察环境 ↓ 移动 ↓ 调整方向 ↓ 继续移动 ↓ 发现敌人 ↓ 结束 Option

而行为树中的一个子树恰好非常适合承担这样的角色。

因此可以建立一种对应关系:

Behavior Tree Subtree ↕ Option

这就是 HRL-BT 很重要的设计思想。


五、为什么“层级”很重要?

假设一个任务有 1000 个底层动作。

如果直接学习:

1000 个 Action

那么决策空间非常大。

但如果我们先做高层决策:

选择任务 ├── 战斗 ├── 搜索 ├── 生存 └── 逃离

然后再在“战斗”内部学习:

战斗 ├── 找敌人 ├── 接近敌人 ├── 攻击 └── 撤退

那么每一层需要解决的问题都小得多。

最终:

高层策略 ↓ 选择一个子任务 ↓ 子任务内部继续决策 ↓ 执行多个底层动作 ↓ 子任务完成 ↓ 返回高层

这实际上是在利用问题本身的结构降低学习难度。

所以 HRL-BT 的核心并不是简单地“把 Q-Learning 换成另外一种算法”。

而是:

利用行为树天然的层级结构,对强化学习问题进行分解。


六、HRL-BT 的执行过程

可以把 HRL-BT 理解成下面这个循环:

while not task_finished: state = observe() # 高层行为树选择子任务 option = root.select(state) # 执行这个子任务 while not option.terminated(state): action = option.policy(state) next_state, reward = environment.step(action) option.update(state, action, reward) state = next_state

这里最关键的变化是:

一个 Action 不一定只执行一步。

而是可以执行一个完整的子任务。

例如:

选择“逃跑” ↓ 持续移动 ↓ 持续观察 ↓ 进入安全区域 ↓ 逃跑行为结束

相比每一步都重新进行一次全局决策,这种方式更符合复杂任务的自然结构。


七、从 HRL-BT 到 HDRL-BT

HRL-BT 解决了一个重要问题:

如何利用行为树的层级结构降低强化学习的决策复杂度?

但它仍然面对另一个问题:

如果状态不是几个离散变量,而是图像、连续位置、方向、速度等高维信息怎么办?

这时候,传统 Q 表就不太适合了。

于是进一步引入深度强化学习:

HDRL-BT

即:

Hierarchical Deep Reinforcement Learning Behavior Tree

核心思想可以理解成:

行为树 + 层次强化学习 + 深度神经网络

但是这里有一个非常重要的设计原则:

不是把整棵行为树直接变成一个神经网络。

而是:

让不同的行为树节点承担不同的学习任务。


八、为什么不能直接“端到端学习整个行为树”?

假设我们把整个任务直接交给 PPO 或 SAC:

环境输入 ↓ 神经网络 ↓ 动作

看起来非常简单。

但问题是:

网络需要自己同时学会:

什么时候寻找敌人? 什么时候找药? 什么时候找弹药? 什么时候去出口? 什么时候战斗? 什么时候逃跑?

这些实际上属于不同层次的问题。

如果全部交给一个网络学习,就会导致:

搜索空间巨大 ↓ 探索困难 ↓ 训练效率低 ↓ 容易陷入局部最优

HDRL-BT 的做法则是把任务拆开。

例如:

Root │ HDRL-Selector │ ┌───────────┼───────────┐ ↓ ↓ ↓ FindEnemy FindAmmo FindMedkit │ │ │ PPO PPO PPO

再加上:

FindExit

形成多个相对独立的学习行为节点。

这样,网络不需要学习整个世界,而只需要学习:

“在这个已经定义好的行为范围内,怎样把这个任务做好。”


九、HDRL-BT 的一个典型结构

可以把它抽象成:

行为树 Root │ HDRL-Selector │ ┌─────────────┼─────────────┐ │ │ │ ↓ ↓ ↓ FindEnemy FindAmmo FindMedkit │ │ │ PPO PPO PPO │ │ │ └─────────────┼─────────────┘ │ FindExit │ PPO

其中:

  • 行为树:负责组织任务;

  • Selector:决定当前应该执行哪个子任务;

  • PPO:负责学习具体行为;

  • SAC:可以用于更高层的组合/选择决策;

  • 传统 BT 节点:继续承担一些明确、稳定、不需要学习的逻辑。

这就形成了一种混合架构:

规则节点 + 学习节点

而不是:

100% 神经网络

十、真正值得借鉴的思想:不是“全部交给 AI”

这项工作的价值,我认为并不只是提出了一个新的 BT + RL 组合。

更值得借鉴的是一种 AI 系统设计思想:

不要让机器从零开始学习所有东西。

人类其实已经拥有大量先验知识。

例如:

敌人存在 → 可以攻击 生命值低 → 可以寻找医疗 弹药不足 → 可以寻找弹药 到达出口 → 可以结束任务

这些知识完全没有必要让神经网络重新学习。

人可以把这些知识编码成:

Behavior Tree

然后把真正困难的部分交给强化学习:

人: “你可以做这些事情。” RL: “那我学习什么时候做、先做什么、怎样做得更好。”

这就是:

知识 + 学习

而不是:

纯规则或纯神经网络。


十一、从 Handcraft-BT 到 HDRL-BT 的演进

整个技术路线可以简单总结成:

Handcraft-BT │ │ 让 Selector 学习 ↓ QL-BT │ │ 发现状态空间过大 ↓ HRL-BT │ │ 进一步面对高维/连续状态 ↓ HDRL-BT

对应的思想变化是:

固定规则 ↓ 学习行为选择 ↓ 利用层级结构学习 ↓ 利用深度网络处理复杂状态

可以简单理解为:

模型核心思想
Handcraft-BT人工规定怎么做
QL-BT学习选择哪个行为
HRL-BT学习选择哪个层级任务
HDRL-BT用深度强化学习处理复杂行为

十二、如果自己实现,一个简化版本可以这样设计

如果不考虑论文中的具体工程实现,我们甚至可以先实现一个非常简单的原型。

第一步,定义行为:

class Behavior: def execute(self, state): pass def reward(self): pass

然后让 Selector 学习:

class RLSelector: def select(self, state, children): if random() < epsilon: return random_choice(children) return max( children, key=lambda child: Q(state, child) )

再进一步,把一个子树作为 Option:

class Option: def execute(self, state): while not self.terminated(state): action = self.policy(state) state, reward = env.step(action) self.update(state, action, reward) return state

最终形成:

Root ↓ RLSelector ↓ Option ↓ Behavior Tree Subtree ↓ Action

这其实已经抓住了 HRL-BT / HDRL-BT 的基本思想。


十三、总结

如果把整篇工作压缩成一句话:

行为树解决“任务怎么组织”,强化学习解决“行为怎么选择”,深度强化学习解决“复杂环境怎么学习”。

传统行为树的优势并没有被强化学习取代。

恰恰相反:

行为树 提供结构、先验知识和可解释性 + 强化学习 提供适应性和自主优化能力 + 深度学习 处理复杂、高维、连续状态 ↓ 更智能的行为决策

因此,HRL-BT / HDRL-BT 的真正价值,不在于简单地把“RL”塞进“BT”。

而在于找到了一种更加现实的 AI 开发方式:

把人擅长的事情交给规则,把机器擅长的事情交给学习。

与其让 AI 从零开始学习整个世界,

不如先告诉它:

“你有哪些能力,以及这些能力之间是什么关系。”

然后让强化学习去回答:

“面对当前环境,我现在到底应该怎么做?”

这可能才是行为树与强化学习结合最值得思考的地方。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询