算法设计与_第6章_分支限界法

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

1 8 7
2 6
3 4 5
目标状态
2 3 . 1 8 4 7 6 5
1 2 3 8 . 4 7 6 5
10
Hale Waihona Puke Baidu
分支限界法的基本思想

优先队列式分支限界法



“有智能”的排序函数C( )—最小代价估计 函数: C’(X)=从初始状态到X所移动的次数+还未 到位的数字方块数。 从初始状态到X所移动的次数是实际耗费的 代价,还未到位的数字方块数表示至少还要 移动的次数。 2 8 3 1 2 3
2
6
2 8 3 1 6 4 7 5 2 8 3 1 4 7 6 5
3
4
L=(3,2,4)
5
5
6
5
7
6
L=(5,6,2,4,7)
8
6
8 3 2 1 4 7 6 5
9
7
2 8 3 10 2 3 7 1 4 1 8 4 6 5 5 7 6 5 12 1 2 3 8 4 5 7 6 5
11 2 3 1 8 4 7 7 6 5
B,C E,F K,L
P=45 P=50
P=25 P=25
P=0
14
0-1背包问题

-FIFO队列式
扩展结点生成顺序

ABCEFKL

实际生成的子集树
15
0-1背包问题

-FIFO队列式
cw:当前装包重量 cp: 当前装包价值
分支限界搜索过程
// 非叶结点 // 检查当前扩展结点的左儿子结点 Typew wt = cw + w[i]; if (wt <= c) { // 左儿子结点为可行结点 if (cp+p[i] > bestp) bestp = cp+p[i]; Q.add(cp+p[i], cw+w[i], i+1);}//加入活结点队列

7
分支限界法的基本思想

(2)优先队列式分支限界法

按照优先队列中规定的优先级选取优先级最 高的结点成为当前扩展结点。常用方法是 LC(Least Cost)方法。

最大优先队列:使用最大堆,体现最大效益优先
最小优先队列:使用最小堆,体现最小费用优先

对活结点使用一个“有智能”的排序函数来 选取下一个结点,往往可以加快获取答案的 速度。
Queue Q; Q.add(-1); while (i != n+1) {
可行性约束
将一个新的活结 点插入到子集树 和优先队列中 i+1: 层数
L=(6,2,4,7,8,9) L=(10,2,4,7,8,9,11) L=(12,2,4,7,8,9,11)
13 1 2 3 8 4 C’(X)= C’(13) =5+0=5 7 6 5
L=(2,4,7,8,9,11)
12
0-1背包问题

给定n种物品和一背包。物品i的重量是wi, 其价值为vi,背包的容量为C。问应如何 选择装入背包的物品,使得装入背包中 物品的总价值最大?
1 7 6 4 5 8 7 6 4 5
11
初始状态 C’(X)=C’(1)=0+4=4
目标状态 C’(X)=s+0=s
1
4
2 8 3 1 6 4 7 5 2 8 3 1 4 7 6 5 2 3 1 8 4 7 6 5 4
6
优先队列
L=(1)
2 8 3 1 6 4 7 5 2 8 3 1 4 7 6 5
算法设计与分析
第 6章 分支限界法
1
学习要点

理解分支限界法的剪枝搜索策略 掌握分支限界法的算法框架

队列式(FIFO)分支限界法 优先队列式分支限界法 0-1背包问题; 旅行售货员问题 装载问题; 单源最短路径问题 最大团问题; 批处理作业调度问题

通过应用范例学习分支限界法的设计策略


两个比较值


对于一棵解空间树上的每一个节点所代表的部分解, 要计算出通过这个部分解繁衍出的任何解在目标函 数上的最佳值边界 目前求得的最佳解的值

算法会为每一节点x计算一个界,任何可能在以x 为根的子树中生成的结点所给出的解,其值都不 可能超出这个界. 分支限界法的主要思想


如果边界值不能超越最佳解,这个节点就是一个没有 希望的节点.
3
分支限界法的基本思想


分支限界方法找最优解的效率比回溯法 高。 原因在于


采用了最小代价估值函数指导搜索,在活节 点表中,选择有最小代价估值的节点作为扩 展节点。即总是向最有可能获得最优解的子 树上扩展。 并且采用限界函数U杀死活节点表中不可能 成为最优解的节点,提高算法的效率。
4
分支限界法的基本思想
2
分支限界法的基本思想

分支限界法常以广度优先或以最小耗费(最大 效益)优先的方式搜索问题的解空间树。 在分支限界法中,每一个活结点只有一次机会 成为扩展结点。


活结点一旦成为扩展结点,就一次性产生其所有儿 子结点。 在这些儿子结点中,导致不可行解或导致非最优解 的儿子结点被舍弃,其余儿子结点被加入活结点表 中。 此后,从活结点表中取下一结点(最有利的)成为当 前扩展结点,并重复上述结点扩展过程。这个过程 一直持续到找到所需的解或活结点表为空时为止。
输入:C>0, wi>0, vi>0, 1≤ i≤n
输出:(x1, x2, …, xn), xi∈{0, 1}, 满足
13
0-1背包问题

-FIFO队列式
实例

n=3,C=30,w={16,15,15},p={45,25,25} 可行性约束函数:
FIFO队列式分支限界法的基本思想
A
8
分支限界法的基本思想

实例——8-拼块游戏问题
输入: 具有8 个编号小方块的魔方
输出: 移动系列, 经过这些移动, 魔方达到目标状态
2 1 7
8 6
3 4 5
1 8 7
2 6
3 4 5
初始状态
目标状态
9
分支限界法的基本思想

FIFO队列式分支限界法
. 2 3 1 8 4 7 6 5 2 . 3 1 8 4 7 6 5 1 2 3 . 8 4 7 6 5 2 8 3 1 . 4 7 6 5 1 2 3 7 8 4 . 6 5
5
分支限界法的基本思想

常见的两种分支限界法

根据从活结点表中获取下一 扩展结点的不同方式
(1)队列式分支限界法 (2)优先队列式分支限界法
6
分支限界法的基本思想

(1)队列式分支限界法

按照队列先进先出(FIFO)或者后进先出 (LIFO)原则选取下一个结点为扩展结点。 不足:对结点的选择规则相当死板,具有一 定的 “盲目”性。这种选择规则不利于快 速检索到一个能够到达答案的结点。
相关文档
最新文档