Aster寻路算法1(转)

 早在十几年前,Dave Pottinger已在 Game Developer 上已经表示了对ASTAR寻路的怀疑.然而在今天,我们仍有许多人坚持着ASTAR,尽管也已经发现了ASTAR的种种弊端.在本文中,将分析ASTAR寻路的利弊,并就此提出一些设想.

    Astar与盲目搜索相比,它利用了每个节点的特有信息,对将要扩展的节点进行排序,优先扩展可能性最大的节点.相比之下,Astar能更早扩展到低代价的节点,但也多了一个对节点进行排序的过程.因此说,不同搜索算法各有优劣,具体问题应具体分析.

   那么,寻路问题呢?作为对搜索算法的具体应用,众多寻路算法设计者总青睐于Astar.那么,我们来分析一下ASTAR寻路.ASTAR寻路将搜索对象划分为若干个矩形组成的矩阵,然后将起始矩阵作为起始节点,按矩形的方位建立搜索树.然后通过各矩形与起始节点的代价与目标节点的预期代价,对矩形进行评价,再通过评价对矩形所代表的节点排序,择优依次展开.

    ASTAR寻路算法,可以说是十分强大的.它可以解决极其复杂的地图,即使该地图的每个矩形越过所需代价各不相同,且分布随机.这种问题让人脑解决颇费精力.但是在计算机上ASTAR却可以轻易解决.虽然如此,但它并不适用与所以地图.ASTAR只是人工智能中的一种搜索方法.但寻路问题却是一个具体的应用问题.

    举个例子,在一个任意矩形都可以越过且越过代价相同的地图,地图上任意上两点的最佳路径应为连接起始矩形与目标矩形的线段所经过的矩形.这应该算是公理吧,我不再赘言证明.再看看ASTAR寻路,仍然在扩展一些不必要的节点,以致效率低下.也就是说,在许多时候,传统的ASTAR寻路并不适用.对于不同的地图,寻路方法当然也不同.

    那么我们所应遵循的原则是什么呢?我想有两点.一是精简.即寻路过程中让寻路结果尽可能短,换句话说,就是从最短的找起.二是趋底.即在寻路过程中尽量避开该代价的节点而趋向于低代价的节点.用C(x)表示总代价,P(x)表示每个节点的平均代价,L(x)表示所历的节点数,则有

                          C(x)=P(x)*L(x)

    从上式可以看出,寻路的两个原则是相互制约的,我们的目的是通过控制P(x)与L(x)使C(x)最小.

    为了让C(x)最小,我们应当怎么做呢?我曾做过不少尝试,例如将等代价的区域视作一个节点来构建搜索树以优化搜索;通过不同障碍的几何特征,运用推理技术进行模糊处理,希望在寻路结果的质量与寻路所需运算量之间找到一个平衡点……但它们各有各的优势,也有各的局限性.总希望能找到一个运算量比ASTAR少,而又像ASTAR一样强大的寻路算法,但一直不得要领.

    事实上,在寻路过程中,尤其是某些游戏地图.其代价形态分布有很强的规律(比如一些山脉,交错的路,海岛中的码头等).它们在游戏中对寻路具有很强的引导性.当然,由于地图的多样化,在这里不能一言概之.

    这时,我们可以通过地图中的这些元素对我们的寻路进行引导(甚至可以为了寻路而刻意在地图中弄些引导性元素)以及上述的两个寻路原则:精简与趋低.建立一个神经网络,然后在一个特定的地图中进行训练,以获得一个较优的寻路方法(至少要比ASTAR优).当然,要建立一个神经网络,还需要对地图的个性与共性以及寻路原理进行更深入的研究.例如根据地图特征的分类,然后总结寻路方案等.而本文的目的不过只是为了打破ASTAR寻路的迷信,目的已然达到,不再啰嗦.

posted @ 2013-04-23 23:55  RubbyZhang  阅读(458)  评论(0编辑  收藏  举报