旅行商问题 branch and bound 解法lower bound选择的思考

旅行商作为np-hard问题无法在多项式时间内解决,因此人们各种近似算法求解。branch and bound是其中一种。对于brand and bound需要选择lower bound。我们希望选lower bound尽可能有效,比如每个都取0肯定是符合lower bound的定义但够好,没有起到剪枝的作用。

再优化一下也许有人会提出选择每一行中最小的数,贪心法。可是这样的模拟还不够精确,因为是回路,肯定有一条边出去,一条边回来,而具体那一条边出去哪一条回来?我们希望概率尽量均等。

所以我们选择每一行的最小的两个值(除了自己到自己的0外)的和求和,然后再除以2,获得平均值。直觉上,这样做似乎更有逻辑更能模拟这个过程。理论上的证明笔者尚未尝试。另外,在后期已经选过的边必选外再取最小两值。比如第5个点a,b,c中(a,b),(b,a),(b,c),(c,b)必选。于第三行而言选1,6而不是选1,2.

注:图中lb的意思是lower bound.第一个14的算法就是(3+1+3+6+1+2+3+4+2+3)/2 = 14. ceil(14) = 14.
另外提一下,旅行商问题不需要和最短路的问题一样求出每个点到各个其他点的最短距离,仅仅使用原本的图就够了。

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值