Visual Prolog 的 Web 专家系统 (7)
来源:互联网 发布:sql查询身份证号码 编辑:程序博客网 时间:2024/06/05 22:51
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
当用户在浏览器按钮“why”时,它传送到GENI,
GENI照此要求,向用户解释提出某个问题的原因。
whymeet是个操作命令,不参与推理过程。
而静态和动态的知识,是推理的要件。
- Visual Prolog 的 Web 专家系统 (7)
- Visual Prolog 的 Web 专家系统 (1)
- Visual Prolog 的 Web 专家系统 (2)
- Visual Prolog 的 Web 专家系统 (3)
- Visual Prolog 的 Web 专家系统 (4)
- Visual Prolog 的 Web 专家系统 (5)
- Visual Prolog 的 Web 专家系统 (6)
- Visual Prolog 的 Web 专家系统 (8)
- Visual Prolog 的 Web 专家系统 (9)
- Visual Prolog 的 Web 专家系统 (10)
- Visual Prolog 的 Web 专家系统 (11)
- 《用Prolog建专家系统》学习笔记(1)
- 《用Prolog建专家系统》学习笔记(2)
- 《用Prolog建专家系统》学习笔记(3)
- 《用Prolog建专家系统》学习笔记(4)
- Visual Prolog
- 用Prolog和Turbo Prolog语言开发专家系统
- Prolog实现太阳系星体识别专家系统
- [JAVA]比毫秒System.currentTimeMillis()更精确的时间戳(纳米级时间戳)
- 微信内置浏览器的JsAPI(WeixinJSBridge续)
- The 3n + 1 problem
- 让QToolBar工具栏的按钮既显示图标又显示文字
- VC基于MSCOMM控件串口通讯
- Visual Prolog 的 Web 专家系统 (7)
- MySQL修改某列默认值
- Storm入门教程 第五章 一致性事务
- Hive安装、配置及基本测试
- linux常用命令
- 【Leetcode长征系列】Best Time to Buy and Sell Stock II
- 线性表的链式存储
- HDU4540 威威猫系列故事——打地鼠 and 1176免费馅饼
- JAVA中的反斜杠