算法设计与分析(霍红卫) 第6章

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第6章 分 枝 限 界 法 (2) 优先队列(priority queue,简称PQ)分枝限界法(PQBB). 在优先队列分枝限界法中,用优先队列作为组织活结点表的数 据结构,每个结点都有一个成本或价值,按照最大价值 (greatest value)/最小成本(least cost)的原则选择结点作为扩展结 点. 我们以0-1背包问题为例,讨论这两种分枝限界法的异同. 某商店有n个物品,第i个物品价值为vi,容量(或称权值)为wi, 其中vi和wi为非负数.背包的容量为W,W为一非负数.目标是 如何选择装入背包的物品,使装入背包的物品总价值最大.这 个问题的形式描述如下: max
第6章 分 枝 限 界 法 2. 优先队列状态空间树 . 当用优先队列作为组织活结点表的数据结构,并按照结点 估值函数值的大小选择下一个扩展结点时,就得到0-1背包问 题优先队列状态空间树,如图6-2所示.
第6章 分 枝 限 界 法
75,0 65,20 2 1 45,40 4 15,64 6 0 9 1 10 0,76 1 0 7 0 11 1 35, 44 12 0 15 1 16 20,56 5 0 13 0 17 25, 44 1 0 55,20 18 0 21 0 23 1 24 10,56 0 25 1 28 0,60 1 45,24 26 0 29 1 30 30,36 19 0 27 0 31 1 1 1 0 3 0
第6章 分 枝 限 界 法 (m) 当前优先队列:Q={19},生成价值分别为56,20的答案 结点24和25;下一个E结点:19. (n) 当前优先队列:Q={26, 27};下一个E结点: 26. (o) 当前优先队列:Q={27},生成价值分别为60,24的答案 结点28和29;下一个E结点: 27. (p) 当前优先队列:Q={ }, 生成价值分别为36,0的答案结 点30和31,队列为空,循环结束,产生问题的最优解的值76, 对应的结点为结点10. 由此可见,0-1背包问题优先队列状态空间树中结点的扩展 过程与从根结点扩展的深度优先搜索树非常相似,它们的主要 区别在于优先队列分枝限界法不扩展不可行结点.
第6章 分 枝 限 界 法
第6章 分 枝 限 界 法
6.1 分枝限界法的基本思想 6.2 0-1背包问题 背包问题 6.3 作业调度问题
第6章 分 枝 限 界 法
6.1 分枝限界法的基本思想
如果把回溯法看作深度优先搜索解空间树的过程,那么, 分枝限界法则可看作广度优先或者按照最大价值(或最小成本) 搜索解空间树的过程.它也是一种系统地搜索问题解的方法. 按照从活结点表中选择扩展结点的方法,分枝限界法又可细分 为: (1) 先 进 先 出 (first in first out , 简 称 FIFO) 分 枝 限 界 法 (FIFOBB).在先进先出的分枝限界法中,用队列作为组织活结 点表的数据结构,并按照队列先进先出的原则选择结点作为扩 展结点.
20
图 6-2 优先队列状态空间树
第6章 分 枝 限 界 法 基于上述分析,0-1背包问题优先队列状态空间树中使用的 主要数据结构及其变化过程如下: (1) 主要数据结构: 优先队列Q, 用于维持待扩展结点的活 结点表. (2) 主要数据结构的变化状态: (a) 当前优先队列:Q={1}; 下一个E结点: 1 Q={1} E 1. (b) 当前优先队列:Q={2, 3}; 下一个E结点: 2. (c) 当前优先队列:Q={4, 3, 5}; 下一个E结点: 4. (d) 当前优先队列:Q={6, 7, 5, 3}; 下一个E结点: 6. (e) 当前优先队列:Q={7, 5, 3},生成价值为64的答案结点9; 下一个E结点:7.
vi xi 小值优化问题. 显然,
1≤i ≤ n

1≤i ≤ n
∑v x
i i
取最小即
取最大.
重新定义了目标函数之后,背包问题描述如下:
min
1≤i ≤ n
∑v x
i i
(6.1)
第6章 分 枝 限 界 法 约束条件为
1≤i ≤ n
∑w x
i i
≤ W , xi ∈ {0,1},1 ≤ i ≤ n
式(6.1)中各量的意义同6.1节.
第6章 分 枝 限 界 法 我们仍然采用固定元组表示问题的解.图6-1和图6-2中那
∑ 些满足 wi xi ≤ W
1≤i ≤ n
条件的每一个叶结点都是答案结点,其 ,而对于不可行结点定义它的成本为+∞.
他的叶结点是不可行结点.对于每一个答案结点X定义它的成
c( X ) = ∑ 本函数为 vi xi
c( X 1≤i<k.这时,装包开销为 u( X ) = ∑ vi xi ,因此, ) = ∑ vi xi.
因而定义结点X处的上界函数u(X)为u( X ) = ∑ vi xi. UPBOUND 是针对上界函数u(X)对过程BOUND(见5.4节)所做的一种改变.
对于结点X,有u( X ) = UPBOUND ∑ vi xi , ∑ wi xi , j 1,W . 1≤i ≤ k 1≤i ≤k
第6章 分 枝 限 界 法 (f) 当前优先队列:Q={5, 3},生成价值分别为76,40的答 案结点10和11;下一个E结点:5. (g) 当前优先队列:Q={12, 3, 13};下一个E结点:12. (h) 当前优先队列:Q={13, 3},生成价值为44的答案结点 15; 下一个E结点:13. (i) 当前优先队列:Q={3},生成价值分别为56,20的答案 结点16和17;下一个E结点:3. (j) 当前优先队列:Q={18, 19}; 下一个E结点:18. (k) 当前优先队列:Q={20, 19, 21};下一个E结点:20. (l) 当前优先队列:Q={21, 19},生成价值44的答案结点23; 下一个E结点:21.
1≤i ≤ n
∑v x
i i
第6章 分 枝 限 界 法 约束条件为
1≤i ≤ n
∑w x
i i
≤W,
xi ∈ {0,1},1 ≤ i ≤ n
考虑n=4个物品的一个例子,其中(w1, w2, w3, w4)=(10, 20, 30, 45), (v1, v2, v3, v4)=(20, 20, 24, 36),W=75,物品已经按照每单 位权值从大到小排列.
第6章 分 枝 限 界 法 (g) 当前队列:Q={7, 8, 9, 10, 11, 12, 13};下一个E结点:7. (h) 当前队列:Q={8, 9, 10, 11, 12, 13, 14, 15};下一个E结点: 8.产生问题的可行结点17,对应的价值为64. (i) 当前队列:Q={9, 10, 11, 12, 13, 14, 15, 16};下一个E结 点:9. 产生问题的可行结点18,填充背包,对应的价值为76. 继续这一过程直到队列Q空为止. 在产生的所有可行解中,结点18产生问题的最大价值的可 行解值,称为问题的最优解的值,对应的最优解为(1, 1, 0, 1). 由此可见,0-1背包问题FIFO状态空间树中结点的扩展过程与从 根结点扩展的广度优先搜索树非常相似,它们的主要区别在于 FIFO分枝限界法不扩展不可行结点.
第6章 分 枝 限 界 法
6.2 0-1 背 包 问 题
1. 限界 . 设T是一棵状态空间树,c(*)是T中结点的成本函数.如果X 是T中的一个结点, 则c(X)是其根为X的子树中任一答案结点 的最小成本.这个c(*)是难于构造的,通常使用一个对c(*)估 值的启发式函数l(*)来代替,这个启发式函数易于计算,具有 性质: 如果X是一个答案结点或一个叶结点,则c(*)=l(*).
vi x c( 对于0-1背包问题,结点X处的估值函数 X ) 定义 i 1≤i < k 为 ,其中k表示结点X所在的层.用队列作为组织活结点 表的数据结构,按照结点进入队列的先后顺序选择下一个扩展 结点, 得到0-1背包问题先进先出状态空间树,如图6-1所示.


第6章 分 枝 限 界 法
75,0 65,20 2 1 45,40 4 15,64 8 0 17 1 18 0,76 1 0 9 0 19 1 35, 44 10 0 21 1 22 20,56 0 5 0 11 0 23 25, 44 1 1 55,20 6 0 13 0 25 1 26 10,56 0 27 1 28 0,60 1 45, 24 14 0 29 1 30 30,36 1 1 0 3 0 7 0 15 0 31
第6章 分 枝 限 界 法 搜索问题状态空间树的各种分枝限界法都是在生成当前E结 点的所有子结点之后再将另一结点变成E结点的.假定每个答案 结点X有一个与其相联系的c(X),并且假定会找到最小成本的答 案结点,利用一个满足l(X)≤c(X)的成本估值函数l(X)给出任一结 点X解的下界.采用下界函数可以减少搜索的盲目性,此外还可 通过设置最小成本上界使算法进一步加速.如果Up是最小成本 解的成本上界,则满足l(X)>Up的所有活结点都可以被杀死, 这 是因为由X到达的所有答案结点都满足c(X)≥l(X)>Up.在已经到 达一个具有成本Up的答案结点的情况下,那些满足l(X)>Up的所 有活结点都可以被杀死.Up的初始值可以用某种启发式算法得 到,也可以设置成∞.只要Up的初始值不小于最小成本结点的 成本,上述杀死活结点的规则不会杀死可以到达最小成本答案 结点的活结点. 每当找到一个新的答案结点时,就可以修改Up 的值,即如果某个结点的上界u(X)<Up,则用该结点的上界u(X) 更新Up.
1≤i ≤ k
1≤i ≤ k
1≤i ≤ k
第6章 分 枝 限 界 法 UPBOUND(cv, cw, k, W) 1 2 3 4 5 6 7 return (b) b ← cv c ← cw for i ← k+1 to n do if c+w[i] ≤ W then c ← c+w[i] b ← b树
第6章 分 枝 限 界 法 基于上述分析,0-1背包问题FIFO状态空间树中使用的主 要数据结构及其变化过程如下: (1) 主要数据结构: 先进先出队列Q, 用于维持待扩展结点 的活结点表. (2) 主要数据结构的变化状态: (a) 当前队列: Q={1}; 下一个E结点: 1. (b) 当前队列: Q={2, 3}; 下一个E结点: 2. (c) 当前队列: Q={3, 4, 5}; 下一个E结点: 3. (d) 当前队列: Q={4, 5, 6, 7}; 下一个E结点: 4. (e) 当前队列: Q={5, 6, 7, 8, 9}; 下一个E结点: 5. (f) 当前队列: Q={6, 7, 8, 9, 10, 11}; 下一个E结点: 6.
第6章 分 枝 限 界 法 2. 定义结点的限界函数 . 通过构造和设计结点处的限界函数,可以减小问题的状态 搜索空间.为了讨论方便起见, 我们将最大值优化问题转变成
最小值优化问题.如果用目标函数 vi xi
1≤i ≤ n

vi xi 替代目标函数
1≤i ≤ n

, 就使背包问题从一个最大值优化问题变成最
第6章 分 枝 限 界 法 1. 先进先出状态空间树 . 设T是一棵状态空间树,c(*)是T中结点的价值函数.如果X 是T中的一个结点,c(X)可定义为其根为X的子树中任一答案结 点的最大价值(或最小成本).这个c(*)是难于构造的,通常使用 ∧ 一个对c(*)估值的启发式函数 c() 来代替.这个启发式函数易 于计算,具有性质:如果X是一个答案结点或一个叶结点,则 ∧ c(*) = c() .
1≤i ≤ n
对于内结点及根结点,则将成本函数c(X)递归定义为min{c( Lchild(X)), c(Rchild(X))}.对于每个结点X,构造两个函数l(X)和 u(X),满足l(X)≤c(X)≤u(X).这两个函数的构造及导出过程如下: 首先构造结点X处的上界函数u(X),设X是第k层上的一个结点, 1≤k≤n+1,在结点X处,已决定了前k-1个物品的装包情况xi ,
相关文档
最新文档