算法设计与分析复习笔记第六章分支限界法

这篇具有很好参考价值的文章主要介绍了算法设计与分析复习笔记第六章分支限界法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

分支限界法概述

分支限界法的基本思想

分支限界法类似于回溯法,也是一种在问题的解空间树T中搜索问题解的算法。

但在一般情况下,分枝限界法与回溯法的求解目标不同。回溯法的求解目标是找出解空间树中满足约束条件的所有解,而分枝限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。

所谓“分枝”就是采用广度优先的策略,依次搜索活结点的所有分枝,也就是所有相邻结点。
 

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构


求最优解时,选择哪一个子结点?
采用一个限界函数,计算限界函数值,选择一个最有利的子结点作为扩展结点,使搜索朝着解空间树上有最优解的分枝推进,以便尽快地找出一个最优解。

分支限界法与回溯法的主要区别

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

分支限界法的设计思想

  1. 设计合适的限界函数
  2. 组织活结点表
  3. 确定最优解的解向量

1. 设计合适的限界函数

在搜索解空间树时,每个活结点可能有很多孩子结点,其中有些孩子结点搜索下去是不可能产生问题解或最优解的。可以设计好的限界函数在扩展时删除这些不必要的孩子结点,从而提高搜索效率。  

假设活结点si有4个孩子结点,而满足限界函数的孩子结点只有2个,可以删除这2个不满足限界函数的孩子结点,使得从si出发的搜索效率提高一倍。

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

限界函数设计难以找出通用的方法,需根据具体问题来分析。一般地,先要确定问题解的特性:

目标函数是求最大值:则设计上界限界函数ub(根结点的ub值通常大于或等于最优解的ub值),若si是sj的父结点,应满足ub(si)≥ub(sj),当找到一个可行解ub(sk)后,将所有小于ub(sk)的结点剪枝。

目标函数是求最小值:则设计下界限界函数lb(根结点的lb值一定要小于或等于最优解的lb值),若si是sj的父结点,应满足lb(si)≤lb(sj),当找到一个可行解lb(sk)后,将所有大于lb(sk)的结点剪枝。

2.组织活结点表

根据选择下一个扩展结点的方式来组织活结点表,不同的活结点表对应不同的分枝搜索方式。

(1)队列式分枝限界法  队列式分枝限界法将活结点表组织成一个队列,并按照队列先进先出(FIFO)原则选取下一个结点为扩展结点。步骤如下:

1将根结点加入活结点队列。

2从活结点队中取出队头结点,作为当前扩展结点。

3对当前扩展结点,先从左到右地产生它的所有孩子结点,用约束条件检查,把所有满足约束条件的孩子结点加入活结点队列。

4重复步骤②和③,直到找到一个解或活结点队列为空为止。

(2)优先队列式分枝限界法  优先队列式分枝限界法的主要特点是将活结点表组组成一个优先队列,并选取优先级最高的活结点成为当前扩展结点。步骤如下:

1计算起始结点(根结点)的优先级并加入优先队列(与特定问题相关的信息的函数值决定优先级)。

2从优先队列中取出优先级最高的结点作为当前扩展结点,使搜索朝着解空间树上可能有最优解的分枝推进,以便尽快地找出一个最优解。

3对当前扩展结点,先从左到右地产生它的所有孩子结点,然后用约束条件检查,对所有满足约束条件的孩子结点计算优先级并加入优先队列。

4重复步骤②和③,直到找到一个解或优先队列为空为止。

3. 确定最优解的解向量

分枝限界法在搜索解空间树时,结点的处理是跳跃式的,回溯也不是单纯地沿着父结点一层一层地向上回溯,因此当搜索到某个叶子结点且该结点对应一个可行解时,如何得到对应的解向量呢?

两种方法:

① 对每个扩展结点保存从根结点到该结点的路径。  每个结点带有一个可能的解向量。这种做法比较浪费空间,但实现起来简单,后面的示例均采用这种方式。

② 在搜索过程中构建搜索经过的树结构。 每个结点带有一个双亲结点指针,当找到最优解时,通过双亲指针找到对应的最优解向量。这种做法需保存搜索经过的树结构,每个结点增加一个指向双亲结点的指针。

采用分枝限界法求解的3个关键问题如下:

(1)如何确定合适的限界函数。
(2)如何组织待处理结点的活结点表。
(3)如何确定解向量的各个分量。

分枝限界法的时间性能

一般情况下,在问题的解向量X=(x1,x2,…,xn)中,分量xi(1≤i≤n)的取值范围为某个有限集合Si=(si1,si2,…,sir)。

问题的解空间由笛卡尔积S1×S2×…×Sn构成:

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

在最坏情况下,时间复杂性是指数阶。

0-1背包问题

实例:假设有4个物品,其重量分别为(4, 7, 5, 3),价值分别为(40, 42, 25, 12),背包容量W=10。将给定物品按单位重量价值从大到小排序,结果如下:

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

v/w:单位重量对应的价值

分析

问题的解可表示为n元向量{x1, x2, ... xn }, xi属于{0,1},则可用子集树表示解空间。

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

分支限界法:广度优先,约束条件,目标函数,上界函数,下界函数

上下界

贪心法的解(1,0,0,0),价值为40,可作为0/1背包的下界。

上界ub可用最好情况来代替ub=w*(v1/w1)=10*10=100

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

目标函数的界[40, 100],一般解空间树中第i层的各结点,代表对物1~i的选择,可这样定限界函数:

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

分支限界法求解0/1背包问题

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

目标函数是求最大值:则设计上界限界函数ub(根结点的ub值通常大于或等于最优解的ub值),若si是sj的父结点,应满足ub(si)≥ub(sj),当找到一个可行解ub(sk)后,将所有小于ub(sk)的结点剪枝。

0/1背包问题 总结

从0/1背包问题的搜索过程可看出:与回溯法相比,分支限界法可根据限界函数不断调整搜索方向,选择最可能得最优解的子树优先进行搜索->找到问题的解。

0/1背包问题分支限界法伪代码

1.根据限界函数确定目标函数的界[down, up];

2.将待处理结点表PT初始化为空;

3.对根结点的每个孩子结点x执行下列操作

3.1 估算结点x的目标函数值value;
3.2 若(value>=down),则将结点x加入表PT中;

4.循环直到某个叶子结点的目标函数值在表PT中最大

4.1 i=表PT中值最大的结点;
4.2 对结点i的每个孩子结点x执行下列操作
4.2.1 估算结点x的目标函数值value;
4.2.2 若(value>=down),则将结点x加入表PT中;
4.2.3 若(x是叶子结点且结点x的value值在表PT中最大), 则将结点x对应的解输出,算法结束;
4.2.4 若(结点x是叶子结点但结点x的value值在表PT中不是最大),则令down=value,并且将表PT中所有小于value的结点删除;

应用分支限界法的其他关键问题:

如何确定最优解中的各个分量?

对每个扩展结点保存根结点到该结点的路径;例如,0/1背包问题。将部分解(x1, …, xi)和该部分解的目标函数的上界值都存储在待处理结点表中,在搜索过程中PT表的状态如下:

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

在搜索的过程中构建搜索经过的树结构,在求得最优解时,从叶子结点不断回溯到根结点,以确定最优解中的各个分量。

例如, 0/1背包问题。设一个表ST,在表PT中取出最大值结点进行扩充时,将最大值结点存储到表ST中,表PT和表ST的数据结构为(物品i-1的选择结果,<物品i, 物品i的选择结果>ub),在搜索过程中表PT和表ST的状态如下:

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构


ST中记录的就是得到最优解的搜索路径上的各个结点!

0-1背包问题的算法思想

首先,要对输入数据进行预处理,将各物品依其单位重量价值从大到小进行排列。

节点的优先级由已装袋的物品价值加上剩下的最大单位重量价值的物品装满剩余容量的价值和。

算法首先检查当前扩展结点的左儿子结点的可行性。如果该左儿子结点是可行结点,则将它加入到子集树和活结点优先队列中。当前扩展结点的右儿子结点一定是可行结点,仅当右儿子结点满足上界约束时才将它加入子集树和活结点优先队列。当扩展到叶节点时为问题的最优值。

练习题

分别用回溯法和分支限界法界以下0/1背包问题三个物品的重量为{5, 7, 6},价值为{10, 21, 24},背包容量为 12 。

分支限界法与回溯法的区别

求解目标不同:

回溯法——找出满足约束条件的所有解
分支限界法——找出满足条件的一个解,或某种意义下的最优解

搜索方式不同:

回溯法——深度优先
分支限界法——广度优先或最小耗费优先

此外,在分支限界法中,每一个活结点只有一次机会成为扩展结点。

装载问题

问题描述

有一批共n个集装箱要装上2艘载重量分别为c1和c2的轮船,其中集装箱i的重量为wi,且

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构


装载问题要求确定是否有一个合理的装载方案可将这个集装箱装上这2艘轮船。如果有,找出一种装载方案。

分析

把问题转换成一艘船的装货问题,即:第一艘船尽量多装,剩余的装入第二艘船

用子集树表示解空间:4层代表有3个货物,1代表装货物,2代表不装货物

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

解空间:X=(x1, x2 ,…, xn),xi∈Si={0, 1},i=1,2,…,n

约束函数:

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

目标函数:

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

目标函数:
下界:…
上界:…

上限界函数:

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

搜索算法设计

队列式分支限界:

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

优先队列式分支限界

采用最大优先队列存储活结点表。活结点x在优先队列中的优先级定义为:从根结点到结点x的路径所相应的载重量Ew + 剩余集装箱的重量r。

子集树中叶结点所相应的载重量与其优先级相同,一旦有一个叶结点成为当前扩展结点,则可以断言该叶结点所相应的解即为最优解。此时可终止算法。

实现方法:(PT表结点的结构)

在活结点中保存从解空间树的根结点到该活结点的路径;

搜索进程中保存当前已构造出的部分解空间树;

旅行商问题

问题描述:略。

各个城市间的距离用代价矩阵来表示, 如果(i,j)不属于E,则cij=∞。

分析:设城市按自然数1, 2, ..., n编号

解空间树是一个排列树

n-1层作为叶子结点层

解向量:(x1, x2, ..., xn)

约束条件:
显式约束:xi=1, 2, ..., n (i=1, 2, ..., n)
隐式约束:(xi≠xj) ∧(cij≠∞)

问题分析

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

问题的上限:采用贪心法求得近似解为1→3→5→4→2→1,其路径长度为1+2+3+7+3=16

问题的下限:
1.把矩阵中每一行最小的元素相加,可以得到一个简单的下界,其路径长度为1+3+1+3+2=10,但是还有一个信息量更大的下界
2.考虑一个TSP问题的完整解,在每条路径上,每个城市都有两条邻接边,一条是进入这个城市的,另一条是离开这个城市的,那么,如果把矩阵中每一行最小的两个元素相加再除以2,如果图中所有的代价都是整数,再对这个结果向上取整,就得到了一个合理的下界。 db=((1+3)+(3+6)+(1+2)+(3+4)+(2+3))/2=14。需要强调的是,这个解并不是一个合法的选择(可能没有构成哈密顿回路),它仅仅给出了一个参考下界。

目标函数:

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

下限界函数:设已确定的顶点集合U=(r1, r2, ..., rk)

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

批处理作业调度问题

问题描述:给定n个作业的集合J={J1, J2, …, Jn},每个作业都有3项任务分别在3台机器上完成,作业Ji需要机器j的处理时间为tij(1≤i≤n, 1≤j≤3),每个作业必须先由机器1处理,再由机器2处理,最后由机器3处理。

批处理作业调度问题要求确定这n个作业的最优处理顺序,使得从第1个作业在机器1上处理开始,到最后一个作业在机器3上处理结束所需的时间最少。

实例:设J={J1, J2, J3, J4}是4个待处理的作业,需要的处理时间如下所示。

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构


若处理顺序为(J2, J3, J1, J4),则从作业2在机器1处理开始到作业4在机器3处理完成的调度方案如下:

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

分析:

解向量:X=(x1, x2, ..., xn)——排列树

约束条件:显式:xi=J1, J2, ..., Jn

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

下限界函数:设M是已安排好的作业集合,M

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

{1, 2, ..., n}, |M|=k。现在要处理作业k+1,有:

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

单源最短路径问题

给定一个带权有向图G=(V,E),其中每条边的权是一个正整数。 另外,还给定V中的一个顶点v,称为源点。计算从源点到其他所有顶点的最短路径长度。这里的长度是指路上各边权之和。

用dist数组存放源点v出发的最短路径长度,dist[i]表示源点v到顶点i的最短路径长度,初始时所有dist[i]值为∞。 用prev数组存放最短路径,prev[i]表示源点v到顶点i的最短路径中顶点i的前驱顶点。

1.队列式(FIFO)分支限界法

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

2.优先队列分支限界法

以dist[]作为优先级,dist[]越小优先级越高

完成所有结点遍历就停

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

任务分配问题

有n(n≥1)个任务需要分配给n个人执行,每个任务只能分配给一个人,每个人只能执行一个任务。 第i个人执行第j个任务的成本是c[i][j](1≤i,j≤n)。求出总成本最小的分配方案。

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

这里采用优先队列式分枝限界法求解。

任务和人员的编号均为1~n,解空间每一层对应一个人员的分配。

根结点对应人员0(虚结点),依次为人员1、2、…、n分配任务。

叶子结点对应人员n。

解向量为x:x[i]表示人员i分配任务编号。初始时所有元素值为0,表示没有分配。

临时标识数组worker:worker[i]=true表示任务i已经分配。初始时所有元素值为false,表示没有分配。用bestx[MAXN]存放最优分配方案, mincost(初始值为∞)存放最优成本。

下界限界函数设计

lb为当前结点对应分配方案的成本下界。

例如对于结点e:x[]=[2,1,0,0],表示第1个人员分配任务2,第2个人员分配任务1,第3、4个人员没有分配任务; 相对应有worker[]=[true,true,false,false],表示任务1和2已经分配,而任务3、4还没有分配。此时计算结果是:e.cost=c[1][2]+c[2][1]=2+6=8。 下一步最好的情况是在数组c中第3行和第4行中找到非第1、2列(因为任务1、2已经分配)中最小元素和,显然为1+4=5,即其e.lb=e.cost+5=13。

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

剪枝操作

用bestx[MAXN]存放最优分配方案, mincost(初始值为∞)存放最优成本。

显然一个结点的lb>mincost,则不可能从其子结点中找到最优解,进行剪枝。仅仅扩展lb≤mincost的结点

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构

算法设计与分析复习笔记第六章分支限界法,笔记,算法,笔记,数据结构文章来源地址https://www.toymoban.com/news/detail-770554.html

到了这里,关于算法设计与分析复习笔记第六章分支限界法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 软件工程复习自用---第六章

            结构程序设计经典定义: 如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的 。         结构程序设计更全面的定义:结构程序设计是尽可能少用GO TO语句的程序

    2024年01月19日
    浏览(43)
  • 【计算机网络复习】第六章 局域网 LAN

    局域网( LAN )概述 § LAN 的特点 • 覆盖范围小 § 房间、建筑物、园区范围 • 高传输速率 § 10Mb/s ~ 1000Mb/s • 低误码率 § 10 -8 ~ 10 -11 • 拓扑:总线型、星形、环形 • 介质: UTP 、 Fiber 、 COAX • 私有性:自建、自管、自用 体系结构只包含了两个层次: 数据链路层、物理

    2024年02月08日
    浏览(44)
  • 【复习】人工智能 第六章 搜索求解策略(又多又难)

    在求解一个问题时,涉及到两个方面: (1)该问题的表示 (2)相对合适的求解方法:由于绝大多数需要人工智能方法求解的问题缺乏直接求解的方法,因此, 搜索 为一种求解问题的一般方法。 另外如果真的想拿下这一章,还是走一下ppt或书上的八数码的对应的每一种情况

    2024年01月16日
    浏览(51)
  • 大数据英文考试复习——第六章(大数据处理概念)

    前言 1.并行处理(parallel data processing): 2.分布式数据处理(distributed data processing): 3.Hadoop与Mapreduce 4.SCV原理(SCV principle) 5.实验【Mapreduce programming】 5.1 实验内容: 5.2 实验流程: 1.上传实验文件: 2.为文件赋予可执行权限: 3.启动Hadoop: 4.拷贝文件到Hadoop中: 5.3 英语答

    2024年01月25日
    浏览(41)
  • 【算法】四、分支限界法

    分支限界法(Brach-and-Bound) 分支限界法与回溯法类似,也是在问题的解空间树上搜索问题的解,通过限界函数进行剪枝,但采用BFS广度优先策略搜索。 首先确定一个合理的限界函数,并根据限界函数确定目标函数的界[down,up];然后,按照广度优先策略搜索问题的解空间树:

    2024年02月04日
    浏览(36)
  • 算法小课堂(九)分支限界法

    分支限界法是一种求解最优化问题的算法,常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。其基本思想是把问题的可行解展开,再由各个分支寻找最佳解。 在分支限界法中,分支是使用广度优先策略,依次生成扩展结点的所有分支。限界是在结点扩

    2024年02月06日
    浏览(31)
  • 【第六章 | 虚拟存储器】《操作系统 慕课版》课后答案 + 复习

    1.虚拟存储器概述 前面基础存储器的缺点 有一个共同特点: 作业全部装入内存后方能运行 常规存储器管理方式的特征:一次性:作业被一次性全部装入内存;驻留性:作业一直驻留在内存 一次性和驻留性使许多在程序运行中不用或暂不用的程序(数据)占据了 大量的内存

    2024年02月10日
    浏览(50)
  • 数据库系统概述——第六章 关系数据理论(知识点复习+练习题)

    🌟 博主: 命运之光 🦄 专栏: 离散数学考前复习(知识点+题) 🍓 专栏: 概率论期末速成(一套卷) 🐳 专栏: 数字电路考前复习 🦚 专栏: 数据库系统概述 ☀️ 博主的其他文章: 点击进入博主的主页​​​​​ 前言: 身为大学生考前复习一定十分痛苦,你有没有过

    2024年02月09日
    浏览(49)
  • 01背包(动态规划,贪心算法,回溯法,分支限界法)

    有n个物品,它们有各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和? number=4,capacity=8 物品编号(i) W(体积) V(价值) 1 2 3 2 3 4 3 4 5 4 5 6 1.什么是动态规划 1.动态规划算法是通过拆分问题,定义问题状态和状态之间的关系, 使得

    2024年02月08日
    浏览(67)
  • 【算法】优先队列式分支限界法,以01背包问题为例

    题目链接:采药-洛谷 当洛谷上不让下载测试用例,可以试试:采药-ACWing 题目描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞

    2024年02月02日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包