网站大量收购独家精品文档,联系QQ:2885784924

图搜索-野人过河案例.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图搜索-野人过河案例

昆明理工大学信息工程与自动化学院学生实验报告 ( 2011 — 2012 学年 第 1 学期 ) 课程名称:人工智能 开课实验室:信自楼计算机机房444 2011 年12月22 日 专业班级 学号 姓名 成绩 实验名称 图搜索—野人过河案例 指导教师 教师评语 教师签名: 年 月 日 一、上机目的及内容 题目:设有3个传教士和3个野人来到河边,打算乘一只船从右岸到左岸去。该船的负载能力为两人。在任何时候,如果野人人数超过传教士人数,野人 就会把传教士吃掉。他们怎样才能用这条船安全的把所有人都渡过河去? 二、实验原理及基本技术路线图(方框原理图或程序流程图) 实验原理分析 先来看看问题的初始状态和目标状态,假设和分为甲岸和乙岸: 初始状态:甲岸,3野人,3牧师; 乙岸,0野人,0牧师; 船停在甲岸,船上有0个人; 目标状态:甲岸,0野人,0牧师; 乙岸,3野人,3牧师; 船停在乙岸,船上有0个人; 整个问题就抽象成了怎样从初始状态经中间的一系列状态达到目标状态。问题状态的改变是通过划船渡河来引发的,所以合理的渡河操作就成了通常所说的算符,根据题目要求,可以得出以下5个算符: 渡1野人、渡1牧师、渡1野人1牧师、渡2野人、渡2牧师 算符知道以后,剩下的核心问题就是搜索方法了,本算法采用深度优先搜索,通过一个getSolutionSteps (…)函数找出下一步可以进行的渡河操作中的最优操作,如果没有找到则返回其父节点,看看是否有其它兄弟节点可以扩展,然后用steps.iterator (…)函数递规调用step.hasNext (…),一级一级的向后扩展。 搜索中采用的一些规则如下: 1、渡船优先规则:甲岸一次运走的人越多越好(即甲岸运多人优先),同时野人优先运走;乙岸一次运走的人越少越好(即乙岸运少人优先),同时牧师优先运走; 2、不能重复上次渡船操作(通过链表中前一操作比较),避免进入死循环; 3、任何时候河两边的野人和牧师数均分别大于等于0且小于等于3; 4、由于只是找出最优解,所以当找到某一算符(当前最优先的)满足操作条件后,不再搜索其兄弟节点,而是直接载入链表。 5、若扩展某节点a的时候,没有找到合适的子节点,则从链表中返回节点a的父节点b,从上次已经选择了的算符之后的算符中找最优先的算符继续扩展b。 传教士和食人者问题的全部可能状态 状 态 m, c, b 状 态 m, c, b 状 态 m, c, b 状 态 m, c, b S0 3,3,1 S8 1,3,1 S16 3,3,0 S24 1,3,0 S1 3,2,1 S9 1,2,1 S17 3,2,0 S25 1,2,0 S2 3,1,1 S10 1,1,1 S18 3,1,0 S26 1,1,0 S3 3,0,1 S11 1,0,1 S19 3,0,0 S27 1,0,0 S4 2,3,1 S12 0,3,1 S20 2,3,0 S28 0,3,0 S5 2,2,1 S13 0,2,1 S21 2,2,0 S29 0,2,0 S6 2,1,1 S14 0,1,1 S22 2,1,0 S30 0,1,0 S7 2,0,1 S15 0,0,1 S23 2,0,0 S31 0,0,0 传教士和食人者问题的状态空间图 程序设计思想 三、所用仪器、材料(设备名称、型号、规格等或使用软件) 1台PC及eclipse软件 四、实验方法、步骤(或:程序代码或操作过程) 问题中的传教士、野人和船都是非常简单的物件,所以就简单地用单字符字符串“m”、“c” 和 “v”来代表。 import java.util.*; import java.io.*; public class MACPS { public class SolutionNotFoundException extends RuntimeException { } static final Object MISSIONARY = m, // m指代传教士 CANNIBAL = c, // c指代野人 BOAT = v; // v指代船 private int boat_max

文档评论(0)

xy88118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档