情景演算(Situation Calculus)是人工智能领域中一种基于一阶逻辑的形式化框架,用于描述和推理动态世界中的行动及其效果。它通过将世界状态建模为一系列“情景”(situations),并定义行动如何导致情景之间的转换,从而实现对行动序列、效应与知识变化的严格语义表示。该理论最初由约翰·麦卡锡John McCarthy)在1960年代提出,后经雷·赖特(Ray Reiter)等人完善,成为智能规划、机器人控制和认知建模的重要工具之一。

1 定义与背景

1.1 情景演算的基本概念

1.1.1 情景、行动与流

情景演算的核心概念包括“情景”、“行动”和“流”(fluents)。情景(situation)代表了世界在某个时刻的完整状态快照,通常用一个逻辑项表示,如 \(S_0\) 表示初始情景。每个情景是单个历史的全部记录:它包含了从世界开始到该时刻所有已发生行动的累积结果。行动(action)则是能够将世界从一个情景转换到另一个情景的操作,通常用函数或谓词表示,如 \(pickup(x)\) 表示拿起物体 \(x\)。流(fluents)是随时间变化的函数谓词,描述世界属性如何随情景变化,例如 \(holding(x, s)\) 表示在情景 \(s\) 中主体正持有物体 \(x\)。流可以随时间动态取真值(或具体数值),是情景演算中刻画状态变化的基本手段。

1.1.2 行动前后条件与效应公理

行动的效果由前件条件和效应公理共同描述。前件条件(precondition)定义了行动在一个情景下可行的必要条件,例如“只有在主体未持有任何物体时,才能执行拾取动作”。效应公理(effect axioms)则说明行动的直接后果,包括正效应(使某个流变为真)和负效应(使某个流变为假)。例如,拾取物体 \(x\) 的正效应是 \(holding(x, do(pickup(x), s))\) 为真,同时通常会有负效应(如 \(free\_hand(do(pickup(x), s))\) 变为假)。这些公理组合起来,构成了行动导致情景转换的正式语义。

1.2 发展历史

1.2.1 麦卡锡的原始构想(1963)

约翰·麦卡锡于1963年在斯坦福人工智能项目中首次提出了情景演算的雏形。他试图用一种基于一阶逻辑的语言来形式化常识推理中的行动变更问题,特别是解决“框架问题”——如何在行动后用逻辑方式表达哪些属性保持不变。麦卡锡最初引入了“情景”作为时间的替代,并使用函数 \(result(a, s)\) 表示在情景 \(s\) 中执行行动 \(a\) 后得到的新情景。这一构想为逻辑式人工智能奠定了行动推理的基础。

1.2.2 赖特的连续情景演算(1991)

雷·赖特(Ray Reiter)在20世纪80年代末至90年代初对原始情景演算进行了重大改进,提出了“连续情景演算”(successor state axioms)和“回归技巧”(regression)。他引入了后继情景函数 \(do(a, s)\) 替代麦卡锡的 \(result\),并提出了用单一后继状态公理来统一处理正效应、负效应和框架问题的方法。赖特的工作使得情景演算从纯理论走向实用推理,为智能规划系统提供了可计算的基础。

1.2.3 现代扩展与变体

进入21世纪后,情景演算被扩展至处理知识、信念、概率及连续时间等维度。例如,认知情景演算(epistemic situation calculus)加入了有关主体知识的流,支持心智状态推理。概率情景演算(stochastic situation calculus)引入了不确定行动结果和随机性。时态情景演算(temporal situation calculus)则整合了显式时间点与持续行动。这些变体使情景演算能够适应更复杂的现实世界场景。

2 形式化语言与语法

2.1 基本符号与项

2.1.1 情景项与行动项

在情景演算中,情景项(situation term)用于表示世界状态。基础情景项是 \(S_0\),代表初始世界状态。行动项(action term)是由行动函数名及其参数构成的项,如 \(move(r, c)\) 表示机器人 \(r\) 移动到位置 \(c\)。复合情景项由 \(do(a, s)\) 递归构建,例如 \(do(pickup(box), S_0)\) 表示在初始情景中执行了拾取箱子的行动后的情景。所有合法的情景项构成了情景演算的域。

2.1.2 流(fluents)与谓词

流被定义为情景依赖的函数或谓词。原子流通常写作形如 \(F(x_1, ..., x_n, s)\) 的形式,其中 \(s\) 为情景参数。例如,谓词流 \(at(robot, kitchen, s)\) 表示在情景 \(s\) 中机器人是否在厨房。函数流则返回一个值,如 \(position(x, s)\) 返回物体 \(x\) 在情景 \(s\) 中的坐标。情景独立的谓词(如 \(table(obj)\))不包含情景参数,用于描述固定属性。

2.2 行动理论的结构

2.2.1 初始情景 \(S_0\)

初始情景 \(S_0\) 是行动理论的起点,它用一组闭合公式描述世界在开始时的所有相关事实。例如,\(at(robot, home, S_0)\) 和 \(\neg holding(anything, S_0)\) 等。\(S_0\) 中通常不包含任何涉及 \(do\) 的公式,以保证基础情景的纯粹性。行动理论中的所有推理最终都回归到 \(S_0\) 上的真值。

2.2.2 后继情景函数 \(do(a,s)\)

\(do(a, s)\) 是一个二元函数,接受行动项 \(a\) 和情景项 \(s\),返回一个新的情景项。其直观含义是在情景 \(s\) 中执行行动 \(a\) 后所到达的情景。例如,\(do(pickup(box), do(move(robot, table), S_0))\) 表示先在初始情景下移动到桌子旁,再拿起箱子后的情景。\(do\) 是情景演算中唯一构造新情景的操作符,所有行动序列都通过它的嵌套使用来表达。

2.2.3 可能性谓词 \(Poss(a,s)\)

可能性谓词 \(Poss(a, s)\) 用于判断行动 \(a\) 在情景 \(s\) 中是否可行。它是一个二元谓词,其真值由行动前件公理决定。例如,\(Poss(pickup(x), s) \equiv \neg holding\_something(s) \land near(x, s)\)。如果 \(Poss(a, s)\) 为假,则该行动在情景 \(s\) 中不能被执行。\(Poss\) 是行动理论中保证逻辑一致性和物理合理性的关键约束。

2.2.4 状态约束公理

状态约束公理是那些在所有可能情景中都成立的公式,用于描述世界的内在限制。例如,一个机器人不能同时位于两个地点:\(\forall s, l_1, l_2 [ at(robot, l_1, s) \land at(robot, l_2, s) \supset l_1 = l_2 ]\)。这些公理不是行动特定的,而是全局性的不变性条件。它们通常与后继状态公理结合使用,以推导更复杂的推论。

3 核心公理体系

3.1 行动前件公理

行动前件公理定义了每个行动在情景 \(s\) 中可行的充分必要条件。每条公理形如:\(\forall s [ Poss(A(\vec{x}), s) \equiv \Pi(\vec{x}, s) ]\),其中 \(A\) 是行动名,\(\vec{x}\) 是参数,\(\Pi(\vec{x}, s)\) 是一个不包含 \(Poss\) 和 \(do\) 的公式。例如,对于行动 \(drop(x)\),其前件为 \(Poss(drop(x), s) \equiv holding(x, s)\)。前件公理确保行动只在合理情境下才被允许。

3.2 效应公理(正效应与负效应)

效应公理描述了行动执行后哪些流变成真或假。正效应公理形如:\(\forall s [ Poss(a, s) \land Conditions \supset F(\vec{x}, do(a, s)) ]\);负效应公理类似但使用否定。例如,\(Poss(pickup(x), s) \supset holding(x, do(pickup(x), s))\) 是正效应,而 \(Poss(pickup(x), s) \supset \neg freehand(do(pickup(x), s))\) 是负效应。这些公理构成了行动效果的显式声明。

3.3 框架问题与处理策略

3.3.1 经典框架公理

经典框架公理显式声明那些“不因某行动改变”的属性,以解决框架问题。例如,对于行动 \(move(a, l)\),需要声明:\(at(a, l_0, s) \land l_0 \neq l \supset at(a, l_0, do(move(a, l), s))\)。这种方法的缺点是要为每个行动和每个可能不受影响的流编写大量公式,导致公理数量爆炸,且难以维护。

3.3.2 说明性框架公理(解释闭包

解释闭包(explanation closure)基于闭合世界假设:所有可能改变某个流的行动都已列出。例如,对于流 \(holding(x, s)\),其值发生变化的唯一方式是执行 \(pickup\) 或 \(drop\) 相关行动,其他行动不会影响它。据此可推导出框架条件,而不需要逐一对每个行动声明其保持不变性。这种方法减少了公理数量,但要求行动集合是完备的。

3.3.3 基于因果关系的解决方案

赖特提出的后继状态公理(successor state axioms)将正效应、负效应和框架问题统一为一个公式。其一般形式为:\(F(\vec{x}, do(a, s)) \equiv \gamma_F^+(\vec{x}, a, s) \lor (F(\vec{x}, s) \land \neg \gamma_F^-(\vec{x}, a, s))\),其中 \(\gamma_F^+\) 是使 \(F\) 变为真的条件,\(\gamma_F^-\) 是使 \(F\) 变为假的条件。这一公理的结果是:除非被明确地变为真或者假,否则 \(F\) 在行动后保持不变。这种因果式表达既简洁又明了,已成为情景演算的标准。

3.4 唯一名称公理与域闭包公理

唯一名称公理(unique name axioms)声明不同行动项和不同情景项本质上不同。例如,\(A(x, y) \neq B(u, v)\) 对不同的行动符号成立,且 \(S_0 \neq do(a, s)\)。域闭包公理(domain closure axioms)则表述情景项由 \(S_0\) 和 \(do\) 封闭生成,而行动项由有限个行动函数封闭生成。这些公理保证了推理的可判定性和模型结构的可预测性。

4 推理与规划

4.1 情景演算中的查询

4.1.1 投影问题(简单查询)

投影问题(projection problem)询问某个流的公式在给定情景序列后是否为真。例如,在初始情景 \(S_0\) 中执行行动序列 \([push\_button, wait\_5s]\) 后,灯是否亮起?该问题可通过在行动理论中进行一阶逻辑演绎来回答。最简单的情况是直接推理,但对于长序列,公式规模会急剧膨胀。

4.1.2 回归技巧(regression)

回归技巧(regression)是赖特提出的一种高效解决投影问题的算法。其核心思想是将关于后继情景的查询逐步“回退”到初始情景 \(S_0\) 上,利用后继状态公理消去 \(do\) 操作。例如,要检查 \(F(do(a_1, do(a_2, S_0)))\),回归会将其转化为一个关于 \(S_0\) 的等价公式。该技巧可避免在推理过程中对每个中间情景进行全量搜索,极大地提高了计算效率

4.1.3 执行监控(execution monitoring)

执行监控指在实时系统中对行动执行过程进行状态检查。情景演算中的监控依赖于持续更新当前情景标志,并利用 \(Poss\) 和投影来验证行动是否仍可行、预期效应是否达成。例如,机器人检测到意外障碍后,监控系统会查询 \(Poss(move, s_{current})\) 并决定是否需要重新规划。

4.2 规划问题

4.2.1 从演绎到规划

情景演算中的规划问题可视为一种存在量化的演绎:找到一个可行的行动序列,使其执行后满足目标条件。形式化地,规划器需推导 \(\exists s [ Goal(s) \land Legal(s) ]\),其中 \(Legal(s)\) 表示从 \(S_0\) 到 \(s\) 的每一步都满足 \(Poss\)。这通常通过定理证明或搜索算法实现,例如用归结法深度优先搜索构造出具体的 \(do\) 嵌套项。

4.2.2 最佳行动选择与部分可观察性

最佳行动选择引入了成本或奖励函数,将规划转化为马尔可夫决策过程(MDP)的变体。在部分可观察情景演算(POSC)中,主体无法知晓当前的确切情景,只能基于观测结果维护信念状态(一组可能的情景)。推理时,主体根据信念状态计算期望奖励,选择最大化累积奖励的行动。这使情景演算能够处理感知不确定性和不完全信息。

4.3 与一阶逻辑定理证明器的结合

情景演算的查询和规划可直接映射到一阶逻辑定理证明器(如 Prolog、E、Vampire 等)上执行。通常将行动理论中的公理(后继状态公理、前件公理等)翻译为证明器的一阶子句,然后将查询(如投影问题)作为证明目标提交。结合回归技巧,证明器可以在合理时间内处理中等规模的规划问题。Golog 系语言即采用了这种思路,将演算嵌入逻辑编程环境。

5 应用领域

5.1 智能规划与机器人学

5.1.1 经典动作规划

情景演算被广泛应用于经典动作规划(classical planning)中,尤其适用于那些要求严格行动序列和精确迁移语义的离散域。典型例程包括积木世界(blocks world)、物流规划、机械臂操作等。规划器使用情景演算公理来生成一个合法的行动序列,确保每步行动都满足前件条件,且最终达到目标流配置。

5.1.2 服务机器人任务分解

服务机器人(如家务机器人、医疗辅助机器人)的任务分解非常依赖情景演算。一个高层任务(如“泡茶”)会被分解为一系列子行动(取水壶、加热、放茶叶等),每个子行动都用 \(Poss\) 和效应公理精确刻画。机器人可以在执行过程中用情景演算推理当前状态,并适应环境变化(如发现水壶不在原处),重新调整子行动序列。

5.2 自然语言理解

5.2.1 动词语义的形式化

自然语言中的动词语义(如“推开”、“关上”、“扔”)可以用情景演算中的行动和流来表示。例如,“汤姆打开了门”映射为行动 \(open\_door(Tom, door\_1)\) 及其效应:\(opened(door\_1, s)\) 在新情景下为真。这种形式化使计算机能基于一阶逻辑推理句子背后的状态变化,支持文本中的行动链理解。

5.2.2 叙事理解与事件推理

在叙事理解中,情景演算可用于追踪故事中事件的时间顺序和因果链。文本中的多主体行动、时间跳跃和间接效应都可以被编码为情景演算公理。例如,侦探故事中,推理人物在特定情景下的行为、移动物品等,可通过投影查询来确定故事的一致性或发现矛盾。

5.3 认知建模与心智理论

5.3.1 信念、意图与知识流

认知情景演算将流扩展为信念或知识。例如,\(Know(agent, \phi, s)\) 表示主体 \(agent\) 在情景 \(s\) 中知道 \(\phi\) 为真。意图和愿望也可以用类似形式表征。这种框架支持模拟主体如何通过感知行动更新自己的知识库,以及如何基于不完全知识做出决策,有助于研究心智理论中“他人如何思考”的推理。

5.3.2 主体间交互的推理

多主体交互中,情景演算能模拟不同主体之间知识状态的差异。例如,在“共享计划”场景中,一个主体通过观察其他主体的行动推测其意图,并相应调整自身的行动序列。情景演算中的流可以同时表示多个主体的信念和共同信念(common knowledge),从而为合作、欺骗等高级交互行为提供形式化基础。

6 变体与扩展

6.1 无基础情景演算(Foundational Axioms变体)

部分变体放弃了类似 \(S_0\) 的固定基础情景,转而使用一组基础公理(foundational axioms)来定义情景间的结构关系,强调演绎封闭性而非具体初始状态。这种变体适用于理论研究,例如探讨情景演算本身的可定义性和完备性,但缺乏实际规划所需的明确起点。

6.2 事件演算(Event Calculus)的对比

事件演算(Event Calculus,EC)由罗伯特·科瓦尔斯基(Robert Kowalski)和马尔巴尼(Marek Sergot)提出,与情景演算类似但设计哲学不同。EC 使用时间点而非情景,并将行动视为发生在时间点上的事件;它采用“发生谓词”(happens)和“保持谓词”(holdsAt)来推理状态。情景演算更适合离散行动序列的推理,而事件演算(尤其在时间延续和事件推理方面)在处理持续过程和延迟效应时更灵活。

6.3 带概率与不确定性的情景演算

概率情景演算(Stochastic Situation Calculus)将 \(do\) 的结果扩展到一组可能的结局,每个结局附带概率分布。例如,\(do(toss\_coin, s)\) 可能导致 \(heads(s')\) 或 \(tails(s')\) 两种情景,各以 0.5 概率出现。不确定性通过“可能情景集”表示,并可采用贝叶斯更新。这使框架能建模随机环境,如机器人抓取中可能出现的滑落故障。

6.4 时态情景演算与连续时间

时态情景演算引入显式时间参数(如实数时间戳),将情景概念泛化为连续时间线上的时间间隔片断。行动既可以瞬时发生,也可以占用时间区间。例如,\(do(move\_to(l), t_1, t_2, s)\) 表示从时间 \(t_1\) 到 \(t_2\) 执行移动动作。效应公理需考虑行动的耗时和同时性约束,可用于仿真连续控制问题(如无人驾驶汽车路径跟踪)。

7 限制与争议

7.1 框架问题的计算复杂性

尽管后继状态公理优雅地解决了框架问题的逻辑表示,但实际推理中,随着行动数量和流数量的增长,投影和规划的复杂度呈指数级或超指数级增长。这是逻辑函数不能回避的计算问题。虽然回归技巧缓解了部分困难,但对大型域(例如,成百上千个流和行动)而言,穷举推理依然不现实,往往需要借助启发式搜索或符号规划器。

7.2 对间接效应与并发行动的表达能力

情景演算天然假设行动顺序执行,但真实世界中多个行动可能同时发生,且一个行动可能引发连锁间接效应(ramification)。例如,开门可能触发铃声,进而导致狗吠。虽然框架可通过添加额外流和效应公理来建模间接效应,但并发行动的代表性语法(如让两个 \(do\) 并行)尚未标准化,导致推理复杂且容易产生语义歧义。

7.3 与强化学习等数据驱动方法的衔接困境

情景演算为符号逻辑方法,而强化学习(RL)等数据驱动方法基于统计和连续值。两者的本体论和表示方式差异巨大:情景演算要求显式公理和离散状态,RL 却依赖从经验学习策略。尝试结合两者的工作(如符号-神经结合系统)尚处于早期阶段,面临符号离散性导致的梯度损失、状态抽象困难等问题,难以在端到端学习中取得显著进展。

8 软件工具与实现

8.1 基于Prolog的实现(如Cascaded)

Prolog 是最常用的情景演算实现语言之一,因为其内置合一、回溯和一阶逻辑推理能力。Cascaded 系统是一个典型的例子,它将情景演算公理编码为 Prolog 事实和规则,支持简单的投影和规划查询。用户只需定义行动前件、后继状态公理和初始情景,Prolog 的定理证明器即可回答查询。

8.2 Golog系列语言

Golog(Algol in Logic)系列语言是情景演算最具代表性的高层编程语言。Golog 允许用户用情景演算公理定义域,然后用一种类似于过程性编程(但基于逻辑)的语法编写高层程序。这些程序包含条件选择、循环、并发等控制结构,底层由情景演算推理引擎解释执行。变体包括 IndiGolog(增量执行)、Readylog(实时并行)和 DTGolog(决策理论)。Golog 被用于机器人控制、游戏AI和交互式叙事等领域。

8.3 现代符号规划器中的情景演算模块

主流符号规划器(如 Fast Downward、Metric-FF 等)虽然主要基于 PDDL 语言,但部分系统集成了情景演算模块以实现更精细的效应推理或与知识表示系统的交互。例如,基于情景演算的规划器会先对域进行一阶逻辑归一化,再由 PDDL-to-SC 翻译器生成公理,之后搜索时使用回归技巧加速节点评估。这种混合方式结合了情景演算的形式化严谨性和 PDDL 规划器的高效启发式搜索。