人工智能实验报告学 号XXXXX 姓 名 XXXXX实验名称动物识别专家系统实验目的本实验的主要目的是熟练使用推理方法,进行编程完成相应的功 能本次试验的预期功能是在系统可以像使用者提出问题,然后系统 根据该问题的回答来筛选出相应的动物并确定下一个问题其中下一 个问题的提出是在尽量减少提问次数的前提下找到的同时该系统还 具有增加记录的功能,可以增加包含的动物种类实验方案首先系统中包含了若干动物种类,例如狮子,老虎等由于每 种动物都有不同的属性,而根据这些属性就可以确定是哪一种动物 所以我们要有数据结构可以存储动物以及动物的不同属性为了节约 空间,我们将各个属性用一个数据结构存储起来这里我用的是数组进行存储,每 个记录代表了 种属性而动 物则用结构体存储,如下typedef struct anim{int flag[30];string nam;}anim;该结构体中包括了动物的名称以及属性数组对应的flag[i]=1, 则对应的第i个属性是满足的,反之该动物没有该属性这样就可以 得到不同动物的属性在提问的时候根据该问题的编号,找到存在该属性的动物并且进 行标记并且在剩余的动物中,对没有提问的各个属性进行判断,找 到尽可能能把这些动物平分成两部分的问题进行提问。
如此就可以找 到想要的动物同时如果猜测不正确可以添加新的动物或者属性,并设置各个动 物的属性,这样就可以进行学习,使得系统更加准确实验记录欢迎使用动物识别no 0 nalnal no 1 nalnal no 2 nalnal no 3 nalnal虎子老狮鸟狼£sS5毫育繇恿譬?请输入0首先运行程序会出项上图界面,该界面显示了当前所有的动物, 并且提出问题,用户可以根据问题进行选择,看到自己想要的动物对于每一个问题,都只能是真或者是假,因此在后续增加问题的 时候也要注意其实可以有多种情况,但是要进行扩展,所以本实验 没有增加该功能欢迎使用动物识别o 0 naimal o 1 naimal o 2 naimal o 3 naimal虎子 老狮鸟狼 isisisis冃只^疋口刀口二E ,请输入1 ;否>请输入0请输入0请输入0! 1 m great!虎子 老狮鸟狼 lelsisis欢迎使用动物识别O 3O 1 o 2 o 3naxmal naimal na imal na imalouT if n jrreat *该系统中有不同的问题,根据问题的提示可以对现有的动物进行 筛选,并且提出下一个问题,并使得提问的次数最少。
通过上面可以 看出当生育方式是胎生的时候,那么就在哺乳动物中进行选择,哺乳 动物中只有老虎是独居的,所以提问的时候就选择该问题这样提问 两次就可以得出结论而当生育方式不是胎生的时候,就只有一个鸟类,所以可以直接 获得结论for(int i=0;ivanc;i++){if(a[i]==l){if(an[i].flag[count]!=anser){a[i]=0;}}}代码分析:在回答一个问题之后,在剩下的动物判断提问的属性 是否满足,如果满足,那么就留下;如果不满足,那么去除for(int j=O;jvtc;j++){for(int i=0;i=0?yes-no:no-yes)v=dif&&aa[j]==l){count=j; dif=yes-no>0?yes-no:no-yes;}yes=0; no=0;}代码分析:上述代码是对下一个问题进行选择的代码,该部分主 要是将剩下的动物进行判断,利用二分查找的思想,尽量使下一个问 题回答之后,无论选什么答案,都使剩下的集合等分。
但是由于当前系统中的动物以及问题过少,因此我们可以向系统 中添加新的记录,以完善该系统首先在每次提问之后,用户可以判断系统回答是否正确,如果不 正确,可以手动添加记录以完善该系统系统会提示是否增加新的问 题,如果添加的话,首先要输入问题,注意该问题必须的非真即假, 不能有第三种情况然后对于新增的问题,对系统中的每一个动物都进行初始化,以 便于下一次判断然后可以增加动物的数目,对该动物的所有属性都要进行设置, 然后该记录就增加完成了足,请输0區否会飞? 足,请输入i;老鹰1S是是.1 ?■ A 叵请 1011?、]/■ 科输 猫请 否,是是0是是i是是? 1 毛入 羽输 否,1 ? A 肉请 否,o o o o o n n n n n;活.加占.:古,;讥.否增加记录孑是,否.欢迎使用动物识别需,活.古,0 12 3 4虎子 鹰老狮鸟曇isisisisis雀育方槌否彎否,请输入0请输入0否,请输入0如上左所示,在增加了该动物之后,我们可以在下次提问的时候 看到系统中的记录增加,并且可以根据问题获得刚刚增加的动物女口 上右图所示实验总结本次实验运用了归结原理、规则演绎推理的推理方法,进行设计。
对于不同的属性可以有时间Pl, P2・・・Pn这样在满足不同的条件之 后就可以进行推理,得到所要的动物了通过本次实验,我学习到了推理的使用方法,对于这种问题就的 解决也有了理解这不仅仅让我学习到了如何进行推理问题的证明, 也让我对该系统有了更深的了解这让我的编程的能力也有了进一步 的提咼。