tsp 分支界限 java_干货 | 10分钟教你用branch and bound(分支定界)算法求解TSP旅行商问题...

本文介绍了如何用Java实现分支定界(Branch and Bound)算法来解决旅行商问题(TSP)。文章首先解释了搜索树节点的定义,包括path、bound和level字段,并展示了节点如何分支。接着,详细阐述了分支定界算法的主要步骤,包括初始化bound、优先队列遍历、分支、定界和更新最优解的过程。最后,讲解了定界过程的计算逻辑,以提高算法效率。
摘要由CSDN通过智能技术生成

在此之前,先给大家讲讲最重要的一个点,搜索树的节点定义,节点定义了原问题的solution和子问题的solution。Node节点定义如下:

public class Node {private ArrayList path;private double bound;private int level;public double computeLength(double[][] distanceMatrix) {// TODO Auto-generated method stubdouble distance = 0;for(int i=0;i

其余不重要的接口略过。如下:

- path:保存该节点目前已经走过的城市序列。

- bound:记录该节点目前所能达到的最低distance。

- level:记录节点处于搜索树的第几层。

- computeLength:记录当前城市序列的distance。

可能大家还没理解节点是如何分支的,看一张图大家就懂了。我们知道TSP问题的一个solution是能用一个序列表示城市的先后访问顺序,比如现在有4座城市(1,2,3,4):

80c71da84d4567396d2b058d364b4bf3.png

图中每个节点的数字序列就是path保存的。大家都看到了吧,其实分支就是一个穷枚举的过程。

相对于穷举,分支定界算法的优越之处就在于其加入了定界过程,在分支的过程中就砍掉了某些不可能的支,减

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值