Logic -- Propositional Logic and Planning
之前的智能体(如搜索智能体)虽然能解决问题,但它们的“知识”是隐式的, 内嵌在状态表示、行动函数和启发式函数中。而从这一讲开始,我们将探索如何让智能体拥有显式的、声明式的知识,并利用这些知识进行推理 ## 基于知识的智能体 (Knowledge-Based Agent)
它的核心组件是一个知识库 (Knowledge Base - KB),这是一个由形式化语言写成的语句 (sentences) 的集合。
整个智能体的工作模式为:
告知 (TELL):将新的知识(来自感知、学习或直接告知)以语句的形式添加到知识库中。
询问 (ASK):通过一个通用的推理引擎 (Inference Engine) 向知识库提问,推导出新的结论来指导行动。
这是一种声明式 (Declarative) 的方法。我们只需要描述“世界是怎样的”,而不需要编写具体的“如何做”的代码。一个通用的推理算法可以解决所有可回答的问题,这极大地提高了智能体的灵活性和可扩展性。
逻辑的基本概念
为了让智能体能够“知道”事情,我们需要一种精确的语言。逻辑就是这样一种语言,它由两个基本部分组成:
语法 (Syntax): 语法是一套规则,它规定了什么样的符号组合是合法的语句。
- 就像英语语法规定了 “x > y” 是合法的,而 “x > y =” 不是。语法只关心句子的形式,不关心其含义。
语义 (Semantics): 语义定义了语句的含义。它通过将语句与“可能的世界” (Possible Worlds) 或“模型” (Models) 联系起来,来确定一个语句的真假。
可能的世界/模型:一个模型代表了世界的一种具体状态。在命题逻辑中,一个模型就是对所有命题符号的一个真值指派(例如,{P=真, Q=假})。
真值 (Truth):语义的核心是定义一个语句在哪个模型中为真,在哪个模型中为假。
命题逻辑 (Propositional Logic)
这是我们学习的第一个形式化逻辑语言。
语法:由命题符号 (X₁, X₂…) 和五个逻辑连接词 (¬, ∧, ∨, =>, ⇔) 构成。
需要额外注意的是 =>(蕴含, implication):“如果A,那么B”。这是最容易混淆的一个。它只有在一种情况下为假:当 A 为真而 B 为假时。
语义:通过真值表来定义。一个模型就是对所有命题符号的一个真/假赋值。
推理 (Inference)
推理是一个计算过程,它通过应用推理规则从已有的语句中推导出新的语句。其有两种主要方法:
模型检验 (Model Checking):通过枚举所有可能的模型来检查蕴含关系是否成立。对于命题逻辑是可行的,因为模型数量有限。
定理证明 (Theorem Proving):应用推理规则(如三段论)来构建一个从前提到结论的证明 (proof) 链条。
而蕴含 (Entailment)是逻辑推理的核心目标。它的意思是:在所有使得 α 为真的模型中,β 也必然为真。
定义:α |= β (读作 “alpha entails beta”)
与蕴含 (=>) 的区别 :
α => β 是一个逻辑语句,它本身可以在某个模型中为真或为假。
α |= β 是一个关于两个语句之间关系的断言,它要么成立,要么不成立。