树搜索策略(下)
前面树搜索策略(上)介绍了树搜索的一些基本算法,树搜索策略(中)通过两个实例具体介绍了分支限界法的思想,本篇主要介绍借助“Best-First”搜索的A*算法。
1. A*算法与分支限界策略的比较
分支限界策略是为了剪掉不能达到优化解的分支,其关键是“界限”。A*算法的核心是告诉我们在某些情况下,我们得到的解一定是最优解,于是算法可以停止。A*算法试图尽早地发现优化解,经常使用Best-first策略求解优化问题。
2. A*算法的核心——代价函数
对于任意节点n, g(n) 表示从树根到节点n的代价, h*(n)表示从n到目标节点的优化路径的代价, f*(n) = g(n) + h*(n)即为节点n的总代价。那么,我们如何得到h*(n)的值呢?一般采用一种合适的方法来估计h*(n),h(n)是对h*(n)的估计,把f(n) = g(n) + h(n) ≤ g(n) + h*(n) = f*(n)定义为n的代价。为了更好的理解A*算法,我们以求解最短路径为例来讲述这种算法思想。
3. 利用A*算法求解最短路径问题
3.1 问题定义
输入:一个带权有向连通图G(V,E),如下图所示。
输出:发现一个从S到T的最短路径。
3.2 求解步骤
step 1: 分别计算f(v1)=g(v1) + h(v1) = 4 、f(v2) = g(v2) + h(v2)=5、f(v3) = g(v3) + h(v3)=6;
step 2:根据step1可知进一步扩展v1,分别计算f(v2) = g(v2) + h(v2) = 7、f(v4) = g(v4) + h(v4)=5;
step 3:根据step2可知进一步扩展v4、v2,分别计算f(v5) = g(v5) + h(v5) = 10、 f(T) = g(T) + h(T) = 7、f(v4) = g(v4) + h(v4) = 6、f(v5) = g(v5) + h(v5) = 10;
step 4:根据step3可知进一步扩展v3、v4,分别计算f(v5) = g(v5) + h(v5) = 11、f(v5) = g(v5) + h(v5)=11、f(T) = g(T) + h(T) = 8;
step 5:根据上述步骤可知进一步扩展T,由于T为目标节点,则算法终止,求得最优解。
图形化展示过程如下:
4. 小结
通过求解最短路径问题我们大概已经掌握了A*算法思想的精髓。现对A*算法进行简单总结:A*算法借助“Best-first”策略搜索树;假定g(n)表示从根节点到节点n的代价,h*(n)表示节点n到目标节点的优化代价;对于任一节点n,都有h(n)≤h*(n);选择f(n)小的节点进行分支;如果选择的节点n为目标节点,则算法终止,给出最优解。