A*算法中的估价函数

来源:互联网 发布:飞科剃须刀怎么样 知乎 编辑:程序博客网 时间:2024/05/01 16:09

这两天在编写人工智能大作业,主要是A*寻路算法这方面,加之考试中会涉及到估价函数这方面的考点,所以我就对A*算法中的估价函数做一下总结。


首先,先说下启发式搜索。在空间很大的情况下,如果只是采取广度优先的方法,效率会非常低。启发式搜索就是对状态空间中的每一步进行评估,获得最有可能在最终路线上的点,比方说走迷宫,终点在右下角,那就会优先向右下角移动,每次移动都具有目的方向性。


其次,说下什么是估价函数,估价函数的形式为:f(n)=g(n)+h(n),g(n)为起点到当前位置的实际路径长度,h(n)为所在位置到终点的最佳路径的估计距离。前面说每次会优先向终点方向进行移动,就是因为估价函数所导致的。h(n)=0时,意味着此时是盲目搜索,当h(n)越复杂,即约束的条件越多,耗费的时间就越多,而减少约束条件,则可能得到的并不是最优路线。


在A*算法中,估价函数为f(n)=g*(n)+h*(n)。这里面的h*(n)的附加条件为h*(n)<=h‘(n),h’(n)为n到目标的直线最短距离,也就说A*算法中挑选的启发函数是最优的,也正是如此,所找到的路径是最短路径。在我的二维平面地图中,由于我可以沿着对角线行走,所以h*(n)为所在位置到终点的直线距离。假如只能上下左右移动,那h*(n)为n到终点的水平距离与垂直距离的和。


而A算法和A*算法不同之处便是启发函数的不同,假如估计的距离等于最短路径中所在位置到终点的距离,那么便会按照最短路径行走(未卜先知走的当然是最短路线,而且不会碰壁效率超高);假如估计值要小于实际值,效率比较低,但会找到最优解;而估计值大于实际值,会导致找到的解不是最优解。A算法效率较高,当没有要求最短路径只求通路时,A算法较好;A*算法有时会走在一个较长的通路,但在抵达终点之前,肯定会舍弃这条路,走更短的路,而A算法则不一定。


可能上面说的还不是特别详细,这样举个例子:

设有一个点a,它向上的点为m,向右的点为n,并且从a点出发,向m和n方向走都能找到终点。这时候:f(m)=g(m)+h(m),f(n)=g(n)+h(n)。假定途径m的路径要小于n的路径,但h(m)的值要大于h(n)的值,这时候会优先走n那个点;往极端点想,h(m)要是很大的话,就是f(m)大于n那条路经后续所有各点的估价的话,那么计算机就永远不会考虑m这条路径!前面说,A*算法估计值必须要小于实际值,我们再来看这样会发生什么,n路径上越靠近终点,我们的估价就越趋近于实际路径,由于n路径要长于m路径,所以我们可以得到这样一个不等式,途径n的路径长度>途径m的路径长度>m的估价。如此一来,沿n走到终点之前,一定会回头考虑m的。


以上便是我对A*算法中的估价函数的理解,有不当之处还请多多指教~~




原创粉丝点击