人工智能与专家系统实验报告

上传人:栀**** 文档编号:28322826 上传时间:2021-08-25 格式:DOC 页数:19 大小:667.50KB
返回 下载 相关 举报
人工智能与专家系统实验报告_第1页
第1页 / 共19页
人工智能与专家系统实验报告_第2页
第2页 / 共19页
人工智能与专家系统实验报告_第3页
第3页 / 共19页
点击查看更多>>
资源描述
暨南大学本科实验报告专用纸课程名称人工智能与专家系统成绩评定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 型数组 facts30 ,数组的编号对应着以上事实的编号 ,数组的值为 1 时,意味着对应编号的事实为真,否则为假 。2. 规则的格式的数据结构说明 ;. 学习帮手 .专业整理 .每条规则都拥有前件与后件,建立规则的数据结构时将前件与后件定义即可。 前件往往有一个或多个,而后件只有一个 。 为了方便采用序号代替前后件,因此定义前件为数组int condition6 ;定义后件 intoutcome; 规则的数据结构也随之敲定 。typedefstruct / 存放规则的结构体 ,由条件和结果构成皆用序号 int 型表示int condition6;/ 条件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.02.语言: 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. 信天翁 ;对应以上特征 ,设定整型数组存储求解过程中产生的各种信息,包括初始事实、推理得到的中间结论 ,以及最终结论 。int facts30 = 0 ;/ 记录被选择的事实,初始化都为 0,被选择后赋值为1对三种不同的信息进行区分的方法是利用序号区间进行区分。0-19序号部分是存放原始信息 , 20-23 存放的是中间结论 ,24-30 存放了最后的结论 。2. 推理机推理部分主要使用了两个函数,分别是 deduce 函数和 animal 函数。Deduce 函数是用于根据原始信息,进行规则的遍历 ,不断正向推理的函数;animal 函数是利用 deduce 函数推理得出的facts 数组,即综合数据库 ,进行结果的判断 ,如果推理得出的结果唯一,则返回推理成功的信息,输出最终的结果,否则判定为推理失败 。for (i = 0;i15;i+)/ 依次对 15 条规则进行检测j = 0;. 学习帮手 .专业整理 .f = rulei.conditionj;while (f != -1)/ 推理是否满足第i 条规则if (factsf = 0)/ 第 i 条规则有一个条件不满足,即为不满足该条规则break ;/ 从此次 i 规则检验循环中跳出j+;f = rulei.conditionj;/ 取出 i 规则中所需的条件序号if (f = -1)/ 若经过上一个循环有f=-1 ,则代表满足第i 条规则out1 = rulei.outcome;factsout1 = 1;/ 将得出的结论加入已知事实printf( 运用了规则 (%d) : , i);/ 并输出所用规则 ,以便查看j = 0;while (rulei.conditionj != -1)cout animalBaserulei.conditionj ;/ 输出规则所用先决条件j+;cout animalBaseout1 endl; / 输出规则所用结果. 学习帮手 .专业整理 .上述就是Deduce函数的主要内容 ,取出每一条规则的全部前件与事实库 facts 中进行比对 ,若满足该规则 ,则该规则的后件将会被扩充到facts 数组中,同时也文字输出 ,以便使用者确认运行过程中使用的规则。遍历完 15 条规则后 ,facts 数组中就存放了推理得出的全部事实。接下来就将 facts 数组传入 animal 函数,从综合数据库中遴选最终结论:int animal( int facts) / 判断知识库中是否有符合描述的动物int i = 24, a = 0, b = 0;/ 判断有多少结果满足特定动物区间while (i = 30)if ( facts i = 1)b = i;a+;i+;if (a = 1)return b; / 恰巧有唯一动物满足给出条件时,返回该动物编号else return 0;/ 否则返回 0,记为推理失败利用变量 a 累计最终结果的数目 ,如果 a=0 ,说明知识库中没有满足描述的动物;如果 a2,说明有多个动物满足描述条件,仍然不能确定最终结果。只有当 a=1 时,有唯一的动物符合描述 ,这时推理成功 ,返回该动物的编号并. 学习帮手 .专业整理 .输出。(六)实验结果1.输入 0 5 11 12 -1(这里末尾输入 -1 代表结束输入 )即输入有毛发 、吃肉、有黄褐色皮毛 、有暗斑点这四个特点,让系统进行推理。可得到唯一的结果 :豹2.输入 0 2 3 14 17 -1即输入有毛发 、有羽毛、会飞、长脖子、会游泳这五个特点交由程序进行推理。由于不存在这样的动物 ,因此结果是 :3.输入 20 22 11 12 13 -1即输入哺乳动物 、食肉动物 、有黄褐色皮毛 、有暗斑点 、有黑色条纹 ,根据这五个特点可以推导出两种动物:豹和虎 。 因此也无法推理出正确的结果。. 学习帮手 .专业整理 .(七)实验体会通过本次实验我对于人工智能的产生式系统有了进一步的认识,对于正向推理 、反向推理两种基本方式的原理和步骤都加深了理解。尤其是通过设计正向推理机 ,深切体会到了专家系统是根据知识和推理来求解问题的,这种模式与普通程序完全不同,就像我平日里处理问题时,是收集信息 ,而后根据常识与知识得出自己的结论这样的模式,在写这次实验的过程中带来了很新奇的编程体验 ,让我受益匪浅 。(八) 源代码#include #include usingnamespace std;char *results = 虎 , 豹 , 斑马 ,长颈鹿 , 企鹅 ,鸵鸟 , 信天翁 ;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. 信天翁 ;typedefstruct / 存放规则的结构体,由条件和结果构成皆用序号int 型表示int condition6;/ 条件,末尾用 -1 表示结束int outcome; / 结论Rule ;Rule rule15 = / 定义 15 个规则 0,-1 ,20 , / 有毛发 哺乳动物 1,-1 ,20 , / 有奶 哺乳动物 2,-1 ,21 , / 有羽毛 鸟 3,4,-1 ,21 ,/ 会飞 & 会生蛋鸟 5,-1 ,22 ,/ 吃肉 食肉动物 6,7,8,-1 ,22 ,/ 有锋利牙齿 & 有爪 & 眼向前方 食肉动物 20,8,-1 ,23 ,/ 哺乳动物 & 有蹄 有蹄类动物 20,9,-1 ,23 ,/ 哺乳动物 & 反刍 有蹄类动物 20,22,11,12,-1 ,25 ,/ 哺乳动物 & 食肉动物 & 有黄褐色皮毛 & 有暗斑点 豹 20,22,11,13,-1 ,24 ,/ 哺乳动物 & 食肉动物 & 有黄褐色皮毛 & 有黑色条纹 虎 23,14,15,12,-1 ,27 ,/ 有蹄类动物 & 长脖子 & 长腿 & 有暗斑点 长颈鹿 23,13,-1 ,26 ,/ 有蹄类动物 & 有黑色条纹 斑马. 学习帮手 .专业整理 . 21,16,14,15,18,-1 ,29 ,/ 鸟 & 不会飞 & 长脖子 & 长腿 & 黑白两色 鸵鸟 21,16,17,18,-1 ,28 ,/ 鸟 & 不会飞 & 会游泳 & 黑白两色 企鹅 21,19,-1 ,24 ;/ 鸟 & 善飞 信天翁int facts30 = 0 ;/ 记录被选择的事实,初始化都为0,被选择后赋值为1void list(); /列出事实可供描述者选择void input(); / 描述者输入特征事实int deduce();/ 推理机根据既得事实推理int animal( int facts );/ 判断知识库中是否有符合描述的动物void list() /列出事实可供描述者选择int i;for (i = 0;i = 30;i+)factsi = 0;for (i = 0;i24;i+)if (i % 4 = 0 & i != 0) cout endl; / 每列出 4 个事实换行. 学习帮手 .专业整理 .printf( %-15s , animalBasei);/ 列出前 24 个事实void input() / 描述者输入特征事实int f = 0; /f用于接收描述者输入的特征编号cout f;if (f = 0 & f = 23)factsf = 1;/ 接收描述者输入的事实,并在 flag 数组将其赋值为1/ 其余未接收的事实仍为0else if (f != -1)couterror! 请输入 023 之间的数字 ! endl; / 因为这里接收的事实仅限 0-23 区间内 cin.clear();cin.sync();. 学习帮手 .专业整理 .int deduce() / 推理机根据既得事实推理int f;int i, j;int out1;cout endl;for (i = 0;i15;i+)/ 依次对 15 条规则进行检测j = 0;f = rulei.conditionj;while (f != -1)/ 推理是否满足第i 条规则if (factsf = 0)/ 第 i 条规则有一个条件不满足,即为不满足该条规则break ;/ 从此次 i 规则检验循环中跳出j+;f = rulei.conditionj;/ 取出 i 规则中所需的条件序号if (f = -1)/ 若经过上一个循环有f=-1 ,则代表满足第i 条规则out1 = rulei.outcome;factsout1 = 1;/ 将得出的结论加入已知事实. 学习帮手 .专业整理 .printf( RULE(%d) : , i); / 并输出所用规则,以便查看j = 0;while (rulei.conditionj != -1)cout animalBaserulei.conditionj ;/ 输出规则所用先决条件j+;cout animalBaseout1 endl; / 输出规则所用结果if (animal(facts) != 0)/ 如果判断有唯一符合描述的动物,返回 1int b = animal(facts) - 24;cout endl;cout最终推理出您所描述的动物为: resultsb;else / 否则 ,输出 “没有找到 ”cout endl;cout推理失败 !没有完全符合条件的动物。 ;. 学习帮手 .专业整理 .return -1;int animal( int facts ) / 判断知识库中是否有符合描述的动物int i = 24, a = 0, b = 0;/ 判断有多少结果满足特定动物区间while (i = 30)if (facts i = 1)b = i;a+;i+;if (a = 1)returnb; / 恰巧有唯一动物满足给出条件时,返回该动物编号else return 0; / 否则返回0 ,记为推理失败int main()char q;. 学习帮手 .专业整理 .while (q !=n )list(); /列出事实可供描述者选择input(); / 描述者输入特征事实deduce(); / 推理机根据既得事实推理coutn是否重新推理 : (Y/N) q;system( cls );. 学习帮手 .
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 演讲稿件


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!