迷宫搜索(设计任务书) .docVIP

  • 6
  • 0
  • 约8.47千字
  • 约 13页
  • 2016-10-18 发布于重庆
  • 举报
迷宫搜索(设计任务书)

人工智能实验报告 数计学院 计算机系02级一班 系统方向 1002016 林锋杰 指导老师: 林世平、王一蕾 2005-07-04 凌晨03:54 人工智能实验报告 设计题目:迷宫搜索系统 设计任务:设计一个迷宫搜索系统,掌握智能搜索算法中的盲目搜索(如:广度搜索与深度和搜索)和启发式搜索(如:A*算法)这两类基本方法,同时通过具体的问题体会搜索算法、数据结构、概率等知识的综合应用。 设计环境及使用说明 语言:C# 开发工具: Microsoft Visual Studio .NET 操作环境: Microsoft Windows XP SP2 系统已实现的功能 ①生成“完美迷宫”(保证有路径),可调迷宫规模(n*n),宫格大小; ②生成“随机迷宫”,可调迷宫规模(n*n),宫格大小,墙的比率; ③ 设置演示的速度,动态演示搜索过程; ④实现3种搜索算法:广度优先,深度优先,A*搜索; ⑤各种情况下的界面重绘 ; ⑥退出程序; 算法思想及分析 ㈠ 深度优先搜索:从初始节点S0开始,在它的子节点中选择一个节点进行考察,若不是目标节点,则再在该子节点的子节点中选择一个节点进行考察,一直如此向下搜索。当到达某个子节点,且该子节点既不是目标节点又不能继续扩展时,才选择其兄弟节点进行考察。语言描述如下: ⑴把初始节点S0放入OPEN表。 ⑵如果OPEN表为空,则问题无解,退出。 ⑶把OPEN表的第一个节点(记为节点n)取出放入CLOSE表。 ⑷考察节点n是否为目标节点。若是,则求得问题的解,退出。 ⑸若节点,不可扩展,则转第⑵步。 ⑹扩展节点n,将其子节点放入OPEN表的首部,并为每一个字节点都配置指向父节点的指针,然后转第⑵步。 程序语言描述如下: //深度搜索 /*1. OPEN = (s), CLOSED = (); * 2. LOOP if OPEN =() then EXIT(fail); * 3. n = FIRST(OPEN); * 4. if GOAL(n) then EXIT(success); * 5. REMOVE(n, OPEN) , ADD(n, CLOSED) * 6. EXPAND(n) -- {m1,m2……} 其中(mi NOT_IN CLOSED||OPEN) * 7. ADD(mi, OPEN) , Parent(mi) = n * 8. GO LOOP */ 程序框图描述如下: ㈡ 广度优先搜索:从初始节点S0开始,逐层地对节点进行扩展并考察它是否为目标节点,在第n层的节点没有全部扩展并考察之前,不对第n+1层的节点进行扩展。OPEN表中的节点总是按进入的先后顺序排列。语言描述如下: ⑴把初始节点S0放入OPEN表。 ⑵如果OPEN表为空,则问题无解,退出。 ⑶把OPEN表的第一个节点(记为节点n)取出放入CLOSE表。 ⑷考察节点n是否为目标节点。若是,则求得问题的解,退出。 ⑸若节点,不可扩展,则转第⑵步。 ⑹扩展节点n,将其子节点放入OPEN表的尾部,并为每一个字节点都配置指向父节点的指针,然后转第⑵步。 程序语言描述如下: //广度搜索 /* 1. OPEN = (s), CLOSED = (); * 2. LOOP if OPEN =() then EXIT(fail); * 3. n = FIRST(OPEN); * 4. if GOAL(n) then EXIT(success); * 5. REMOVE(n, OPEN) , ADD(n, CLOSED) * 6. EXPAND(n) -- {m1,m2……} 其中(mi NOT_IN CLOSED||OPEN) * 7. ADD(OPEN, mi) , Parent(mi) = n * 8. GO LOOP */ 程序框图描述如下: ㈢ 启发式搜索:若S0不是目标节点,则扩展它,并为其每个子节点配置一个代价值,取代价值最小的节点进行考察,若不是目标节点,则继续将其扩展,为其每个子节点附上一个代价值,加入到OPEN表中。取出当前OPEN表中代价值最小的节点进行考察。语言描述如下: ⑴把初始节点S0放入OPEN表。 ⑵如果OPEN表为空,则问题无解,退出。 ⑶把OPEN表的第一个节点(记为节点n)取出放入CLOSE表。 ⑷考察节点n是否为目标节点。若是,则求得问题的解,退出。 ⑸若节点,不可扩展,则转第⑵步。 ⑹扩展节点n,将其子节点放入OPEN表的首部,并为每一个字节点都配置一个代价值和指向父节点的指针,把当前OPEN表中代价值最小的节点排到第一个,

文档评论(0)

1亿VIP精品文档

相关文档