Control 版 (精华区)

发信人: dagam (断情), 信区: Control
标  题: [转载]非确定性因素![1]
发信站: 哈工大紫丁香 (2001年07月01日11:51:23 星期天), 站内信件


在本章中,我们要来讨论具有非确定因素的专家系统,这里我们将建造一个能够处理非
确定因素的目标驱动的外壳程序Clam。这里的推理
机构已经不同于纯prolog的模式匹配和回溯,。所以在这个外壳程序中我们也包含了相
应的推理机构。
可信度
为了能够处理非确信因素,我们为每一条规则或者信息引入可信度的概念。在推理过程
中,推理机构自动的处理不同的可信度的组合。
我们还是从一个例子开始吧。在这个例子中可信度(cf)是从-100到100的整数。
这是一个用来诊断汽车为什么不能够发动的专家系统,请注意我们引入的cf。
goal problem.
rule 1
if not turn_over and
battery_bad
then problem is battery.
rule 2
if lights_weak
then battery_bad cf 50. %注意cf为50,就表示是电池损坏的可信度是50。
rule 3
if radio_weak
then battery_bad cf 50.
rule 4
if turn_over and
smell_gas
then problem is flooded cf 80.
rule 5
if turn_over and
gas_gauge is empty
then problem is out_of_gas cf 90.
rule 6
if turn_over and
gas_gauge is low
then problem is out_of_gas cf 30.
ask turn_over
menu (yes no)
prompt 'Does the engine turn over?'.
ask lights_weak
menu (yes no)
prompt 'Are the lights weak?'.
ask radio_weak
menu (yes no)
prompt 'Is the radio weak?'.
ask smell_gas
menu (yes no)
prompt 'Do you smell gas?'.
ask gas_gauge
menu (empty low full)
prompt 'What does the gas gauge say?'.
以上这些就是Clam外壳程序所定义的知识库的格式。这个知识库同样也是目标驱动的。
在这个知识库中允许可信度相加。例如规则5
和6的结论都是“汽车没有气了”,不过是从不同的角度得出的结论,规则2和3则是说“
电池没有电了”,不过也都不是绝对确信的。
使用Clam外壳程序和上面的知识库联接起来以后,就是一个完整的可以处理肥缺性因素
的专家系统了,下面是某次对话的实例:
consult, restart, load, list, trace, how, exit
:consult
Does the engine turn over?
: yes
Do you smell gas?
: yes
What does the gas gauge say?
empty
low
full
: empty
problem-out_of_gas-cf-90
problem-flooded-cf-80
done with problem
注意这个推理机构和prolog有所不同,但系统找到某一个答案以后,并没有停止搜索,
它会找出所有的答案,并且给每个答案给出确信度
,我们可以看出,这个确信度并不是概率值,它只是简单的为每个答案评分。
在用户回答系统的问题的时候同样可以使用确信度。下面是这种对话的例子:
:consult
Does the engine turn over?
: yes
Do you smell gas?
: yes cf 50 %用户的回答使用了确信度
What does the gas gauge say?
empty
low
full
: empty
problem-out_of_gas-cf-90
problem-flooded-cf-40
done with problem
注意在这个例子中用户只有50点的确信度是闻到了汽油的气味。系统考虑用户对答案的
确信度, 从而改变它对结果的确信度。
系统还会对确信度进行联合,在上面的例子之中有两个规则都推导出是电池坏了,如果
这两个规则同时成立,那么是电池坏了的确定度就会提高。
下面是这个例子:
:consult
Does the engine turn over?
: no
Are the lights weak?
: yes
Is the radio weak?
: yes
problem-battery-cf-75
done with problem
在这个例子中,系统联合了两种出现电池损坏情况的确信度50,从而得出最终的确信度
为75。
确信度的性质
确信度有许多使用的方法,在系统的推理过程中确信度的继承传播的途径也有许多钟,
我们可以把它们大致分为以下几类:
有些规则的结论是非确信的
有些规则的前提是非确信的
用户输入的答案是非确信的
联接非确信的前提和非确信的结论
更新工作空间中的非确信的数据成为新的非确信的数据
建立确信度的极限,一旦低于这个极限,某种非确信的前提就不成立了。
在早期的人工智能系统中,MYCIN是比较成功的应用确信度的实用系统之一,这个系统用
来诊断传染病。直到目前为止许多商用专家系统还在使用这种技术。
MYCIN的确信度
设计MYCIN确信度的目的是让我们的专家系统很够得出和真正的专家相符的答案。也就是
说要按照专家那样思考,考虑众多的不确定因素,最后给出的
答案也可能是不确定的。较深确信度理论牵涉到概率论以及对复杂的真是的系统进行统
计研究。
前面我们介绍了两种把确信度加入系统的方法,一种是在规则中加入确信度信息,一种
是用户在输入回答问题的时候加入确信度信息。
在专家系统的工作空间中,除了要保留以前的属性以及其值还要保存确信度CF。
在我们的规则中,规则的前提的确信度是100,就是说如果工作空间中保存这下面两条信
息的话:
turn_over cf 100
smell_gas cf 100
那么根据规则4:
rule 4
if turn_over and
smell_gas
then problem is flooded cf 80
就会把结论problem flooded cf 80加入到系统的工作空间中。
计算前提的确信度
虽然在规则中定义的前提的确信度都是100,但是在真正的问题当中,前提不可能是100
%成立的。这样我们的专家系统就必须能够自动的处理前提的确信度。
这里我们使用最简单的算法。前提的确信度等于前提中所有子目标中最小的确信度的值
。例如,如果工作空间中保存着下面的两个信息:
turn_over cf 80
smell_gas cf 50
那么规则4的前提的确信度就是这两个中间较小的一个:50。
联合前提确信度和规则确信度
前提确信度指的就是已知的前提的可信程度,而规则确信度指的是通过肯定的前提推出
某种结论的可信度。例如前面的规则4推出problem is flooded的确信度是80。
那么当前提的确信度不是100%的时候,得出的结论的确信度应该是多少呢?我们使用下
面的算法来计算:
CF=RuleCF*PremiseCF/100
如果工作空间中存储如下信息,那么根据上面说的确定前提确信度的方法,RremiseCF就
等于50。
turn_over cf 80
smell_gas cf 50
而规则4的确信度RuleCF是80,
那么最终的结论problem is flooded的确信度就是CF=80*50/100=40。
前提确信度的极限
当某个前提的确信度小于一定的数值时,我们就认为该前提不成立,从而也不是用该前
提进行推理。在这里我们所使用的最小的确信度是20。也就是说如果工作空间中储存如
下的信息:
turn_over cf 80
smell_gas cf 15
那么系统是不会使用规则4进行推理的,因为前提确信度小于20。
联合目标确信度
假设系统中有多个规则都得出了同样的结论,每个规则都会得出一个确信度。如何把这
些确信度联合起来得出最终的结论的确信度呢?
在某个规则得到结论以后,系统会搜寻工作空间来察看是否已经存在了这样的结论,如
果存在,就要把这两个确信度进行运算,从而得出新的确信度。运算公式如下:
CF(X, Y) = X + Y(100 - X)/100. X, Y both > 0
CF(X, Y) = X + Y/1 - min(|X|, |Y|). one of X, Y < 0
CF(X, Y) = -CF(-X, -Y). X, Y both < 0
X,Y表示从不同的规则得出的某个结论的确信度,CF(X,Y)就把这两个确信度进行联合。

我们来看一个例子,在前面的诊断汽车启动故障的专家系统中,规则2和3的结论都是ba
ttery_bad。
rule 2
if lights_weak
then battery_bad cf 50.
rule 3
then battery_bad cf 50.
那么如果工作空间中储存如下的信息:
lights_weak cf 100
radio_weak cf 100
两个规则都会得出battery_bad cf 50的结论,利用前面的公式运算,就会得出最终的结
论battery_bad cf 75。
从这个例子中我们不难看出,为什么要自己编写Clam的推理引擎。我们必须找出所有支
持或者反对某个结论的证据,
然后把它们的确信度进行运算,从而得出最终答案的确信度
。而prolog的推理机构只能够一次找到一个答案,并且只有成功或者失败两种结果。(原
文转自“垂钓听竹轩”)

--

--
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: heart.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.409毫秒