图搜索-野人过河案例

图搜索-野人过河案例

ID:38364826

大小:159.50 KB

页数:9页

时间:2019-06-11

图搜索-野人过河案例_第1页
图搜索-野人过河案例_第2页
图搜索-野人过河案例_第3页
图搜索-野人过河案例_第4页
图搜索-野人过河案例_第5页
资源描述:

《图搜索-野人过河案例》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、昆明理工大学信息工程与自动化学院学生实验报告(2011—2012学年第1学期)课程名称:人工智能开课实验室:信自楼计算机机房4442011年12月22日专业班级学号姓名成绩实验名称图搜索—野人过河案例指导教师教师评语教师签名:年月日一、上机目的及内容题目:设有3个传教士和3个野人来到河边,打算乘一只船从右岸到左岸去。该船的负载能力为两人。在任何时候,如果野人人数超过传教士人数,野人就会把传教士吃掉。他们怎样才能用这条船安全的把所有人都渡过河去?二、实验原理及基本技术路线图(方框原理图或程序流程图)实验原理分析

2、先来看看问题的初始状态和目标状态,假设和分为甲岸和乙岸:初始状态:甲岸,3野人,3牧师;乙岸,0野人,0牧师;船停在甲岸,船上有0个人;目标状态:甲岸,0野人,0牧师;乙岸,3野人,3牧师;船停在乙岸,船上有0个人;整个问题就抽象成了怎样从初始状态经中间的一系列状态达到目标状态。问题状态的改变是通过划船渡河来引发的,所以合理的渡河操作就成了通常所说的算符,根据题目要求,可以得出以下5个算符:渡1野人、渡1牧师、渡1野人1牧师、渡2野人、渡2牧师算符知道以后,剩下的核心问题就是搜索方法了,本算法采用深度优先搜索

3、,通过一个getSolutionSteps(…)函数找出下一步可以进行的渡河操作中的最优操作,如果没有找到则返回其父节点,看看是否有其它兄弟节点可以扩展,然后用steps.iterator(…)函数递规调用step.hasNext(…),一级一级的向后扩展。搜索中采用的一些规则如下:1、渡船优先规则:甲岸一次运走的人越多越好(即甲岸运多人优先),同时野人优先运走;乙岸一次运走的人越少越好(即乙岸运少人优先),同时牧师优先运走;92、不能重复上次渡船操作(通过链表中前一操作比较),避免进入死循环;3、任何时候河

4、两边的野人和牧师数均分别大于等于0且小于等于3;4、由于只是找出最优解,所以当找到某一算符(当前最优先的)满足操作条件后,不再搜索其兄弟节点,而是直接载入链表。5、若扩展某节点a的时候,没有找到合适的子节点,则从链表中返回节点a的父节点b,从上次已经选择了的算符之后的算符中找最优先的算符继续扩展b。传教士和食人者问题的全部可能状态状态m,c,b状态m,c,b状态m,c,b状态m,c,bS03,3,1S81,3,1S163,3,0S241,3,0S13,2,1S91,2,1S173,2,0S251,2,0S23

5、,1,1S101,1,1S183,1,0S261,1,0S33,0,1S111,0,1S193,0,0S271,0,0S42,3,1S120,3,1S202,3,0S280,3,0S52,2,1S130,2,1S212,2,0S290,2,0S62,1,1S140,1,1S222,1,0S300,1,0S72,0,1S150,0,1S232,0,0S310,0,0021111010320220321311020S0S17S2111011002S1S2200111013310120S290210S30S1401

6、S13010111102S19300S5221S10S12031S24110S1831002S13000传教士和食人者问题的状态空间图1野人1牧师右岸结束开始左岸1野人1牧师2野人2牧师程序设计思想9三、所用仪器、材料(设备名称、型号、规格等或使用软件)1台PC及eclipse软件四、实验方法、步骤(或:程序代码或操作过程)问题中的传教士、野人和船都是非常简单的物件,所以就简单地用单字符字符串“m”、“c”和“v”来代表。importjava.util.*;importjava.io.*;publicclas

7、sMACPS{publicclassSolutionNotFoundExceptionextendsRuntimeException{}staticfinalObjectMISSIONARY="m",//m指代传教士CANNIBAL="c",//c指代野人BOAT="v";//v指代船privateintboat_max_load,boat_min_load=1;privateRiverScenefirstScene,finalScene;privateCollectiongetSolutionSteps(S

8、tacktakenSteps){RiverScenelastScene=(RiverScene)takenSteps.peek();if(lastScene.equals(finalScene))returntakenSteps;RiverScenenewStep=lastScene.deepCopy();intstart=boat_max_load,stop=boat_min_load-1,ste

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。