从人类的思维方式中寻找启示宏观~微观寻径算法(1).docVIP

  • 2
  • 0
  • 约3.81千字
  • 约 6页
  • 2019-07-05 发布于湖北
  • 举报

从人类的思维方式中寻找启示宏观~微观寻径算法(1).doc

从人类的思维方式中寻找启示 ——宏观~微观寻径算法(1) 寻找路径是游戏中人工智能的一个重要的主题。(特别是即时战略游戏)随着游戏场景的增大,游戏场景的维数的扩充,游戏中参加寻径的智能体数目的增多,寻径的时间和空间开销都将会成为影响游戏性能重要因素。本文提出一种新的寻径算法思路:宏观-微观(MacToMic)寻径算法。这种寻径算法思路相对于传统的寻径算法思路来说,更加类似于人(human-like)的思维模式。它结合了人类宏观启发式思维的优势和计算机微观处理的速度优势而产生的高效的寻径算法。 传统的寻径算法及其弊端 传统的寻径算法比如广度优先算法和AStar算法都是基于单个节点进行寻径的。这种算法模式具有明显的局限性——寻径的效率(时间和空间开销)受制于寻径场景的节点数目,更进一步说就是受制于场景的精细程度而不是地图的复杂程度。 虽然从地图的结构来说,图1和图2是完全一样的。 图1 图2 但是对于基于节点搜索的广度优先算法和AStar算法来说它们并不会等同看待,而是在图1中所付出的寻径代价远高于图2。当然在这个10×10的地图上面问题的严重性并不明显,但如果是在一个1000×1000的地图涉及到1000000个节点的时候呢?更别说在一个1000×1000×1000涉及到1000000000个节点的三维场景中了,这简直是一场恶梦! 从人类的思维方式中寻求启示 对于同样的任务,人类的方法就高明得多了。人类压根儿不受网格的“束缚”。在人类的眼中地图就如下所示: (当然,让计算机超越“网格”还不是那么容易的事情,因为对于计算机来说矩形实在太“优美”了!) 读者可以尝试在上面的地图上面寻找两辆轿车之间的路径(最好尝试把这条路径画出来),体会一下你自己是怎么寻找路径的。如果我估计得不错,我想你先观望一下两辆车各自的位置,然后大致上找到一条可通行的路径,最后在你画出路径的时候,你会按照你先前大致找到的路径的方向画出一条绕开所有障碍的路径。总结来说人类寻径的速度跟一张地图的复杂度,而不是一张地图的网格多少有关,而这些传统的寻径算法明显跟后者的关系大一些。较前沿的寻径算法研究其实也正朝着这个方向,比如导航点法,还有分解矩形法等,让搜索节点数大大减小。但这些算法,都存在一些问题,比如导航点需要人为地设置,分解矩形法并没有很好地减小搜索的节点数。下面是从PaulTozour的寻径算法演示平台里面得到的一些图片。 导航点法 分解矩形法 为了设计一种具有人这种能够从“宏观”上寻径的计算机算法,我们回顾一下自己在一张地图上面寻找两点之间的较短路径的时候所做的工作流程,我首先会大致地扫描一下地图,大体地找到最短路径的“轮廓”(或许这样说缺乏准确,但是我想你能理解。)然后接下来在细致地“辨别”出最短路径。其实这个过程对一个人来说是非常自然的,但是我们怎么能用计算机算法来实现这样“模糊“的概念呢?人和计算机毕竟有不同,我们不能像划分图多边形那样处理,因为经过那样的处理后,对于计算机来说依然很“模糊”。最后我决定让地图分成很多较大的格子并通过预计算来处理这些格子之间的连通关系,然后在后续的寻径过程中可以大大地减少所需要搜索点的数目,事实上在某些情况下,还可以用最简单的试探式寻径从而更加减少广度优先搜索的开销,或AStar算法估值的开销,而且搜索出来的路径还特别自然!(计算机和人不同,计算机总是认为正立的矩形相对于其它多边形更加亲切一些,这跟我们建立的笛卡儿坐标系有关)。 宏观-微观(MacToMic)寻径算法 简化的宏观-微观寻径算法 1.预处理过程 遵照人类的思维方式,第一步是宏观地观察观察地图,所以在这个算法的第一步就是把地图分块,但并不像前面提到的那些寻径算法的分块方式通过很复杂的算法把地图分成大小不等而杂乱的很多块,而是简单地把地图分成大小相等的很多个小长方形,为了方便陈述,我举个例子,比如现在我们在一个25×25象素的正方形地图上面寻径,我们可以把整个地图分块成25个5×5的正方形。 第二个步骤是在每一个正方形小块的非障碍物点上面使用广度优先算法。当然,这个广度优先算法只有起始点而没有目标点,目的是得到该正方形小块与其上下左右四块小正方形小块的连通性(就是说是否存在一条路径使到两个正方形小块直接连通,注意是直接,就是说边界上是否有连通点,当然使用广度优先而不是简单的判断边界还有另外的目的,就是测试出本来的正方形小块本身是否是连通的,如果没有连通需要特殊处理,这里先不要考虑这种情况,方便理解算法。)如果,0代表障碍,1代表可行的话,那么下面的是4个

文档评论(0)

1亿VIP精品文档

相关文档