旅行商 动态规划java_科学网—旅行推销商问题TSP的动态规划解法 - 李继存的博文...

2016-03-17 20:35:36

利用动态规划方法是可以精确求解旅行推销商问题(Traveling Salesman Problem)的, 虽然这种方法只适用于求解小规模的问题. 这个算法我一直没有弄清楚, 最近有个问题需要使用类似的算法来解决, 所以我就仔细研究了一下这个算法. 下面是网上几篇资料的总结.

我们先考虑一个小规模的问题, 只有4个城市, 城市间的距离由下面的矩阵 CC 决定.ij012300367

15023

26402

33750

值得注意的是, 这个矩阵是不对称的, 也就是说 Cij≠Cji" role="presentation" style="margin:0px;padding:0px;display:inline;line-height:normal;word-spacing:normal;word-wrap:normal;float:none;direction:ltr;max-width:none;max-height:none;min-width:0px;min-height:0px;border:0px;position:relative;">Cij≠CjiCij≠Cji. 如果这个矩阵是对称的, 算法还可以简化一些.

假定我们从城市0出发, 城市1, 2, 3每个经过一次, 最后回到城市0, 那么求解的递归树可以表示如下:d(0,{1,2,3})d[0,7]=3+7=10d(1,{2,3})d[1,6]=2+5=73d(2,{1,3})d[2,5]=4+6=106d(3,{1,2})d[3,3]=5+9=147d(1,{})d[3,0]=5d(2,{})d[2,0]=6d(3,{})d[3,0]=3d(2,{3})d[2,4]=2+3=52d(3,{2})d[3,2]=5+6=113d(1,{3})d[1,4]=3+3=64d(3,{1})d[3,1]=7+5=122d(1,{2})d[1,2]=2+6=87d(2,{1})d[2,1]=4+5=9525d(3,{})d[3,0]=337d(2,{})d[2,0]=62d(1,{})d[1,0]=54Fig.1

其中的 d(i,{j,k,l})" role="presentation" style="margin:0px;padding:0px;display:inline;line-height:normal;word-spacing:normal;word-wrap:normal;float:none;direction:ltr;max-width:none;max-height:none;min-width:0px;min-height:0px;border:0px;position:relative;">d(i,{j,k,l})d(i,{j,k,l}) 表示由城市 i" role="presentation" style="margin:0px;padding:0px;display:inline;line-height:normal;word-spacing:normal;word-wrap:normal;float:none;direction:ltr;max-width:none;max-height:none;min-width:0px;min-height:0px;border:0px;position:relative;">ii 出发, 集合 {j,k,l}" role="presentation" style="margin:0px;padding:0px;display:inline;line-height:normal;word-spacing:normal;word-wrap:normal;float:none;direction:ltr;max-width:none;max-height:none;min-width:0px;min-height:0px;border:0px;position:relative;">{j,k,l}{j,k,l} 中的城市 j,k,l" role="presentation" style="margin:0px;padding:0px;display:inline;line-height:normal;word-spacing:normal;word-wrap:normal;float:none;direction:ltr;max-width:none;max-height:none;min-width:0px;min-height:0px;border:0px;position:relative;">j,k,lj,k,l 每个经过一次需要的最小路程, 箭头上的值表示两个城市之间的距离.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值