基于知识的Agent
由知识库和推理机制组成.
两大操作:TELL(告诉), ASK(询问). 都可能涉及推理, 即从原有语句推导出新语句.
Wumpus世界
逻辑
语法给出了合法语句的规范, "x+y=4"合法, "x4y+="不合法.
语义定义了每个语句在每个可能世界的真值, "x+y=4"在x=2, y=2的世界里为真.
模型是可能世界的数学抽象. 语句α在模型m里为真, 称m满足α, m为α的一个模型. M(α)表示满足α的所有模型.
蕴含关系: α|=β, 当且仅当M(α)⊆M(β). (α是比β更强的断言, 因为排除了更多可能性)
命题逻辑: 一种简单逻辑
原子语句由单个命题词组成.
复合句由简单语句用括号和逻辑连接词构造而成.
文字指的是原子语句或其否定式
知识库的简单表示
可以用Ri表示语句, eg:R1: ¬P1,1, 知识库则可以表示为:R1∧R2…∧Rn.
通过枚举检测是否可以从KB得出α(看α是否在每个KB为真的模型里为真). 指数级的复杂度.
命题逻辑定理证明
搜索证明可以忽略与目标结论无关的命题, 减少时间开销.
单调性: 如果KB |= α, 那么KB∧β |= α. 即只要在KB里发现了合适的前提, 那么得到的结论与其余KB里的内容无关.
归结规则: 化简子句(即文字的析取式), 即在两个子句的合取里, 将互补的文字删去.
其中li, mj为互补文字.
归并: 由于子句里每个文字只能出现一次, 所以需要去除文字的多余副本.
合取范式: 以子句的合取式表达的语句.
限定子句: 只含一个正文字的析取式.
目标子句: 没有正文字的析取式.
Horn子句: 至多一个正文字的析取式.
前向和反向链接
前向链接
Agenda记录了已知为真但未被处理的符号, 从Agenda中弹出一个符号, 若它没有被处理过: 标记为已处理, 把以它为前提的蕴含式的计数减1, 减到0的话就把结论加入Agenda; 若已处理, 就只是弹出, 不作其他处理(避免冗余和死循环).
反向链接
从查询开始推理, 找那些以q为结论的蕴含式. 若其中某个蕴含式的前提证明为真(通过反向链接), 则q真.
有效的命题逻辑模型检验
找出可满足的模型
DPLL算法
及早终止
纯符号启发式
单元子句启发式
一些技巧
成分分析: 类似于CSP中寻找连通子图, 可通过赋值让子句集互不相交.
变量和值排序: 度启发式, 选择出现最频繁的变量进行赋值.
智能回溯: 记录冲突集, 直接回到导致冲突的结点.
随机重新开始: 陷入困境时就从搜索树顶端重新开始, 并随机做出不同的选择. 上一轮保留的子句可以用来剪枝.
局部搜索算法
每次翻转一个符号的值, 该符合一定几率随机选出, 一定几率根据最少未满足子句的启发式选出.
基于命题逻辑的Agent
世界的当前状态
流, 表示世界的变化, 相当于状态变量.
用效应公理来规范下一时间步行动的结果 eg:
增加画面问题, 因为效应公理未能陈述行动的后果未改变哪些状态 eg:
对于每个流F, 计算Ft+1: Ft+1为真, 要么是t时刻的行动使F在t+1时刻为真, 要么Ft为真且t时刻的行动未能使它变假.
后继状态公理:
混合Agent
逻辑状态评估
随着时间流逝, ASK的计算代价越来越大, 因为推理需要不断的回退, 涉及的符号也越来越多. 所以可以将感知的历史和所有结果用信念状态表示, 维护与更新信念状态的过程叫做状态评估, 每一更新步骤要求使用根据后继状态公理构建的转移模型.
若用所有符号的合取来表示, 仍需要log2(22^n) = 2n位来表示.
一种简化: 即1-CNF公式, 将信念状态表示成文字的合取, 但可能会丢失一些信息.
通过命题推理制订计划
步骤上限t ≤ Tmax.