江南大学物联网工程学院实验报告课程名称人工智能实验名称动物专家系统实验日期2016-4-20班级计科1305姓名游思睿学号1030413529实验报告要求1.实验名称2.实验要求3.实验环境4.实验步骤5.实验体会一、实验目的:基本了解专家系统的原理和定义具体专家系统程序实现。二、实验内容:动物识别系统该系统是用来识别7种动物利用列举的足够多的特征,组成15条规则来正确的把各种动物区别开来。1)规则规则1:如果:动物有毛发则:该动物是哺乳动物规则2:如果:动物有奶则:该单位是哺乳动物规则3:如果:该动物有羽毛则:该动物是鸟规则4:如果:动物会飞,且会下蛋则:该动物是鸟规则5:如果:动物吃肉则:该动物是肉食动物规则6:如果:动物有犬齿,且有爪,且眼盯前方则:该动物是食肉动物规则7:如果:动物是哺乳动物,且有蹄则:该动物是有蹄动物规则8:如果:动物是哺乳动物,且是反刍动物则:该动物是有蹄动物规则9:如果:动物是哺乳动物,且是食肉动物,且是黄褐色的,且有暗斑点则:该动物是豹规则10:如果:如果:动物是黄褐色的,且是哺乳动物,且是食肉,且有黑条纹则:该动物是虎规则11:如果:动物有暗斑点,且有长腿,且有长脖子,且是有蹄类则:该动物是长颈鹿规则12:如果:动物有黑条纹,且是有蹄类动物则:该动物是斑马规则13:如果:动物是鸟,且不会飞,且有长脖子,且长腿,且有黑白两色则:该动物是鸵鸟规则14:如果:动物是鸟,且会游泳,且不会飞,且有黑白两色则:该动物是企鹅规则15:如果:动物是鸟,且善飞,则:该动物是信天鸽2)综合数据库综合数据库为事实库,主要用来存放问题求解过程中的各种当前信息,包括原始事实,中间结论及最终结论,中间结论又可作为下一步推理的事实,综合数据库的内容是不断变化的。3)推理机构1.知识库中再无可运用的知识。2.经推理已求得了问题的解。三、实验环境VS2010四、实验步骤(对照截图具体说明,尽量详细)#includestdio.h#includestdlib.hintmain(intargc,char**argv){printf(-------------人工智能-----------\n);printf(----------动物专家识别系统------\n);printf(Version1.0\n);printf(\n\n\n);printf(现在开始识别:\n\n);intx1;intx2;intx3;intx4;//哺乳动物判断inta1,a2;printf(Q1:有毛发吗?\n1:YES\n0:NO\n);scanf(%d,&a1);//printf(%d,a1);printf(Q2:有奶吗?\n1:YES\n0:NO\n);scanf(%d,&a2);//printf(%d,a2);printf(\n\n\n初步结果:\n);if(a1==1&&a2==1){printf(----------是哺乳动物----------\n\n);x1=1;}else{printf(----------不是哺乳动物----------\n\n);x1=0;}printf(\n\n);//鸟判断intb1,b2,b3;printf(Q3:有羽毛吗?\n1:YES\n0:NO\n);scanf(%d,&b1);printf(Q4:会飞吗?\n1:YES\n0:NO\n);scanf(%d,&b2);printf(Q5:会下蛋吗?\n1:YES\n0:NO\n);scanf(%d,&b3);printf(\n\n\n初步结果:\n);if(b1==1){printf(----------是鸟----------\n\n);x2=1;}elseif(b2==1&&b3==1){printf(----------是鸟----------\n\n);x2=1;}else{printf(----------不是鸟----------\n\n);x2=0;}printf(\n\n);//食肉动物判断intc1,c2,c3,c4;printf(Q6:吃肉吗?\n1:YES\n0:NO\n);scanf(%d,&c1);printf(Q7:有犬齿吗?\n1:YES\n0:NO\n);scanf(%d,&c2);printf(Q8:有爪吗?\n1:YES\n0:NO\n);scanf(%d,&c3);printf(Q9:眼盯前方吗?\n1:YES\n0:NO\n);scanf(%d,&c4);printf(\n\n\n初步结果:\n);if(c1==1){printf(----------是食肉动物----------\n\n);x3=1;}elseif(c2==1&&c3==1&&c3==1){printf(----------是食肉动物----------\n\n);x3=1;}else{printf(----------不是食肉动物----------\n\n);x3=0;}printf(\n\n);//有蹄类动物判断intd1,d2;printf(Q10:有蹄吗?\n1:YES\n0:NO\n);scanf(%d,&d1);printf(Q11:反刍吗?\n1:YES\n0:NO\n);scanf(%d,&d2);printf(\n\n\n初步结果:\n);if(d1==1&&x1==1){printf(----------是有蹄类动物----------\n\n);x4=1;}elseif(d2==1&&x1==1){printf(----------是有蹄类动物----------\n\n);x4=1;}else{printf(----------不是有蹄类动物----------\n\n);x4=0;}printf(\n\n\n\n);printf(下面进行详细判断:\n\n);intn1,n2,n3,n4,n5,n6,n7,n8;printf(Q12:是黄褐色吗?\n1:YES\n0:NO\n);scanf(%d,&n1);printf(Q13:身上有暗斑点?\n1:YES\n0:NO\n);scanf(%d,&n2);printf(Q14:有黑色条纹吗?\n1:YES\n0:NO\n);scanf(%d,&n3);printf(Q15:有长脖子吗?\n1:YES\n0:NO\n);scanf(%d,&n4);printf(Q16:有长腿吗?\n1:YES\n0:NO\n);scanf(%d,&n5);printf(Q17:善飞吗?\n1:YES\n0:NO\n);scanf(%d,&n6);printf(Q18:有黑白二色吗?\n1:YES\n0:NO\n);scanf(%d,&n7);printf(Q19(最后一个问题):会游泳吗?\n1:YES\n0:NO\n);scanf(%d,&n8);printf(\n\n);printf(最终结果:\n);//r9if(x1==1&&x2==0&&x3==1&&x4==0&&n1==1&&n2==1&&n3==0&&n4==0&&n5==0&&n6==0&&n7==0&&n8==0)printf(----------该动物是金钱豹----------);//r10elseif(x1==1&&x2==0&&x3==1&&x4==0&&n1==1&&n2==0&&n3==1&&n4==0&&n5==0&&n6==0&&n7==0&&n8==0)printf(----------该动物是虎----------);//r11elseif(x1==1&&x2==0&&x3==0&&x4==1&&n1==0&&n2==1&&n3==0&&n4==1&&n5==1&&n6==0&&n7==0&&n8==0)printf(----------该动物是长颈鹿----------);//r12elseif(x1==1&&x2==0&&x3==0&&x4==1&&n1==0&&n2==0&&n3==1&&n4==0&&n5==0&&n6==0&&n7==0&&n8==0)printf(----------该动物是斑马----------);//r13elseif(x1==0&&x2==1&&x3==0&&x4==0&&n1==0&&n2==0&&n3==0&&n4==1&&n5==1&&n6==0&&n7==1&&n8==0)printf(----------该动物是鸵鸟----------);//r14elseif(x1==0&&x2==1&&x3==0&&x4==0&&n1==0&&n2==0&&n3==0&&n4==0&&n5==0&&n6==0&&n7==1&&n8==1)printf(----------该动物是企鹅----------);//r15elseif(x1==0&&x2==1&&x3==0&&x4==0&&n1==0&&n2==0&&n3==0&&n4==0&&n5==0&&n6==1&&n7==0&&n8==0)printf(----------该动物是信天翁----------);elseprintf(我操,没见过,你丫去火星找找吧);printf(\n\n\n\n\n);getchar();getchar();printf(判断完毕,按任意键退出\n);return(EXIT_SUCCESS);}五、实验体会动物专家系统,我经历了几次修改,原本的设计是利用数组存储各种格则,然后把每次推理的规则都存入一个6位的数组,因为最长的推理都只需要6条规则就能推出。但我想了很久都没弄明白规则直接跳转的数据转换,能做到按照每个动物事实的顺序推倒就没问题,但是顺序一旦出错正确的推到下一条规则。教师评价优良中及格不及格教师签名日期