• Visual Prolog 的 Web 专家系统 (7)


    GENI核心 -- 推理引擎(1)知识表示

    GOAL最后一句是谓语infer(),它的含义是“论证”。

    因此,,进GENI核心,执行视图推理引擎。

    infer()

      infer():-
    	topic(Maingoal,_),
    	go([],MainGoal,""),!.
      infer():-
    	errorexit.
    

    topic(Maingoal,_)

    topic现存于事实库geni中。取出的Maingoal = "animal"。

    假设依照前面几节分析程序的路子走,如今应该从谓词go([],MainGoal,"")出发。

    我试着走了一遍,最后,发觉不行。

    原因在于,推理机的代码量,比前几节的总和还多;

    处理知识数据的方式方法复杂得多。

    程序逻辑和执行流程。准确分析的难度大得多。

    所以。必须做一些基础性准备工作,搞清楚推理机相关知识数据的总体情况;

    搞清楚推理机的逻辑、执行机制特点,和一些VIP内建谓词的使用方法。

    因此,把推理机的问题分解成4个小节:知识表示、流程控制、内建谓词与外建谓词、例程分析。

    今天,開始第1小节。

    一、Prolog的知识表示

    Prolog程序的基本结构是“事实 + 规则”。或者,“知识 + 控制”。

    与过程性程序不同的是,说明式的Prolog,知识(数据)与控制浑然一体。

    这表如今2个方面:

    1、知识表达方式

    Prolog主要用事实库表示知识。也能够用谓词子句表示知识。

    用事实库表示知识

    事实库、知识库可看作一回事情。

    事实库是定义在程序内部的知识库。知识库是存在于程序外部的事实库。

    以知识库animal.gni为例。看它的内容:

    rule(1,"carnivore","cheetah",[1,2],"animals\cheetah.htm")
    rule(2,"carnivore","tiger",[1,3],"<img src="animals/tiger02.jpg">")
    rule(3,"ungulate","giraffe",[5,2,4],"<img src="animals/giraffe0.jpg"&;&uot;)
    rule(4,"ungulate","zebra",[3],"<img src="animals/zebra.jpg">")
    rule(5,"bird","ostrich",[5,7,8],"<img src="animals/3bird.jpg">")
    rule(6,"bird","penguin",[9,10,8],"<img src="animals/pen.jpg">")
    rule(7,"bird","albatross",[11],"animals\albatros.htm")
    rule(8,"animal","mammal",[12,13],"")
    rule(9,"animal","bird",[9,14],"")
    rule(10,"mammal","carnivore",[15],"")
    rule(11,"mammal","ungulate",[16],"")
    cond(1,"it has tawny color","animals\animals.htm")
    cond(2,"it has dark spots","animals\animals.htm")
    cond(3,"it has black stripes","animals\animals.htm")
    cond(4,"it has long neck","animals\giraffe.htm")
    cond(5,"it has long legs","<img src="animals/longlegs.jpg">")
    cond(6,"it does fly","<img src="animals/fly.jpg">")
    cond(7,"it has a long neck","animals\animals.htm")
    cond(8,"it has a black and white color","animals\animals.htm")
    cond(9,"it has feathers","animals\bird3.htm")
    cond(10,"it swims","animals\swim.htm")
    cond(11,"it does fly well","animals\flywell.htm")
    cond(12,"it has hair","animals\animals.htm")
    cond(13,"it does give milk","animals\animals.htm")
    cond(14,"it lays eggs","<img src="animals/egg.jpg">")
    cond(15,"it eats meat ","animals\meateat.htm")
    cond(16,"it does chew cud","animals\animals.htm")
    topic("animal","I will try to guess which animal you are thinking of")
    default_startpage("animal.htm")
    

    GENI用内建谓词consult,把它们加载事实库。“知识”变成了“事实”。

    用谓词子句表示知识

    比如:

    cheetah :- 
    	mammal, 
    	carnivore, 
    	has_tawny_color,
    	has_dark_spots.
    tiger :- 
    	mammal,  
    	carnivore,
    	has_tawny_color, 
    	has_black_stripes.
    

    专家系统外壳

    把详细知识从程序代码出中分离出来。建立独立的知识库,

    这样的设计结构的专家系统,叫做“专家系统外壳”。

    GENI就是这样的“专家系统外壳”,仅仅是功能比較简单。

    设计专家系统,应当採用这样的“外壳 + 知识库”的结构。

    2、知识与控制都是谓词

    不但“控制性”谓词能够表示知识。知识也能控制程序。

    “事实”作为知识性谓词。直接參与并影响程序执行的走向。

    这个问题。会在下一节专门具体探讨。

    二、GENI事实库的知识储备情况

    前面几节介绍了。CGI数据处理整形成为知识。存入了内部事实库。

    如今。应该明白事实库里的“存货”情况。

    1、静态数据(知识、事实)

    主要包含,知识库名称和animal.gni的所有内容。

    简要分析一下知识库animal.gni的知识表示。

    rule的含意

    比如。rule(1,"carnivore","cheetah",[1,2],"animals\cheetah.htm")

    意思是:rule(编号,大类(或小类),小类(或动物名称),[本rule成立的条件,即cond的编号]。对本rule的解释)

    cond的含意

    比如,cond(15,"it eats meat ","animals\meateat.htm")

    意思是:cond(编号,询问用户的问题。对询问的提示)

    topic的含意

    topic("animal","I will try to guess which animal you are thinking of")

    意思是:topic(主题。对主题的解释)

    rule之间是“树”的关系,主题animal是根节点,也是推理机工作的起点。

    条件是彼此独立的,cond之间。没有联系。

    2、动态数据(用户的回答)

    网络传送时,它的形态是cond_X,X是数字。

    在事实库中的形式是yes(X),或no(X)。

    3、特别数据whymeet

    当用户在浏览器button“why”时,它传送到GENI。

    GENI照此要求,向用户解释提出某个问题的解决办法。

    whymeet是个操作命令。不参与的推理过程。

    的静态和动态知识,推理要求。

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    Servlet的几种跳转(转)
    Java String.split()用法小结(转)
    表单数据提交的方法
    gedit文本编辑器乱码解决办法
    J-Link烧写bootloader到mini2440的Nor Flash
    虚拟机安装Fedora10系统遇到异常
    linux系统忘记root密码怎么办?
    编译busybox时出错及解决方案
    source insight代码查看器如何自定义添加文件类型
    < Objective-C >文件操作-NSFileHandle
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4887596.html
Copyright © 2020-2023  润新知