AStar算法学习笔记

来源:互联网 发布:浙江大学软件学院宁波 编辑:程序博客网 时间:2024/06/05 16:13

最近在负责布线的一些功能的优化   在大神(第二个链接的作者)的启发知道下 知道了 AStar算法 如获至宝

学习算法的主要连接为: 极限定律 My Algorithm Space A*算法入门  

已有的RCP根据AStar布线的算法:  RCP:gef智能寻路算法(A star)

以下是连接的部分内容和个人理解:

核心公式:    f(最终路径长度) = g(起点到x点的长度)+ h(x点到终点的估计长度)

                        开启列表:将要被遍历的点的集合

                        关闭列表:已经被遍历的点的集合

        理解: x点:  是正在遍历 估值的点。  刚开始的时候  x点就是起点;然后以一定策略向终点靠近,x点就是过程中的点;当然最期望的是x点就是终点

                     g: 是可以明确计算出  并且要实时保持为最短最优的(通过)

                     h:  核心是:越靠近终点  值越小   
                          一般是曼哈顿方法方法(|x|+|y|),也可以算两点间距离(如果不是切割成正方形)还有其他   

                         虽然前方是大河 深渊但还得前进不是,等看到在想办法

核心策略:

             从开启列表找出最小f的点  遍历他周围的点时的逻辑:

            1. * 如果它不可通过或者已经在关闭列表中,略过它。  

              理解:为了躲过障碍  并且 不回头

            2.* 如果它不在开启列表中,把它添加进去。把当前格作为这一格的父节点。记录这一格的F,G,H值。  

              理解:以当前点探索到的新地形    1,为新地形标记测算并加到可探索集合中去(方便后续计算),2.记录从何而来 (这点很重要  如果这个点是终点   你就可以从终点找回到起点    你懂的)

            3.* 如果它已经在开启列表中,用G值为参考检查新的路径是否更好。更低的G值意味着更好的路径。如果是这样,就把这一格的父节点改成当前格,并且重新计算这一格的GF值。如果你保持你的开启列表按F值排序,改变之后你可能需要重新对开启列表排序。

            理解:1.优化G值   这个是明确的值(之前探索结果:A->B->C(权:20 )   现在: 如果A->C(权:15) 自然要优化C地形 正名呀)

                        2.遍历开启列表F值最小的  (因为这个点更可能是最优的方向 )


完整的逻辑如下:

1,把起始格添加到开启列表。

2,重复如下的工作:

      a) 寻找开启列表中F值最低的格子。我们称它为当前格。

      b) 把它切换到关闭列表。

      c) 对相邻的格中的每一个?

          * 如果它不可通过或者已经在关闭列表中,略过它。反之如下。

          * 如果它不在开启列表中,把它添加进去。把当前格作为这一格的父节点。记录这一格的F,G,H值。

          * 如果它已经在开启列表中,用G值为参考检查新的路径是否更好。更低的G值意味着更好的路径。如果是这样,就把这一格的父节点改成当前格,并且重新计算这一格的GF值。如果你保持你的开启列表按F值排序,改变之后你可能需要重新对开启列表排序。

      d) 停止,当你

          * 把目标格添加进了关闭列表(注解),这时候路径被找到,或者

          * 没有找到目标格,开启列表已经空了。这时候,路径不存在。

3.保存路径。从目标格开始,沿着每一格的父节点移动直到回到起始格。这就是你的路径。




0 0
原创粉丝点击