17.Gameplay玩法系统高级AI

  1. 17.游戏引擎Gameplay玩法系统高级AI
    1. 17.1 AI课程大纲
    2. 17.2 层次任务网络
      1. 为什么需要HTN 从“反应机”到“任务与目标”
      2. HTN框架 世界状态、传感器与规划执行链路
      3. 任务建模 基础任务与复合任务
        1. 基础任务 前置条件 / 动作 / 效果
        2. 复合任务 方法选择与任务链
      4. 构建领域 从根任务出发组织层次结构
      5. 规划与执行 先生成计划,再按序运行
      6. 重规划 计划失效时如何恢复稳定性
      7. 小结
    3. 17.3 目标导向行为规划
      1. 什么是GOAP
      2. 结构与数据
      3. 目标集合
      4. 动作集合
      5. 反向规划的直觉
      6. 规划流程
        1. 选定目标
        2. 构建未满足状态栈
        3. 选择能满足状态的动作
        4. 推入计划栈并递归处理前置条件
      7. 从规划到图搜索
      8. 小结
    4. 17.4 蒙特卡洛树搜索
      1. 为什么需要MCTS
      2. 建模 状态、动作与状态空间
      3. 核心思想 仿真与统计
        1. 仿真
        2. 价值估计 Q 与 N
        3. 反向传播
      4. 迭代流程 选择、扩展、仿真、回传
        1. 可展开节点
        2. 利用与探索
        3. UCB准则
        4. 扩展
        5. 仿真与回溯
        6. 终止条件与输出
      5. 小结
    5. 17.5 机器学习基础
      1. 机器学习常见类型
        1. 监督学习
        2. 无监督学习
        3. 半监督学习
        4. 强化学习
      2. 马尔可夫决策过程
        1. 状态
        2. 行动
        3. 奖励
      3. MDP 的数学表达
      4. 策略
    6. 17.6 构建高级游戏AI
      1. 为什么游戏 AI 需要机器学习
      2. 游戏中的机器学习框架
      3. 深度强化学习示例 游戏建模
        1. 状态
        2. 动作
        3. 奖励
      4. 网络结构 让不同类型输入各就各位
        1. 多层感知机 MLP
        2. 卷积网络
        3. Transformer
        4. 长短期记忆
        5. 神经网络架构选择
      5. 训练策略 从模仿到自我进化
      6. 监督学习与强化学习的取舍
      7. 混合式落地与成本

17.游戏引擎Gameplay玩法系统高级AI


17.1 AI课程大纲


17.2 层次任务网络

为什么需要HTN 从“反应机”到“任务与目标”

上一节的 行为树(Behavior Tree, BT)更像“反应机器”:世界抛出条件,树按分支给出反应。它非常稳定、非常可控,但当行为被拉长到“要完成一件事”时,语义往往需要依赖注释补充——树上堆满 Selector / Sequence 的组合,结构本身很难直接呈现“当前子树的目标”。这一节引入的 层次任务网络(Hierarchical Task Network, HTN)从“任务与目标”出发,把意图写进结构里:先声明要完成的任务,再把任务分解为子任务,并在每个步骤中选择最合适的方法。

HTN 在工业界并不陌生,很多商业游戏会把它作为高级 AI 的骨架。它的直觉是“像人一样先立一个目标,再做计划”,而不是只对刺激做条件反射。

用“上课”举例:根任务是“上课”,可以被分解为“准备资料→去教室→学习→课后问答”。而“准备资料”并非只有一种做法:可以去图书馆(找书/借书),也可以上网(搜索/下载/打印)。这一类“先分解,再在分解点上选择方法”的表达方式,正是 HTN 想要显式建模的对象。

HTN框架 世界状态、传感器与规划执行链路

HTN 的第一层关键概念是 世界状态(World State)与 传感器(Sensors)。这里的“世界状态”并不是对外部世界的客观全量访问,而是 AI 内部对关键属性的主观刻画:只保留决策与规划需要的那些属性(例如资源、是否中毒、是否看见敌人等)。传感器负责从环境中取数,并据此更新这份内部世界模型。

在这份世界状态之上,HTN 还需要三块骨架:

  • 领域(HTN Domain):描述层次任务、方法与它们之间的关系,可理解为“任务知识库”,通常是从资产加载出来的数据。
  • 规划器(Planner):根据当前世界状态,在领域中选择合适的任务与方法,生成一个可执行的计划。
  • 计划执行器(Plan Runner):按顺序执行计划中的任务,并在任务完成后更新世界状态。

任务建模 基础任务与复合任务

HTN 的第二层关键概念是 任务类型。HTN 通常把任务分成两类:基础任务(Primitive Task)与 复合任务(Compound Task)。

基础任务 前置条件 / 动作 / 效果

基础任务更接近“一个动作”,它必须能回答三件事:

  • 前置条件(Precondition):在当前世界状态下,这个动作是否允许执行。
  • 动作(Action):实际执行的逻辑(脚本、动画、移动、交互等)。
  • 效果(Effect):动作成功后如何修改世界状态属性。

把前置条件与效果写清楚,等价于明确“读取什么状态”与“写回什么状态”。规划阶段需要靠这些读写关系把任务串成链路;执行阶段也需要靠它把世界状态持续刷新。

图里给出“使用药水/万能药”的基础任务示例:前置条件分别是“药剂可用/万能药可用”,动作是“饮用”,效果既包含状态恢复,也包含库存减少。这种“动作改变世界”的显式建模,是 HTN 能做规划的基础。

复合任务 方法选择与任务链

复合任务更接近“一个目标”,它不直接落到动作,而是提供多个 方法(Method):

  • 方法之间有 优先级(Priority),从高到低尝试。
  • 每个方法都有自己的 前置条件(Precondition),用于判断此方法是否可用。
  • 每个方法不是“单一步”,而是一条任务链:链上既可以是基础任务,也可以继续嵌套复合任务。

直观类比上一节:方法选择像 选择器(Selector),方法内部的任务链像 顺序节点(Sequence)。但 HTN 把“要完成的任务是什么”放到了最外层,语义更直接。

图里用“解毒”展示复合任务的展开:优先方法是“材料足够→制作药水→使用药水”,若材料不够,再尝试“金币足够→购买药水→使用药水”。计划不再是一堆条件分支的堆叠,而是“目标→方案→步骤”的结构化表达。

构建领域 从根任务出发组织层次结构

当基础任务与复合任务准备就绪后,可以构建 领域(HTN Domain):从 根任务(Root Task)出发,向下连接多个方法,再连接任务链,直到落到基础任务。根任务往往代表一个高层意图集合(例如战斗、逃跑、生存等),它决定了 AI“优先想做什么”。

图里给出一个更完整的领域示例:根任务可以在“解毒/逃跑/攻击”等目标间选择;“恢复”又可以继续分解为“用药/找药/用万能药”;“找药”还能分解为“制作/购买”。这类结构的优点是:任务语义与分层关系在图上是直接可读的。

规划与执行 先生成计划,再按序运行

有了领域之后,HTN 的核心工作变成两件事:规划(Planning)与 执行(Running)。

规划的第一步是“选方法”:从根任务出发,依据当前世界状态,按优先级检查方法前置条件,选择第一个满足的方案。

规划的第二步是“做分解”:把选中的方法展开为任务链,链上遇到复合任务就继续分解,直到尽可能落到基础任务。

当分解遇到基础任务时,规划阶段会做一个关键技巧:在临时内存里维护世界状态的 副本(Temporary Memory)。规划器假设动作成功,并用任务效果更新这份副本,从而让后续任务的前置条件能够被满足(例如“先买到药水”,才能“再使用药水”)。

如果某个基础任务的前置条件不满足,就回退到上一级复合任务,尝试下一个方法(Try Next Method)。规划本质上是在“可用方法空间”里做回溯搜索。

同样地,当分解到某个子任务失败时,失败会向上回传,促使上层复合任务切换方法;如果所有方法都不可用,失败会继续向上回传,直到根任务。

当分解与回溯结束,规划器最终输出的是一个 计划(Plan):由一串基础任务组成的线性序列。复合任务与方法在规划完成后不再出现在结果中,留下的是可直接执行的原子动作列表。

图里给出一个典型路径:在“找药”的分解中,“制作药水”因为条件不满足而失败,于是切换到“购买药水”,最后得到“购买→使用”的基础任务序列(红框标出最终落地的动作)。

执行阶段由计划执行器按序推进:

  • 执行每个基础任务前,先检查前置条件;不满足则直接失败。
  • 满足则执行动作;动作成功后写回世界状态(应用效果),并继续下一个任务。
  • 直到全部成功,或任意一个任务失败为止。

重规划 计划失效时如何恢复稳定性

由于游戏世界是动态的,计划并不总能一路走到底,因此需要 重规划(Re-plan)。常见触发场景包括:

  • 当前没有计划。
  • 当前计划执行完毕或执行失败。
  • 传感器更新导致世界状态关键属性发生变化。

图里示例是“逃跑失败(没有逃生路径)→重新规划并选择攻击”。这类“环境变化后尽快换目标”是 HTN 稳定运行的关键。

小结

小结:

  • 优点:HTN 与行为树相似,但抽象层级更高;输出的是带长期效应的计划;在相同情形下通常比行为树更快(不需要每帧从根反复遍历整棵树)。
  • 缺点:玩家行为难以预测,任务链容易失败;世界状态、前置条件与任务效果的设计需要高度一致性,否则会出现“计划生成困难”或“频繁重规划导致行为抖动”等工程问题。

17.3 目标导向行为规划

什么是GOAP

目标导向行动规划(Goal-Oriented Action Planning,GOAP)是一类以“目标”为中心的规划(Planning)方法。与偏反应式的结构相比,GOAP 的自动化程度更高,核心不是把行为路径写死,而是把“能做什么”和“想达成什么”形式化交给规划器求解,因此更适合应对环境变化带来的分支。

课程中给出的工程侧例子包括《中土世界 暗影魔多》《古墓丽影》《刺客信条 奥德赛》等,重点在于 GOAP 能让 AI 行为更具环境适应性,并减少对设计师手工枚举分支的依赖。

这类方法常见的工程直觉是反向规划(Backward Planning)。与“从当前状态一步步正向推导”不同,规划从目标状态出发倒推需要满足的前置条件,再倒推需要的动作与资源链路,直到落回当前世界状态可执行的动作序列。

结构与数据

GOAP 的整体框架与 HTN 在形态上相近,同样围绕“感知世界状态规划执行”展开,但 GOAP 把领域知识从“任务分解树”切换为两组显式集合。

  • 目标集(Goal Set):AI 可能追求的目标集合。
  • 动作集(Action Set):AI 可用的动作集合。
  • 世界状态(World State):由传感器更新的一组属性(property),作为规划输入与执行校验的依据。
  • 规划器(Planner):根据目标与动作定义生成一个动作序列。
  • 计划执行器(Plan Runner):按序执行规划结果,并在必要时触发重规划。

图中 “Select Goal → Make Plan → Execute” 对应了 GOAP 的基本运行节拍,即每轮先选目标,再生成计划,最后执行计划。

目标集合

在 GOAP 中,目标不是写在结构注释里的语义,而是需要被严格定义的数据对象。每个目标通常包含两部分信息。

  • 前置条件(Precondition):用于判定该目标在当前世界状态下是否可以被选择。
  • 目标状态(Goal State):用一组期望达成的状态集合来表达目标本身。

图里强调了两个维度的选择逻辑。

  • 优先级:在所有候选目标中形成从高到低的序列。
  • 前置条件:决定当前这一刻是否应当选择某个目标。

上图给出一个更贴近游戏语境的目标选择示例。目标集内同时存在“解毒”“逃跑”“攻击”等目标,但是否选择“解毒”取决于其前置条件是否满足(例如当前处于中毒状态)。这种“目标显式化”的做法,使得目标选择可以从行为结构中解耦出来,成为一段可复用的判定逻辑。

动作集合

动作集可以类比为“可执行操作库”,与 HTN 的基础任务在元素上相似,但 GOAP 还需要为规划求解补足一个关键量。

  • 前置条件(Precondition):动作可执行所需满足的条件。
  • 效果(Effect):动作执行后对世界状态产生的改变。
  • 成本(Cost):由设计或工程规则定义的代价,用于在多条可行计划中选择“更优”的一条。

图中展示了动作与世界状态的联系方式,规划器通过“前置条件/效果”把动作串成序列,再利用“成本”对候选序列进行比较。

反向规划的直觉

上图用“中毒→解毒”的链路解释反向规划的直觉。目标是“解毒”,最后一步往往是“使用解药”;为了“使用解药”,需要先“获得解药”;为了“获得解药”,可能需要“购买解药”,再倒推到“前往商店并支付”。这种从目标倒推依赖链的方式,适合把“资源获取”“替代方案”统一到同一套求解框架里。

规划流程

选定目标

第一步是从目标集中按优先级扫描,并用目标的前置条件与当前世界状态做匹配,选出当前轮次的目标。图中用对勾与叉号表示不同目标的前置条件是否被世界状态满足。

构建未满足状态栈

第二步是把目标状态与世界状态进行比较,将目标中尚未满足的状态压入未满足状态栈(Stack of Unsatisfied States)。图里示例是“目标包含多个状态”,其中部分状态与世界状态不一致,因此需要进入栈中等待被满足。

选择能满足状态的动作

第三步从未满足状态栈顶取出一个状态,在动作集中寻找“效果”能够满足该状态的动作,并评估该动作的可行性。图中展示了一个动作通过效果 “Set State 3” 来满足目标状态,同时动作自身仍然带有若干前置条件与成本。

推入计划栈并递归处理前置条件

第四步把选中的动作推入计划栈(Plan Stack),并检查该动作的前置条件是否在当前规划上下文中已满足;若仍未满足,则把这些前置条件反向压回未满足状态栈,继续执行“选择动作→推入计划”的循环。目标是让未满足状态栈逐步清空,从而得到一条可执行的动作序列。

从规划到图搜索

当目标与动作都由“状态集合”连接起来时,规划问题可以转化为图上的路径问题。

  • 节点(Node):世界状态的组合。
  • (Edge):可执行动作。
  • 权重(Weight):动作成本。

图中强调了一个与寻路相似的设定。由于规划采用反向推导,搜索方向往往是从“目标状态”出发,寻找回到“当前状态”的最短路径。

在图模型下,求解“最低成本计划”就等价于求最短路径,常用算法包括 A星(A*)等。图里给出多条“获得并使用解药”的候选链路,每条链路由若干动作组成并累积成本,规划器输出的计划就是其中成本更低且可达的一条。

小结

小结:

  • 优势:与 HTN 相比,GOAP 往往更动态;把目标动作解耦为两组显式集合,环境变化时同一目标可生成不同执行路径;在一定程度上缓解“前置条件与效果不匹配导致计划难以成立”的问题。
  • 挑战:规划求解需要额外计算开销,运行速度通常慢于 行为树(Behavior Tree)/有限状态机(Finite State Machine)/层次任务网络(Hierarchical Task Network);同时依赖一个足够可表达的世界状态,以及一致的动作前置条件与效果定义,否则规划质量与稳定性会受到明显影响。

17.4 蒙特卡洛树搜索

为什么需要MCTS

蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)是一类把“规划与决策”交给搜索过程的方法。典型代表是 AlphaGo(AlphaGo),以及一些回合制策略游戏的宏观决策系统。与手工枚举规则相比,MCTS 的行为往往更具多样性,适合在巨大搜索空间里做近似求解。

把 MCTS 类比成“下棋式思考”更容易把握其工程动机。决策并非只看眼前一步,而是在内部快速推演大量分支,再从中选出更优的一步作为输出。

MCTS 的 “Monte Carlo” 来自蒙特卡洛方法(Monte Carlo Method),其核心是通过重复的随机采样来估计复杂量。直观理解是“用足够多次采样换取稳定的统计结论”。

建模 状态、动作与状态空间

以围棋为例,当前局面对应一个状态(State),合法落子对应一组动作(Action)。决策的本质是从当前状态出发,在可行动作中选出“更值得执行”的那个。

为了让搜索可计算,需要把问题表达成“节点与边”的形式。最常见的建模方式是节点表示状态、边表示动作。

在节点和边的定义下,一次动作会把系统从状态 A 转移到状态 B。对博弈问题而言,动作选择会交替发生,状态序列就形成了一条路径。

从当前状态出发,把所有可能动作逐层展开,会得到一棵树形结构的状态空间。理论上这棵树可以无限展开,但现实中只能探索其中的一小部分。

因此 MCTS 的输出并不是“完整计划”,而是面向当前状态的一次动作选择。每走一步后,根节点变成新的当前状态,搜索过程随之继续。

核心思想 仿真与统计

仿真

MCTS 的关键环节是仿真(Simulation),也常被称为 rollout。仿真并不等价于穷举,而是在选定某个节点后,按照一个默认策略(Default Policy)快速把对局推到终局,得到胜负结果。

价值估计 Q 与 N

仿真结果会被汇总成两个统计量。

  • Q:累计回报或胜局数量。
  • N:模拟次数。

因此节点的一个直观评价可以写成 (Q/N),表示从该节点出发在当前默认策略下的经验胜率。

反向传播

一次仿真结束后,结果不会只更新叶子节点,而是沿着访问路径向上更新祖先节点的 Q 和 N,这一步称为反向传播(Backpropagation)。工程意义是让“子节点的试验结果”逐步反馈到更高层的决策点。

迭代流程 选择、扩展、仿真、回传

经典 MCTS 由四步循环构成,循环在计算预算内持续进行。

  • 选择(Selection)
  • 扩展(Expansion)
  • 仿真(Simulation)
  • 回传(Backpropagation)

在巨大状态空间中,无法遍历所有分支,因此搜索通常只关注“更有潜力”的区域,并在预算耗尽时停止。

可展开节点

可展开节点的直觉是“仍存在尚未尝试的动作”。当一个节点的部分子动作尚未加入树中,该节点就仍可被扩展。

利用与探索

选择阶段需要在两种倾向之间权衡。

  • 利用:优先走向当前胜率更高的子节点。
  • 探索:优先尝试访问次数更少、信息更稀缺的子节点。

UCB准则

常见做法是使用 UCB(Upper Confidence Bound,上置信界)把“利用”和“探索”合并为一个分数。图中给出的形式可以写作

\[
UCB_j = \frac{Q_j}{N_j} + C \sqrt{\frac{2\ln(N)}{N_j}}
\]

其中第一项偏向利用,第二项偏向探索;常数 (C) 控制探索强度。

选择阶段从根节点开始,反复挑选 UCB 值最大的子节点向下走,直到遇到一个可展开节点,再进入扩展阶段。

扩展

扩展阶段把某个未尝试动作加入树中,生成新的子节点。新节点的价值未知,需要后续仿真来估计。

仿真与回溯

扩展出的新节点会触发一次或多次仿真,得到胜负结果,再通过回传更新整条路径上的统计量,使树逐步“长出偏好”。

终止条件与输出

MCTS 需要一个明确的计算预算作为终止条件,例如仿真次数上限、时间上限或节点数量上限。停止后,只需要在根节点的子节点中选择一个动作作为最终输出。

“最终输出选哪个子节点”也存在多种策略,例如选择胜率最高的子节点、选择访问次数最多的子节点,或采用更保守的下置信界思想做折中。

小结

优缺点可以概括为两组工程结论。

  • 优点:MCTS 智能体行为更具多样性;智能体更偏向自主决策;能够应对搜索空间巨大的问题。
  • 缺点:对多数实时游戏而言,状态与动作的设计成本较高;复杂环境下建模困难;计算开销显著,往往需要与 行为树(Behavior Tree)/GOAP(Goal-Oriented Action Planning)/HTN(Hierarchical Task Network)等结构组合使用。


17.5 机器学习基础

这一节的目标不是系统讲完机器学习的完整理论,而是把”机器学习在游戏里通常怎么落地”拆成若干基础概念:先区分学习范式,再聚焦与游戏决策最相关的强化学习,并用马尔可夫决策过程给出可计算的形式化表达。

机器学习常见类型

课程把机器学习分为四类:监督学习无监督学习半监督学习强化学习。它们的差异不在模型形式,而在”学习信号从哪里来”。

监督学习

监督学习以带标签数据为起点,核心任务通常是分类或回归。图中的流程强调了”输入数据→训练集与期望输出→算法学习→输出结果”的典型管线,即通过标签提供明确的学习目标。

无监督学习

无监督学习面对的是未标注数据,目标是从数据本身抽取结构。图中用”分类边界”与”聚类簇”对比了两类常见任务:前者依赖标签给出边界,后者则是在没有标签的前提下发现数据的分布形态。

半监督学习

半监督学习处于两者之间,利用大量未标注数据与少量标注数据共同训练。图中上半部分表示”只有少量标注点”,下半部分表示”借助未标注样本的分布形态,把决策边界推向更符合整体结构的位置”,从而减少对标注规模的依赖。

强化学习

强化学习(Reinforcement Learning,RL)把学习建模为“智能体与环境交互”的过程。图中的回路强调了三类信号。

  • 观测(Observation):环境反馈给智能体的可见信息
  • 动作(Action):智能体对环境施加的控制
  • 奖励(Reward):环境对动作结果的评价

强化学习的工程难点之一是试错(Trial and Error)与延迟奖励。图中提示了一个关键事实:一次动作可能影响即时奖励,也可能影响后续多个时间步的回报,因此学习目标往往是最大化累计奖励而非单步得分。

马尔可夫决策过程

强化学习常用的理论框架是马尔可夫决策过程(Markov Decision Process,MDP)。在 MDP 中,智能体与环境构成闭环,环境根据智能体的动作更新状态并给出奖励。

状态

状态(State)表示智能体对当前环境的刻画。图中用平台游戏截图类比状态的”当前帧快照”,并强调状态的数据结构通常由工程侧设计与抽取。

行动

行动(Action)是智能体在游戏中可执行的最小行为单元。图中用”左/右/跳”示例动作空间,并在 MDP 框图中标出动作从智能体流向环境。

奖励

奖励(Reward)是环境对行为结果的反馈信号。图中给出不同事件对应不同奖励值的示例,并强调奖励在每个时间步都可能产生,用于驱动策略的优化方向。

MDP 的数学表达

MDP 可以用三类量来形式化描述。

  • 转移概率:执行动作后从状态 (s) 转移到状态 (s’) 的概率 (p(s’|s,a))
  • 策略:在状态 (s) 下选择动作 (a) 的概率分布 (\pi(a|s))
  • 累计回报:对未来奖励的加权求和 (G_t),其中折扣因子 (\gamma) 用于平衡短期与长期回报

策略

图中把策略写成 (\pi(a|s)) 的形式,含义是在给定状态 (s) 的条件下,智能体选择动作 (a) 的概率。以“左/右/跳”的离散动作空间为例,策略输出的不是单个动作,而是一组动作概率分布,随后再据此采样或取最大概率动作完成决策。


17.6 构建高级游戏AI

为什么游戏 AI 需要机器学习

前面章节的寻路、转向、行为树、HTN、GOAP 等方法,本质上都需要把大量人类知识固化进结构与参数里,例如 GOAP 的成本、HTN 的分解方法、行为树的节点组织。这样做的上限往往受限于“可设计的分支空间”,很难覆盖开放世界的复杂性与多样性。

机器学习的价值在于把一部分”分支枚举”交给数据与训练过程,让智能体在可控的约束下形成更丰富的策略空间,从而更接近玩家对复杂世界与多样行为的期待。

游戏中的机器学习框架

把深度神经网络部署为智能体的核心决策模块时,最基础的闭环仍然是“观测→决策→环境反馈”。

  • 观测(Observation):来自游戏环境的可学习输入,既可以是结构化向量特征,也可以是图像与多层地图特征。
  • 行动(Action):神经网络策略输出,驱动智能体在环境中执行操作。
  • 环境(Game Environment):提供状态更新与反馈信号。

图中的核心信息是,神经网络策略与传统的决策模块一样,需要清晰的输入与输出接口,否则无法训练也无法上线运行。

深度强化学习示例 游戏建模

课程用深度强化学习(Deep Reinforcement Learning,DRL)的视角给出一条常见流程:定义状态动作奖励,设计神经网络结构,并制定训练策略。这四步对应的是把”可玩游戏”转写成”可学习系统”的工程拆解。

状态

状态的关键不是“采集得越多越好”,而是把与决策相关的信息组织为可学习的输入。图里给出一种常见拆分方式。

  • 地图(Map):空间信息与多层地图特征
  • 游戏统计(Game statistics):经济、人口、科技等标量统计
  • 单位信息(Units):场上实体的属性与位置
  • 玩家信息(Player data):选择单位、相机与历史操作等交互数据

这种拆分把不同形态的数据分离出来,为后续网络结构选型铺路。

地图特征往往不是一张图,而是一组语义层叠加的特征图,例如高度、可见性、战争迷雾、可通行与可建造区域、警报与事件图层等。对强化学习而言,地图层的工程意义在于把”空间推理”交给网络处理,而不是在策略里手写规则。

单位特征则更接近”实体表”,包含单位类型、所属关系、生命值与状态、位置、属性、生产与资源状态等。与地图不同,单位数量随战局变化而变化,因此需要能处理变长输入的表示方式。

动作

动作空间的定义直接决定了“智能体能做什么”。图中把动作拆成多段问题。

  • 做什么:移动、攻击、建造等动作类型
  • 由谁做:选中的单位或单位集合
  • 对谁做:目标单位或目标点
  • 在何时做:延迟与队列化的动作调度

把动作拆成结构化子字段,是在不牺牲表达能力的前提下控制动作空间规模的常见做法。

奖励

奖励函数是训练信号的来源,也是策略风格的隐式控制器。图中给出两种工程思路。

  • 稀疏奖励:只在胜负等关键事件上给奖励(胜利 +1,失败 -1),工程实现简单,但学习信号稀缺。
  • 密集奖励:把塔、防御、经济、击杀、承伤、地图控制等拆成高频奖励,学习更稳定,但奖励设计与权重平衡的成本更高。

图中还提示了一个常见技巧:用伪奖励(Pseudo Reward)与评估网络协同工作,例如把”当前操作与高水平人类数据的统计距离”纳入训练目标,使策略在早期更快贴近可用行为分布,再逐步让强化学习接管探索。

以 OpenAI Five 为例,奖励信号更密集,且可以通过不同奖励项与权重组合引导不同风格策略,例如更激进或更保守。密集奖励的优势是训练过程更可控,但也引入了”奖励工程”的复杂度。

网络结构 让不同类型输入各就各位

AlphaStar 的网络结构展示了一个核心工程思想:不同形态的数据不适合用同一种网络硬塞,而应当分别编码后再融合,再由解码器把融合后的表征翻译为可执行动作。

多层感知机 MLP

多层感知机(Multi-Layer Perceptron,MLP)适合处理定长的标量向量特征,例如资源量、人口、升级与统计信息。其优势是实现简单,输入输出维度明确。

卷积网络

卷积神经网络(Convolutional Neural Network,CNN)适合处理空间结构明显的输入,例如小地图、可见性图层与多层地图语义。图中以 残差网络(ResNet)说明了常见的空间编码器结构。

Transformer

当输入是变长的实体集合时,Transformer 提供了更自然的表达方式。图中强调了注意力机制与变长向量建模能力,用于编码单位列表等”实体级特征”。

长短期记忆

在策略决策中,短期记忆与历史上下文常常是必要信息,例如战争迷雾导致的部分可观测。图中用长短期记忆(Long Short-Term Memory,LSTM)表示对历史信息的聚合与保留,用于形成更稳定的决策表征。

神经网络架构选择

固定长度向量特征适合用 MLP,变长实体特征可以用 Transformer 或带记忆的结构,空间图像特征适合用 ResNet 等卷积结构。神经网络结构选型并非追求”更复杂”,而是匹配数据形态与计算预算。

训练策略 从模仿到自我进化

AlphaStar 的训练并非直接从零开始。把第一阶段称为监督学习:先从高水平人类对局数据中学习基础策略,并用 KL 散度(Kullback–Leibler Divergence)等统计距离约束策略分布与人类决策分布的偏离,使策略在早期快速收敛到可用行为区域。

在此基础上再使用强化学习对策略进行优化,并把对监督策略分布的约束继续纳入考虑,从而减少强化学习阶段出现”策略漂移导致行为不自然”的风险。图中提到的 TD((\lambda))、V-trace、UPGO 等属于具体强化学习算法族的工程选择。

为了避免陷入局部最优,训练过程还引入了”联赛式”的对抗训练框架:主智能体与不同类型的对手集合交替训练,通过历史版本、针对性对手与联盟对手共同构造更丰富的对抗分布,以持续暴露策略弱点并促使策略迭代。

监督学习与强化学习的取舍

图中从工程角度总结了两类训练方式的典型特点。监督学习依赖高质量数据,行为往往更接近人类,但上限通常受数据分布限制,且存在数据不平衡等问题。强化学习更可能带来性能突破,但训练过程更困难,且数据采集与环境构建成本更高。

对强化学习而言,”奖励稀疏”是核心难点之一。图中用密集奖励与稀疏奖励对比说明了问题适配性:密集奖励的任务更容易学习,而稀疏奖励任务往往需要更复杂的探索机制与更高的训练成本。

混合式落地与成本

深度神经网络很强,但训练与迭代成本也很高。工程实践中更常见的做法是“混合式”架构:在合适的子问题上使用深度网络,在其它环节使用行为树、状态机、HTN、GOAP 等传统模块,以在效果、可控性与成本之间做平衡。

图中给出了一个从微观到宏观的权衡视角,强调把深度网络部署到“最值得学习的决策层级”,同时保留传统模块在可解释性与工程稳定性上的优势。



转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏