- 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)