Visual Prolog 的 Web 专家系统 (7)

GENI的核心 -- 推理机(1)知识表示

GOAL段最后一句是子句infer(),它的含意是“推理”。

由此,进入GENI的核心,察看推理机的运行。

infer()

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

topic(Maingoal,_)

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

详见《Visual Prolog 的 Web 专家系统 (4) 》的相关介绍。

如果按照前面几节分析程序的路子走,现在应该从谓词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成立的条件],对本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),布布扣,bubuko.com

时间: 2024-08-01 10:43:40

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

Visual Prolog 的 Web 专家系统 (10)

GENI的核心 -- 推理机(4)求证过程分析 1.GENI知识库结构 专家系统推理机的设计运行,与其知识库结构紧密相关. GENI知识库结构是一棵逻辑推理树.根节点是animal,即求证的目标. Animal有2个子节点,即求证的子目标.节点或子目标,用rule表示.例如: rule(8,"animal","mammal",[12,13],"") rule(9,"animal","bird",[9,14]

Visual Prolog 的 Web 专家系统 (5)

使用现成网页 再说个小伎俩. 在VIP开发环境中,可以随时测试代码,不必编译成exe文件. 比如,想看看VIP内建谓词filenameext的执行结果,可以在一空白.pro文件中写入: GOAL filenameext("prolog.exe",Name,Ext), filenameext(NewName,"prolog.exe",".err"). 然后点选菜单"Project | Test Goal",就会看到以下结果: N

Visual Prolog 的 Web 专家系统 (6)

保存用户对询问的回答结果,作为进一步推理的条件 还是从GOAL段开始.起始句是write_startform() write_startform():- write("<form action=\"\cgi-bin\geni.exe\"method=\"post\">\n"). 注意!上一句应为write("<form action=\"geni.exe\"method=\"post\&q

Visual Prolog 的 Web 专家系统 (3)

深入探究WEB GENI源程序 折腾WEB GENI的目的,是为了摸清它的结构设计.运行机制,为山寨出自己的专家系统外壳,积累经验,启发思路. 为此,必须深入细致地研读源程序代码. WEBGENI包括2个模块:geni.pro和cgitools.pro.前者是主程序,负责推理.生成网页等:后者负责相对底层的CGI数据处理.本文探究的对象,主要是geni.pro. Visual Prolog(以下简称VIP)程序由几种代码段构成: PREDICATES :谓词段.相当于C语言的函数声明 CLAUS

Visual Prolog 的 Web 专家系统 (4)

知识库操作 先说个小伎俩. 在VIP中打开geni.prj,菜单选Options,打开Application Expert,点击Other Options, 点击Project Directories,点击Output,在Final文本框填入d:\Apache2.2\htdocs\GENI 这个目录是GENI虚拟主机所在之处. 这样做的目的,是编译后geni.exe会自动存入上述目录,省去了人工搬运的麻烦. 开始今天的话题,进行知识库操作. 下一步是执行GOAL段的子句consult_kb(Pa

Visual Prolog 的 Web 专家系统 (8)

GENI的核心 -- 推理机(2)流程控制 1.细说fail."!"与回溯 与其他语言相比,Prolog最大的特点,是它的回溯机制. 回溯机制,主要手段有2个,一是用谓词fail引发回溯,二是用特别谓词"!"(读作cut)取消回溯. Prolog运用fail引发回溯,实现程序的循环,并运用"!"对回溯进行控制. 看一个典型示例: FACTS f(integer) PREDICATES a() b() c() CLAUSES a():- write

Visual Prolog 的 Web 专家系统 (9)

GENI的核心 -- 推理机(3)一些谓词 为了集中注意力,较好地分析GENI推理机核心程序,应该做些准备工作,弄明白一些起辅助作用的谓词功能. is_htmlfile(Rulexpl) is_htmlfile(FILE):- filenameext(File,_Name,Mask), Mask = ".htm",!. is_htmlfile(FILE):- filenameext(File,_Name,Mask), Mask = ".html",!. 如果FILE

Visual Prolog 的 Web 专家系统 (2)

Web 专家系统 WWWGENI 在目录<VIP_root>\WWW\Programs\GENI中,有个例程,展示如何创建在WEB服务器支持下,以CGI脚本方式在因特网上工作的小型专家系统. GENI 使用极为简单的规则表示知识,当满足某些条件时,适用这些规则. rule(1,"carnivore","cheetah",[1,2],"") rule(2,"carnivore","tiger",[

Visual Prolog 的 Web 专家系统 (11)

GENI的核心 -- 推理机(5)处理why问题 1.why问题由客户从浏览器提出 专家系统工作时,需要向用户提出问题,收集推理求证用的事实根据. 用户有时想知道,系统为什么提出这样的问题,要求系统给出解释.这就是所谓的why问题. why问题的提出,是按动网页按钮"why"的结果. 2.why功能的设置 GENI的第一个页面default.htm并没有按钮"why".它的设置过程是这样的: 从上一节的谓词check第3子句说起. check( RNO, HISTO