人工智能之迷宫.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文档。上传文档
查看更多
问题描述 迷宫图从入口到出口有若干条通路,求从入口到出口最短路径的走法。   图1、1  迷宫示意图 设计原理 图1、1为一简单迷宫示意图的平面坐标表示 。以平面坐标图来表示迷宫的通路时,问题的状态以所处的坐标位置来表示,即综合数据库定义为{(x, y) | 1≤x, y ≤ 4 },则迷宫问题归结为求解从  (1, 1) 到 (4, 4)的最短路径、 迷宫走法规定为向东、南、西、北前进一步,由此可得规则集简化形式如下、 右移 R1:if(x, y) then (x+1, y) 假如当前在(x, y)点,则向右移动一步 下移 R2:if(x, y) then (x,y -1)  假如当前在(x, y)点,则向下移动一步 左移 R1: if(x, y) then (x -1,y)  假如当前在(x, y)点,则向左移动一步 上移 R2:if(x, y) then (x, y+1) 假如当前在(x, y)点,则向上移动一步 给出其状态空间如图2、1所示 为求得最佳路径,可使用A*算法。 A*算法f 函数定义  f(n) = g(n) +h(n)  设:每一步的耗散值为1(单位耗散值) 定义:g(n) =d(n) 从初始节点s到当前节点n的搜索深度 h(n) =| Xg-Xn | + | Yg-Yn | 当前节点n与目标节点间的坐标距离 其中:( Xg, Yg) 目标节点g坐标   ( Xn, Yn )当前节点n坐标 显然满足: h(n) ≤h*(n) OPEN表节点排序 ⑴ 依照f 值 升序排列 ⑵ 假如f 值相同,则深度优先 A*算法的搜索过程如下: 1、OPEN=(s), f(s)=g(s)+h(s) 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、{mi﹜← EXPAND(n)     = 1 \* GB3 ①计算f(n,mi)=g(n,mi)+h(mi),(自s过n,mi到目标节点的耗散值) = 2 \* GB3 ② ADD(mj,OPEN),标记mj到n的指针(mj不在OPEN和CLOSED中)  = 3 \* GB3 ③ if f(n,mk) 〈 f(mk)  then  f(mk) ← f(n,mk),标记mk到n的指针(mk在 OPEN中)     = 4 \* GB3 ④ if  f(n,ml)  f(ml) then  f(ml) ← f(n,ml),标记ml到n的指针(ml在 CLOSED中) ADD(ml,OPEN),把ml放回到OPEN中 7、OPEN中的节点依照f值升序排列 8、GO  LOOP A*算法的搜索图示如图2、2所示。 则其搜索结果如图2。3所示。       图2、3 迷宫搜索结果示意图 详细设计 (1)数据结构设计 = 1 \* GB3 ①为了在程序中表示迷宫图,定义了一个6*6的二维整型数组 int Maze[7][7]={{3,1,3,1,3,0,3}, ? ?? {0,4,1,4,1,4,1}, ?? {3,1,3,0,3,1,3}, ?? ?  {1,4,1,4,1,4,1}, {3,0,3,1,3,0,3}, ??? {1,4,1,4,1,4,1}, ? ?  {3,0,3,1,3,1,3}}; 其中数字3代表坐标点,1代表两个坐标点之间存在路径,0代表两个坐标点之间不存在路径,数字4没有意义。 从这个二维整型数组抽象出来的迷宫如下所示: = 2 \* GB3 ② 每个坐标点的数据结构如下: struct Data { ?    int x;       int y; int g; ?       int f;      struct Data *parent; }; 其中x代表数组的第几行对应实际坐标的y值,y代表数组的第几列对应实际坐标的x值,g代表从入口到该坐标点的耗散值,f代表代表评价函数值,parent代表路径上的该坐标点的前一个坐标点。 = 3 \* GB3 ③程序中对应入口坐标为(6,0)也就是实际中的入口(1,1),实际中每走一步对应程序中是x+2或x-2或y+2或y-2、程序中对应的出口坐标为(0,6)实际对应着出口(4,4)。     = 4 \* GB3 ④实际中的h函数对应程序中的h(n) =|x-0|/2+| y-6 |/2、  = 5 \* GB3 ⑤因为实际坐标与程序中坐标不对

文档评论(0)

189****0801 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档