Web 专家系统 WWWGENI
在目录<VIP_root>\WWW\Programs\GENI中,有个例程,展示如何创建在WEB服务器支持下,以CGI脚本方式在因特网上工作的小型专家系统。
GENI 使用极为简单的规则表示知识,当满足某些条件时,适用这些规则。
rule(1,"carnivore","cheetah",[1,2],"")
rule(2,"carnivore","tiger",[1,3],"")
rule(3,"ungulate","giraffe",[5,2,4],"")
cond(1,"it has tawny color","")
cond(2,"it has dark spots","")
cond(3,"it has black stripes","")
GENI主要用于事物分类。它的目标是描述事物,而非实现高级的演绎引擎。但是,凭借它的工作原理,也能构建复杂的专家系统外壳,功能就像Visual Prolog自有的工具ESTA。
GENI有3个知识库(*.GNI文件),涉及动物、汽车启动、轮胎等问题。
非网络版的GENI,问题的问答,以递归方式进行。在使用CGI脚本的网络版中,不能这样做。因为,在问答咨询过程中,CGI脚本的工作是断续不连贯的。最大的问题,是如何保存咨询过程的中间数据
现有的解决办法,是把用户的每次回答,保存在网页form的hidden类型变量中。这些中间数据,是逐页向后传递的。这个CGI程序GENI.EXE,每次收到用户回答再次启动时,必须用hidden变量保存的数据,重新初始化。这些中间数据,由谓词cgi_GetString检索,并由谓词assert_conditions,把做出的yes/no回答,加入到事实库。事实库中保存着先前回答过的结论,即进行下一步推理的前提条件。
最初的hidden变量,指定知识库.GNI文件的名称。这是咨询过程必须的文件。
Web版GENI执行以下操作任务(可参见程序源码):
- 用谓词cgi_GetString,得到相关的CGI变量字符串。
- 把该字符串转换成由“名称,值”结构数据构成的列表。
- 查询知识库。知识库名称,由首个hidden变量指定。
- 把相关hidden变量值存入事实库,作为进一步推理的前提条件。
- 重新启动推理引擎。
推理机运行的结果,产生一个HTML网页,内含一个FORM,FORM里有hedden变量,和关于下一个推理前提条件的询问。
若得到推理结论,GENI会生成终结网页,给出咨询结果。
根据推理前提条件,会用HTML文件或部分代码,构建新的询问。
专家系统的一个特点,用户有权了解系统为什么提出某个询问。这种WHY问题,GENI的对策是显示它正在使用的推理规则,和用户以前回答所形成的推理前提条件。