命题逻辑
(1)基于知识的Agent可以形成复杂世界的表示,使用推理过程导出关于世界的新表示,并使用这些新表示来推断要做什么。
基于知识的Agent(KBA)的核心部件是知识库。知识库是一个语句集合。语句用知识表示语言表达,表示关于世界的断言。直接给定的语句是公理,推导得到的语句是定理。
(2)逻辑是一种表示信息的形式语言,可以得出结论。句法定义句子的形式。
命题是有确切真值的陈述句;不能被分解成更简单的命题称作原子命题;由简单命题通过连接词连接而成的命题,称作复合命题。联结词是两个命题真值之间的联结,而不是命题内容之间的连接,因此复合命题的真值只取决于构成他们的各简单命题的真值,而与它们的内容无关,与二者之间是否有关系无关。
优先顺序为:否定,合取,析取,蕴含,等价。
一个特定的命题是一个常值命题,一个任意的没有赋予具体内容的原子命题是一个命题变量。当复合命题的原子命题是命题变元时,且该函数的值仍为“真”或“假”值,这样的函数称为命题公式,命题公式没有真值,只有对其命题变元进行真值指派后,方可确定命题公式的真值。
(3)M(α):如果语句α在模型m里是true,则m是α的一个模型,M(α)表示所有满足α的模型。
有效的:如果一个语句在所有的模型中都为真,这个句子是有效的。
可满足的:如果一个语句在某些模型中为真,这个句子是可满足的,M(α)不为空。
不满足的:如果一个语句在所有的模型中都不为真,这个句子是不可满足的,M(α)为空。
(4)蕴涵关系Entailment:KB|=α,意为语句KB蕴涵语句α。
公式H是前提集合Γ={G1,G2,···,Gn}的逻辑结果当且仅当(G1∧G2∧…∧ Gn) ÞH为永真公式。
α|=β当且仅当在使α为真的每个模型中,β也为真,若m满足β,则m也满足α。α|=β当且仅当M(α) ⊆ M(β)。
等价关系:对于任意两个公式G和H,G = H的充分必要条件是公式G ↔ H是永真公式。
逻辑等价:如果两语句α和β为真的模型集合相同,即M(α)=M(β),则称它们是逻辑等价的,记为α ≡ β。任意两个语句α 和β是等价的,当且仅当它们是互相蕴涵的,a|=b 且 b|=a。
(5)模型检验推理算法: 枚举KB为真的所有模型,检验在这些模型下α是否都为真。模型检验在有限模型空间是可靠的,完备的。
KB |−iα表示:推理算法i可以从KB推导出α。
Soundness(可靠性): 通过推理算法i从KB推理出的每条语句α,都有KB╞ α,则i是可靠的。
Completeness(完备性): 对于KB蕴涵的每条语句α,推理算法i都能从KB推理出α,则i是完备的。
(6)逻辑等价
基本等价关系:设G, H, S为任意的命题公式。
(7)推理规则
(8)归结推理
文字:包含原子命题及其否定式。
子句:文字的析取式。
空子句是永假的,不可满足的。
子句集当中,只包含析取、否定和原子谓词公式,所以,将谓词公式化成子句集的过程就是要消除其他连接词和量词,并做标准化处理。
归结推理规则:选取两个子句并生成一个新的子句,该新子句包含除了两个互补文字以外的原始子句中的所有文字。li和mj是互补文字。归结规则只应用于析取。结果子句中每个文字只能出现一次。
合取范式(CNF):有限个简单析取式(子句)的合取式。
归结过程:
归结推理算法是可靠的,也是完备的,但是低效的。
(9)HORN子句与限定子句
Horn子句:至多有一个正文字的析取式。Horn子句在归结下是封闭的,如果对两个Horn子句进行归结,结果依然是Horn子句。
限定子句:恰好有一个正文字的析取式。
目标子句:没有正文字的子句。
每个限定子句都可以写成蕴含式,它的前提为正文字的合取式,结论为单个正文字。用Horn子句判定蕴涵需要的时间与知识库大小成线性关系;使用Horn子句的推理可使用前向链接和反向链接。对于Horn子句,前向链接和反向链接是可靠的和完备的。
前向链接是数据驱动的,从知识库中的原子语句出发,在前向推理中应用假言推理规则,增加新的原子语句,直到不能进行任何推理。
后向链接是目标驱动的。算法从查询q开始进行推理。如果查询q已知为真,那么无需进行任何操作。否则,寻找知识库中那些以q为结论的蕴含式。如果其中某个蕴含式的所有前提都能证明为真(通过后向链接),则q为真。与前向链接一样,有效实现的时间复杂度是线性的。
一阶逻辑
命题逻辑假定世界中的事实要么成立要么不成立。一阶逻辑假设世界由对象构成,对象之间的某种关系或者成立或者不成立。一阶逻辑语言结合形式语言和自然语言的优势,围绕对象和关系建立,可以表示关于部分或全部对象的事实。
一阶逻辑的模型包含对象,模型的域是一个非空对象集合。
符号:表示对象的常量符号;表示关系的谓词符号;表示函数的函词符号。
一阶逻辑的模型包含一个非空对象集合以及一个解释。解释将常量符号映射到对象、谓词符号映射到对象之间的关系、函词映射到对象上的函数。
项是指代对象的逻辑表达式,constant symbol, function symbol, or variable。
原子语句是指代对象的项以及指代关系的谓词的组合。
复合语句是由逻辑连接词构造的语句。
量词的对偶性:
数据库语义
◼ 关键字假设:坚持每个常量符号指代一个不同的对象
◼ 论域闭包:每个模型只包括常量符号指代的对象。
◼ 封闭世界假设:假设我们不知道的所有原子语句事实上都为假。
一阶逻辑推理
(1)一阶语句命题化
代换:Subst(θ, α),θ ={x/Michael, y/Bob}
全称量词实例化推理规则(UI规则):用没有变量的项(基项)代换全称量化变量得到的语句。把v替换成g,g是一个constant。
存在量词实例化推理规则(EI规则):存用skolem常量代换存在量化变量得到的语句。k不可以在KB中。
在全称量词辖域内的存在量词:
存在量化语句可以被实例化语句代替。
全称量化语句可以被所有可能的实例化集代替。
KB中包含函词时,基项置换集可能是无限的。命题算法处理无限的语句集合时有困难。但已被证明如果某个语句被原始的一阶知识库蕴涵,则存在一个只涉及命题化知识库的有限子集。
半可判定性:存在算法能够证明被蕴涵的语句,不存在算法否定不被蕴涵的语句。一阶逻辑的蕴涵问题是半可判定的。
(2)一般化的假言推理规则(可靠的)
合一代换UNIFY:
合一代换可能不唯一,但存在唯一的最一般合一置换(MGU):对变量的取值限制更少。
标准化分离:对变量重新命名以避免冲突。
(3)前向链接
通过置换,消去全称量词和存在量词,然后进行前向链接。
一阶限定子句中,假设变量是全称量化的,书写时省略全称量词。
不包含函词,是数据日志类知识库。数据日志是一种受限于没有函词的一阶限定语句的语言。没有函词的推理更容易。数据日志可以表示由关系数据库生成的语句类型。
高效的前向链接:
- 规则前提与已知事实进行匹配:
考虑规则与已知事实的匹配:对于已经建立了适当索引的知识库,这一过程对于每个事实都可以在常数时间内完成。
合取排序问题:对规则前提的合取项进行排序,使总成本最小。
最少剩余值启发式:按启发式,合取排序。
- 避免重复匹配:增量前向链接可以完成逐步完成不完全匹配
增量前向链接:必须使用前一次迭代中得到的事实进行本次迭代的推理得到新的事实,这样可以保留并逐步完成不完整匹配
- 避免产生无关的事实:
利用目标信息重写规则集,从而在前向推理过程中只考虑相关的变量绑定——魔法集。
(4)后向链接
后向链接是一种深度优先搜索算法。一旦合取式中的某个子目标得以成功实现,它的置换要用于后续子目标。可以避免产生无关结论。
(5)归结
一阶逻辑的合取范式,也是子句的合取式,子句是文字的析取式。
合取范式过程:
如果一个命题文字是另一个命题文字的否定式,则这两个命题文字是互补的;如果一个一阶逻辑文字能和另一个一阶逻辑文字的否定式合一,则这两个一阶逻辑文字是互补的。
归结过程:
归结策略:
单元优先:优先使用单文字语句(也称为单元子句)进行归结。要试图产生空子句,那么首先完成能够产生较短子句的推理。
单元归结将归结限制为每次归结都必须包含单元子句。单元归结一般来说是不完备的,如果是Horn子句则是完备的。
最佳优先搜索:用启发式函数度量每个子句的 “权重”,权重小的优先执行。子句的权重应当与它的规模和难度相关联。单元子句权重轻;所以这种方法可以看作是单元优先策略的一般化。
支撑集:坚持归结的每一步都必须涉及至少一个特殊子句集的元素,这个集合被称为支撑集。它首先确定一个称为支撑集的语句子集。归结式放到支撑集中。如果相对于整个知识库而言支撑集很小,搜索空间将会大幅度缩小。
对支撑集的错误选择将会使得算法不完备。如果我们选择的支撑集S使得剩余的语句是同时可满足的,那么支撑集的归结是完备的。假设原始知识库是相容的(所有语句可同时被满足),则可用否定查询作为支撑集,支撑集策略的一个额外优势是能够生成目标制导的证明树,这个证明树通常易于理解。
包容:包容法清除所有被知识库中的已有语句包容的语句。例如,如果P(x)在KB中,则增加P(A)毫无意义,增加P(A)∨Q(B)则更没有意义。包容帮助保持KB的小规模,这样才能帮助保持较小的搜索空间。
经典规划
(1)PDDL(规划域定义语言)
状态:流是基元的(无变量的)、无函数的原子,状态是为流的合取或流的集合。
动作模式:
Action(动作名(模式中用到的所有变量的列表),PRECOND:, EFFECT:)
动作的前提和效果都是文字(原子语句或原子语句的否定)的合取。前提定义了动作能被执行的状态,效果定义了执行这个动作的结果。通过为所有的变量代入值而得到基元动作。
ACTIONS(s):一个动作a能在状态s被执行,当且仅当s蕴涵了a的前提。
如果状态s满足a的前提,a∈ACTIONS(s),即s╞ PRECOND(a),我们称在状态s动作a是适用的。
RESULT(s,a):在状态s执行动作a的结果定义为状态s’。
DEL(a)是动作效果中以负文字出现的流。
ADD(a)是动作效果中以正文字出现的流。
s’=RESULT(s,a) = (s –DEL(a))∪ADD(a)
初始状态是基元原子的合取。对于所有状态,使用封闭世界假设:任何没有提到的原子都是假的。
目标就像前提:是可以含有变量的文字(正文字或负文字)的合取,变量是存在量化的。
目标测试:当能找到一个动作序列,使得在蕴涵了目标的状态s结束,问题就得到了解决。
一组动作模式就定义了一个规划问题域。该阈中的一个特定问题用一个初始状态和一个目标来定。这样,规划就定义为了一个搜索问题,它有初始状态、ACTIONS函数、RESULT函数、目标测试。
(2)前向搜索和后向搜索
前向状态空间搜索:前向搜索从初始状态开始搜索状态空间,寻找一个目标。前向搜索容易探索到无关动作。其次,规划问题经常有大的状态空间,从而需要精确的启发式。目标测试:测试当前状态是否蕴涵目标。
s’=RESULT(s,a) = (s – DEL(a))∪ADD(a)
后向相关状态搜索:从目标开始,向后应用动作,直到找到达到初始状态的步骤序列。只考虑与当前目标状态相关的动作,每一步考虑一组相关状态,而不是单个状态。目标测试:测试初始状态是否蕴涵当前目标状态。
g′ = (g − ADD(a)) ∪ Precond(a)
相关的动作:导致当前目标状态的规划中可以作为最后一个步骤的那些动作。一个动作要与一个目标相关,它必须明显对目标有所贡献:至少,动作的效果(或者为正,或者为负)之一必须与目标的一个元素一致。并且,动作必须不能具有任何否定目标的某个元素的效果(正或负)。
通过总是使用使目标和效果合一的最一般合一元代换到(标准化分离的)动作模式中得到的动作,可以减小分支因子而不会漏掉任何解。
(3)规划中的启发式
忽略所有前提:增加边,松弛前提
忽略所有前提以及目标以外的所有效果:因为一个动作可能抵消另一个动作的效果,然后,统计需要的最小动作数,使这些动作的效果的并集满足目标。
忽略部分前提
忽略删除列表:考虑到一个动作可能抵消另一个动作的效果
忽略一些流:减少状态数的松弛方法
目标分解:将一个目标分成多个部分,独立地解决每个部分,再组合各部分。假设目标是一组流G,将其划分为不相交的子集G1 ,…,Gn。然后我们找到各子目标的解规划P1 ,…,Pn。
最大估计值maxi COST(Pi )是可采纳的,而且有时是精确正确的:P1可能偶然实现所有Gi。但大多数情况下,实际估计值过低。
最好的情况是当我们确定Gi和Gj相互独立的时候:如果Pi的效果不改变Pj的所有前提和目标,那么估计值COST(Pi)+COST(Pj)是可采纳的,而且比最大估计值更准确。
(4)规划图
一个规划图组织成有层次的有向图:首先是初始状态层S0,由在S0成立的每个流结点组成;然后是层次A0,由在S0适用的每个基元动作结点组成;然后是交叠的层次Si,后面紧跟层次Ai;直到达到终止条件。
规划图只能用于命题规划问题——没有变量的规划问题。
在状态层Si和动作层Ai之间交叠,直到出现连两层是一模一样的,此时,就说规划图达到了稳定。
两个动作间的互斥:
1. 不一致效果:一个动作的效果否定另一个动作的效果。
2. 冲突:一个动作的效果否定另一个动作的前提。
3. 竞争需要:一个动作的前提之一与另一个动作的一个前提互斥。
两个文字是互斥的:
1. 如果一个文字是另一个文字的负
2. 或者得到这两个文字的每对可能的动作是互斥的。
(5)利用规划图进行启发式估计
层次代价:从状态s获得任何目标文字gi的代价为在从初始状态s开始构建出的规划图中gi首次出现的层,称为gi的层次代价。
最大层(max-level)启发式简单取任何目标的最大层次代价;这个启发式是可采纳的。
层次和(level sum)启发式返回目标的层次代价之和;这个启发式可能不是可采纳的,但在实际中对于可大规模分解的问题效果很好。
集合层次(set-level)启发式找到合取目标中的所有文字出现在规划图中的层次,这一层没有任何一对目标文字是互斥的。
(6)GRAPHPLAN
GRAPHPLAN算法反复地用EXPAND-GRAPH向规划图增加一层。一旦所有目标在图中出现,没有互斥,GRAPHPLAN就调用EXTRACT-SOLUTION搜索解决问题的规划。
Extract-Solution退出时nogoods里保存 着哪些目标没有实现的标注。
EXTRACT-SOLUTION 定义为一个后向搜索问题:
初始状态是最后一层Sn,以及来自规划问题的目标集合。
在Si层的状态中可用动作要选择Ai-1中的某个无冲突的、效果覆盖Si层目标集合的动作子集。
结果状态的层为Si-1,并将选择的动作集合的前提作为目标集合。“无冲突”是指一组动作任意两个都不是互斥的,它们的任意两个前提也不是互斥的。
目标是达到一个在S0的状态,使所有目标得到满足。
每个动作的代价是1。
如果函数EXTRACT-SOLUTION没能找到解,那么至少有一组目标没有实现并被标注为no-good。如果下一层里no-good的数量可能更少,那么我们应该继续扩展。一旦图和no-good都达到稳定, 而又没有找到解,我们就可以失败而终止。
图和no-good达到稳定后将一直是稳定的:
文字单调递增:一旦一个文字在一个给定的层中出现,它将在所有后继层中出现。
动作单调递增:一旦一个动作在一个给定的层中出现,它将在所有后继层中出现。
互斥单调递减:如果在给定层Ai的两个行动是互斥的,那么它们在所有早先它们共同出现的层中也是互斥的。
No-good单调递减:如果在一个给定层,一组目标是不可获得的,那么它们在任何前面的层也是不可获得的。