人工智能实验4三 专家系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{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*/
在规则库里可以增删规则,得到新的识别型专家系统,如识别鸟类,花,交 通工具等等;
通过此次设计型实验,在一定程度上锻炼了自己的设计能力和编程能力;
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;
以老虎,金钱豹,长颈鹿为例画出程序流程图如下:
老虎
金钱豹
长颈鹿
有黑色条纹
黄褐色
食肉动物
有黑色斑点
有蹄动物
哺乳动物
有蹄
四、程序编制:
程序包括知识库,数据库,推理机:
#include "Fact.h"
#include "Rule.h"
#include <stdio.h>
fact *Fact;
//事实集(概念集)
/* 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*/
char *str[]={"",
"反刍" /* 1 */, "有蹄" /* 2 */, " 哺乳类"
/* 3*/,
"眼前" /* 4 */, "有爪"
/* 5 */, "犬齿"
/* 6 */,
"吃肉" /* 7 */, "下蛋 " /* 8 */, " 能飞"
/* 9*/,
"羽毛" /* 10 */, "有蹄类" /* 11 */, "食肉类"
{3,1,0,0,0,0} /*有蹄类 11*/
};
//规则之后件(结论)集,注意与上面对应
int rulec[]={
30,
29,
28,
27,
26,
25,Baidu Nhomakorabea
24,
3,
3,
13,
13,
12,
12,
11,
11
}; //前 7 个是要识别的动物
int main()
{ fact *F,*T;
rule *Rule,*R;
while(F)
{ //倒转上面前插入的事实链表。inverted the upper link
T=F;
F=F->Next; T->Next=Fact; Fact=T; } ch[0]='R';ch[1]='U';ch[2]='L';ch[3]='E';ch[4]='_';ch[5]='a';ch[6] ='\0'; Rule=NULL; //规则链表初始为空 for (i=0;i<15;i++) //link the rule { R=new rule(ch,rulep[i],rulec[i]); R->Next=Rule; Rule=R; ch[5]++; } R=Rule; for (;;) //开始询问用户。Query { i=R->Query(Fact); if((i==1)) break; //如果返回“真”,则推理成功,并可以给出最 后专家答案! R=R->Next; if(!R) break; //所有规则都扫描完,R 为空,则退出! } if(!R) cout<<endl<<"I don't know"; //所有规则都扫描完的退出, 表明无法得到答案, cout<<endl<<"Press any bar to exit!"; getchar(); return True; } 五、实验总结
《人工智能导论》实验报告
一、实验题目:识别型专家系统设计 ————识别动物专家系统
二、实验目的 1、掌握专家系统的基本构成 2、掌握用人工智能程序设计语言编制智能程序的方法 三、实验内容 1、所选编程语言:C 语言; 2.拟订的规则:
(1)若某动物有奶,则它是哺乳动物。 (2)若某动物有毛发,则它是哺乳动物。 (3)若某动物有羽毛,则它是鸟。 (4)若某动物会飞且生蛋,则它是鸟。 (5) 若某动物是哺乳动物且有爪且有犬齿且目盯前方,则它是食肉动物。 (6)若某动物是哺乳动物且吃肉,则它是食肉动物。 (7)若某动物是哺乳动物且有蹄,则它是有蹄动物。 (8)若某动物是哺乳动物且反刍食物,则它是有蹄动物。 (9)若某动物是食肉动物且黄褐色且有黑色条纹,则它是老虎。 (10)若某动物是食肉动物且黄褐色且有黑色斑点,则它是金钱豹。 (11)若某动物是有蹄动物且长腿且长脖子且黄褐色且有暗斑点,则它是长 颈鹿。 (12)若某动物是有蹄动物且白色且有黑色条纹,则它是斑马。 (13)若某动物是鸟且不会飞且长腿且长脖子且黑白色,则它是驼鸟。 (14)若某动物是鸟且不会飞且会游泳且黑白色,则它是企鹅。 (15)若某动物是鸟且善飞,则它是海燕。 2、设计思路: 用户界面:采用问答形式; 知识库(规则库):存放产生式规则,推理时用到的一般知识和领域知识, 比如动物的特征,动物的分类标准,从哺乳动物、食肉动物来分,再具体地 添加一些附加特征得到具体动物;建立知识库的同时也建立了事实库。事实 库是一个动态链表,一个事实是链表的一个结点。知识库通过事实号与事实 库发生联系。
数据库:用来存放用户回答的问题,存放初始状态,中间推理结果,最终结 果; 推理机:采用正向推理,推理机是动物识别的逻辑控制器,它控制、协调系 统的推理,并利用知识库中的规则对综合数据库中的数据进行逻辑操作。推 理机担负两项基本任务:一是检查已有的事实和规则,并在可能的情况下增 加新的事实;二是决定推理的方式和推理顺序。将推理机制同规则对象封装 在一起,事实对象记录了当前的状态,规则对象首先拿出前提条件的断言(只 有这些前提都有符合时才会做这条规则的结论),询问事实对象集,如事实 对象集不知道,则询问用户,如所有前提条件都被证实为真则结论为真,否 则系统不知道结论真假。 3、程序流程图: 程序运行如下:
/* 12 */,
"鸟类" /* 13 */, "有奶"
/* 14 */, "毛发"
/* 15 */,
"善飞" /* 16 */, "黑色白条纹"/* 17 */, "游泳"
/* 18 */,
"长腿" /* 19 */, "长脖子" /* 20 */, "黑条纹"
/* 21 */,
"暗斑点" /* 22 */, "黄褐色" /* 23 */, "海燕"
{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*/
本次识别型专家系统可以采用多种语言编程,如 vc,vb,prolog 等等,选用 c 语言设计成动物识别型专家系统;
通过本次专家系统的设计,使我懂得了专家系统的组成,一个简单的专家系 统由用户界面,知识库,数据库,推理机,解释机构,知识获取机构;懂得了专 家系统的类别,分为解释型,预测型,诊断型,设计型,控制型,管理型专家系 统;专家系统的推理机分为正向推理和反向推理,一般选用正向推理;在运行程 序的过程中,我认识到智能系统的实践性和理论性的结合;