Prolog开发专家系-非确定因素.doc

上传人:re****.1 文档编号:558365085 上传时间:2022-11-07 格式:DOC 页数:16 大小:52.50KB
返回 下载 相关 举报
Prolog开发专家系-非确定因素.doc_第1页
第1页 / 共16页
Prolog开发专家系-非确定因素.doc_第2页
第2页 / 共16页
Prolog开发专家系-非确定因素.doc_第3页
第3页 / 共16页
Prolog开发专家系-非确定因素.doc_第4页
第4页 / 共16页
Prolog开发专家系-非确定因素.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《Prolog开发专家系-非确定因素.doc》由会员分享,可在线阅读,更多相关《Prolog开发专家系-非确定因素.doc(16页珍藏版)》请在金锄头文库上搜索。

1、Prolog开发专家系统-非确定因素讨论用Prolog开发具有非确定因素的专家系统,将建造一个能够处理非确定因素的目标驱动的外壳程序Clam。上一章我们详细的叙述了如何时候目标驱动法来编制专家系统。这种目标驱动法可以很好的解决像识别鸟类那样具有明显结构层次的问题。 在前面这个系统中用户对问题的的答案都是百分之百的肯定或者否定的。也就是说都具有确切的答案。不过解决许多实际问题的时候,专家通常都考虑许多不确定的因素,而用户在回答问题的时候,也不会都是百分之百的肯定。例如在鸟类识别系统中,有些鸟的颜色就很难确定。在本章中,我们要来讨论具有非确定因素的专家系统,这里我们将建造一个能够处理非确定因素的目

2、标驱动的外壳程序Clam。这里的推理机构已经不同于纯prolog的模式匹配和回溯,。所以在这个外壳程序中我们也包含了相应的推理机构。可信度为了能够处理非确信因素,我们为每一条规则或者信息引入可信度的概念。在推理过程中,推理机构自动的处理不同的可信度的组合。我们还是从一个例子开始吧。在这个例子中可信度(cf)是从-100到100的整数。这是一个用来诊断汽车为什么不能够发动的专家系统,请注意我们引入的cf。goal problem.rule 1if not turn_over andbattery_badthen problem is battery.rule 2if lights_weakthe

3、n battery_bad cf 50. %注意cf为50,就表示是电池损坏的可信度是50。rule 3if radio_weakthen battery_bad cf 50.rule 4if turn_over andsmell_gasthen problem is flooded cf 80.rule 5if turn_over andgas_gauge is emptythen problem is out_of_gas cf 90.rule 6if turn_over andgas_gauge is lowthen problem is out_of_gas cf 30.ask tur

4、n_overmenu (yes no)prompt Does the engine turn over?.ask lights_weakmenu (yes no)prompt Are the lights weak?.ask radio_weakmenu (yes no)prompt Is the radio weak?.ask smell_gasmenu (yes no)prompt Do you smell gas?.ask gas_gaugemenu (empty low full)prompt What does the gas gauge say?.以上这些就是Clam外壳程序所定义

5、的知识库的格式。这个知识库同样也是目标驱动的。在这个知识库中允许可信度相加。例如规则5和6的结论都是“汽车没有气了”,不过是从不同的角度得出的结论,规则2和3则是说“电池没有电了”,不过也都不是绝对确信的。使用Clam外壳程序和上面的知识库联接起来以后,就是一个完整的可以处理肥缺性因素的专家系统了,下面是某次对话的实例:consult, restart, load, list, trace, how, exit:consultDoes the engine turn over?: yesDo you smell gas?: yesWhat does the gas gauge say?empt

6、ylowfull: emptyproblem-out_of_gas-cf-90problem-flooded-cf-80done with problem 注意这个推理机构和prolog有所不同,但系统找到某一个答案以后,并没有停止搜索,它会找出所有的答案,并且给每个答案给出确信度,我们可以看出,这个确信度并不是概率值,它只是简单的为每个答案评分。在用户回答系统的问题的时候同样可以使用确信度。下面是这种对话的例子::consultDoes the engine turn over?: yesDo you smell gas?: yes cf 50 %用户的回答使用了确信度What does t

7、he gas gauge say?emptylowfull: emptyproblem-out_of_gas-cf-90problem-flooded-cf-40done with problem注意在这个例子中用户只有50点的确信度是闻到了汽油的气味。系统考虑用户对答案的确信度, 从而改变它对结果的确信度。 系统还会对确信度进行联合,在上面的例子之中有两个规则都推导出是电池坏了,如果这两个规则同时成立,那么是电池坏了的确定度就会提高。下面是这个例子::consultDoes the engine turn over?: noAre the lights weak?: yesIs the ra

8、dio weak?: yesproblem-battery-cf-75done with problem在这个例子中,系统联合了两种出现电池损坏情况的确信度50,从而得出最终的确信度为75。 确信度的性质确信度有许多使用的方法,在系统的推理过程中确信度的继承传播的途径也有许多钟,我们可以把它们大致分为以下几类:有些规则的结论是非确信的 有些规则的前提是非确信的 用户输入的答案是非确信的 联接非确信的前提和非确信的结论 更新工作空间中的非确信的数据成为新的非确信的数据 建立确信度的极限,一旦低于这个极限,某种非确信的前提就不成立了。 在早期的人工智能系统中,MYCIN是比较成功的应用确信度的实用

9、系统之一,这个系统用来诊断传染病。直到目前为止许多商用专家系统还在使用这种技术。MYCIN的确信度设计MYCIN确信度的目的是让我们的专家系统很够得出和真正的专家相符的答案。也就是说要按照专家那样思考,考虑众多的不确定因素,最后给出的答案也可能是不确定的。较深确信度理论牵涉到概率论以及对复杂的真是的系统进行统计研究。前面我们介绍了两种把确信度加入系统的方法,一种是在规则中加入确信度信息,一种是用户在输入回答问题的时候加入确信度信息。在专家系统的工作空间中,除了要保留以前的属性以及其值还要保存确信度CF。在我们的规则中,规则的前提的确信度是100,就是说如果工作空间中保存这下面两条信息的话:tu

10、rn_over cf 100smell_gas cf 100那么根据规则4:rule 4if turn_over andsmell_gasthen problem is flooded cf 80就会把结论problem flooded cf 80加入到系统的工作空间中。计算前提的确信度虽然在规则中定义的前提的确信度都是100,但是在真正的问题当中,前提不可能是100%成立的。这样我们的专家系统就必须能够自动的处理前提的确信度。这里我们使用最简单的算法。前提的确信度等于前提中所有子目标中最小的确信度的值。例如,如果工作空间中保存着下面的两个信息:turn_over cf 80smell_gas

11、 cf 50那么规则4的前提的确信度就是这两个中间较小的一个:50。联合前提确信度和规则确信度前提确信度指的就是已知的前提的可信程度,而规则确信度指的是通过肯定的前提推出某种结论的可信度。例如前面的规则4推出problem is flooded的确信度是80。那么当前提的确信度不是100%的时候,得出的结论的确信度应该是多少呢?我们使用下面的算法来计算:CF=RuleCFPremiseCF/100如果工作空间中存储如下信息,那么根据上面说的确定前提确信度的方法,RremiseCF就等于50。turn_over cf 80smell_gas cf 50而规则4的确信度RuleCF是80,那么最终

12、的结论problem is flooded的确信度就是CF=8050/100=40。前提确信度的极限当某个前提的确信度小于一定的数值时,我们就认为该前提不成立,从而也不是用该前提进行推理。在这里我们所使用的最小的确信度是20。也就是说如果工作空间中储存如下的信息:turn_over cf 80smell_gas cf 15那么系统是不会使用规则4进行推理的,因为前提确信度小于20。联合目标确信度假设系统中有多个规则都得出了同样的结论,每个规则都会得出一个确信度。如何把这些确信度联合起来得出最终的结论的确信度呢?在某个规则得到结论以后,系统会搜寻工作空间来察看是否已经存在了这样的结论,如果存在,

13、就要把这两个确信度进行运算,从而得出新的确信度。运算公式如下:CF(X, Y) = X + Y(100 - X)/100. X, Y both 0CF(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的结论都是battery_bad。rule 2 if lights_weakthen battery_bad cf 50.rule

14、 3 if radio_weak then battery_bad cf 50.那么如果工作空间中储存如下的信息:lights_weak cf 100 radio_weak cf 100两个规则都会得出battery_bad cf 50的结论,利用前面的公式运算,就会得出最终的结论battery_bad cf 75。从这个例子中我们不难看出,为什么要自己编写Clam的推理引擎。我们必须找出所有支持或者反对某个结论的证据,然后把它们的确信度进行运算,从而得出最终答案的确信度。而prolog的推理机构只能够一次找到一个答案,并且只有成功或者失败两种结果。规则的格式既然是使用我们自己编写的推理引擎,那么我们就可以自己定义规则的格式,而不需要使用prolog提供的标准格式,怎样就更加易于用户理解阅读规则。它的基本形式如下:rule(Name,LHS,RHS).LHS是前提,而RHS是结论。Name是规则名称。在prolog提供的标准的规则结构中是这样的形式:RHS:-LHS.对于RHS,它包括结论以及这个结论的可信度。rhs(Goal,CF).LHS则包括一系列的子目标用来证明或者推翻RHS。lhs(GoalList).其中GoalList是子目标的列表。下面来定义目标的格式,在这里我们使用最简单的目标格式:属性

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号