人工智能与专家系统实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
暨南大学本科实验报告专用纸
课程名称人工智能与专家系统成绩评定0
实验项目名称动物识别系统设计指导教师0
实验项目编号实验项目类型综合型0
实验地点南校区学生姓名学号0
学院信息科学技术学院系计算机科学系专业0
实验时间2017年12 月日-- 年月日温度℃湿度
(一)实验目的
通过建立动物识别产生式系统,理解并体会知识库与控制系统相互独立的智能产生式系统与一般程序的区别。
(二)实验要求
1.系统的设计和完成可以使用各种编程语言和实用工具,不采用人工智能语言和工具,这样能够使你更加了解专家系统。
2.推荐使用语言:C、java、php、javascript、delphi。也可以使用其他语言。
3如果使用数据库做后台,要求使用最简单的Access。
4.系统可以使用图形界面,简单的也可以使用字符界面,不要求。
(三)设计并完成知识库
本课程设计的主旨是设计并实现具有15条规则能自动识别7种动物的产生式系统。知识库与控制系统相互独立,系统完成后除了能识别已有的7种动物外,按产生式知识表示方法向知识库中添加、修改新的知识后,系统能在不修改控制系统程序的情况下仍然能正确识别。
1.综合数据库中数据结构说明;
产生式通过满足前件,得到后件的结论或者执行后件的相应动作,即后件由前件来触发。同时,一个产生式生成的结论可以作为另一个产生式的前提或语言变量使用,进一步可构成产生式系统。
因此在通过有关特征识别动物的特征中规定:
识别动物的前件(即动物的特征):
0:有毛发 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.信天翁
于是在综合数据库中,将设定int型数组facts[30],数组的编号对应着以上事实的编号,数组的值为1时,意味着对应编号的事实为真,否则为假。
2.规则的格式的数据结构说明;
每条规则都拥有前件与后件,建立规则的数据结构时将前件与后件定义即可。前件往往有一个或多个,而后件只有一个。为了方便采用序号代替前后件,因此定义前件为数组int condition[6];定义后件int outcome;规则的数据结构也随之敲定。
typedef struct//存放规则的结构体,由条件和结果构成皆用序号int型表示
{
int condition[6];//条件
int outcome;//结论
}Rule;
将15条规则转化为符号:
{{0},20},//有毛发→哺乳动物
{{1},20},//有奶→哺乳动物
{{2},21},//有羽毛→鸟
{{3,4},21},//会飞&会生蛋→鸟
{{5},22},//吃肉→食肉动物
{{6,7,8},22},//有锋利牙齿&有爪&眼向前方→食肉动物
{{20,8},23},//哺乳动物&有蹄→有蹄类动物
{{20,9},23},//哺乳动物&反刍→有蹄类动物
{{20,22,11,12},25},//哺乳动物&食肉动物&有黄褐色皮毛&有暗斑点→豹
{{20,22,11,13},24},//哺乳动物&食肉动物&有黄褐色皮毛&有黑色条纹→虎
{{23,14,15,12},27},//有蹄类动物&长脖子&长腿&有暗斑点→长颈鹿
{{23,13},26},//有蹄类动物&有黑色条纹→斑马
{{21,16,14,15,18,},29},//鸟&不会飞&长脖子&长腿&黑白两色→鸵鸟
{{21,16,17,18,},28},//鸟&不会飞&会游泳&黑白两色→企鹅
{{21,19},24}};//鸟&善飞→信天翁
3.推理机(包括正向和反向推理)过程。
在上述规则的基础上,可以利用推理机对给出条件进行推理:
(1)正向推理:
从下向上进行推理。在建立规则库时需要使子规则在父规则前。在进行正向推理是只要将规则库从前到后遍历下来看是否能由给定规则推出
相应结果即可。通过判断每次与规则匹配得到的结果,如果结果不是动物,则更新事实库,将此次结果作为前件匹配下一个规则。若有多条规则可用,则使用冲突消解策略,选取一条规则执行。直到最终结果是动物时,视为
推理成功。
具体步骤如下:
a.输入得到当前事实facts[],针对15条rules轮流筛查可用规则。
b.将rules所需的前件提取出来与facts中的事实进行比对。若有
多条规则可用时,冲突消解的方法是:选取规则表rules中顺序最前的规
则。找到可用规则。扩充facts,重复b步骤。
c.在无可扩充时,检查facts,若其中没有结果是动物,则推理失
败;若其中推理出超过两个动物时,仍记为推理失败。在只有一个结果是
动物时,则推理成功。
(2)反向推理:
反向推理的思路是从事实库的动物开始从前向后进行匹配,如果所有动物都不能推出为识别失败,若能推出其中一个,则识别成功。若有多
条规则可用,则从中选出一条规则,将规则的前件添加到综合数据库。
具体步骤如下:
a.假设有动物m,若其已经在facts中,则假设成立搜索终止。
b.若该假设动物不在facts中,则从rules中所有后件中含有该动
物m的规则组成表。若该表为空,则询问用户fact的真假,若为真,则
将fact添加到facts,搜索中止。
c.若该表不为空,则逐个判断表内规则是否有规则的全部前件都包
含在facts中,如果有,则证明假设可以直接被推出。识别成功。
d.如果不能直接推出,则重新进行步骤b,直至满足步骤c。这时,
我们认为假设可以被间接推出,识别成功。否则若没有可用规则,则识别
失败。
(四)开发环境
1.工具:C-free 5.0
2.语言:C++
3.OS平台说明:win10
(五)综合数据库与推理机
1.综合数据库
char *animalBase[] = { "0.有毛发","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.信天翁" };
对应以上特征,设定整型数组存储求解过程中产生的各种信息,包括初始