分枝定界法讲义_代码
4.3.1 分枝定界法

四、分枝定界法求解实例
LP0 : 1 7 5 x1 3 , x 2 2 , Z 3 2 9 9 9
上界: 32 下界: 0 5 9
x1≤3
L P1 : 6 2 , Z 32 7 7
x1 ≥4
LP 2 : x 1 4 , x 2 1, Z 2 9
上界: 32 下界: 29 2 7
z 0, z 35 .5
x2≥7 无可行解
z 0, z 35 .3
x1≥5 LP5:X=(5,5) Z5=35 分枝过程图示
z 35, z 35
OR:SM
x* (5,5), z* 35
例2:
MaxZ 6 x1 5 x 2 2 x1 x 2 9 5 x 7 x 35 1 2 s .t . x1 , x 2 0 x1 , x 2 取整数
运筹学--管理科学方法
李军
桂林电子科技大学商学院
第三节 (I)分枝定界法
1.分枝定界法的创立者 2.分枝定界法求解依据 3. 分枝定界法求解步骤 4.分枝定界法求解实例 5.分枝定界法求解小结 6. 算法应用注意事项
2
OR:SM
一、分枝定界法的创立者
理查德·卡普(Richard Karp)教授1935年1月3日生 于波士顿,从小时起就兴趣广泛,聪明过人。在哈 佛大学时他文理兼修, 1955 年先获得文学学士学位 ,第二年又获得理科硕士学位。之后他进入哈佛大 学的计算实验室攻读博士,于 1959 年取得应用数学 博士学位。现任美国加州大学伯克利分校计算机科 学讲座教授,美国科学院、美国工程院、美国艺术 与科学院、欧洲科学院院士。因其在计算机科学领 域的杰出贡献曾获图灵奖、冯诺依曼奖、美国国家 科学勋章、哈佛大学百年奖章等奖项. 卡普和他的同事海尔特(M.Held)20世纪60年代,经过反复研究,提出 了一种称为“分枝限界法”(branch—and—bound method)的新方法。该方 法的要点是:对解集合反复进行分枝,每次分枝时,都对所得的子集计算最 优解的界。如果对某个子集求得的界不优于已知的允许解,则抛弃此子集不 再进行分枝;否则继续分枝以探索更好的解,直到所得的子集仅含有一个解 时为止。分枝限界法就其实质而言是一种求解策略而非算法,具体算法要根 据实际问题的特点去实现。但由于这种方法在求解许多问题中都非常实用, 因此常常被直呼为“分枝限界算法”。
运筹学_分支定界法

⑵
5 x1 6 x 2 3 0
x2
A 3 B
⑴x
1
x2 2
⑶
x1 4
1
1
3
x1 5 x 2 Z
x1
求(LP2) ,如图所示。
m a x Z x1 5 x 2 x1 x 2 2 5 x 6 x2 30 1 ( IP 2 ) x 1 4 x 2 1 x1 , x 2 0 且 为 整 数
x1 x 2 2 x1 x 2 2 5 x 6 x2 30 5 x 6 x2 30 1 1 x1 x1 4 4 ( IP 2 2 ) ( IP 2 1) 2 2 x1 x1 x x 4 3 2 2 x1 , x 2 0 且 为 整 数 x1 , x 2 0 且 为 整 数
第三节 分枝定界法
(一)、基本思路 考虑纯整数问题:
m ax Z
n
c
j 1
n
j
xj
a ij x j b i ( i 1 .2 m ) ( IP ) j 1 x 0 ,( j 1 .2 n ) 且 为 整 数 j
m ax Z
c
j 1
n
记为(IP)
解:首先去掉整数约束,变成一般线性规划问题
m a x Z x1 5 x 2 x1 x 2 2 5 x1 6 x 2 3 0 4 x1 x ,x 0 1 2
记为(LP)
用图解法求(LP)的最 优解,如图所示。
m a x Z x1 5 x 2 x1 x 2 2 5 x1 6 x 2 3 0 4 x1 x ,x 0 1 2
算法课件 第7章 分枝限界法

7.2 求最优解的分枝限界法
分枝限界法的三种形式:FIFO分枝限界法、LIFO分枝限 界法和LC分枝限界法都可用于求解最优化问题。当分枝限界法 用于求最优解时,需要使用上下界函数作为限界函数。
定义7-1 状态空间树上一个结点X的代价函数c(·)定义为: 若X是答案结点,则c(X)为X所代表的可行解的目标函数值;若 X为非可行解结点,则c(X)=;若X代表部分向量,则c(X)是以 X为根的子树上具有最小代价的结点代价。
本章要点
• 队列式分枝限界法 • 优先队列式分枝限界法 • 0/1背包问题 • 带限期作业排序 • TSP问题 • 单源点最短路径问题
章节内容
7.1 算法思想 7.2 求最优解的分枝限界法 7.3 组合问题中的分枝限界算法 7.4 图问题中的分枝限界算法 7.5 典型的c++程序 7.6 小结
7.1 算法思想
➢相对代价函数g(.)
衡量一个结点X的相对代价一般有两种标准:①在生成一个答案结点之前,子 树X上需要生成的结点数目;②在子树X上,离X最近的答案结点到X的路径长度。 容易看出,如果采用标准①总是生成最小数目的结点;如果采用标准②,则要成为 E-结点的结点只是由根到最近的那个答案结点路径上的那些结点。
do{ for(对结点E的每个孩子){ x=new Node;x->parent=E;//构造E的孩子结点x if(ĉ(X)<U){ //x子树未被限界函数剪枝 lst.Append(x); if(x是一个答案结点&&cost(x)<U) //x为答案结点时修正U if(u(x)+ < cost(x))U=u(x)+ ; else{U=cost(x);ans=x;} else if(u(x)+ < U) U=u(x)+ ;//x为非答案结点时修正U } } if(!lst.isempty()){ lst.serve(E);//从队列中取出活结点E if(ĉ(E)≥U) return ans; //若ĉ(E)≥U,则算法结束 } else return ans; //若队列为空,则算法结束
python 分支定界法

Python 分支定界法1. 介绍分支定界法是一种在计算机科学中常用的算法解决方法,用于在搜索问题中确定解的范围。
在这种方法中,问题被划分为多个子问题,通过评估每个子问题的边界条件来确定是否需要进一步搜索。
这种方法通常用于解决优化问题、搜索问题和决策问题。
在Python中,我们可以使用分支定界法来解决各种问题,包括图搜索、最短路径、最小生成树等。
本文将介绍分支定界法的基本原理和在Python中的应用。
2. 基本原理分支定界法的基本原理是将问题划分为多个子问题,并通过对每个子问题进行评估来确定解的范围。
在每个子问题中,我们可以使用一些启发式方法来估计解的上界和下界,从而确定是否需要进一步搜索。
通过逐步缩小解的范围,我们可以提高算法的效率并找到最优解。
3. 分支定界法的应用3.1 图搜索分支定界法在图搜索中的应用非常广泛。
在图搜索问题中,我们需要找到从一个节点到另一个节点的最短路径或最小代价路径。
通过使用分支定界法,我们可以根据当前路径的代价和启发式方法来估计剩余路径的代价,并根据这些估计值来选择下一个节点进行搜索。
这种方法可以大大减少搜索的空间,并找到最优解。
3.2 最短路径最短路径问题是图搜索问题的一个特例,它要求找到从一个节点到另一个节点的最短路径。
在分支定界法中,我们可以使用启发式方法来估计剩余路径的代价,并根据这些估计值来选择下一个节点进行搜索。
通过不断更新路径的代价和选择最优节点,我们可以找到最短路径。
3.3 最小生成树最小生成树问题是在一个连通图中找到一棵包含所有节点的子图,并使得子图的边的权重之和最小。
分支定界法可以用于解决最小生成树问题。
通过选择边的权重最小的节点进行搜索,并使用启发式方法来估计剩余节点的权重和,我们可以找到最小生成树。
4. Python中的分支定界法在Python中,我们可以使用分支定界法来解决各种问题。
以下是使用分支定界法的一般步骤:1.定义问题的状态和边界条件。
§3.3 分支定界法

§3.3 分支定界法引入:复习割平面的思想⎪⎪⎩⎪⎪⎨⎧≥=为整数向量x x b Ax t s x c T 0..min (P ) ⎪⎩⎪⎨⎧≥=0..min x b Ax t s x c T (P 0)1、分支定界法的基本思想⎪⎪⎩⎪⎪⎨⎧≥≤为整数向量x x b Ax t s x c T 0..min(P ) ⎪⎩⎪⎨⎧≥≤0..min x b Ax t s x c T (P 0)设原问题(P )的松弛问题(P 0)的最优解为0x 。
若 0x 的某个分量 0i x 不是整数,由于(P )的整数最优解的第i 个分量必定落在区域 ][0i i x x ≤ 或 1][0+≥i i x x 中,因此可将原问题(P )分解为两个子问题来求解,⎪⎪⎩⎪⎪⎨⎧≤≥≤][,0..min 0i i T x x x x b Ax t s x c 为整数向量(P 1) ⎪⎪⎩⎪⎪⎨⎧+≥≥≤1][,0..min 0i i T x x x x bAx t s x c 为整数向量(P 2)某个点不需要分支的条件:(1)相应的松弛问题的最优解是整数向量,或(2)相应的松弛问题没有可行解记 1x c z T m =, 若 m T z x c ≥2,则对 )(2P 的任何一个整数可行解 x 都有 m T T z x c x c ≥≥2x 1][0+≥i i x x ][0i i x x ≤)(1P )(2P 2x 或无解整数1x ][2k k x x ≤1][2+≥k k x x )(3P )(4P 3x 或无解整数4x ][3l l x x ≤1][3+≥l l x x )(1P )(6P )(P所以原问题的最优整数解一定不在)(2P 中,所以对 )(2P 就无须继续分支,在这种情况下,我们说)(2P 被剪枝,并把它称为死点(也称为已查明),尚未查明的点称为活点。
若 m T z x c <2,则对 )(2P 需继续考察。
23分枝定界法

10
(2)、分枝节点选择: ① 深探法(后进先出法): 最后打开的节点最先选,尽快找到整数解。 整数解质量可能不高。 ② 广探法: 选目标函数当前最大值节点,找到的整数 解质量高。慢。
11
0-1问题的分枝定界法(背包问题)
例: maxZ=12X1 + 12X2 + 9X3 + 15X4 + 90X5
(5) 216 X3=X7=X5= 1 X4=1/3
§2.3
基本思路 maxZ=CX
分枝定界法
AX=b
(A) X 0 (B)
maxZ=CX AX=b X 0
X为整数 (B)为(A)的松弛问题。
1
i+1
Xj*
i
X*
(C)
(B)
Xj i+1 (D)
(B)
Xj i
2
例:
maxZ=40X1 + 90X2 9X1+7X2 56 7X1+20X2 70 X1 , X2 0 X1 , X2为整数
2
3 4 5 6 7
4
3 3 15 13 16
12
9 15 90 26 112
3
3 5 6 2 7 ①
13
③ ②
X1=1 (1) 219 X1=X7=X5= 1 X4=1 X =1/3 4 X4=0 (9) (10) 217 217 X1=X4=X7= X1=X7=X5= 1 1 X5=13/5 X2=1/4
(C): (B)加约束Xj [bj ] (D):(B)加约束Xj [bj ]+1
7
(5)、解(C)、(D)
剪枝条件:① (C),[(D)]无可行解
运筹学 第三节 分支定界法

的子集,这两个子问题的最优解的目标函数值都不会比原
线性规划问题的最优解的目标函数值更大。如果这两个问
题的最优解仍不是整数解,则继续选择一个非整数的变量,
继续将这个子问题分解为两个更下一级的子问题。这个过
程称为“分支(Branch)”。
精品课件
运筹学教程
每一次分支得到的子问题最优解的目标函数值,都小于 或等于分支前问题的最优解的目标函数值。非整数解的 最大值作为新的上界。
意图),并设最优解位于C。如
果这个最优解中所有的变量都
是整数,则已经得到整数规划
的最优解。如果其中某一个变 量Xr不是整数,则在可行域中 X2
除去一块包含这个最优解但不 E
包含任何整数解的区域
DC
Ir<Xr<Ir+1(其中Ir是变量Xr
的整数部分),线性规划的可
行域被划分成不相交的两部分,
分别以这两部分区域作为可行
Z=4
精品课件
运筹学教程
不同的搜索策略会导致不同的搜索树,一般 情况下,同一层的两个子问题,先搜索目标 函数比较大的较有利(如果是极小问题,则 应先搜索目标函数值小的较为有利)。这样 可能得到数值比较大的下界,下界越大被剪 去的分支越多。
分支定界算法对于混合整数规划特别有效, 对没有整数要求的变量就不必分支,这将大 大减少分支的数量。
X1 ,
运筹学教程
说明: 1、在B121,B122 的可行域中不可能存在比以上所求解 的2个最优解更好的解。 2、目标函数值maxZ=4作为IP规划的最优解的目标函 数的一个界限(MAX,下界;MIN,上界);
求极小问题时,LP问题的解是IP问题的下界。每次分支后的子 问题最优解的目标函数值都大于或等于分支前的最优值。如分 支中得到整数解,则最小的整数解为上界。如分支的目标函数 值大于上界,则停止分支。
3.2分枝定界法

L 3 : x = 3,x = 2, 1 2 L 4 x1 = 11 4,x2 = 3, : x3 = 5 / 2,x4 = 5 / 2, x3 = 0,x4 = 5 , x5 = 0, x6 = 0 2 z 3 = 130 得下界 x5 = 1 , x 6 = 0 4 z 4 = 285 ≥ z 3 2
x6
0 0 0 0
1
解 Z-440/3 17/6 3 5/3 -1/6
解 Z-440/3 17/6 3 5/3
x2 x1 x4
最优解: x1 = 11 ,x2 = 3, x3 = 0, 4 5 ,x = 1 , x = 0 x4 = 2 5 4 6 最优值:z 3 = 285 2
x3
-15 0 1/2 -2 -1/2
分枝定界法计算过程:
讨论松弛问题 L 0 : 1、 L0无最优解, 则(IP )无最优解 结束
上界
2、最优解 X *0 = ( x *01 , x *02 , , x * on ), 最优值 z 0 (1) X *0 为整数解 ,则X *0 为( IP)的最优解 结束 ( 2 ) X * 0 中至少有一个是分数,设x *01 是分数 :分枝
混合型
L 0 : x1 = 3.5,x 2 = 2.5, x3 = 0,x 4 = 0, z 0 = 155
松弛问题 L 0 ; max z = 30 x 1 + 20 x 2 2 x 1 + 3 x 2 + x 3 = 14 . 5 s .t 4 x 1 + x 2 + x 4 = 16 . 5 x1 , x 2 , x 3 , x 3 ≥ 0 L0的最优单纯型表:
剪枝
L6 :
求解子问题 L1 :
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第5 章分枝定界任何美好的事情都有结束的时候。
现在我们学习的是本书的最后一章。
幸运的是,本章用到的大部分概念在前面各章中已作了介绍。
类似于回溯法,分枝定界法在搜索解空间时,也经常使用树形结构来组织解空间(常用的树结构是第1 6章所介绍的子集树和排列树)。
然而与回溯法不同的是,回溯算法使用深度优先方法搜索树结构,而分枝定界一般用宽度优先或最小耗费方法来搜索这些树。
本章与第1 6章所考察的应用完全相同,因此,可以很容易比较回溯法与分枝定界法的异同。
相对而言,分枝定界算法的解空间比回溯法大得多,因此当内存容量有限时,回溯法成功的可能性更大。
算法思想分枝定界(branch and bound)是另一种系统地搜索解空间的方法,它与回溯法的主要区别在于对E-节点的扩充方式。
每个活节点有且仅有一次机会变成E-节点。
当一个节点变为E-节点时,则生成从该节点移动一步即可到达的所有新节点。
在生成的节点中,抛弃那些不可能导出(最优)可行解的节点,其余节点加入活节点表,然后从表中选择一个节点作为下一个E-节点。
从活节点表中取出所选择的节点并进行扩充,直到找到解或活动表为空,扩充过程才结束。
有两种常用的方法可用来选择下一个E-节点(虽然也可能存在其他的方法):1) 先进先出(F I F O)即从活节点表中取出节点的顺序与加入节点的顺序相同,因此活节点表的性质与队列相同。
2) 最小耗费或最大收益法在这种模式中,每个节点都有一个对应的耗费或收益。
如果查找一个具有最小耗费的解,则活节点表可用最小堆来建立,下一个E-节点就是具有最小耗费的活节点;如果希望搜索一个具有最大收益的解,则可用最大堆来构造活节点表,下一个E-节点是具有最大收益的活节点。
例5-1 [迷宫老鼠] 考察图16-3a 给出的迷宫老鼠例子和图1 6 - 1的解空间结构。
使用F I F O分枝定界,初始时取(1,1)作为E-节点且活动队列为空。
迷宫的位置( 1 , 1)被置为1,以免再次返回到这个位置。
(1,1)被扩充,它的相邻节点(1,2)和(2,1)加入到队列中(即活节点表)。
为避免再次回到这两个位置,将位置(1,2)和(2,1)置为1。
此时迷宫如图1 7 - 1 a所示,E-节点(1,1)被删除。
节点(1,2)从队列中移出并被扩充。
检查它的三个相邻节点(见图1 6 - 1的解空间),只有(1,3)是可行的移动(剩余的两个节点是障碍节点),将其加入队列,并把相应的迷宫位置置为1,所得到的迷宫状态如图17-1b 所示。
节点(1,2)被删除,而下一个E-节点(2,1)将会被取出,当此节点被展开时,节点(3,1)被加入队列中,节点(3,1)被置为1,节点(2,1)被删除,所得到的迷宫如图17-1c 所示。
此时队列中包含(1,3)和(3,1)两个节点。
随后节点(1,3)变成下一个E-节点,由于此节点不能到达任何新的节点,所以此节点即被删除,节点(3,1)成为新的E-节点,将队列清空。
节点(3,1)展开,(3,2)被加入队列中,而(3,1)被删除。
(3,2)变为新的E-节点,展开此节点后,到达节点(3,3),即迷宫的出口。
使用F I F O搜索,总能找出从迷宫入口到出口的最短路径。
需要注意的是:利用回溯法找到的路径却不一定是最短路径。
有趣的是,程序6 - 11已经给出了利用F I F O分枝定界搜索从迷宫的(1,1)位置到(n,n)位置的最短路径的代码。
例5-2 [0/1背包问题] 下面比较分别利用F I F O分枝定界和最大收益分枝定界方法来解决如下背包问题:n=3,w=[20,15,15], p=[40,25,25], c= 3 0。
F I F O分枝定界利用一个队列来记录活节点,节点将按照F I F O顺序从队列中取出;而最大收益分枝定界使用一个最大堆,其中的E-节点按照每个活节点收益值的降序,或是按照活节点任意子树的叶节点所能获得的收益估计值的降序从队列中取出。
本例所使用的背包问题与例1 6 . 2相同,并且有相同的解空间树。
使用F I F O分枝定界法搜索,初始时以根节点A作为E-节点,此时活节点队列为空。
当节点A展开时,生成了节点B和C,由于这两个节点都是可行的,因此都被加入活节点队列中,节点A被删除。
下一个E-节点是B,展开它并产生了节点D和E,D是不可行的,被删除,而E被加入队列中。
下一步节点C成为E-节点,它展开后生成节点F和G,两者都是可行节点,加入队列中。
下一个E-节点E生成节点J和K,J不可行而被删除,K是一个可行的叶节点,并产生一个到目前为止可行的解,它的收益值为4 0。
下一个E-节点是F,它产生两个孩子L、M,L代表一个可行的解且其收益值为5 0,M代表另一个收益值为1 5的可行解。
G是最后一个E-节点,它的孩子N和O都是可行的。
由于活节点队列变为空,因此搜索过程终止,最佳解的收益值为5 0。
可以看到,工作在解空间树上的F I F O分枝定界方法非常象从根节点出发的宽度优先搜索。
它们的主要区别是在F I F O分枝定界中不可行的节点不会被搜索。
最大收益分枝定界算法以解空间树中的节点A作为初始节点。
展开初始节点得到节点B和C,两者都是可行的并被插入堆中,节点B获得的收益值是4 0(设x1 = 1),而节点C得到的收益值为0。
A被删除,B 成为下一个E-节点,因为它的收益值比C的大。
当展开B时得到了节点D和E,D是不可行的而被删除,E加入堆中。
由于E具有收益值4 0,而C为0,因为E成为下一个E-节点。
展开E时生成节点J和K,J不可行而被删除,K是一个可行的解,因此K为作为目前能找到的最优解而记录下来,然后K被删除。
由于只剩下一个活节点C在堆中,因此C作为E-节点被展开,生成F、G两个节点插入堆中。
F的收益值为2 5,因此成为下一个E-节点,展开后得到节点L和M,但L、M都被删除,因为它们是叶节点,同时L所对应的解被作为当前最优解记录下来。
最终,G成为E-节点,生成的节点为N和O,两者都是叶节点而被删除,两者所对应的解都不比当前的最优解更好,因此最优解保持不变。
此时堆变为空,没有下一个E-节点产生,搜索过程终止。
终止于J的搜索即为最优解。
犹如在回溯方法中一样,可利用一个定界函数来加速最优解的搜索过程。
定界函数为最大收益设置了一个上限,通过展开一个特殊的节点可能获得这个最大收益。
如果一个节点的定界函数值不大于目前最优解的收益值,则此节点会被删除而不作展开,更进一步,在最大收益分枝定界方法中,可以使节点按照它们收益的定界函数值的非升序从堆中取出,而不是按照节点的实际收益值来取出。
这种策略从可能到达一个好的叶节点的活节点出发,而不是从目前具有较大收益值的节点出发。
例5-3 [旅行商问题] 对于图1 6 - 4的四城市旅行商问题,其对应的解空间为图1 6 - 5所示的排列树。
F I F O分枝定界使用节点B作为初始的E-节点,活节点队列初始为空。
当B展开时,生成节点C、D和E。
由于从顶点1到顶点2,3,4都有边相连,所以C、D、E三个节点都是可行的并加入队列中。
当前的E-节点B被删除,新的E-节点是队列中的第一个节点,即节点C。
因为在图1 6 - 4中存在从顶点2到顶点3和4的边,因此展开C,生成节点F和G,两者都被加入队列。
下一步,D成为E-节点,接着又是E,到目前为止活节点队列中包含节点F到K。
下一个E-节点是F,展开它得到了叶节点L。
至此找到了一个旅行路径,它的开销是5 9。
展开下一个E-节点G,得到叶节点M,它对应于一个开销为6 6的旅行路径。
接着H 成为E-节点,从而找到叶节点N,对应开销为2 5的旅行路径。
下一个E-节点是I,它对应的部分旅行1 - 3 - 4的开销已经为2 6,超过了目前最优的旅行路径,因此,I不会被展开。
最后,节点J,K成为E-节点并被展开。
经过这些展开过程,队列变为空,算法结束。
找到的最优方案是节点N所对应的旅行路径。
如果不使用F I F O方法,还可以使用最小耗费方法来搜索解空间树,即用一个最小堆来存储活节点。
这种方法同样从节点B开始搜索,并使用一个空的活节点列表。
当节点B展开时,生成节点C、D和E并将它们加入最小堆中。
在最小堆的节点中,E具有最小耗费(因为1 - 4的局部旅行的耗费是4),因此成为E-节点。
展开E生成节点J和K并将它们加入最小堆,这两个节点的耗费分别为1 4和2 4。
此时,在所有最小堆的节点中,D具有最小耗费,因而成为E-节点,并生成节点H和I。
至此,最小堆中包含节点C、H、I、J和K,H具有最小耗费,因此H成为下一个E-节点。
展开节点E,得到一个完整的旅行路径1 - 3 - 2 - 4 - 1,它的开销是2 5。
节点J是下一个E-节点,展开它得到节点P,它对应于一个耗费为2 5的旅行路径。
节点K和I是下两个E-节点。
由于I的开销超过了当前最优的旅行路径,因此搜索结束,而剩下的所有活节点都不能使我们找到更优的解。
对于例5 - 2的背包问题,可以使用一个定界函数来减少生成和展开的节点数量。
这种函数将确定旅行的最小耗费的下限,这个下限可通过展开某个特定的节点而得到。
如果一个节点的定界函数值不能比当前的最优旅行更小,则它将被删除而不被展开。
另外,对于最小耗费分枝定界,节点按照它在最小堆中的非降序取出。
在以上几个例子中,可以利用定界函数来降低所产生的树型解空间的节点数目。
当设计定界函数时,必须记住主要目的是利用最少的时间,在内存允许的范围内去解决问题。
而通过产生具有最少节点的树来解决问题并不是根本的目标。
因此,我们需要的是一个能够有效地减少计算时间并因此而使产生的节点数目也减少的定界函数。
回溯法比分枝定界在占用内存方面具有优势。
回溯法占用的内存是O(解空间的最大路径长度),而分枝定界所占用的内存为O(解空间大小)。
对于一个子集空间,回溯法需要(n)的内存空间,而分枝定界则需要O ( 2n ) 的空间。
对于排列空间,回溯需要(n) 的内存空间,分枝定界需要O (n!) 的空间。
虽然最大收益(或最小耗费)分枝定界在直觉上要好于回溯法,并且在许多情况下可能会比回溯法检查更少的节点,但在实际应用中,它可能会在回溯法超出允许的时间限制之前就超出了内存的限制。
练习1. 假定在一个L I F O分枝定界搜索中,活节点列表的行为与堆栈相同,请使用这种方法来解决例5 - 2的背包问题。
L I F O 分枝定界与回溯有何区别?2. 对于如下0 / 1背包问题:n=4, p=[4,3,2,1], w=[1,2,3,4], c =6。
1) 画出有四个对象的背包问题的解空间树。
2) 像例1 7 - 2那样,描述用F I F O分枝定界法解决上述问题的过程。
3) 使用程序1 6 - 6的B o u n d函数来计算子树上任一叶节点可能获得的最大收益值,并根据每一步所能得到的最优解对应的定界函数值来判断是否将节点加入活节点列表中。