农夫过河问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

A*应用于农夫过河问题
每次选择估价值最优的状态 进行转移,并将其加入关闭 列表,未在关闭列表的则计 由于 算估价函数并添加进开启列 表,以在开启列表的则看是 否估价值可以更新
h(s1) <= h(s2) + c(s1,s2)
0 0 0 0 人狼羊菜 1 0 0 0 1 1 0 0 1 0 1 0 1 0 0 1
启发式搜索
类似八数码和迷宫问题
八数码和迷宫问题以所求曼哈顿路径为 估价值,我们假设该问题的估价值也为 曼哈顿路径,但发现这样并不能得到正 确的解
我们假设当前状态与终态的 距离值为估价值
H =(1111)- (当前状态值)
G= step + H
从迷宫问题看A*
A*必须包含的因素
开放列表 关闭列表
每次从一个状态转移到另一个状态有四 种状态转移方式,分别对应于以下四种 情况
农夫独自过河 农夫带狼过河 农夫带羊过河 农夫带白菜过 河
四种转移方式分别可以四种 位运算表示
1.农夫独自过河 - 农夫位置单独与1异 或 2.农夫带狼过河(如果在同岸)-农夫 位,狼位与一异或 3.农夫带羊过河(如果在同岸)- 农 夫,羊与一异或 4.农夫带菜过河(如果在同岸) - 农夫,菜与一异或
0 0 1 0 1 0 1 0 0 1 0 0 1 1 0 0 0 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 1 1 1 0 0 0 1 0 1 1 1 0 0 0 0 1
0 0 0 0 1 0 1 1 0 0 0 1 0 0 1 0 1 0 0 1
0 1 1 0
1 1 0 1
1 0 1 1
1 1 1 1
问题的再次分析与优化
由于农夫过河问题的特殊性,一但在某次选择中出现 过此状态但没有被选择到,那么它便被放到开启列表, 之后出现该状态时则该状态必不会更优,所以没有必 要浪费空间存储开启列表内容,每次只需设置一个变 量用来保存下次所能到达的最优状态,将其加入关闭 列表,然后依次迭代,直至得到最优解
农wk.baidu.com过河问题
成员:冯旭 陈浩 秦晋
问题描述
• 一个农夫带着一只狼、一只羊和一棵白菜,身处河的南岸,他要把这些
东西全部运到北岸。他面前只有一只小船,船只能容下他和一件物品, 另外只有农夫才能撑船。如果农夫在场,则狼不能吃羊,羊不能吃白菜; 否则狼会吃羊,羊会吃白菜。所以农夫不能留下羊和白菜自己离开,也 不能留下狼和羊自己离开,但是狼不吃白菜。要求给出农夫将所有东西 运过河的方案。
问题解决
1.深度优先搜索
2.广度优先搜索 3. IDA*算法
广度优先搜索
1. 抽象的描述所要解决的问题
思考:农夫过河问题 怎样抽象为计算机语 言可描述的
从初始状态二进制0000(全部在河的南岸)出发,寻找一种全 部由安全状态构成的状态序列,它以二进制1111(全部到达河 的北岸)为最终目标。
2.细化问题解决过程
3.剪枝优化
每次状态转移后判断状态是否合 法,即可以互相攻击的两种物品 在同岸但人不在该岸,如果有则 停止,否则继续进行状态转移
4.添加标记数组进行再优化
通过标记数组来记 录那些状态已经搜 索过,可以避免重 复搜索同一状态
5.打印搜索路径
通过一个数组来保存到达当前 状态的上一个状态,一旦搜索 到最终结果就回溯打印路径
相关文档
最新文档