人工智能实验4三-专家系统方案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《人工智能导论》实验报告

一、实验题目:识别型专家系统设计

————识别动物专家系统

二、实验目的

1、掌握专家系统的基本构成

2、掌握用人工智能程序设计语言编制智能程序的方法

三、实验容

1、所选编程语言:C语言;

2.拟订的规则:

(1)若某动物有奶,则它是哺乳动物。

(2)若某动物有毛发,则它是哺乳动物。

(3)若某动物有羽毛,则它是鸟。

(4)若某动物会飞且生蛋,则它是鸟。

(5)若某动物是哺乳动物且有爪且有犬齿且目盯前方,则它是食肉动物。

(6)若某动物是哺乳动物且吃肉,则它是食肉动物。

(7)若某动物是哺乳动物且有蹄,则它是有蹄动物。

(8)若某动物是哺乳动物且反刍食物,则它是有蹄动物。

(9)若某动物是食肉动物且黄褐色且有黑色条纹,则它是老虎。

(10)若某动物是食肉动物且黄褐色且有黑色斑点,则它是金钱豹。

(11)若某动物是有蹄动物且长腿且长脖子且黄褐色且有暗斑点,则它是长颈鹿。

(12)若某动物是有蹄动物且白色且有黑色条纹,则它是斑马。

(13)若某动物是鸟且不会飞且长腿且长脖子且黑白色,则它是驼鸟。(14)若某动物是鸟且不会飞且会游泳且黑白色,则它是企鹅。

(15)若某动物是鸟且善飞,则它是海燕。

2、设计思路:

用户界面:采用问答形式;

知识库(规则库):存放产生式规则,推理时用到的一般知识和领域知识,比如动物的特征,动物的分类标准,从哺乳动物、食肉动物来分,再具体地添加一些附加特征得到具体动物;建立知识库的同时也建立了事实库。事实库是一个动态链表,一个事实是链表的一个结点。知识库通过事实号与事实库发生联系。

数据库:用来存放用户回答的问题,存放初始状态,中间推理结果,最终结果;

推理机:采用正向推理,推理机是动物识别的逻辑控制器,它控制、协调系统的推理,并利用知识库中的规则对综合数据库中的数据进行逻辑操作。推理机担负两项基本任务:一是检查已有的事实和规则,并在可能的情况下增加新的事实;二是决定推理的方式和推理顺序。将推理机制同规则对象封装在一起,事实对象记录了当前的状态,规则对象首先拿出前提条件的断言(只有这些前提都有符合时才会做这条规则的结论),询问事实对象集,如事实对象集不知道,则询问用户,如所有前提条件都被证实为真则结论为真,否则系统不知道结论真假。

3、程序流程图:

程序运行如下:

以老虎,金钱豹,长颈鹿为例画出程序流程图如下:

四、程序编制:

程序包括知识库,数据库,推理机:

#include "Fact.h"

#include "Rule.h"

#include

fact *Fact;

//事实集(概念集)

char *str[]={"",

"反刍" /* 1 */, "有蹄" /* 2 */, " 哺乳类" /* 3*/, "眼前" /* 4 */, "有爪" /* 5 */, "犬齿" /* 6 */, "吃肉" /* 7 */, "下蛋 " /* 8 */, " 能飞" /* 9*/, "羽毛" /* 10 */, "有蹄类" /* 11 */, "食肉类" /* 12 */, "鸟类" /* 13 */, "有奶" /* 14 */, "毛发" /* 15 */,

"善飞" /* 16 */, "黑色白条纹"/* 17 */, "游泳" /* 18 */,

"长腿" /* 19 */, "长脖子" /* 20 */, "黑条纹" /* 21 */, "暗斑点" /* 22 */, "黄褐色" /* 23 */, "海燕" /* 24 */,

"企鹅" /* 25 */, "鸵鸟" /* 26 */, "斑马" /* 27 */, "长颈鹿" /* 28 */, "老虎" /* 29 */, "金钱豹" /* 30 */, "\0"

};

//规则之前件(条件)集,注意与下面对应

int rulep[][6]={

{22,23,12,3,0,0}, /*金钱豹30*/ {21,23,12,3,0,0}, /*老虎29*/ {22,19,20,11,0,0}, /*长颈鹿 28*/

21,17,0,0,0,0}, /*斑马27*/ {17,19,20,13,-9,0}, /*鸵鸟26*/ {17,18,13,-9,0,0}, /*企鹅 25*/

{13,16,0,0,0,0}, /* 海燕24*/ {15,0,0,0,0,0}, /*哺乳类3*/ {14,0,0,0,0,0}, /*哺乳类 3*/

{10,0,0,0,0,0}, /*鸟类13*/ {8,9,0,0,0,0}, /*鸟类13*/ {3,7,0,0,0,0}, /*食肉类 12*/

{3,4,5,6,0,0}, /*食肉类12*/ {3,2,0,0,0,0}, /*有蹄类11*/ {3,1,0,0,0,0} /*有蹄类 11*/

};

//规则之后件(结论)集,注意与上面对应

int rulec[]={

30, 29, 28,

27, 26, 25,

24, 3, 3,

13, 13, 12,

12, 11, 11

}; //前7个是要识别的动物

int main()

{ fact *F,*T;

rule *Rule,*R;

char ch[8];

int i=1;

Fact=NULL; //事实链表初始为空

while(strcmp(str[i], "\0")!=0) //在事实链表中填入事实,注意:前插

入 { F=new fact(i,str[i++]);

F->Next=Fact;

Fact=F;

}

F=Fact;

Fact=NULL;

while(F)

{ //倒转上面前插入的事实链表。inverted the upper link

T=F;

相关文档
最新文档