和小公主一起学习Branch and Bound

如有侵权请私信联系。
在运筹学的整数规划部分我们学过简单的分支定界,对于复杂的组合优化问题,怎么搜索,剪枝,定界呢?

TSP问题

对于TSP,我们需要利用上界和下界来进行剪枝,通过不断更新上界和下界,尽可能的排除不符合需求的child,以实现剪枝。搜索的过程中,
根据经验,求解10个以上客户点比较困难了,效率不高,加速的一种方法是利用拉格朗日松弛提供较好的下界。
求解TSP通常采用的定界方法是用分配问题定界或者是1-tree来定界。在一个图G(V,E)中,节点集合V = {1…n},我们定义{2…n}节点组成的子图的生成树以及两条与1节点的边组成的新图为1-tree。
TSP的可行解是1-tree的一种,因此最小权值1-tree (minimum weight 1-tree)可以作为TSP的一个下界,因此可以利用这个性质来作为定界的标准。最小权值1-tree的很容易求得,只需要求解子图{2…n}的最小生成树再加上两条与1节点相连的最短的边即可。
一棵1-tree是一个TSP的可行解的充要条件是1-tree中所有节点的度(degree)均为2。这样分枝的方法也就有了,即寻找1-tree中所有度大于等于3的节点,枚举并依次删除这个节点所有的边,依次求解最小权值1-tree,直到找到可行的TSP解。
1-tree可以使用最小生成树的kruskal算法,分配问题可以使用匈牙利算法。
最小生成树(minimum spanning tree MSS)问题: 找到最小权值的1-Tree。所以重点是求最小生成树问题,生成树问题通常由四种贪婪算法(greedy algorithm)解决:Kruskal’s算法,Prim’s 算法,Borůvka’s算法,Edmonds’算法,
生成树 (Spanning Tree)问题:从一张图分离出一棵树,包含图上所有点

最小生成树(minimum spanning tree MSS)问题: 找到最小权值的1-Tree;

1-Tree问题:生成树+两条与depot点相连的边,有且仅包含一个圈(cycle);

最小权值(minimum Weight)1-Tree问题:找到最小权值的1-Tree;

最小权值(minimum Weight)1-Tree算法:假设包含以下五个城市:(1, 2, 3, 4, 5), 先找到包含(2, 3, 4, 5)的最小生成树+ 两条包含1的权值之和最小的边。
通过one-tree算法得到的解有三种情况:

(1)先不区分得到的解是否为TSP可行解,判断此解大小与上界的大小关系,如果大于上界则直接剪支。

(2)当前解为可行解,且小于上界,则用当前解替换当前最优解,将当前解的值作为上界的值。

(3)当前解为不可行解,且小于上界,在当前解分支的基础上继续进行分支定界操作。

分支
当定界得到的解为情况(3)时,进行分支操作。

one-tree算法求得的解,会出现度大于等于3的点,显然当出现这种点的时候,此解必定是不可行解。

找到one-tree中所有度大于等于3的节点的边,枚举并将禁忌这些边作为分支条件,依次进行分支,继续进行定界。

VRP问题

关于分配问题和1-tree问题是仅适用于TSP问题的,VRP问题需要常规的方法,当然VRP也可以退化成TSP问题。
基本的逻辑是在运筹学课程学过的,主要在于工程实践和数据结构的设置,初期可以参考别人的代码,之后要自己复现哦。

主要的逻辑是这个图。【图片有点错误,剪和不剪搞反了。】

参考资料:

https://mp.weixin.qq.com/s/ogkN5mP8snQBQeIBRkiupw
https://mp.weixin.qq.com/s/BKqrhDrf5sfe-3CDB5qVrA

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值