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是个操作命令。不参与的推理过程。

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

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

Visual Prolog 的 Web 专家系统 (7)的更多相关文章

  1. Visual Prolog 的 Web 专家系统 (1)

    用Prolog敲代码,感觉舒坦. Prolog的编程范式,抽象程度远高于中.低级别的C语言等.敲代码的源码长度,至少比C语言的节省50%. 并且,Prolog的语法简单,符号选择自然合理,养眼度远高于 ...

  2. Visual Prolog 的 Web 专家系统 (9)

    GENI的核心 -- 推理机(3)一些谓词 为了集中注意力.较好地分析GENI推理机核心程序,应该做些准备工作,弄明确一些起辅助作用的谓词功能. is_htmlfile(Rulexpl) is_htm ...

  3. Visual Prolog 的 Web 专家系统 (8)

    GENI核心 -- 推理引擎(2)流量控制 1.阐述fail."!"而回溯 与其他语言相比,,Prolog最大的特点.这是回溯机制. 回溯机制,还有的主要手段2个月,首先,通过使用 ...

  4. Visual Prolog 的 Web 专家系统 (6)

    保存用户响应询价.作为进一步推理的条件 或GOAL段开始.最初的一句是write_startform() write_startform():- write("<form action ...

  5. Visual Prolog 的 Web 专家系统 (10)

    GENI的核心 -- 推理机(4)求证过程分析 1.GENI知识库结构 专家系统推理机的设计执行,与其知识库结构紧密相关. GENI知识库结构是一棵逻辑推理树. 根节点是animal,即求证的目标. ...

  6. Visual Studio 2013 Web开发

    cnbeta新闻:微软正式发布Visual Studio 2013 RTM版,微软还发布了Visual Studio 2013的最终版本..NET 4.5.1以及Team Foundation Ser ...

  7. VSS提示"Could not find the Visual SourceSafe Internet Web Service connection information for the specified database

    转自:http://www.cnblogs.com/qqflying/archive/2007/12/18/1004051.html VSS连接错误提示: ====================== ...

  8. Visual Studio的Web Performance Test提取规则详解(3)

    总结 Visual Studio的Web Performance Test是基于HTTP协议层的,它不依赖于浏览器,通过直接接收,发送HTTP包来和Web服务器交互.Web Performance T ...

  9. Visual Studio的Web Performance Test提取规则详解(2)

    总结 Visual Studio的Web Performance Test是基于HTTP协议层的,它不依赖于浏览器,通过直接接收,发送HTTP包来和Web服务器交互.Web Performance T ...

随机推荐

  1. java定义和实现接口

    1.定义接口     使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体.当中接口体由常量定义和方法定义两部分组成.定义接口的基本格式例如以下: [修饰符] in ...

  2. CentOS7 下linux不能上网解决方法​,centos7 eth0 没有ip,IP突然丢失

    CentOS7 下linux不能上网解决方法​ 在CentOS VMware下安装好linux后,发现有时不能直接联网,特分享下总结出来的经验,希望对新手有用 工具/原料 XP系统 VMware.Wo ...

  3. hdu 3488 Tour

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3488 题意:给你一个N个顶点M条边的带权有向图,要你把该图分成1个或多个不相交的有向环.且所有定点都只 ...

  4. Direct UI

    在界面开发中,眼下DirectUI是个热门的技术名称,由于众多的知名公司都是用DirectUI方式作出了非常炫丽的界面.而对于大多数熟悉Win32控件,熟悉MFC开发的开发者来说,我们应该做何选择? ...

  5. 访何红辉:谈谈Android源码中的设计模式

    最近Android 6.0版本的源代码开放下载,刚好分析Android源码的技术书籍<Android源码设计模式解析与实战>上市,我们邀请到它的作者何红辉,来谈谈Android源码中的设计 ...

  6. OCA读书笔记(15) - 执行数据库备份

    物理备份 -- 数据文件,控制文件,日志文件,参数文件 数据库备份 冷备 -- 归档和非归档均可以 什么时候必须用冷备?1. 数据库的模式为非归档的2. 用于现场保护 冷备的过程:1. 首先查看备份文 ...

  7. GMM高斯混合模型学习笔记(EM算法求解)

    提出混合模型主要是为了能更好地近似一些较复杂的样本分布,通过不断添加component个数,能够随意地逼近不论什么连续的概率分布.所以我们觉得不论什么样本分布都能够用混合模型来建模.由于高斯函数具有一 ...

  8. 三框架:使用数据源dbcp注意

    使用spring整合hibernate时间,需要使用该数据源,数据源使用apache的dbcp,使用dbcp当需要依靠pool的jar包.选择dbcp和pool当你需要注意. DBCP 2 compi ...

  9. 苹果iOS手机系统诊断功能是后门吗?

    7月20日,美国知名苹果iOS手机系统侦破专家扎德尔斯基在2014年世界黑客大会(HOPE/X)用幻灯片讲演揭露了苹果手机存在系统级"后门". 为此,7月23日.苹果公司马上做出回 ...

  10. Android从raw、assets、SD卡中获取资源文件内容

    先顺带提一下,raw文件夹中的文件会和project一起经过编译,而assets里面的文件不会~~~   另外,SD卡获取文件需要权限哦! //从res文件夹中的raw 文件夹中获取文件并读取数据 p ...