资源描述:
《Prolog开发专家系统-解释》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Prolog开发专家系统-解释专家系统的一个重要的功能就是要能够解释它自己的行为。用Prolog开放具体解释能力的专家系统。解释专家系统的一个重要的功能就是要能够解释它自己的行为。这意味着用户可以在任何时候询问系统为什么得出某个结论,或者为什么提出某个问题。这对于用户来说是一项重要的功能,有时候用户只要求知道答案,可是有时候用户需要知道解释,而通常的专家系统无法对它的行为做出有说服力的解释,而只能够告诉用户它使用了哪些规则得出的结论,至于为什么这些规则能够得出这样的结论,系统是无法解释的。例如下面这个例子:汽车能够启动么?不行引擎发动了么?是的你问到汽油味道了么?
2、是的建议:等待5秒钟,然后再试。为什么?因为我使用了这样的规则:如果不能够启动而且引擎发动了而且问到汽油味,那么就推荐的等待5秒再试。很显然这个专家系统无法解释其选择某个规则的原因,而只能告诉用户它使用了某种规则。如果用户硬要刨根问底的话这个系统就无能为力了。为了让系统具有真正的解释功能,我们需要比规则更多的知识。对每个规则进行注释是一个比较好的方法,这种方法将在以后的章节介绍。还有一种方法就是把更多的知识进行编码,推理引擎和解释引擎都同时使用这个知识库。还有些专家系统的知识库是属于经验知识,在这种情况下系统的解释可以直接使用规则。像识别鸟类的分类系统就属于这种情
3、况。鸟类识别系统就能够使用它的规则直接进行解释,例如为什么某种鸟是野鸭,就是因为它具有野鸭的一些特性,而这些特性就是规则所定义的。识别鸟类并不存在什么高深的理论,而只是根据某些特点进行分类的。也许对于用户来说某些解释是多余的,不过对于开发人员来说这是十分重要的。这和通常的语言中的跟踪调试有些类似。当系统没有按照预期的效果执行的时候,开发人员可以根据解释研究错误的产生原因。知识工程师也可以根据解释从而设计出更加贴近用户的知识库。 解释的种类在一般的专家系统中常用的有4种解释。1.报告当前的会话进程。2.解释系统是如何得出某个结论的。3.解释为怎么系统向用户询问某个问
4、题。4.解释为什么某个结论不成立。在我们上一章介绍的Clam外壳程序中,推理引擎是自己编写的,所以这些解释特性并不难加入系统当中。在第一章的原始外壳中没有推理引擎,而是使用prolog的内部引擎,这样就无法加入新的解释特性,为了达到这个目的,我们需要编写自己的推理引擎,而这个引擎的运作方式和prolog相同,也就是说需要使用prolog编写一个prolog,好在这项工作并不难完成。 在Clam中使用解释首先让我们看看在Clam中加入了解释的一个例子,这里沿用了上一章汽车诊断系统。首先用户打开对话跟踪功能,跟踪的信息使用粗体字表示,跟踪信息显示了系统是如何调用规则的
5、。注意系统正确的表示出了规则的嵌套调用。报告当前的会话进程的解释:consult,restart,load,list,trace,how,exit:traceonconsult,restart,load,list,trace,how,exit:consultcallrule1Doestheengineturnover?:nocallrule2Arethelightsweak?:yesexitrule2callrule3Istheradioweak?:yesexitrule3exitrule1callrule4failrule4callrule5failrule5c
6、allrule6failrule6problem-battery-cf-75donewithproblem下面来看看如何解释为什么要向系统提问。用户可以在任何时候向推理引擎询问why,请看这个例子:...Istheradioweak?:whyrule3Ifradio_weakThenbattery_bad50rule1Ifnotturn_overbattery_badThenproblemisbattery100goalproblem...这里可以看出来当用户向系统询问为什么问istheradioweak这个问题的时候,系统把有关这个问题的几个规则列出来了。再来看
7、看how提问,当系统给出了某个结论的时候,用户可能想知道是如何得到这个结论的,这个时候向系统询问how。...problem-battery-cf-75donewithproblemconsult,restart,load,list,trace,how,exit:howGoal?problemisbatteryproblemisbatterywasderivedfromrules:1rule1Ifnotturn_overbattery_badThenproblemisbattery100在这里列出了能够直接得到结论的规则。如果用户需要继续知道为什么battery_
8、bad的话