启发式搜索算法之贪婪最佳优先搜索算法和A*算法
- 启发式搜索算法
启发式搜索又称为有信息搜索,是相对于广度优先搜索和深度优先搜索这类无信息搜索的搜索算法。该类算法是基于能够获得辅助算法的额外信息进行运算,这些信息称为启发信息。其中启发式搜索中最具代表性的就是贪婪最佳优先算法和A*算法。
启发式搜索算法满足三个条件:
1.具有启发函数:估计结点n距离达到目标还需要多少代价。在求最短路径的问题中,该函数为以相同的速度到达两个城市间的时间代价。
2.具有评价函数:根据搜索算法的不同,评价函数不同。评价函数是用以选择最优的边缘结点。
3.辅助信息:即启发信息,是用以额外地帮助搜索的信息。例如,各结点到目标结点的最短距离。
- 贪婪最佳优先算法
贪婪最佳优先算法,即评价函数=启发函数。
不足之处:
1.有时候找到的路径不是最优的。
2.由于启发函数=评价函数,因此选择结点容易陷入死循环。
因此,在此基础上修改评价函数即得到A*算法。
- A*算法
A*(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法,也是解决许多搜索问题的有效算法。算法中的距离估算值与实际值越接近,最终搜索速度越快。 --百度百科
A*算法的评价函数公式表示为: f(n)=g(n)+h(n)
其中f(n)是评价函数,g(n)是当前最小开销代价,h(n)是后续最小开销代价。
对于A*算法的启发函数的设计需要满足两个特性:可容性和一致性。
可容性:即估计代价小于实际代价。在最小路径例子中,将时间作为启发式函数值是可容的,因为估计值是通过两城市间最短路径算出来的时间,而实际两城市间的道路长度必要大于或等于两者间的最小距离,因此估计值小于实际值,即由估计值得到的结果不会超出实际,即该启发式函数是可容的。
一致性:又称单调性。即满足
h(n) <= c( n,a, n1) + h(n1)
这里c( n,a, n1) 表示结点n通过动作a到达后续结点n1的代价,h(n)即结点n的启发函数取值函数。
在最短路径例子中,启发函数定义为城市间的最短距离,则一致性表现为:结点n到目标城市的距离是小于等于结点n到下一个结点n1的距离加上结点n1到目标城市的距离之和的。这样的话就保证了选择的结点就是最短路径的结点。
在树搜索中,若h(n)可容,则A*算法最优;在图搜索中,h(n)一致,则A*最优。