《人工智能现代方法(第4版)》 第7章 逻辑智能体 学习笔记

🎯 本章要解决什么?让智能体学会"用证据说话"

想象以下场景:

  • 你妈怀疑你偷玩游戏:"路由器灯在闪!你手机发烫!你眼神躲闪!→ 你肯定在玩!"
  • 中医看病:"舌苔厚、脉象沉、面色黄 → 湿气重"
  • 破案片侦探:"门锁没坏、贵重物没丢、熟人作案 → 凶手是..."

这些都是逻辑推理!本章要教智能体: 当你的"眼睛"(传感器)看不到全部真相时,如何用"脑子"(推理)补全信息,做出正确决策。


一、基于知识的智能体:不做"无脑莽夫"

🧠 核心升级:从"反射弧"到"动脑子"

智能体类型 决策依据 人类比喻 缺点
反射型(第2章) 当前感知直接触发动作 烫手就缩回 被骗:看到刹车灯就刹,但可能是尾灯
基于知识型(本章) 感知 + 已有知识 → 推理 → 动作 看到烟 → 推理有火 → 逃跑 需要"知识库"和"推理引擎"

📦 知识型智能体的两个核心部件

复制代码
class 知识型智能体:
    def __init__(self):
        self.知识库 = []  # 存放"世界规律"
        self.推理引擎 = None  # 大脑的"推理算法"
    
    def 运行(self):
        while True:
            感知 = 获取感知()  # 眼睛看
            告诉知识库(感知)  # "我闻到了怪味"
            动作 = 问知识库("现在该做什么动作?")  # "根据所有线索,我该跑吗?"
            执行(动作)
            睡觉(1)

关键思想:智能体内部有个"小本本"(知识库),记录已知事实和规律,推理引擎就是"翻小本本找答案"的过程。


二、Wumpus世界:推理智能体的"新手训练营"

🌍 游戏规则(简化版扫雷+怪物)

复制代码
4×4网格世界:
- 你:▲(探险家)
- 怪物:W(Wumpus,被它碰到就死)
- 陷阱:P(无底洞,掉进去死)
- 金子:G(找到就赢)

感知:
- 在怪物相邻格 → 闻到臭味(Stench)
- 在陷阱相邻格 → 感觉有风(Breeze)
- 在金子上 → 看到金光(Glitter)
- 撞墙 → 感到撞击(Bump)
- 怪物死时 → 听到惨叫(Scream)

🧩 为什么选这个游戏?

  1. 部分可观测:只能看到当前格和相邻格的提示
  2. 需要推理:"这里有臭味,说明相邻四格中至少一格有怪物"
  3. 有逻辑结构:可以用逻辑公式精确描述规则

🎮 推理过程演示

复制代码
你开局在(1,1),感觉有风 → Breeze₁,₁为真
知识库规则:"如果某格有风,则它的四个邻居至少有一个是陷阱"
问:我该往(1,2)走吗?
推理:
   已知:(1,1)有风
   规则:Breeze₁,₁ → (P₁,₂ ∨ P₂,₁ ∨ P₁,₀ ∨ P₀,₁)  # 但(1,0)和(0,1)不存在
   所以:(1,2)或(2,1)可能有陷阱
   不确定哪个 → 先去安全的(2,1)?
等等!还要结合更多感知...

三、命题逻辑:给"侦探笔记"定格式

📝 为什么要形式化逻辑?

人类自然语言 :"如果下雨且你没带伞,你就会湿" 歧义:"没带伞"包括忘带了、伞坏了、伞被别人用了...

命题逻辑:给每个原子事实一个符号,用逻辑符号连接

复制代码
设:R = 下雨, U = 你有可用伞, W = 你湿了
公式:R ∧ ¬U → W  # 精确无歧义

🧱 命题逻辑三件套

1. 语法(造句规则):什么公式合法?
复制代码
# 原子命题:P, Q, R(大写字母,代表一个基本事实)
# 逻辑连接词:
¬P      # 非P(P不成立)
P ∧ Q   # P且Q(两个都成立)
P ∨ Q   # P或Q(至少一个成立)
P → Q   # 如果P则Q(P成立时Q必须成立)
P ↔ Q   # P当且仅当Q(要么都成立,要么都不成立)

# 例子:Wumpus规则
# "(1,3)有臭味 当且仅当 它的邻居有怪物"
Stench₁,₃ ↔ (Wumpus₁,₂ ∨ Wumpus₂,₃ ∨ Wumpus₁,₄ ∨ Wumpus₀,₃)
2. 语义(含义解释):公式什么时候为真?
复制代码
# 真值表:定义每个连接词的意思
P  Q  |  P∧Q  P∨Q  P→Q  P↔Q
--------------------------------
真 真  |  真   真   真   真
真 假  |  假   真   假   假
假 真  |  假   真   真   假
假 假  |  假   假   真   真

# 注意:P→Q 在P为假时恒为真!
# "如果太阳从西边出来,我就是秦始皇" → 真(因为前提假)
# 这叫"空真"(vacuous truth)
3. 知识库:侦探的笔记本
复制代码
KB = [
    # 感知到的
    ¬Breeze₁,₁,         # (1,1)没风
    Breeze₂,₁,          # (2,1)有风
    ¬Stench₁,₁,         # (1,1)没臭味
    Stench₂,₁,          # (2,1)有臭味
    
    # 世界规则
    Breeze₁,₁ ↔ (P₁,₂ ∨ P₂,₁),   # 风来自邻居陷阱
    Stench₂,₁ ↔ (W₁,₁ ∨ W₂,₂ ∨ W₃,₁),  # 臭味来自邻居怪物
    
    # 常识
    ¬P₁,₁,  # 起点没陷阱
    ¬W₁,₁,  # 起点没怪物
    ...
]

🔍 推理的核心概念

蕴含:知识库"强迫"某个结论
复制代码
KB ⊨ α   # α是KB的逻辑结论
含义:在任何让KB所有公式为真的情况下,α也必须为真
比喻:破案时,所有证据都指向"凶手是A",那么"凶手是A"就是蕴含的结论
有效性与可满足性
复制代码
有效性:公式在所有可能情况下都为真(永真式)
例:P ∨ ¬P  # "要么下雨,要么不下雨",必然真

可满足性:至少存在一种情况让公式为真
例:P ∧ Q   # "下雨且带伞",可能真可能假

矛盾:在任何情况下都为假
例:P ∧ ¬P  # "下雨且没下雨",不可能

四、命题定理证明:侦探的推理方法

⚖️ 推断与证明

复制代码
目标:证明 KB ⊨ α
方法:从KB出发,应用推理规则,一步步推导出α
就像:已知证据链,用法律条文推导出判决

🎯 归结证明法:逻辑"消消乐"

基本思想:否定结论,推出矛盾
复制代码
要证:KB ⊨ α
方法:
1. 假设 ¬α 成立(否定想证的结论)
2. 把 KB 和 ¬α 都化成"子句形式"
3. 不断做"归结"(resolution):找互补文字消掉
4. 如果推出空子句(□),说明假设¬α导致矛盾 → 原结论α成立!
什么是子句?
复制代码
子句 = 多个文字的或(∨)
例:¬P ∨ Q ∨ R  # "P假,或Q真,或R真"
文字 = 原子命题或其否定
归结规则:消消乐玩法
复制代码
规则:如果有两个子句:
    (P ∨ Q)      # 第一个说"P或Q"
    (¬P ∨ R)     # 第二个说"非P或R"
归结得:(Q ∨ R)  # 消掉P,合并剩下部分

逻辑:要么P真(则R真),要么P假(则Q真) → 总之Q或R至少一个真
🌰 归结证明实例(书上图9-10简化)
复制代码
已知:
1. American(West)                # 韦斯特是美国人
2. Weapon(M1)                    # M1是武器
3. Sells(West, M1, Nono)         # 韦斯特卖M1给诺诺
4. Hostile(Nono)                 # 诺诺是敌对的
5. ∀x∀y(American(x)∧Weapon(y)∧Sells(x,y,z)∧Hostile(z)→Criminal(x))
   # "美国人卖武器给敌国的人是罪犯"

要证:Criminal(West)  # 韦斯特是罪犯

归结过程(简化版):
1. 把规则5转化成子句:¬American(x)∨¬Weapon(y)∨¬Sells(x,y,z)∨¬Hostile(z)∨Criminal(x)
2. 假设结论假:¬Criminal(West)
3. 不断归结,最终推出空子句□ → 矛盾!所以原结论成立。

🔗 前向链接与反向链接

前向链接:从已知事实往前推
复制代码
就像"已知线索,推所有可能结论"
已知:A, B, A→C, B∧C→D
推导:
  第1步:由A和A→C得C
  第2步:由B和C得B∧C
  第3步:由B∧C和B∧C→D得D
结果:知道D成立
适用:数据驱动,感知到新事实就触发推导
反向链接:从目标往回找证据
复制代码
就像"为了证明结论,找需要什么前提"
要证:D
查规则:要D成立需要B∧C成立
  要证B:已知B成立 ✓
  要证C:需要A成立(因为A→C)
    要证A:已知A成立 ✓
结果:所有前提都满足 → D成立
适用:目标驱动,回答特定查询时高效
霍恩子句:让推理更高效的特例
复制代码
形式:至多有一个正文字的析取式
例:¬P ∨ ¬Q ∨ R   # 等价于 P∧Q→R
    ¬P ∨ ¬Q        # 等价于 P∧Q→False
    P              # 单个正文字

好处:前向/反向链接在线性时间内完成
现实:很多实际问题都能用霍恩子句表达

五、高效命题模型检验

🔍 当推理不够用时:直接"暴力枚举"

复制代码
有时规则太复杂,推理链太长
干脆:列出所有可能情况(模型),检查哪些情况让KB为真,再看α是否在其中

🧠 三种模型检验算法

1. DPLL算法:聪明的暴力枚举
复制代码
def DPLL(子句集合, 赋值):
    if 所有子句满足: return True
    if 有子句不满足: return False
    
    # 启发式1:纯符号(pure symbol)
    # 如果某个文字在所有子句中都以同一种形式出现
    # 例:P只以¬P出现,没有P → 直接设P=False
    
    # 启发式2:单元子句(unit clause)
    # 如果某子句只剩一个文字未赋值
    # 例:(P∨¬Q)中Q已真,只剩P → 必须设P=True才能满足
    
    # 递归尝试赋值
    选一个未赋值的变量V
    return DPLL(赋值∪{V=True}) or DPLL(赋值∪{V=False})
2. 爬山算法:局部搜索
复制代码
随机给所有变量赋值
while 不满足所有子句:
    选一个不满足的子句
    翻转其中一个变量值,看能否减少不满足子句数
    选最优的翻转
像:调收音机找信号,微调旋钮直到清晰
3. 模拟退火:避免局部最优
复制代码
允许有时"往坏处走"(以一定概率接受更差的解)
随着时间降低接受概率
像:和面时开始大力摔打(允许变差),最后轻柔整理(只接受变好)

六、基于命题逻辑的智能体实现

🔧 用命题逻辑构建Wumpus智能体

1. 跟踪当前状态
复制代码
变量:L₁,₁, L₁,₂, ...  # 每个格子是否有活物
       B₁,₁, B₁,₂, ...  # 每个格子是否有风
       S₁,₁, S₁,₂, ...  # 每个格子是否有臭味
规则:B₁,₁ ↔ (P₁,₂ ∨ P₂,₁)  # 风来自邻居陷阱
2. 逻辑状态估计
复制代码
每走一步,感知新信息
更新知识库
问知识库:P₂,₂?  # (2,2)有陷阱吗?
如果KB ⊨ P₂,₂,则确定有陷阱
如果KB ⊨ ¬P₂,₂,则确定安全
如果都不蕴含,则未知
3. 用命题推断做规划
复制代码
目标:G₃,₃为真(金子位置)
可用动作:Forward, TurnLeft, TurnRight, Shoot, Grab, Climb
规划:
   确保安全:¬P₂,₂ ∧ ¬W₂,₂
   路径可达:L₁,₁ → (Forward → L₂,₁)  # 从(1,1)向前到(2,1)
   最终:在(3,3)执行Grab
4. 混合智能体:逻辑+其他
复制代码
用逻辑推理安全区域
用搜索算法(第3章)在安全区域内找路径
用效用理论(第16章)权衡风险收益

🧠 第7章思维升华

逻辑智能体的核心价值

  1. 弥补感官不足:眼睛看不到怪物,但鼻子闻到臭味+逻辑推理 = 知道怪物在哪
  2. 内部一致性:不会做出矛盾决策(既去东又去西)
  3. 可解释性:决策过程像侦探推理,有迹可循(不像神经网络黑箱)

命题逻辑的局限性

  • 啰嗦:n×n网格需要O(n²)个变量
  • 不能表达"有些":"所有陷阱都有风"容易,"有些陷阱没风"难
  • 不能量化:"至少有一个怪物"需要枚举所有格子

这就是为什么需要第8章"一阶逻辑":可以表达"存在x使得..."、"对所有y...")

从矿工到侦探的转变

  • 第2-4章智能体:凭直觉/搜索行动(像新手矿工)
  • 第7章智能体:记录证据、推理规律、谨慎决策(像福尔摩斯探矿)

最后一句大实话
命题逻辑像"乐高基础块"------能搭任何东西,但搭大城堡需要太多小块。
生活中我们常用模糊推理:"大概率是..."而不是"100%是..."。
但当你需要绝对严谨时(法律合同、程序验证),逻辑就是你的铁甲。

相关推荐
生成论实验室7 小时前
周林东的生成论入门十讲 · 第八讲 生成的世界——物理学与生物学新视角
人工智能·科技·神经网络·信息与通信·几何学
不蒸馒头曾口气7 小时前
申论素材学习笔记-以产业振兴激活乡村全面振兴
笔记·学习
东方不败之鸭梨的测试笔记8 小时前
测试工程师如何利用AI大模型?
人工智能
智能化咨询8 小时前
(68页PPT)埃森哲XX集团用户主数据治理项目汇报方案(附下载方式)
大数据·人工智能
说私域8 小时前
分享经济应用:以“开源链动2+1模式AI智能名片S2B2C商城小程序”为例
人工智能·小程序·开源
工业机器视觉设计和实现8 小时前
我的第三个cudnn程序(cifar10改cifar100)
人工智能·深度学习·机器学习
熊猫钓鱼>_>8 小时前
PyTorch深度学习框架入门浅析
人工智能·pytorch·深度学习·cnn·nlp·动态规划·微分
做一道光8 小时前
电机控制——电流采样(双电阻)
笔记·单片机·嵌入式硬件·电机控制
Altair澳汰尔8 小时前
成功案例丨仿真+AI技术为快消包装行业赋能提速:基于 AI 的轻量化设计节省数十亿美元
人工智能·ai·仿真·cae·消费品·hyperworks·轻量化设计