prolog语言的运行逻辑说明
主要对于郑旭老师上课提到的重难点以及考试的重点做学习回顾
仍以所示的贝叶斯网络为例,假设目前观察到的一个事件s = { c, e },求在该事件的前提下碰见难题的概率P( D | c, e )是多少?
按照精确推理算法,该询问可表示为:
其中,α是归一化常数,D取d和﹁d,应用贝叶斯网络的概率分布公式:
P ( x 1 , x 2 , . . . , x n ) = Π n ( P ( x i ∣ p a r ( X i ) ) ) P(x1,x2,...,xn) = Pi^n(P(x_i|par(X_i))) P(x1,x2,...,xn)=Πn(P(xi∣par(Xi)))
当D取值d时,有
=α×0.15×[0.05×(0.8×0.9×0.9 + 0.2×0.1×0.1)+
0.95×(0.4×0.9×0.9 + 0.6×0.1×0.1)]
=α×0.15×[0.05×0.65+0.95×0.33] =α×0.15×0.346
=α×0.0519
当有多条知识支持同一个结论,且这些知识的前提相互独立,结论的可信度又不相同时,可利用不确定性的合成算法求出结论的综合可信度。
设有知识:
IF E1 THEN H (CF(H, E1))
IF E2 THEN H (CF(H, E2))
则结论H 的综合可信度可分以下两步计算:
(1) 分别对每条知识求出其CF(H)。即
CF1(H)=CF(H, E1) ×max{0, CF(E1)}
CF2(H)=CF(H, E2) ×max{0, CF(E2)}
(2) 用如下公式求E1与E2对H的综合可信度
例题1.
设有如下一组知识:
r1:IF E1 THEN H (0.9)
r2:IF E2 THEN H (0.6)
r3:IF E3 THEN H (-0.5)
r4:IF E4 AND ( E5 OR E6) THEN E1 (0.8)
已知:CF(E2)=0.8,CF(E3)=0.6,CF(E4)=0.5,CF(E5)=0.6, CF(E6)=0.8
求:CF(H)=?
解:由r4得到:
CF(E1)=0.8×max{0, CF(E4 AND (E5 OR E6))}
= 0.8×max{0, min{CF(E4), CF(E5 OR E6)}}
=0.8×max{0, min{CF(E4), max{CF(E5), CF(E6)}}}
=0.8×max{0, min{CF(E4), max{0.6, 0.8}}}
=0.8×max{0, min{0.5, 0.8}}
=0.8×max{0, 0.5} = 0.4
由r1得到:CF1(H)=CF(H, E1)×max{0, CF(E1)}
=0.9×max{0, 0.4} = 0.36
由r2得到:CF2(H)=CF(H, E2)×max{0, CF(E2)}
=0.6×max{0, 0.8} = 0.48
由r3得到:CF3(H)=CF(H, E3)×max{0, CF(E3)}
=-0.5×max{0, 0.6} = -0.3
根据结论不精确性的合成算法,CF1(H)和CF2(H)同号,有:
CF_1,2(H)和CF3(H)异号,有:
即综合可信度为CF(H)=0.53
这里我还是放几个供大家做理解哈,基本能够代表考试的一般难度
combine1([],[],[]).
combine1([H31|T1],[H32|T2],[H31,H32|T3]):- combine1(T1,T2,T3).
combine2([],[],[]).
combine2([H31|T1],[H32|T2],[[H31,H32]|T3]):- combine2(T1,T2,T3).
combine3([],[],[]).
combine3([H31|T1],[H32|T2],[join(H31,H32)|T3]):- combine3(T1,T2,T3).
addone([],[]).
addone([H1|T1], [H2|T2]) :-is(H2,+(H1,1)),addone(T1,T2).
这个题基本上考试是不会考的。。。太难了👇
frequencies([],[]).
frequencies([H|Y],L) :-frequencies(Y,L1),check(H,L1,L).check(H,[],[[H,1]]).
check(H,[[Y,K]|L],[[Y,K1]|L]):- H = Y, K1 is K +1.
check(H,[[Y,K]|L],[[Y,K]|M]) :-H == Y,check(H,L,M).
check(H,[[H,K]],[[H,K1]]):- K1 is K +1.
check(H,[[Y,K]],[[Y,K]|[H,1]]) :-H == Y.
主要思想:跟着prolog的语句逻辑,先向下进行分析,对于每一次提出的数据,将其加入栈内,直到满足所给的终止条件,开始倒着进行——从语句右边到左边,同时将数据栈中的元素加入进来,最终得到推理结果。
qsort([],[]).qsort([H|T],S) :-
qsplit(H,T,A,B),
qsort(A,A1),
qsort(B,B1),append(A1,[H|B1],S).# 补充
qsplit(H,[A|X],[A|Y],Z) :- A =< H, qsplit(H,X,Y,Z).
qsplit(H,[A|X],Y,[A|Z]) :- A > H, qsplit(H,X,Y,Z).
qsplit(_,[],[],[]).
我们以以上代码为例,假设对qsort([3,2,1],X)做递归分析,如下:
qsort([H|T],S) :- ------------------------------------Ⅰ
qsplit(H,T,A,B),
qsort(A,A1),
qsort(B,B1),append(A1,[H|B1],S).qsplit(H,[A|X],[A|Y],Z) :- A =< H, qsplit(H,X,Y,Z). ----------Ⅱ(①)
qsplit(H,[A|X],Y,[A|Z]) :- A > H, qsplit(H,X,Y,Z).------------Ⅱ(②)
ps:这里类似于一个选择语句,Ⅱ中只会有①或②执行
qsort([],[]). ------------------------------------------------- (a)
qsplit(_,[],[],[]).-------------------------------------------- (b)
在蕴含关系中,有两条指向蕴含节点的弧,一条代表前提条件,标记为ANTE;另一条代表结论,标记为CONSE。
该蕴含关系的语义网络如下图。其中,在前提条件中,机器人竞赛的组织者是学校,参赛对象是学生操纵的机器人,而机器人只不过是一种智能机器。
本文发布于:2024-01-30 17:17:54,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170660627621603.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |