人智导(二十):知识表示与自动推理(Ⅲ)
前向链与后向链推理策略
总述
到目前为止
- 我们已经有了知识表示的语言
- 我们也已有了合适的推理规则(泛化的假言推理)使用知识
现在考虑如何构建一个推理程序 - 泛化的假言推理能通过两个方式得以实现
- 前向链推理方式(forward chaining)
- 后向链推理方式(backward chaining)
前向链推理
- 始于知识库(KB)中的句子,依次通过推理规则产生新的结论
- 过程被触发通过不断地增加新观察到的事实p到知识库KB
- 前向链推理可被设计在TELL这个部分中:
- 发现所用前件包含p的蕴含式(公理)
- 如果蕴含式其它前件也都与某些事实匹配,增加变量置换后的蕴含式后件(新的结论)到知识库KB中
- 由于产生了新的句子,继续触发在知识库中的进一步推理
前向链推理算法
The Forward-Chaining Inference Algorithm
Procedure FORWARD-CHAINING(KB, p)
if there is a sentence in KB that is a renaming of p then return;
add p to KB;
for each (1) in KB such that some i,
(2) succeeds do
FIND-AND-INFER(3)
end
(1): ( p 1 ∧ p 2 ∧ ⋯ ∧ p n → q ) (p_1\wedge p_2\wedge\dots \wedge p_n\to q) (p1∧p2∧⋯∧pn→q)
(2): U N I F Y ( p i , p ) = θ UNIFY(p_i, p)=\theta UNIFY(pi,p)=θ
(3): ( K B , [ p 1 , … , p i − 1 , p i + 1 , … , p n ] , q , θ ) (KB, [p_1, \dots ,p_{i-1}, p_{i+1}, \dots ,p_n], q, \theta) (KB,[p1,…,pi−1,pi+1,…,pn],q,θ)
变量可以换名表示:例如,likes(x, IceCream)和likes(y, IceCream)可以变量换名使得二者一致
Find and Inference子过程
Procedure FIND-AND-INFER(KB, premises, conclusion, (1))
if premises = [] then
FORWARD-CHAIN(KB, SUBST((1), conclusion))
else for each p' in KB such that
UNIFY(p', SUBST((1), FIRST(premises))) = (2) do
FIND-AND-INFER(KB, REST(premises), conclusion, COMPOSE((1), (2)))
end
(1): θ \theta θ
(2): θ 2 \theta_2 θ2
C O M P O S E ( θ 1 , θ 2 ) COMPOSE(\theta_1, \theta_2) COMPOSE(θ