A*算法介绍

不得不叹服,强大算法背后,都是简单得不能再简单的逻辑。普林斯顿的算法课程作业里,要让用A*算法。什么都没接触到过,看到后有种想哭的感觉!于是网上查阅资料,渐渐的明白了怎么回事。

通过对A*算法的学习的个人感悟:计算一个代价函数,评估每一步的代价,并找到代价最小的方向。最终得到的解可能不是最优,但每一步都是最佳的策略,总是会非常接近最优解。即常见寻优算法中,全局最优和局部最优之间的抉择问题。

有的文章写得很透彻,看一遍就能让你理解——今后继续向着这个方向去努力,不光自己懂了,还能让其他人明白。


A*算法,又称为启发式搜索。

假设情况如下有一个当前状态S,期望的目标状态D。我们要做的就是找到从S->D的最佳路径。那么如何破案呢?

搜索策略简单得不能再简单,分为两步走:

  1. 判断从S迈出一步的代价,记为G
  2. 从S的某部位到D需要直接步数,记为H

计算并存储各个方向上的F=G+H值,找到F最小的即可。其中当H=0时,为Dijkstra算法(权值为正);

具体计算G和H的方法有很多种。其中,计算H的常见的评估函数有——欧几里得距离曼哈顿距离切比雪夫距离等;

A*算法固然强大,但有一定的约束条件,一种具有F=G+H策略的启发式算法能成为A*算法的充分条件是:
      1、搜索树上存在着从起始点到终了点的最优路径。
      2、问题域是有限的。
      3、所有结点的子结点的搜索代价值>0。
      4、H(n)=<H*(n) (H*(n)为实际问题的代价值)。


 

A*算法介绍

 从图中绿点A,到红点B的最优路径搜索就可以使用A*算法。——>见参考的****

参考自:

1. A星算法详解(个人认为最详细,最通俗易懂的一个版本)

2. A*搜索算法