人工智能实验报告毕业设计].docVIP

  • 39
  • 0
  • 约8.03千字
  • 约 12页
  • 2018-01-26 发布于贵州
  • 举报
人工智能实验报告毕业设计]

人工智能实验报告 姓 名: 学 号: 所学专业: 报告题目: 提交日期: 八数码演示程序 问题描述 1.1八数码问题的解释 八数码问题是人工智能经典难题之一。问题是在3×3 方格盘上,放有八个数码,剩下一个为空,每一空格其上下左右的数码可移至空格。问题给定初始位置和目标位置,要求通过一系列的数码移动,将初始位置转化为目标位置。本文介绍用A星算法,采用估计值h(n)(曼哈顿距离)和g(m)(当前深度)的和作为估计函数。 1.2八数码问题的搜索形式描述 初始状态:初始状态向量,规定向量中各分量对应的位置,各位置上的初始数字0,1,3,4,5,6,7,8,2 后继函数:移动规则,按照某条规则移动数字得到的新向量 0,1,3,4,5,6,7,8,9转移到4,1,3,0,5,6,7,8,2 目标测试:新向量是否是目标状态,也即为0,1,2,3,4,5,6,7,8 路径耗散函数:在搜索时,每深入一层则当前步数代价加1,代价总和由当前步数和可能还需要移动的步数之和。 1.3 解决方案介绍 首先,A*算法需要个估价(评价)函数: f(x)=g(x)+h(x) g(x)通常表示移动至当前状态需要的步数,h(x)则是启发函数。在算法进行的时候,我们将对每一个可能移动到的状态做评价,计算其f(x),然后将其放入一个OPEN数组中,最后我们选取OPEN中f(x)值最小的状态作为下一步,再重复上 述过程,因为f(x)值最小的状态意味着它最有可能(不是一定)最接近最终状态 算法介绍 2.1 搜索算法一般介绍 A*算法是一种启发式搜索算法,是常用的最短路搜寻算法,在游戏领域中有广泛的应用。所谓启发式算法,它与常规的搜索方法最大的不同是在执行过程中始终有一个提示性的信息在引导着算法的进行,使得我们不断靠近目标而不是盲目的遍历,这个提示信息就是由启发函数产生的,启发函数的好坏将直接影响算法的效率,从几篇文献看来,A*算法和广度优先、深度优先算法相比是有很明显的效率优势的。OPEN、CLOSE、初始状态最终状态 Push(source, OPEN); While(!OPEN.isEmpty()){ FindFirstElementOfOpen(); cuNode=Pop(OPEN); If isTheSame(cuNode,dest) Then exit; Push(cuNode,close) Extend(cuNode); } ExtendNewNode(NewNode){ If CLOSE.NOTcontains(NewNode) Then If OPEN.NOTcontains(NewNode) Push(NewNode,OPEN); Else If OPEN.get(NewNode).fNewNode.f Then Push(NewNode,OPEN); } 算法实现 3.1 实验环境与问题规模 本文采用java语言进行程序设计,在图形界面上可以显示八数码格局,并可以随机生成新的起始状态和目标状态。问题规模为8,解决八数码问题,但可以比较容易就能修改为对15数码问题的求解。 3.2 数据结构 1.类Node,表示一个结点,也即搜索过程中的某一个状态,其内部数据成员有ID(可以唯一地表示一个状态结点),parentID(该状态结点的母结点,保存这个值是为了在找到目标结点时可以回溯其路径),a[][](一个二维数组,用于存放当前八数码的状态),g(表示从起始状态结点开始到当前状态结点所走过的步数),h(表示从当前状态结点到目标状态结点有可能还要走多少步数),f(就是g值与h值的和)。 2.OPEN表,实现的时候使用的是,用途是存放产生的可能的新状态 3.CLOSE表,实现的时候使用的是,存放=Node结点键值对, 用途是记录已经访问过的状态。起始状态 2 1 0 7 8 5 4 3 6 终结状态 0 1 2 3 4 5 6 7 8 2.有解时的情形: 起始状态: 自动演示时的移动过程截图: 最后达到目标状态: 参考文献 人工智能游戏编程真言 (美) Steve Rabin主编 Java项目开发实践 陆正武, 张志立编著 Java SE 6.0编程指南 吴亚峰, 纪超编著 数据结构经典算法实现与习题解答 汪杰等编著 Swing Hacks:100个业界最尖端的技巧和工具 Joshua Marinacci, Chris Adamson著 Java综合实例经典 吴其庆编著 附录—源代码及其注释(算法部分,不包括界面设计的代码): package MyAI; import java.util.HashMap; import java.util.Iterator; import java.util.Map; imp

文档评论(0)

1亿VIP精品文档

相关文档