欢迎来到天天文库
浏览记录
ID:48524863
大小:208.00 KB
页数:24页
时间:2020-02-07
《人工智能实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、.计算机科学与技术1341901301陈敏实验一:知识表示方法一、实验目的状态空间表示法是人工智能领域最基本的知识表示方法之一,也是进一步学习状态空间搜索策略的基础,本实验通过牧师与野人渡河的问题,强化学生对知识表示的了解和应用,为人工智能后续环节的课程奠定基础。二、问题描述有n个牧师和n个野人准备渡河,但只有一条能容纳c个人的小船,为了防止野人侵犯牧师,要求无论在何处,牧师的人数不得少于野人的人数(除非牧师人数为0),且假定野人与牧师都会划船,试设计一个算法,确定他们能否渡过河去,若能,则给出小船来回次数最少的最佳方案。三、基本要求输入:牧师人数(即野人人数)
2、:n;小船一次最多载人量:c。输出:若问题无解,则显示Failed,否则,显示Successed输出一组最佳方案。用三元组(X1,X2,X3)表示渡河过程中的状态。并用箭头连接相邻状态以表示迁移过程:初始状态->中间状态->目标状态。例:当输入n=2,c=2时,输出:221->110->211->010->021->000其中:X1表示起始岸上的牧师人数;X2表示起始岸上的野人人数;X3表示小船现在位置(1表示起始岸,0表示目的岸)。要求:写出算法的设计思想和源程序,并以图形用户界面实现人机交互,进行输入和输出结果,如:Pleaseinputn:2Pleasei
3、nputc:2SuccessedorFailed?:SuccessedOptimalProcedure:221->110->211->010->021->000四、算法描述(1)算法基本思想的文字描述;..从初始状态S(n,n,1)出发,形成的有合法且未达状态S11、S12、……、Sli。再分别从S11、S12、……、Sli出发形成所有合法而未达状态S111、S112、……、Sli1、Sli2、Sli……最终达到目标(0,0,0)(有解),或者找不到合法而未达状态(无解)。若有解,则从目标返回找前趋状态,前趋状态的前趋状态……直到初始状态。(2)判别(X1,X2
4、,X3)为合法状态条件:X1=0或X1=n或X1=X2。(3)数据结构:0已达1未达1栈STACK,记下“已达”状态及踪迹,并兼作队列。2STATE[X1][X2]=(4)算法基本思想的具体实现:1初始化:置STATE[N+1][N+1][2]中的有状态为“未达”0未达目标1已达到目标置队列STACK空,cond为当前是否已达到目标:cond=cond置初值2以S(n,n,1)为始点,置STATE为“已达”。S入队列STACK3while(队列STACK空且未达到目标时)A{取出队头元素地址=>p1,队头元素出队列Bwhile(未达到目标,且P1有可达、合法、且
5、未到达过的相邻顶点Q)if(Q=(000)则{cond=1,Q入队列}否则{置QW为“已达”,Q入队列}/*B可用函数COMBINE实现*/4if(cond=1)则按队列中前趋指针指示的次序依次输出序列,否则输出“渡河失败”。5COMBINE函数的功能等价于从数量不等的物品,分别选出1件、2件、……C件物品的所有组合,同时对每一种组合确定其合法性。COMBINE(){1栈SP初始化(SP存放已放入物品序号),NUM为已取出物品个数,NUM=0,i为准备取出物品序号,i<=1。2do{while(未达到目标,且所有物品还未取尽,且NUM6、取下一种,i++;取出第i种物品中一件来,该物来序号(即i)进栈,NUM++;判断该状态合法否?!/*用函数dicision实现*/..}if(未达到目标,且栈SP不空){则读栈SP=>i,将第种物品放回一件:NUM--:退栈;i++;}}while(未达到目标,且并非所有情况均已列举完)}dicision(){if(当前状态(x1,x2,x3)合法且未达)则(x1,x2,x3)及前趋指针入队列STACK;if((x1,x2,x3)==0,0,0))则cond=1;}五、源程序#includetypedefstructnode{intnp;/*7、Thenormalpeople'snumberatstartshore.*/intmp;/*Themadpeople'snumberatstartshore.*/intshore;/*'0'=endshore,'1'=startshore*/inttrack;/*Thetrackofthepoint*/}NODE;NODEstack[80];/*Themassagefromstack[1]*/intstate[80][80][2],n,c,front,back,cond;voiddicision(intt[]){inta[4],i;for(i=0;i<4;i++8、)a[i]=t[i];i
6、取下一种,i++;取出第i种物品中一件来,该物来序号(即i)进栈,NUM++;判断该状态合法否?!/*用函数dicision实现*/..}if(未达到目标,且栈SP不空){则读栈SP=>i,将第种物品放回一件:NUM--:退栈;i++;}}while(未达到目标,且并非所有情况均已列举完)}dicision(){if(当前状态(x1,x2,x3)合法且未达)则(x1,x2,x3)及前趋指针入队列STACK;if((x1,x2,x3)==0,0,0))则cond=1;}五、源程序#includetypedefstructnode{intnp;/*
7、Thenormalpeople'snumberatstartshore.*/intmp;/*Themadpeople'snumberatstartshore.*/intshore;/*'0'=endshore,'1'=startshore*/inttrack;/*Thetrackofthepoint*/}NODE;NODEstack[80];/*Themassagefromstack[1]*/intstate[80][80][2],n,c,front,back,cond;voiddicision(intt[]){inta[4],i;for(i=0;i<4;i++
8、)a[i]=t[i];i
此文档下载收益归作者所有