分 支 限 界

文章介绍了分支限界法的基本原理,它与回溯法的区别在于寻找一个最优解而非所有解。通过队列式和优先队列式两种方式阐述如何解决简化版的装载问题,其中优先队列式通过最大优先队列确保找到最优解。在优先队列中,结点的优先级由路径载重量和剩余集装箱重量之和决定,当一个叶结点成为扩展结点时,其对应的解即为最优解。
摘要由CSDN通过智能技术生成

算法基础之分支限界
分支限界(branch and bound)法与回溯法类似,但是回溯法是求解目标中所有满足约束条件的解,而分支限界法是找出满足约束条件的一个解,最优。

所谓“分支”是采用广度优先的策略,依次生成扩展结点的所有分支(即:儿子结点)。

所谓“限界”是在结点扩展过程中,计算结点的上界(或下界),边搜索边减掉搜索树的某些分支,从而提高搜索效率。

回溯法和分支限界法的一些区别

回溯法深度优先搜索堆栈活结点的所有可行子节点被遍历后,才被从栈中弹出找出满足约束条件的所有解。

分支限界法广度优先或最小消耗优先搜索队列,优先队列每个结点只有一次成为活结点的机会找出满足约束条件的一个解或特定意义下的最优解。

常见的两种分支界限法

1)队列式(FIFO)分支界限法(广度优先):按照队列先进先出原则选取下一个结点为扩展结点。

2)优先队列式分支限界法(最小损耗优先):按照优先队列规定的优先级选取优先级最高的结点成为当前扩展结点。

例1、现在看一个简化版本的装载问题:一艘轮船装载问题。是否有一个合理的装载方案,可将这n个集装箱装上这2艘轮船?将第一艘轮船尽可能装满等价于选取全体集装箱的一个子集,使该子集中集装箱重量之和最接近载重量。

队列式分支限界法

    解装载问题的队列式分支限界法仅求出所要求的最优值,稍后进一步构造最优解。

    首先检测当前扩展结点的左儿子结点是否为可行结点。如果是,则将其加入到活结点队列Q中。

    然后,将其右儿子结点加入到活结点队列中(右儿子结点一定是可行结点)。2个儿子结点都产生后,当前扩展结点被舍弃。

    活结点队列中,队首元素被取出作为当前扩展结点。

活结点队列已空,算法终止

★优先队列式分支限界法

解装载问题的优先队列式分支限界法用最大优先队列存储活结点表。

活结点x在优先队列中的优先级定义为从根结点到结点x的路径所相应的载重量Ew(即:当前扩展结点船的载重量Ew)再加上剩余集装箱的重量r之和(即:将上界Ew+r定义为结点优先级)。

优先队列中优先级最大的活结点成为下一个扩展结点。

子集树中叶结点所相应的载重量与其优先级(上界值)相同,即:该叶子结点的上界值等于当前叶子结点处船的重量Ew。

在优先队列式分支限界法中,一旦有一个叶结点成为当前扩展结点,则可以断言该叶结点所相应的解即为最优解。此时可终止算法。

https://blog.csdn.net/weixin_45591044/article/details/111089127

https://blog.csdn.net/wwj_748/article/details/9163211

https://blog.csdn.net/Luoxiaobaia/article/details/109725604

https://www.freesion.com/article/9394920015/

https://cloud.tencent.com/developer/article/1616376

https://blog.csdn.net/vxiao_shen_longv/article/details/98481660

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值