1 定义
1.1 部分定义
活结点:没有生成全部儿子结点
死结点:儿子已经全部生成的结点,或已经剪枝无需向下扩展的结点
E-结点:正在生成其儿子结点的活结点。
1.2 与回溯法的异同(重要)
同:都是在解空间树上搜索问题解的算法。
异:
- 求解目标
回溯法:找出解空间树中满足约束条件的所有解。
分支限界法:找出满足条件的一个解或者找到使某个函数达到极大或极小的解,即某种意义下的最优解。 - 解空间树的构造过程:
回溯法:当前E-结点一旦生成一个新的子结点,孩子就进入活结点表,且变成新的E结点
分支限界法:当前E-结点要生成其全部子结点到变为死结点,子结点进入活结点表,之后从活结点表中选择一个作为新的E-结点
2 一般方法
2.1 类似于BFS检索:FIFO
FIFO检索:活结点表用队列,先进先出(BFS广度优先)
2.2 类似于D-检索:LIFO
LIFO检索:活结点表用堆栈,先进后出(DFS深度优先)
2.3 LC-检索
之前那些E结点的选择都相当死板,所以用一个“有智力的”排序函数c来选取下一个结点。从上帝视角来看,每个结点的c值是这样的(所有结点分为三类):
但是得到这种函数显然是不显示的,因为这种函数需要结点全部展开才能得到准确值,所以用c(X)=
g
^
\hat{g}
g^(X)表示当前节点到答案结点所需做的附加工作的估计函数。
一个E-结点X的儿子Y,有 g ^ \hat{g} g^(Y)≤ g ^ \hat{g} g^(X),又因为X身为E-结点是从节点表中选出 g ^ \hat{g} g^最小的结点,那结点表中其他结点的 g ^ \hat{g} g^也都小于Y的 g ^ \hat{g} g^值。
但这样的结果是变成LIFO了,所以要改进,加上一个根到结点的成本h(X),这样的新成本函数为 c ^ \hat{c} c^(X)=f(h(X))+ g ^ \hat{g} g^(X)
2.4 定义
LC-检索:选取成本估计函数 c ^ \hat{c} c^的值最小的活结点作为下一个E-结点。
值得一提的是,LIFO和FIFO都算特殊的LC-检索。
LIFO:
c
^
\hat{c}
c^(X)=
g
^
\hat{g}
g^(X)
FIFO:
c
^
\hat{c}
c^(X)=f(h(X))=X的级数
LC分支-限界检索:伴有限界函数的LC-检索。
3 15-谜问题
考试考9-迷。
c ^ \hat{c} c^(X)=f(X)+ g ^ \hat{g} g^(X)
g
^
\hat{g}
g^(X):不在其目标位置的非空白数目
f(X):根到结点X路径的长度
4 一些定理
定理9.2 当c(Y)<c(Z)时一定有 c ^ \hat{c} c^(Y)< c ^ \hat{c} c^(Z)时,那么在 c ^ \hat{c} c^作为c的估计值时,算法LC到达一个最小的成本答案结点时终止。
但其仍未一定可以找到最小答案结点。
定理9.3 c ^ \hat{c} c^(X)≤c(X)且对于每一个答案X有 c ^ \hat{c} c^(X)=c(X),那么所找到的答案时具有最小成本的答案结点。
4 带期限的作业排序
每个作业(p
i
_i
i,d
i
_i
i,t
i
_i
i)
其中t
i
_i
i是作业的处理时间,d
i
_i
i是作业的期限,p
i
_i
i是超期限的罚款,问如何使罚款总额最小。
例:
下界:当前结点的最大序号i,比i序号小的作业还未完成的直接罚款。
上界:所有未完成的作业都不要了,产生的罚款。
当一个结点的下界已经>其他结点的上界,就没必要展开了。
最后找到那个上限最小的点。