专家系统实例

一个专家系统的例子

一、建立动物识别专家系统的规则库,并用与/或图来描述这个规则库。

规则库由15条规则组成,规则名分别是;rule1,rule2,┉,rule15,规则库的符号名为ruleS 。编写一段程序, 把15条规则组成一个表直接赋值给规则库ruleS 。 ( rules ((rule1

(if (animal has hair)) 若动物有毛发(F1) (then (animal is mammal))) 则动物是哺乳动物(M1) ((rule2

(if (animal gives milk)) (then (animal is mammal))) ((rule3

(if (animal has feathers)) (then (animal is bird))) ((rule4

(if (animal flies)) (animal lays eggs)) (then (animal is bird))) ((rule5

(if (animal eats meat)) (then (animal is carnivore))) ((rule6

(if (animal Raspointed teeth)) (animal has claws) (animal has forword eyes)) (then (animal is carnivore))) ((rule7

(if (animal has mammal)) (animal has hoofs)) (then (animal is ungulate))) ((rule8

(if (animal has mammal)) (animal chews cud)) (then (animal is ungulate))) ((rule9

(if (animal is mammal)) (animal is carnivore) (animal has tawny color) (animal has dark sports)) (then (animal is cheetah))) ((rule10

(if (animal is mammal)) (animal is carnivore) 若动物有奶(F2)

则动物是哺乳动物(M1) 若动物有羽毛(F9) 则动物是鸟(M4) 若动物会飞(F10) 且生蛋(F11) 则动物是鸟(M4) 若动物吃肉类(F3) 则动物是食肉动物(M2) 若动物有犀利牙齿(F4) 且有爪(F5)

且眼向前方(F6)

则动物是食肉动物(M2) 若动物是哺乳动物(M1) 且有蹄(F7)

则动物是有蹄类动物(M3) 若动物是哺乳动物(M1) 且反刍(F8)

则动物是有蹄类动物(M3) 若动物是哺乳动物(M1) 且是食肉动物(M2) 且有黄褐色(F12) 且有暗斑点(F13) 则动物是豹(H1) 若动物是哺乳动物(M1) 且是食肉动物(M2)

(animal has tawny color) 且有黄褐色(F12) (animal has black stripes) 且有黑色条纹(F15) (then (animal is tiger))) 则动物是虎(H2) ((rule11

(if (animal is ungulate)) 若动物是有蹄类动物(M3) (animal has long neck) 且有长脖子(F16) (animal has long legs) 且有长腿(F14) (animal has dark sports)) 且有暗斑点(F13) (then (animal is giraffe))) 则动物是长颈鹿(H3) ((rule12

(if (animal is ungulate)) 若动物是有蹄类动物(M3) (animal has black stripes) 且有黑色条纹(F15) (then (animal is zebra))) 则动物是斑马(H4) ((rule13

(if (animal is bird)) 若动物是鸟(M4) (animal does not fly) 且不会飞(F17) (animal has long neck) 且有长脖子(F16) (animal has long legs)) 且有长腿(F14) (animal black and white)) 且有黑白二色(F18) (then (animal is ostrich))) 则动物是驼鸟(H5) ((rule14

(if (animal is bird)) 若动物是鸟(M4) (animal does not fly) 且不会飞(F17) (animal swims) 且会游泳(F19) (animal black and white)) 且有黑白二色(F18) (then (animal is penguin))) 则动物是企鹅(H6) ((rule15

(if (animal is bird)) 若动物是鸟(M4) (animal flies well)) 且善飞(F20)

(then (animal is albatross))) 则动物是信天翁(H6)

在上述规则的说明中,用F1-F20标记的是初始事实或证据,用M1-M4标记的是中间结论,用H1-H7标记的是最终结论。用标记表示15条规则如下: R1: F1→M1 R2: F2→M1 R3: F9→M4

R4: F10∧F11→M4 R5: F3→M2

R6: F4∧F5∧F6→M2 R7: F7∧M1→M3 R8: F8∧M1→M3

R9: F12∧F13∧M1∧M2→H1 R10: F12∧F15∧M1∧M2→H2 R11: F13∧F14∧F16∧M3→H3

R12: F15∧M3→H4

R13: F14∧F16∧F17∧F18∧M4→H5 R14: F17∧F18∧F19∧M4→H6 R15: F20∧M4→H7

用VC++编写一个函数,把一个表赋给变量rules ,这个表有15个顶层元素,每一个顶层元素是一条规则,每条规则都是有4个元素的一个表。

二、推理机及其实现 1、正向推理过程:

根据在综合数据库中给出的已知事实, 正向使用规则, 即把规则的前件同当前数据库的内容进行匹配来选取可用规则, 若有多条规则可用, 则采用先选优先的策略, 将执行规则的结论添加到综合数据库中, 并将用过的规则置上激活标志, 直到问题求解或没有可用规则为止. 2、正向推理过程程序实现 Procedure respond

将规则库中规则的前件同当前数据库的内容进行匹配, 若匹配成功,则将这条规则送入可用规则集S ;否则,取下一条规则进行匹配。 while S非空且问题未求解除 do begin

调用 select-rule(S),从S 中选择一条规则,将该规则的结论添加到综合数据库中。 调用respond end

由上可见正向推理过程respond 是递归的。 3、举例说明正向推理机推理过程 若已知的初始事实是F13(有暗斑点) 、F12(黄褐色) 、F3(若动物吃肉类) 及F1(动物有毛发) , 使用steq 函数把已知的初始事实赋值给事实表facts :

(steq facts

((animal has dark spots) (animal has tawny color)

( animal eats meat) ( animal has hair))

即:facts=(F13 F12 F3 F1)

facts 是一个可编辑的表,即可以添加。steq 函数的功能就是对facts 进行编辑。 使用在前面建立的rules 规则库,叙述正向推理过程如下:

1)、在rules 中查找规则前件的全部条件在当前facts=(F13 F12 F3 F1)中的可用规则,

首先找到规则R1,则把R1后件中不在facts 中的结论M1添加到facts 中,扩充facts 为facts=(F13 F12 F3 F1 M1)。

实际上,对facts=(F13 F12 F3 F1)还有一条可用规则R5,因为R5的前件F3也在当前facts 中。但是, 由前面提到的冲突消解策略,若有多条可用规则,则按可用规则在规则库表rules 中的顺序选择第一条可用规则。

2)、对当前facts 在rules 中查找可用规则,仍然找到规则R1,但R1的后件结论M1已在facts 中,因此不会执行规则R1。继续查找可用规则,找到规则R5,因为R5的后件结论M2不在当前的facts 中,故执行R5,把R5不在facts 中的结论M2添加到facts 中,扩充facts 为facts=(F13 F12 F3 F1 M1 M2)。

3) 、对当前facts 在rules 中继续查找可用规则,规则R9的前件在facts 中,因此R9是可用规则。而R9的后件结论H1不在当前的facts 中,执行R9,把R9的结论H1扩充到facts 中,使得facts=(F13 F12 F3 F1 M1 M2 H1)。

4) 、对当前facts ,在rules 中找不到规则的前件所包含的全部条件在facts 中且后件有不在facts 中的结论的任何规则,至此, 正向推理结束.

为了实现上述推理过程, 需编写以下7个函数: A 、正向推理机函数deduce 函数表达式;(deduce facts)

功能:连续不断的从规则库rules

中选择可用规则,

每选择到一条可用规则,就把该规则的后件

中不在facts 中的所有结论添加到facts 中, B、调用函数step-forward 实现 对facts 进行扩充, 再通过扩充了的facts 函数表达式:

选择下一条可用规则, 对facts 再扩充, 直到 (step-forward rules) 没有可用规则为止。每找到一条可用规则对 函数功能:

, C 函数表达式:( try-rule rule)

facts 中, facts 返回t

调用函数use-then 实现 调用函数remember 或者

函数recall 实现

D 、函数use-then

函数表达式:(use-then rule)

函数功能:判断变量rule 中的一条规则的后件所包含的全部结论是否在表facts 中,若全部结论都在facts 中,则use-then 返回nil ;否则, 将不在facts 中的结论逐一添加到表facts 中, 且use-then 返回t 。 ▲( 调用函数steq 实现) E 、函数remember

函数表达式: (remember new)

函数功能: 判断变量new 中的一个事实是否在表facts 中, 存在, 返回nil; 否则, 将new 中的事实添加到表facts 的表头, 且返回new 中的事实。 F 、函数recall

函数表达式:(recall fact) 函数功能:判断变量fact 中的一个事实是否在表facts 中,存在, recall 返回值是fact 中的事实; 否则, 返回nil 。 ● 关于E 、F 的区别

E 用于向事实表facts 中添加新的事实。 F 用于跟踪推理过程。 G 、函数test-if

函数表达式:(test-if rule) 函数功能:判断变量rule 中的一条规则的前件所包含的全部事实是否在表facts 中,若在, test-if返回t; 否则, 返回nil 。

一个专家系统的例子

一、建立动物识别专家系统的规则库,并用与/或图来描述这个规则库。

规则库由15条规则组成,规则名分别是;rule1,rule2,┉,rule15,规则库的符号名为ruleS 。编写一段程序, 把15条规则组成一个表直接赋值给规则库ruleS 。 ( rules ((rule1

(if (animal has hair)) 若动物有毛发(F1) (then (animal is mammal))) 则动物是哺乳动物(M1) ((rule2

(if (animal gives milk)) (then (animal is mammal))) ((rule3

(if (animal has feathers)) (then (animal is bird))) ((rule4

(if (animal flies)) (animal lays eggs)) (then (animal is bird))) ((rule5

(if (animal eats meat)) (then (animal is carnivore))) ((rule6

(if (animal Raspointed teeth)) (animal has claws) (animal has forword eyes)) (then (animal is carnivore))) ((rule7

(if (animal has mammal)) (animal has hoofs)) (then (animal is ungulate))) ((rule8

(if (animal has mammal)) (animal chews cud)) (then (animal is ungulate))) ((rule9

(if (animal is mammal)) (animal is carnivore) (animal has tawny color) (animal has dark sports)) (then (animal is cheetah))) ((rule10

(if (animal is mammal)) (animal is carnivore) 若动物有奶(F2)

则动物是哺乳动物(M1) 若动物有羽毛(F9) 则动物是鸟(M4) 若动物会飞(F10) 且生蛋(F11) 则动物是鸟(M4) 若动物吃肉类(F3) 则动物是食肉动物(M2) 若动物有犀利牙齿(F4) 且有爪(F5)

且眼向前方(F6)

则动物是食肉动物(M2) 若动物是哺乳动物(M1) 且有蹄(F7)

则动物是有蹄类动物(M3) 若动物是哺乳动物(M1) 且反刍(F8)

则动物是有蹄类动物(M3) 若动物是哺乳动物(M1) 且是食肉动物(M2) 且有黄褐色(F12) 且有暗斑点(F13) 则动物是豹(H1) 若动物是哺乳动物(M1) 且是食肉动物(M2)

(animal has tawny color) 且有黄褐色(F12) (animal has black stripes) 且有黑色条纹(F15) (then (animal is tiger))) 则动物是虎(H2) ((rule11

(if (animal is ungulate)) 若动物是有蹄类动物(M3) (animal has long neck) 且有长脖子(F16) (animal has long legs) 且有长腿(F14) (animal has dark sports)) 且有暗斑点(F13) (then (animal is giraffe))) 则动物是长颈鹿(H3) ((rule12

(if (animal is ungulate)) 若动物是有蹄类动物(M3) (animal has black stripes) 且有黑色条纹(F15) (then (animal is zebra))) 则动物是斑马(H4) ((rule13

(if (animal is bird)) 若动物是鸟(M4) (animal does not fly) 且不会飞(F17) (animal has long neck) 且有长脖子(F16) (animal has long legs)) 且有长腿(F14) (animal black and white)) 且有黑白二色(F18) (then (animal is ostrich))) 则动物是驼鸟(H5) ((rule14

(if (animal is bird)) 若动物是鸟(M4) (animal does not fly) 且不会飞(F17) (animal swims) 且会游泳(F19) (animal black and white)) 且有黑白二色(F18) (then (animal is penguin))) 则动物是企鹅(H6) ((rule15

(if (animal is bird)) 若动物是鸟(M4) (animal flies well)) 且善飞(F20)

(then (animal is albatross))) 则动物是信天翁(H6)

在上述规则的说明中,用F1-F20标记的是初始事实或证据,用M1-M4标记的是中间结论,用H1-H7标记的是最终结论。用标记表示15条规则如下: R1: F1→M1 R2: F2→M1 R3: F9→M4

R4: F10∧F11→M4 R5: F3→M2

R6: F4∧F5∧F6→M2 R7: F7∧M1→M3 R8: F8∧M1→M3

R9: F12∧F13∧M1∧M2→H1 R10: F12∧F15∧M1∧M2→H2 R11: F13∧F14∧F16∧M3→H3

R12: F15∧M3→H4

R13: F14∧F16∧F17∧F18∧M4→H5 R14: F17∧F18∧F19∧M4→H6 R15: F20∧M4→H7

用VC++编写一个函数,把一个表赋给变量rules ,这个表有15个顶层元素,每一个顶层元素是一条规则,每条规则都是有4个元素的一个表。

二、推理机及其实现 1、正向推理过程:

根据在综合数据库中给出的已知事实, 正向使用规则, 即把规则的前件同当前数据库的内容进行匹配来选取可用规则, 若有多条规则可用, 则采用先选优先的策略, 将执行规则的结论添加到综合数据库中, 并将用过的规则置上激活标志, 直到问题求解或没有可用规则为止. 2、正向推理过程程序实现 Procedure respond

将规则库中规则的前件同当前数据库的内容进行匹配, 若匹配成功,则将这条规则送入可用规则集S ;否则,取下一条规则进行匹配。 while S非空且问题未求解除 do begin

调用 select-rule(S),从S 中选择一条规则,将该规则的结论添加到综合数据库中。 调用respond end

由上可见正向推理过程respond 是递归的。 3、举例说明正向推理机推理过程 若已知的初始事实是F13(有暗斑点) 、F12(黄褐色) 、F3(若动物吃肉类) 及F1(动物有毛发) , 使用steq 函数把已知的初始事实赋值给事实表facts :

(steq facts

((animal has dark spots) (animal has tawny color)

( animal eats meat) ( animal has hair))

即:facts=(F13 F12 F3 F1)

facts 是一个可编辑的表,即可以添加。steq 函数的功能就是对facts 进行编辑。 使用在前面建立的rules 规则库,叙述正向推理过程如下:

1)、在rules 中查找规则前件的全部条件在当前facts=(F13 F12 F3 F1)中的可用规则,

首先找到规则R1,则把R1后件中不在facts 中的结论M1添加到facts 中,扩充facts 为facts=(F13 F12 F3 F1 M1)。

实际上,对facts=(F13 F12 F3 F1)还有一条可用规则R5,因为R5的前件F3也在当前facts 中。但是, 由前面提到的冲突消解策略,若有多条可用规则,则按可用规则在规则库表rules 中的顺序选择第一条可用规则。

2)、对当前facts 在rules 中查找可用规则,仍然找到规则R1,但R1的后件结论M1已在facts 中,因此不会执行规则R1。继续查找可用规则,找到规则R5,因为R5的后件结论M2不在当前的facts 中,故执行R5,把R5不在facts 中的结论M2添加到facts 中,扩充facts 为facts=(F13 F12 F3 F1 M1 M2)。

3) 、对当前facts 在rules 中继续查找可用规则,规则R9的前件在facts 中,因此R9是可用规则。而R9的后件结论H1不在当前的facts 中,执行R9,把R9的结论H1扩充到facts 中,使得facts=(F13 F12 F3 F1 M1 M2 H1)。

4) 、对当前facts ,在rules 中找不到规则的前件所包含的全部条件在facts 中且后件有不在facts 中的结论的任何规则,至此, 正向推理结束.

为了实现上述推理过程, 需编写以下7个函数: A 、正向推理机函数deduce 函数表达式;(deduce facts)

功能:连续不断的从规则库rules

中选择可用规则,

每选择到一条可用规则,就把该规则的后件

中不在facts 中的所有结论添加到facts 中, B、调用函数step-forward 实现 对facts 进行扩充, 再通过扩充了的facts 函数表达式:

选择下一条可用规则, 对facts 再扩充, 直到 (step-forward rules) 没有可用规则为止。每找到一条可用规则对 函数功能:

, C 函数表达式:( try-rule rule)

facts 中, facts 返回t

调用函数use-then 实现 调用函数remember 或者

函数recall 实现

D 、函数use-then

函数表达式:(use-then rule)

函数功能:判断变量rule 中的一条规则的后件所包含的全部结论是否在表facts 中,若全部结论都在facts 中,则use-then 返回nil ;否则, 将不在facts 中的结论逐一添加到表facts 中, 且use-then 返回t 。 ▲( 调用函数steq 实现) E 、函数remember

函数表达式: (remember new)

函数功能: 判断变量new 中的一个事实是否在表facts 中, 存在, 返回nil; 否则, 将new 中的事实添加到表facts 的表头, 且返回new 中的事实。 F 、函数recall

函数表达式:(recall fact) 函数功能:判断变量fact 中的一个事实是否在表facts 中,存在, recall 返回值是fact 中的事实; 否则, 返回nil 。 ● 关于E 、F 的区别

E 用于向事实表facts 中添加新的事实。 F 用于跟踪推理过程。 G 、函数test-if

函数表达式:(test-if rule) 函数功能:判断变量rule 中的一条规则的前件所包含的全部事实是否在表facts 中,若在, test-if返回t; 否则, 返回nil 。


相关文章

  • 销售预测与长.中.短期生产计划管理模式解析
  • 销售预测与长.中.短期生产计划管理模式解析 主办:上海普瑞思管理咨询有限公司 时间:2010年10月21-22 上海: 10月23-24 青岛:10月30-31日 深圳 费用:2600元/人(包括授课费.讲义.证书.午餐等) 课程背景 生产 ...查看


  • oracle各个名字详解
  • 搞清概念: db_name,instance_name,ORACLE_SID,db_domain,global_name,service_name, 注:写作环境为Oracle 10g Release 2 (10.2)一.数据库名 1.数据 ...查看


  • K2与业务系统对接的接口规范
  • K2与业务系统对接的接口规范 1 流程图 1.1.1 通用流程--新建审批流程 1.1.2 通用流程-审批过程 1.1.3 通用流程-审批结束 1.1.4 通用流程-打开业务对象 2 业务系统相关规范 2.1 业务系统信息模块 业务系统信息 ...查看


  • 无线传感器网络应用实例荟萃
  • 无线传感器网络应用实例荟萃 陈建峰 西安成峰科技有限公司,西安市高新一路 16 号创业大厦 B 座 706 室, 电话:8825 7625 无线传感器网络具有可快速部署.可自组织.隐蔽 性强和高容错性的特点,因此非常适合在军事上应用. 利用 ...查看


  • 精益生产学习计划
  • 2013年总装部精益化管理工作计划 为全面推进精益化管理工作,以提高生产效率为方向,减少浪费,消除无效劳动,现结 合总装部具体现状,制定2013年总装部精益化管理工作计划. 第一章 精益组织与流程 第一节 精益组织 为加强总装部精益化推进工 ...查看


  • 云计算应用实例(三家对比)
  • 云计算应用实例 IBM 公司于2007年底宣布了云计算计划,云计算的概念出现在大众面前.本文简要介绍云计算概念的理解及主要应用实例. 一.深入理解云计算 在IBM 的技术白皮书 "Cloud Computing"中对云计 ...查看


  • 无线通信技术实训报告
  • 无线通信技术实训 目 录 一.实例一 ................................................. 2 二.实例二 ........................................... ...查看


  • 汽车故障诊断方法与维修技术
  • 内容简介 新世纪汽车检测与维修专业系列教材:本书系统地介绍汽车故障诊断方法和维修技术,涉及汽车故障诊断与维修基本知识.各系统常见故障的诊断思路与实用维修方法.故障实例等. 目录 目录 第一章概论 第一节汽车故障诊断基本知识 第二节汽车的基本 ...查看


  • 计算机图形学全部知识点
  • 1. 计算机图形学的研究内容 什么是计算机图形学? (1/2) 什么是计算机图形学? (2/2) 什么是交互式计算机图形学? (1/3) 什么是交互式计算机图形学? (2/3) 什么是交互式计算机图形学? (3/3) 基本概念--图形 图形 ...查看


  • 软件工程之需求分析
  • 软件工程之需求分析 编者按:现在人们越来越认识到软件工程在软件开发中的重要作用.目前国内软件在开发中还没有对软件开发的过程进行明确规定,文档不完整,也不规范,软件项目的成功往往归功于软件开发组的一些杰出个人或小组的努力.这种依赖于个别人员上 ...查看


热门内容