算法简介
A*算法本质上是一种启发式的搜索算法。
- 启发式: 即有一定的评价指标来引导算法运行,从而尽可能得到最优解。
- 搜索算法: 已知起点和终点,但是过程路径未知,我们要去通过一定的方法(启发式的方法)来找到最优路径的一种算法。
从以上概念可以看出,应用该算法时:
- 已知条件
- 起点位置
- 终点位置
- 待求解量:
- 最优路径(即每个最优路径点的集合)
- 方法:
- 启发式的评价指标(即某个启发函数或叫代价函数,就是该算法的核心公式)
算法核心公式(启发函数\代价函数)
启发函数\代价函数公式
- f(n) 是节点n的综合代价。当我们选择下一个最优的节点时,我们总会选取综合代价最小的节点。
- g(n) 是节点n距离起点的代价。
- h(n) 是节点n距离终点的估计代价。
A*算法通过代价函数来计算每个节点的代价,从而选择代价最小的那一个节点进行移动。
预估距离函数h(n)
关于距离的计算,主要有两种方法:
-
欧式距离,即物体移动时可以朝八个方向移动,其计算公式如下:
-
曼哈顿距离,即物体移动时只能朝四个方向移动,不能斜向移动,其距离计算公式如下:
一般采用欧式距离更为灵活,可以根据自己的需要进行选择。
算法简单实现思路
(1)已知条件
起点位置(S)
终点位置(E)
(2)待求解量
周围下一个潜在最优节点的代价值(根据代价函数算得)
(3)代价函数
f(n) = g(n) + h(n)
(4)实现过程
这里采用欧式距离进行实现:
1:初始化操作:
- 起点、终点坐标
- 地图尺寸
- 障碍物个数和位置
2:寻路主程序(循环,直至到达终点):
(1)计算当前点周围的八个点的代价值f(n)
(2)选择代价值最小的点作为下一个点(如果是障碍物则忽略)
参考文章: