1、人工智能课内实验报告(次)学 院: 自动化学院 班 级: 智能01 姓 名: 刘少鹏(34) 学 号: 目 录课内实验1:猴子摘香蕉问题得VC编程实现1课内实验2:编程实现简单动物识别系统得知识表示5课内实验3:盲目搜索求解数码问题18课内实验4:回溯算法求解四皇后问题33课内实验5:编程实现一字棋游戏37课内实验6:字句集消解实验课内实验7:简单动物识别系统得产生式推理6课内实验8:编程实现D-S证据推理算法8人工智能课内实验报告实验1:猴子摘香蕉问题得VC编程实现学 院: 自动化学院 班 级: 智能15 姓 名: 刘少鹏 (33) 学 号: 061504 日 期:0173810:512:0
2、0 实验1:猴子摘香蕉问题得VC编程实现一、 实验目得()熟悉谓词逻辑表示法;(2)掌握人工智能谓词逻辑中得经典例子-猴子摘香蕉问题得编程实现二、编程环境VC语言三、 问题描述房子里有一只猴子(即机器人),位于a处。在处上方得天花板上有一串香蕉,猴子想吃,但摘不到。房间得b处还有一个箱子,如果猴子站到箱子上,就可以摸着天花板。如图1所示,对于上述问题,可以通过谓词逻辑表示法来描述知识。要求通过VC语言编程实现猴子摘香蕉问题得求解过程。图1 猴子摘香蕉问题四、 源代码#iludestdi、unsignd ii;oid Monkey_Go_Box(unsgned hr ,usgned cary)
3、inf(Sep d:oke从走到%n, +,x, );x表示猴子得位置,为箱子得位置vid okey_Move_Box(cha , har y) printf(Se%d:monkey把箱子从%c运到%cn,+i, x, y);x表示箱子得位置,y为香蕉得位置oi nnBox() pint(”tep %:onkey爬上箱子n,+i);voi Monkey_Get_Bann() prnt(”Step%d:monkey摘到香蕉n, +i);oidmai() uigned charMnkey, Box, Banana; pinf(”*智能1501班*n); ritf(”*0615304*n”); ri
4、ntf(”*刘少鹏*n); pin(请用 c来表示猴子箱子香蕉得位置n); print(”Mokebotbananan”); scanf(”c”, Mnke); etha(); pint(”t”);scanf(”c, &Box); getcha(); rtf(t); scanf(%”, &Bnna); gcar(); pint(操作步骤如下”); if (Monkey ! Box) MeyGo_ox(oney,); (Box !=Banna) onkeoe_ox(Box,Bnana); nkeyOn_Box(); Monke_eana(); rntf(”n); gtar();五、 实验结果相关
5、截图六、心得体会 通过本次实验,我初步了学会了使用得新建工程,并且进行简单得程序编写。此外我还学会如何使用一些谓词来解决生活中得一些简单问题,并且用C编程给出具体得操作步骤,感觉对VC编程有了新得认识。在实验中我也遇到过许多问题,比如在我写完代码进行编译时总就是会出现一个错误“ata eor C1010:在查找预编译头时遇到意外得文件结尾,就是否忘记了向源中添加“#ilu tdaf、”关于这个错误我我问了几个同学得不出答案后,我决定通过上网查找,最终找到了解决方法,需要在该项目得每一个p结尾得文件属性中设置不使用预编译头即可。在这个过程中也锻炼了自己解决问题得能力。人工智能课内实验报告实验2:
6、编程实现简单动物识别系统得知识表示学 院: 自动化学院 班 级: 智能501 姓 名: 刘少鹏(3) 学 号:0613034 日 期: 07313 10:151:00 实验:编程实现简单动物识别系统得知识表示一、实验目得1、理解与掌握产生式知识表示方法;2、能够通过VC编程语言实现产生式系统得规则库。二、实验内容、以动物识别系统得产生式规则为例;2、用选定得编程语言建造规则库与综合数据库,并能对它们进行增加、删除与修改操作.三、 实验步骤1、 确定需要识别得动物及其属性本次实验得简单动物识别系统总共能识别7种动物,即:老虎、金钱豹、斑马、长颈鹿、企鹅、鸵鸟与信天翁。2、 建立识别七种动物识别系
7、统得规则3、 选定编程语言并确定综合数据库与规则库结构(1) 选用语言作为编程语言 ()综合数据库得建立(3)规则库得建立四、程序源代码#inue iostream#incue usngamepc std;stru RULES it cunt; charpre25; chaback55; int ma;od chc();RULES1= 1,”有毛发,哺乳动物,0 ,/所有规则静态数据库 ,”有奶,”哺乳动物,0, 1,有羽毛”,”鸟,, ,”会飞&下蛋,鸟,0 , 1,”吃肉,食肉动物”, , 3,”有锋利得牙齿&有爪&眼睛盯着前方”,食肉动物”, , 2,哺乳动物&有蹄&”,”有蹄类哺乳动物
8、”,0 , 2,”哺乳动物&反刍&”,”有偶蹄类哺乳动物”,0 , ,”哺乳动物食肉动物&黄褐色有暗斑&,”金钱豹,0 , ,哺乳动物&食肉动物&黄褐色&黑色条纹&”,老虎”,0, ,有蹄类哺乳动物&有长脖子有长腿&有暗斑&,长颈鹿,0 , 2,”有蹄类哺乳动物&黑条纹&,斑马,0 , 5,鸟不会飞&有长脖子有长腿&黑白色,鸵鸟,0 , 4,鸟&不会飞&会游泳黑白色&,”企鹅”,0 , 2,鸟&会飞&,信天翁”,0 , 1,”反刍,哺乳动物,0;in numbe;intm;nt cat = 5;ita;int lengh;/输入得事实长度srin f55;/输入得事实数组oiinut() wi
9、le (1) cat+; cout ”number rcat、cunt; cut 输入事实,两种以上得事实请在每个事实后加上&符号rca、pr; out ”输入结果” endl; i rcat、ack; rct、rk = 0; whil (1) cut ”输入“1继续添加规则,输入“2”查瞧规则库 p;if (p =1)pt();elsef (p =2)heck();lecut 输入错误,重新输入 ndl; vi elate() cout 输入要删除得条数 br; for (nt = 0; =ca; t+) ra 1 =rba; br+; cat; che();vod ek() cout en
10、dl ”规则库如下” endl; for (int = 0; i= ct; i+) ct i + ”、” 由 i、p ”可得 ri、acend; cut endl; ie (1) out m; if (= ) input(); el f(m = 3)dl(); it find_ule(its)/查找规则库中就是否还有可使用得规则fr (int i = ; 15; +)s = s*、mrk;/out”indrule结果”endl;etur s;in pae1(RULES r) /当前提条件为1时int j 0,i =1;sring str, ;sr = r、pe;hile (i= length)
11、f(fi = s)sr2=r、k;fength +1 st2;/加入事实库lgt+;/事实库得长度加1r、mrk;/标记规则已使用过brek;elsi;rtur r、mark;int pare2(RULS r)/前提条件不为1strig b1;sin str, r2;int i, j 1, num = 0;int a = ;str = r、pre;for (i 0; i != 10; +) /转换数组b =”;for (i =0; i ! str、lenth(); +i)if(sr、a() !&) += str、();lsej+;i = 1;hile( r、ot)fr (j ; j!= eng
12、h+1; j+)if(j=bi) += 1;i+; (a=r、count)sr2 r、bac;flegt +1 r;/加入事实库lenth+;/事实库得长度加1r、mark 1;/标记规则已使用过rturnr、mar;voidresult()int i = 1,m 0;wh (i ! length + 1)i(f= ”金钱豹)u ”该动物就是金钱豹 endl;m = 1;brek;eli (fi 老虎”)cout 该动物就是老虎 endl; ;bak;elsi (fi = ”长颈鹿)cout 该动物就是长颈鹿 endl;m = 1;be;eleif (fi =斑马”)ct 该动物就是斑马 nd
13、l;m = ;break;elseif (fi= 鸵鸟)out 该动物就是鸵鸟 nl; 1;break;elsei (i =”企鹅)out ”该动物就是企鹅 endl;m 1;break;lseif(f =信天翁)cut 信天翁 en;m =;break;elsei+;i (=)cut ”没有符合得动物,请确认特征,重新输入” ndl;id etify()inti = 0, u = 0;f(indule() = 0) /如果规则库中还有未使用得规则/cout还有未使用得规则edl;int nu =lengh;whl (i6)/从第一条规则开始遍历if (r、mar =0)/如果该条规则未使用i
14、f(i、cunt =1)/该条规则前提数为1u = pare1(i);if ( = 1)r、mark=;f (ri、ak = 1)out ”使用规则 +1;cu ”且加入得新事实为” ri、a endl;lseu = pare2(ri);i( =1)ri、mrk = 1;if (ri、mk = 1)ot ”使用规则”i + 1;o 且加入得新事实为 i、bac endl;if (i = 15)f (nu !=ength) = 0;num length;elsi =6;e+;elsecut”所有得规则都已使用” l;esult();/*主函数*void ain()cu *智能101班*” end
15、l;cu *061334*” endl;cout ”*刘少鹏*” en;cut ”进行动物识别请输入7” endl;ut ”进行规则库操作请输入8 m; ( =)i();elseif ( = 2)heck();elecout ”输入错误请重新输入” ndl; if ( = 7)in u = 0;cout 请输入动物得特征数 endl;in length;cout 请输入动物得特征”ed;for (nt i = 1; lengh; i+) ;idetiy();system(”aue”);五、 实验结果相关截图1、程序总体结构 2、 规则库操作查瞧规则库 3、 规则库操作添加规则添加袋鼠规则4、
16、规则库操作删除规则删除袋鼠规则5、动物识别识别长颈鹿六、心得体会 通过本次实验我深刻得理解与掌握产生式知识表示方法,并且能够通过VC编程语言实现产生式系统得规则库.本次实验我同样遇到许多问题,我通过自己查阅资料,与同学们讨论,逐步得将自己得问题解决,在这个过程中提高了我得问题解决能力。最后因为本次实验只有对数据库有清楚得掌握,同时熟悉规则才能合理编程,因此我在平时得学习中应当加大数据库与数据结构得学习力度,提高自己得编程能力。人工智能课内实验报告实验3:盲目搜索求解八数码问题学 院: 自动化学院 班 级: 智能150 姓 名: 刘少鹏 (3) 学 号: 0613034 日 期: 07-030
17、0:2:0 人工智能课内实验3:盲目搜索求解8数码问题1、 实验目得(1) 熟悉人工智能系统中得问题求解过程;(2) 熟悉状态空间中得盲目搜索策略;(3) 掌握盲目搜索算法,重点就是宽度优先搜索与深度优先搜索算法.2、 实验要求用VC语言编程,采用宽度优先搜索与深度优先搜索方法,求解8数码问题3、 实验内容(1) 采用宽度优先算法,运行程序,要求输入初始状态假设给定如下初始状态S02 8 31 47 5 与目标状态Sg 2 1 6 4 0 8 5 3 验证程序得输出结果,写出心得体会。 (2)对代码进行修改(选作),实现深度优先搜索求解该问题提示:每次选扩展节点时,从数组得最后一个生成得节点开
18、始找,找一个没有被扩展得节点。这样也需要对节点添加一个就是否被扩展过得标志。4 源代码及实验结果截图(1) 实验源代码 ince sdlb、hle yedef str e innm9; /棋盘状态 tdepth; /派生得深度g(n) indiffnum;/不在位得数目 h(n) in ale; /耗散值 f(n)=g(n)h(n) stuc de* r; truct Noe next; struc Nde pent;uod; /*- nd of strt nuNde in oii9; /棋盘初始状态int arge9;/棋盘目标状态nt nuNoe_num, tota_tep;numNode
19、 *ope, close; /Oe表与Close表mNoe *create_nmNoe() rtrn (umNe*)mo(sizof(nNode);nuNoe petrst(umNoe *head); /返回第一项,并从Op表中删除oioeninsert(numNod hed, numNoe *itm); /向Ope表中按序插入新节点dcloe_ae(numNodehed, nmNode *it); /向Ce表中插入新节点int exa(numod item); /扩展节点int pnt_reslt(numde *itm); /打印结果nu copy_mNde(numNode n);chars
20、NewNode(nmNoe *open,numNoe *cos, num9);/就是否在Open表或Cls表中voi prin_num(int u9); /打印棋盘状态intif(t nm9); /求不在位棋子得个数vo ni(); 初始化,获得棋盘初始状态与目标状态vod s*, nt);nt oprate(int um, int );vod fee_list(nuode *hea);/* Na:主函數/* Description: 程序入口int m(int agc,chaargv) /初始化Oe表与loe表 printf(”*智能1501*n);rnt(*刘少鹏*”); ptf(*130
21、34*n”); pen create_nuNd(); clse = creae_nuNoe(); openpre= open-next closepre= loseext =NULL; nit(); /由用户输入初始与目标状态/初始化初始节点 numod *p1; p = create_numN(); p1-pnt NUL; p1deph=0; i i =0; or( = 0; i; i+) p1nui = ori; pe_sert(pn, p1); uNdeum = 1; ope_efirs(en); whie (p!= NU) closeaen(ose, p1); if (expand(p
22、)return EX_CES;p = oegtist(open); prif(”No ltion!); rtun XT_SUE; * - ed of fucton mai - */vd iit()whil (1)pritf(”ease nput oprginl satus:nFor example:123456780 stans frn”1 2 3n” 5 6”7 8 0”);car temp10;an(”, &tp);int i =;fo (i = 0; i9& emp 0 0 & temp- 0 =8; i+)orgini =ep- 0;rintf(Please inuttarget sa
23、tus:n”);scaf(%s,&temp);int j =;fo ( =0; 9& emp - 0 = 0& temj- 0next; = hd;while (!= NUL tmvlue pvalue)q = ; = p-next;net = item;ite-pr = ;ite-next= ;f ( != NL)ppr = tem; /* - endoftinopn_insrt - /nNode *ogetfirst(uNod *head)numNoe p;if(a-next= L)retun L;p = hednex;ea-xt -next;if (pnet != UL)pnepre =
24、 ead;pp NULL;p-nex= NUL;eturn p; /*-edof funcionpen_getfirst - /void los_apped(nuoehed, nuNde item)iem-nxt headnext;iteme ea;dxt = item;i (itemnex != NULL)item-nxtre = tm; / - edof fntion close_append- *iepand(numNde p)numNe p;int op = ;fr (op 1; p =4; op+)p opy_numNoe();pete(p2nu, op);if (isNewode(
25、open, clo,p2num) =N)p2parent= 1;p2-dep=p1depth + ;p-difm = di(p2-num);p2vlue = 2depth p2iffnum;f (2diffnum= 0)otal_stp pntresul(p);rintf(Total step: %dn, total_te);ree_list(open);fee_lis(le);reurn 1;elumNode_num+;ope_st(pn, p2);elsefree(p2);eturn 0; / - end f fuin expand- */in operate(intm, int o)in
26、t blank;blank = 0;hile (ln != 0 &lnkeepth= oriindepth;-diffnum = rgindffum;vlue =origin-vlue;nt ;fo (i = ; inu)i= (oriinum);retr p; /* - en of fcion coy_nmNode - */intdiff(tum9)int i, dfum = 0;f ( 0; i9; i+)f (um! tgti)dinum+;return difnum; /* - end offncti if - /chriswNoe(numNode oen, mod close, n nm