很多问题的解可以表示为树;解为树的节点或路径,求解这些问题可以转化为树搜索问题。
有误 问题的解是路径。
对当前层有一个比较入栈的操作。
最佳优先搜索(Best First Search),是一种启发式搜索算法(Heuristic Algorithm),我们也可以将它看做广度优先搜索算法的一种改进;最佳优先搜索算法在广度优先搜索的基础上,用启发估价函数对将要被遍历到的点进行估价,然后选择代价小的进行遍历,直到找到目标节点或者遍历完所有点,算法结束。
使用最小堆,在一个节点“层”上进行比较。
3 3 4 4——3 4 3 4 4——3 4 2 4 4 4——3 4 1 4 4 4——3 4 0 2 4 4 4 <(^-^)>
分枝定界能够有效剪枝减小代价,前面两个一个容易陷入局部优化,另一个代价仍然很大。
对f:P到J有:难的工作分配给厉害的人:不同的人要承担不同的工作。
工作分配的要求。
可以看到,因为代价树的增长太过平缓,起点太低,在能够剪枝的时候都快算完了……剪枝效果并不好。那么我们是否可以改进一下算法使得起点增大呢?
在各行各列中做出这样的调整:共同减去一行或者一列的最小值,从而将一行/一列的最小值变成0。对于问题的所有可行解来说,必然在一行中挑选一个数、一列中挑选一个数,所以这样的调整并不会影响我们挑选与计算最优解。
为什么减到0,则是为了保证代价的整体上升趋势;每行每列减去的数的总和就是解的下界。
这是所有解的一个下界,,自然也是可行解的代价下界。虽然不满足偏序约束(
一开始用爬山法找到的也只是可能解。在剪枝之后要继续找优化解。
目标: 使左子树代价下界增长最小,右子树代价下界增长最大。
为啥一定是由4出发进入6的,因为一定要构成哈密顿图 不包括4,6就必须得有6,4。
记得把C6,4给一起修改了。
每次拓展都必须重新计算划分边。
最左枝求的是优化解代价上界,除此之外都是使用的LB。
使用的是最佳优先搜索策略。
4是必要的,说明f(t)是t对应的可能解。