关于A*估价函数的总结

估价函数的优劣决定一个A*算法的好坏

 

360百科上是这样说的:

(https://baike.so.com/doc/6223470-6436780.html)

 

关于估价函数h(n)与实际距离d(n)的大小关系导致的搜索范围的不同,一些同学表示不理解

这里给出一个不是很严谨的证明:

 

首先,d(n)+g(n)即为当前路径到目标状态的总距离,

而我们在估价后,认为这条路径的总距离为h(n)+g(n)

 

以第一种情况(h(n)<d(n))为例  八数码

在八数码中的估价中,我们发现一次操作最多使两个元素接近于目标状态,

所以把每个数字距离目标的状态的曼哈顿距离之和除以二,这样是一个最理想的距离,

也就是说,h(n)<d(n)。

而每次取出队首元素,向下扩展,我们可以想到,

随着深度的增大,该路径的g(n)+h(n)会越来越大,一直趋向g(n)+d(n)

所以当这个值比其他路径的估价大时,就不会再继续搜这条路径了

可以理解为,深度越大,一条路径的优势越小,从而搜到的范围比较大

为什么一定能搜出最优解:

最优解的g(n)+d(n)<非最优解的g(n)+d(n),而h(n)<d(n),

因此,不会存在一种情况,使最优解的g(n)+h(n)>非最优解的g(n)+d(n)

而随着深度的增大,每个路径g(n)+h(n)都是会趋向g(n)+d(n)的

在一个非最优解的路径中,随着深度增大,

在搜到目标之前,一定会在某一层出现都比最优解估价大的情况

 而最终先搜到目标的,就是最优解。

posted @ 2018-05-05 15:30  yjk  阅读(1411)  评论(0编辑  收藏  举报