在合作型游戏或复杂交互系统中,赋予 AI 智能体“心理理论”(Theory of Mind)能力是提升交互体验的关键。这种能力使 AI 能够通过观察玩家的低级操作(Action),逆向推断其高级意图(Goal)。本文将深入解析在 Unity 引擎中实现的一套逆向规划(Inverse Planning)系统,探讨其如何通过数学建模与启发式搜索实现高效的玩家行动预测。


系统逻辑架构综述

该系统的核心任务是解决一个典型的逆向概率问题:给定当前世界状态 $s$ 和观察到的动作 $a$,推断玩家正在执行特定顶层目标 $\sigma$(如某个特定菜谱)的概率。

系统架构由 GoalLikelihoodEvaluator(似然评估器)作为计算核心,并依赖 RecipeManager(食谱管理器)提供静态的配方依赖关系与动态的游戏状态权威。整个推断流程可以概括为:从原始动作观测开始,经过环境约束过滤、理性代价估算、概率分布转换,最终通过贝叶斯框架完成似然聚合。


1. 约束识别:目标检索与依赖剪枝

推断的第一步是确定在当前环境下,哪些子目标(Subgoals)在逻辑上是可行的。系统不会盲目评估所有潜在任务,而是通过 RecipeManager 查询候选目标 $\sigma$ 的动态依赖图。

通过 GetUnconstrainedGoals 接口,系统会递归检查配方树的执行进度。例如,若“番茄汤”目标要求“切碎的番茄”和“烧开的水”,而环境状态显示水已烧开,则系统会将搜索空间剪枝,仅保留“切碎番茄”作为当前的原始目标(Primitive Goal)。这种基于先验逻辑的过滤极大地降低了后续代价计算的维度。


2. 估值建模:理性决策假设与启发式代价

系统的预测能力建立在**理性假设(Rationality Assumption)**之上:即假设玩家倾向于以最小的代价完成任务。为此,系统需要为每个有效的子目标 $g$ 计算启发式代价 $Q$。

$Q$ 值的计算由两部分组成。首先是空间成本,即智能体位置与所需食材之间的欧几里得距离;其次是状态转换成本,系统会扫描场景快照(WorldStateSnapshot)以寻找最近的交互设备(如砧板或锅具),并将设备距离与操作耗时(如切菜所需的固定时长)累加。若关键道具在当前快照中缺失,系统将施加极大的惩罚项,从而在数学上抑制该目标产生的似然度。


3. 概率转换:玻尔兹曼分布下的噪声处理

原始的代价 $Q$ 值不能直接用于概率推断,因为现实中的玩家行为往往包含噪声或次优决策。系统采用玻尔兹曼分布(Boltzmann Distribution)将代价映射为概率空间:

$$P(g | s, \sigma) = \frac{e^{-\beta \cdot Q(s, g)}}{\sum_{g’ \in UC} e^{-\beta \cdot Q(s, g’)}}$$

在该公式中,$Q(s, g)$ 代表启发式代价,而参数 $\beta$(理性系数)决定了系统对“非理性”行为的容忍度。高 $\beta$ 值意味着系统假设玩家高度专业,细微的代价差异也会导致概率分布的剧烈偏向;低 $\beta$ 值则使系统表现得更加稳健,能够处理操作失误或不确定性带来的干扰。


4. 动作匹配:上下文关联验证

在确定了各子目标的先验概率 $P(g | s, \sigma)$ 后,系统需要验证观察到的实际动作 $a$ 与子目标 $g$ 的匹配程度。这一步通过 IsActionRelevantToGoal 逻辑实现。

系统会同时进行模式匹配(Schema Match)和关键字提取(Keyword Matching)。例如,若观测到的动作是“切”,参数是“番茄”,而子目标定义中包含“切”的动作 ID 与“番茄”的关键字,系统则赋予该匹配高度的条件概率(如 0.9)。反之,若动作完全不相关,则赋予一个极小的 epsilon 值作为噪声基数。


5. 核心计算:全概率公式与似然聚合

最终,系统利用全概率公式,将所有合法的原始目标贡献度进行加权求和,得出该动作相对于特定顶层配方 $\sigma$ 的总似然度:

$$P(a | s, \sigma) = \sum_{g \in Unconstrained} P(a | s, g) \times P(g | s, \sigma)$$

这种方法的优势在于它能处理“一石二鸟”的模糊情况。如果一个动作(如拿起番茄)同时符合多个配方的理性路径,系统会根据各配方的进度分布概率,通过贝叶斯更新(Bayesian Update)不断修正智能体对玩家意图的置信度分布。


数据流总结

下图展示了从观测输入到信念更新的完整数据流向:

数据流

通过这一套流程,AI 能够实时感知环境变化,并在毫秒级时间内对玩家意图做出概率解释。这种基于物理代价与逻辑依赖的推断框架,不仅适用于厨房模拟类游戏,也可广泛应用于任何涉及物体操作与序列任务的复杂 Unity 交互场景。