python a星算法_a*算法(Python)的实现,A

前言

关于A*算法的实现是很早之前的一次开发中的成果,并做了一些改进。当然,在这里就不记录改进部分了,因为其中还有一些争议。这里仅是对A*算法的理解和使用Python实现。

参考链接

之所以放在前面,是因为这些链接的参考价值特别高,如果希望获得更多的了解,可以通过以下链接进行学习。

英文网站

redblobgames(红色斑点游戏)

中文网站

csdn:A星算法详解(个人认为最详细,最通俗易懂的一个版本)|模块 A*算法总结 非常有参考价值

知乎:路线规划之A*算法

定义

(百度百科)A*(A-Star)算法是一种静态路网中求解

最短路径

最有效的直接搜索方法,也是解决许多搜索问题的

有效

算法。算法中的

距离

估算值与实际值越接近,最终

搜索

速度越快

一个真正的A*算法必须包含以下对象:开启列表、关闭列表、G、H

分析

估价函数F(n)=G(n)+H(n)

G(n)

G(n)表示的是从起始节点到当前节点的距离代价。

在A*算法中,这是一个确切但可变的数值

可变是因为从起始节点到当前节点的不同移动方案,其距离代价也是不同的

确切是一旦移动方案的确定,其距离代价也确定了

例如以下的

如果从节点A出发,那么选择方案1的话,G(n)=30,这是确切的

如果有更好的移动方案,如这里的方案3的话,则G(n)=/2*10,这是可变的

(假设一个正方形的大小为10)

H(n)

H(n)表示的是从当前节点到目标节点的估计代价,也就是说只是一个估计值。

也是A*算法的启发函数

有3种处理方式:

方式1:如果从当前点出发,可以向上下左右四个方向移动,则使用曼哈顿距离

方式2:如果从当前点出发,可以向上下左右四个方向移动外,还能斜方向运行,共八个方向,则使用对角距离

方式3:允许向任何方向移动,则使用欧几里得距离

补充

曼哈顿距离、对角距离、欧氏距离

思考:3种距离对A*算法的影响

曼哈顿距离可以说是最简单粗暴的计算距离的方法

其实对角距离是将欧氏距离的处理方法局部化,局限于当前节点的当前移动。

而欧氏距离是对角距离的整体化。

思考:G(n)和H(n)的区别

1.G(n)是个可变但确切的实际值,H(n)是个确切的估计值

一旦当前点的确定,H(n)将是一个定值.

而G(n)会随着移动方案的改变而改变

2.G(n)是无法通过欧氏距离计算的。

因为每一个静态路网中,如果不存在不可达的点,那么A*算法将没有存在的意义。

每一次从起点到达终点,只需要从起点出发,向终点方向移动即可。

而当存在不可达点,那么如果使用欧氏距离计算G(n),如果起点到当前点的欧氏距离

你可能感兴趣的:(python,a星算法)