实验报告
1.对CLIPS和其运行及推理机制进行介绍
CLIPS是一个基于前向推理语言,用标准C语言编写。
它具有高移植性、高扩展性、强大的知识表达能力和编程方式以及低成本等特点。
CLIPS由两部分组成:知识库、推理机。
它的基本语法是:
(defmodule< module-name >[< comment >])
CLIPS的基本结构:
(1).知识库
由事实库(初始事实+初始对象实例)和规则库组成。
事实库:
表示已知的数据或信息,用deftemplat,deffact定义初始事实表FACTLIS,由关系名、后跟零个或多个槽以及它们的相关值组成,其格式如下:
模板:
(deftemplate<deftemplate-name> [<comment>]
<slot-definition>*)
<slot-definition>::= <single-slot-definition> |
<multislot-definition>
事实:
(deffacts<deffacts-name> [<comment>]
<Facts>*)
当CLIPS系统启动推理时, 会把所有用deffact定义的事实自动添加到工作存储器中。
常用命令如下:
asser:把事实添加到事实库(工作存储器)中retract:删除指定事实
modify:修改自定义模板事实的槽值duplicate:复制事实
clear:删除所有事实
规则库
表示系统推理的有关知识,用defrule命令来定义,由规则头、后跟零个或多个条件元素以及行为列表组成,其格式如下:
(defrule<rule name> [<comment>]
<patterns>* ;
=>
<actions>*;)
只有当规则中所有的模式都被事实表中的事实满足时,规则才能被触发。
常用命令如下:
reset:来生成自定义事实agenda:显示议程facts:给出事实列表watch:监视命令
run:启动CL IPS运行
(2).推理机
由黑板(用于存储当前推理结果数据和历史结果数据)、推理机(针对知识库的规则,对黑板数据进行模板匹配)以及“行动”的执行次序控制三部分组成。
推理机
采用正向推理机制,不断地扫描规则的模式,推理循环可分为4个阶段:
1)模式匹配从知识库中第一条规则开始,依次扫描知识库中所有规则,把规则的前件与动态
存储器中的当前事实相匹配,以搜索满足条件的规则。
2)冲突消解在发生冲突,即多条规则同时被匹配时,根据预先确定的冲突消解策略,确定触
发规则。
3)激活规则,调用匹配所触发规则的所有子目标的事实。
4)动作把所触发规则的结论添加到动态存储器(议程)。
执行次序控制
提供两种具体的技术来控制规则的执行:
1)优先级:可以在定义规则时设置规则的优先级,使议程中的多条规则按优先级大小顺序
执行。
2)模块:对大型的具有复杂规则库的情况,可以定义不同的模块来划分知识库,通过改变
模块的焦点来控制当前被执行的模块。
2.给出Animal.clp的一个运行实例截图
3.结合所给出的运行实例,写出系统完成内容和具体推理的步骤,根据代码和系统的处理
方法分析Clips推理求解过程和方法。
(系统的执行过程和推理步骤和方法)
(1).代码分析:
2)事实库
(2).实例分析
1)Load
加载1个自定义模版,7个自定义规则和1个自定义事实。
2)Reset
自动focus MAIN,将130条自定义事实添加到MAIN模块的FACTS中,然后用之前的规则与事实进行匹配,并将满足条件的规则激发加入到议程当中。
3)Run
CLIPS系统将在议程中的被激活的规则按顺序开始执行,激活了规则propagate-goal,根据事实f-1和f-127产生了新的事实f-130,并将它加入到综合数据库中。
当规则运行完毕,综合数据库进行了更新,clips系统再次匹配规则和事实,并激活新的规则propagate-goal,根据事实f-130和f-124产生了新的事实f-131并将它加入到综合数据库中。
之后重复这一步骤,直到事实f-139被加入综合数据库中后,CLIPS系统激活了规则ask-question-legalvalues,打印问题backbone,撤销事实f-139。
4)对问题Does your animal have a backbone?回答yes
激活规则ask-question-legalvalues,在综合数据库中插入新的事实f-140,并撤销事实f-5 。
由于综合数据库的更新,在clips 系统进行新的一轮匹配的时候,激活规则rule-satisfied: f-140,f-3 和remove-rule-no-match: f-140,f-4。
撤销事实f-140,f-4。
激活规则rule-satisfied ,撤销事实f-3 并加入新的事实f-141。
因为f-3 的撤销,引起议程中已激活的规则propagate-goal: f-138,f-3 失效,所以该规则被移出议程。
在新一次的匹配中,激活四个规则并压入议程。
remove-rule-no-match: f-141,f-9 和remove-rule-no-match: f-141,f-10这两个规则。
移去不满足要求的事实f-10,f-9 和因事实撤销而移除的原激活规则propagate-goal: f-137,f-9。
激活规则modify-rule-match: f-141,f-7,撤销事实f-7并加入新事实f-142 ,撤销议程中原激活的规则propagate-goal: f-137,f-142。
激活规则modify-rule-match: f-141,f-6,撤销事实f-6并加入新事实f-143,撤销议程中原激活的规则propagate-goal: f-137,f-6。
由于新的事实加入,规则propagate-goal: f-137,f-143 被激活。
加入新的事实f-144 并激活规则ask-question-legalvalues: f-2,f-144,f-8,打印问题warm.blooded。
5)对问题Is the animal warm blooded?回答no
与步骤4)过程类似,最后激活规则ask-question-legalvalues: f-2,f-149,f-17,打印问题always.in.water。
6)对问题Is your animal always in water?回答no
与步骤4)过程类似,最后激活规则ask-question-legalvalues: f-2,f-154,f-32,打印问题scally。
7)对问题Is your animal covered with scaled skin?回答yes
与步骤4)过程类似,最后激活规则ask-question-legalvalues: f-2,f-159,f-47,打印问题rounded.shell。
8)对问题Does the animal have a rounded shell?回答yes
加入新的事实f-160,激活规则rule-satisfied: f-160,f-158,remove-rule-no-match: f-160,f-157。
加入新的事实f-161并激活规则goal-satified: f-1,f-161,f-129。
撤销事实f-1 并撤消了原议程中包含f-1的所有激活的规则,给出结论I think your animal is a turtle。
之后议程中其他激活的规则会依次执行,但是因为生成的事实与原综合数据库中的重复,所以不再加入。
推理完成。