8数码问题实验报告.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
8数码问题实验报告

人工智能导论 课设报告 班级0810103 学号081010320 姓名 仇国见 8数码问题实验报告 问题描述: 八数码难题(Eight-puzzle) 在3X3的棋盘上,摆有8个棋子,在每个棋子上标有1~8中的某一数字。棋盘中留有一个空格。空格周围的棋子可以移到空格中。 要求解的问题是,给出一种初始布局和目标布局,找到一种最少步骤的移动方法,实现从初始布局到目标布局的转变。 算法: 估价函数f:n,f(n)S经过节点n到达目标节点的最小费用的估计 K(ni,nj):ni和nj之间最佳路径的实际耗散值 g*(n)=K(s,n):s到节点n的最佳路径的实际耗散值 h*(n)=min{K(n,ti)|ti(T} T为从n所能到达的目标节点集合:从n到目标节点最佳路径的实际耗散值 f*(n)=g*(n)+h*(n):s经过节点n到目标节点最佳路径的实际耗散值 性质: f*(s)=h*(s) n在最佳路经上,则f*(n)=g*(n)+h*(n)=f*(s) f*(n) ( f*(s) 估价函数:f(n)=g(n)+h(n) 其中g(n)是对g*(n)的估价,h(n)是对h*(n)的估价;g(n)通常选择为当前所找到的从初始节点S到节点n的“最佳”路径的耗散值,显然有g(n) (g*(n)。f(n) 来排列OPEN表的GRAPHSEARCH算法 (1) 建立一个只含有起始节点S的搜索图G, 个节点有一个指向其父节点的指针,S 针为一特殊值(如0),并把S OPEN中,计算f(S); (2) 建立已被扩展的节点表CLOSED, 空; (3) LOOP:OPEN表为空,则失败退出; (4) 把OPENCLOSED 表中,称此节点为n节点; (5) 若n为目标节点,则成功退出; (6) 扩展节点n,m: (a) f(m); (b) m不在G中,将其作为n的后继节点加入G, n的指针,并把它加入OPEN表; (c) 若m已在G中,则比较刚计算的f值与原先的f 值,如新值较小,则以新值代替旧值,并调 整有关指针;此时,若mCLOSED表中,则 把它移回OPEN (7) 按fOPEN表; (8) 转LOOP。 A*算法: f(n)=g(n)+h(n) 其中g(n)同上,且对于每个节点n有:h(n) ( h*(n),该h(n)为A*算法的启发函数 采用具有该性质的估价函数的A算法 数据结构: typedef char board[size][size]; class Node{ public: board data; //存放状态 Node *parent; //存放父节点地址 Node *child[4]; //存放子节点地址,最多4个 Node *next; int f,h,g,how; //how中记录了其父节点如何移动生成该节点 Node();//构造函数,初始化 int geth();//计算h值(h值为每个将牌与其目标位的总和) }; 程序: #includeiostream.h #includestdio.h #includetime.h #includestdlib.h #includemath.h #define size 3 long total; typedef char board[size][size]; board target = {1,2,3,8,0,4,7,6,5}; // 目标状态 class Node{ public: board data; //存放状态 Node *parent; //存放父节点地址 Node *child[4]; //存放子节点地址,最多4个 Node *next; int f,h,g,how; //how中记录了其父节点如何移动生成该节点 Node(); int geth(); }; Node::Node()//构造函数,初始化 { parent=NULL; next=NULL; for(int i=0;i4;i++) { child[i]=NULL; }

文档评论(0)

cuotian + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档