目录
1.分支限界法简介
1.1 分支限界法的本质——通过限界阻塞子树
1.2 分支限界法与回溯法的区别
1.3 下界或者上界估算——贪心
2.单源最短路径问题
2.1 问题描述
2.2 分支限界法解决单元最短路径问题
3.装载问题
4.布线问题
5.0-1背包问题
5.1 问题描述
5.2 分支限界法解决0-1背包问题
5.3 一个示例
6.最大团问题
7 作业分配问题
7.1 问题描述
7.2 分支限界法步骤描述
8.旅行商问题
8.1 问题描述
8.2 分支限界法解决旅行商问题
8.3 一个示例
9.电路板排列问题
10.批处理作业调度
1.分支限界法简介
1.1 分支限界法的本质——通过限界阻塞子树
分支限界法通常仅关心使给定函数最大化或最小化。
(分支限界法的本质)因此,如果算法找到了一个耗费为c的解,并且有一个部分解,它的耗费至少是c,那么就不会有该部分解的扩展生成。
在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。
然后,从活结点表中取下一节点(优先队列中最大或最小值)成为当前扩展结点,并重复上述扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。
(分支限界法实现的本质)对某个节点进行搜索时,先估算出目标的解,再确定是否向下搜索(选择最小损耗的结点进行搜索)
在分支结点上,预先分别估算沿着它的各个儿子结点向下搜索的路径中,目标函数可能取得的界,然后把它的这些儿子结点和它们可能取得的界保存在一张结点表中,再从表中选择界最小或最大的结点向下搜索。一般采用优先队列维护这张表。
1.2 分支限界法与回溯法的区别
回溯法
1)(求解目标)回溯法的求解目标是找出解空间中满足约束条件的一个解或所有解。
2)(搜索方式深度优先)回溯法会搜索整个解空间,当不满条件时,丢弃,继续搜索下一个儿子结点,如果所有儿子结点都不满足,向上回溯到它的父节点。
分支限界法
1)(求解目标)分支限界法的目标一般是在满足约束条件的解中找出在某种意义下的最优解,也有找出满足约束条件的一个解。
2)(搜索方式)分支限界法以广度优先或以最小损耗优先的方式搜索解空间。
3)常见的两种分支界限法
a.队列式(FIFO)分支界限法(广度优先):按照队列先进先出原则选取下一个结点为扩展结点
b.优先队列式分支限界法(最小损耗优先):按照优先队列规定的优先级选取优先级最高的结点成为当前扩展结点
1.3 下界或者上界估算——贪心
分支限界法对下界和上界的估算,总是采用贪心算法,选择当前最优作为界加入到优先队列
2.单源最短路径问题
2.1 问题描述
给定带权重的有向图G=(V, E),图中的每一条边都具有非负的长度,求从源顶点s到目标顶点t的最短路径问题。
2.2 分支限界法解决单元最短路径问题
把源顶点s作为根节点开始进行搜索。对源顶点s的所有邻接顶点,都产生一个分支结点,估计从源点s经该邻接顶点到达目标顶点t的距离作为该分支结点的下界
选择下界最小的分支结点,对该分支结点所对应的顶点的所有邻接顶点继续进行上述的搜索
2.2.1 下界估算方法(贪心)
假定d(node)是搜索树中从根节点到结点node所对应的顶点u的路径长度,顶点u的邻接顶点为v1, v2, ..., vl,而cu,vi为顶点u到其邻接顶点vi(i = 1, ..., l)的距离。
令h = min(cu,v1, cu,v2, ..., cu,vl)
则结点node的下界b(node) = d(node) + h
一个例子
源顶点为a,目标定的为t,把a作为根节点进行搜索:
a->b->t距离的下界为:1+min{2, 9} = 3
a->c->t距离的下界为:4+min{3,6,3,4} = 7
a->d->t距离的下界为:4+min{7} = 11
2.2.2 分支限界法的步骤
将顶点编号为0, 1, ..., n-1.
每个结点包含如下信息:
u——该节点所对应的顶点
path[n]——从源点开始的路径上的顶点编号
k——当前搜索深度下,路径上的顶点个数
d——从源点到本节点所对应顶点的路径长度
b——经本节点到目标顶点最短路径的长度下界
bound——一个可行解的取值,当做剪枝的标准
假定源顶点为s,目标顶点为t。
step1.初始化。建立根节点X
X.u = s
X.k = 1
X.path[0] = s
<