人工智能与专家系统课程设计.doc
《人工智能与专家系统课程设计.doc》由会员分享,可在线阅读,更多相关《人工智能与专家系统课程设计.doc(12页珍藏版)》请在沃文网上搜索。
1、 目录1. 设计任务1.1 设计题目1.2设计要求1.3设计任务2方案设计2.1原理2.2 具体设计方法3系统实施3.1 系统开发环境3.2系统主要功能介绍3.3处理流程图3.4 核心源程序3.5系统运行结果4开发心得4.1设计存在的问题4.2进一步改进提高的设想4.3经验和体会5参考文献 1. 设计任务1.1 设计题目在一个3*3的方棋盘上放置着1,2,3,4,5,6,7,8八个数码,每个数码占一格,且有一个空格。这些数码可以在棋盘上移动,该问题称八数码难题或者重排九宫问题。1.2 设计要求其移动规则是:与空格相邻的数码方格可以移入空格。现在的问题是:对于指定的初始棋局和目标棋局,给出数码的
2、移动序列。1.3 设计任务利用人工智能的图搜索技术进行搜索,解决八数码问题来提高在推理中的水平,同时进行新方法的探讨。2. 方案设计2.1 原理八数码问题是个典型的状态图搜索问题。搜索方式有两种基本的方式,即树式搜索和线式搜索。搜索策略大体有盲目搜索和启发式搜索两大类。盲目搜索就是无“向导”的搜索,启发式搜索就是有“向导”的搜索。2.2 具体设计方法启发式搜索由于时间和空间资源的限制,穷举法只能解决一些状态空间很小的简单问题,而对于那些大状态空间的问题,穷举法就不能胜任,往往会导致“组合爆炸”。所以引入启发式搜索策略。启发式搜索就是利用启发性信息进行制导的搜索。它有利于快速找到问题的解。由八数
3、码问题的部分状态图可以看出,从初始节点开始,在通向目标节点的路径上,各节点的数码格局同目标节点相比较,其数码不同的位置个数在逐渐减少,最后为零。所以,这个数码不同的位置个数便是标志一个节点到目标节点距离远近的一个启发性信息,利用这个信息就可以指导搜索。即可以利用启发信息来扩展节点的选择,减少搜索范围,提高搜索速度。 启发函数设定。对于八数码问题,可以利用棋局差距作为一个度量。搜索过程中,差距会逐渐减少,最终为零,为零即搜索完成,得到目标棋局。3. 系统实施3.1 系统开发环境Windows操作系统、SQL Server 200X3.2 系统主要功能介绍该搜索为一个搜索树。为了简化问题,搜索树节
4、点设计如下:struct Chess/棋盘 int cellNN;/数码数组 int Value;/评估值 Direction BelockDirec;/所屏蔽方向 struct Chess * Parent;/父节点;int cellNN; 数码数组:记录棋局数码摆放状态。int Value; 评估值:记录与目标棋局差距的度量值。Direction BelockDirec; 所屏蔽方向:一个屏蔽方向,防止回推。Direction :enum DirectionNone,Up,Down,Left,Right;/方向枚举struct Chess * Parent; 父节点:指向父亲节点。下一步可
5、以通过启发搜索算法构造搜索树。搜索采用广度搜索方式,利用待处理队列辅助,逐层搜索(跳过劣质节点)。搜索过程如下: (1)、把原棋盘压入队列; (2)、从棋盘取出一个节点; (3)、判断棋盘估价值,为零则表示搜索完成,退出搜索; (4)、扩展子节点,即从上下左右四个方向移动棋盘,生成相应子棋盘;(5)、对子节点作评估,是否为优越节点(子节点估价值小于或等于父节点则为优越节点),是则把子棋盘压入队列,否则抛弃; (6)、跳到步骤(2);3.3 处理流程图3.4 核心源程序#include stdio.h#include stdlib.h#include time.h#include string.
6、h#include #include using namespace std;const int N=3;/3*3棋盘const int Max_Step=30;/最大搜索深度enum DirectionNone,Up,Down,Left,Right;/方向struct Chess/棋盘 int cellNN;/数码数组 int Value;/评估值 Direction BelockDirec;/所屏蔽方向 struct Chess * Parent;/父节点;/打印棋盘void PrintChess(struct Chess *TheChess) printf(-n); for(int i=
7、0;iN;i+) printf(t); for(int j=0;jcellij); printf(n); printf(tttt差距:%dn,TheChess-Value);/移动棋盘struct Chess * MoveChess(struct Chess * TheChess,Direction Direct,bool CreateNewChess) struct Chess * NewChess; /获取空闲格位置 int i,j; for(i=0;iN;i+) bool HasGetBlankCell=false; for(j=0;jcellij=0) HasGetBlankCell=
8、true; break; if(HasGetBlankCell) break; /移动数字 int t_i=i,t_j=j; bool AbleMove=true; switch(Direct) case Up: t_i+; if(t_i=N) AbleMove=false; break; case Down: t_i-; if(t_i=N) AbleMove=false; break; case Right: t_j-; if(t_j0) AbleMove=false; break; ; if(!AbleMove)/不可以移动则返回原节点 return TheChess; if(Create
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 人工智能 专家系统 课程设计