java实现旅行商问题逻辑回归_TSP(Traveling Salesman Problem)-----浅谈旅行商问题(动态规划,回溯实现)...

1.什么是TSP问题

一个售货员必须访问n个城市,这n个城市是一个完全图,售货员需要恰好访问所有城市的一次,并且回到最终的城市。

城市于城市之间有一个旅行费用,售货员希望旅行费用之和最少。

完全图:完全图是一个简单的无向图,其中每对不同的顶点之间都恰连有一条边相连。

664b47e4b6b230c7eb62bab37a8c21bd.png

2.TSP问题前提

回朔法:把所有的解列出来,形成一棵树,利用剪枝深度优先进行遍历,遍历的过程记录和寻找最优解。(剪枝就是把一条再深搜下去也不是最优解的分支剪去)。

动态规划:把一个大问题拆分成小问题,把小问题的最优结果通过表保留,在新问题需要用到的时候可以直接获取。

PS:下面的图,文字中出现1,2,3,4分别表示城市1,城市2,城市3,城市4

3.回朔法实现TSP问题

上面提到回朔法就是把所有的解列出来,形成一棵树,上面的例子形成的树如下:我们假设城市1为起点

48abb8b6b9aef7262f0f2a1d9b0d379a.png

上面介绍回溯法就是把所有解列出来,然后剪枝深搜。那么我们需要解决的就是剪枝深搜了。剪枝深搜中最麻烦的就是找到何时剪枝的条件了。

首先我们假设不知道剪枝条件,先模拟深搜跑一遍。

ab8e73887c3a794378a900586069f906.png

从1深搜到4回到1,花费11,记录这个数值。接下来回溯,继续深搜。一步一步深搜的时候,遇到了一个特殊的时候:

2c0cd74ff0f220ba2c73adbd215beacb.png

还记得我们之前记录的最短花费为11吗,1->2->4->3 花费已经11了,3回到1,还需要进行花费,不管花费多少,反正已经比我之前找出来的要大了,那这个时候我再深搜下去就没什么意义了,所以可以进行剪枝。我不继续找了,直接回溯。

所以剪枝条件出来了: 走下一步的距离 + 之前已经走过的距离的总和 >之前算出的最短路径 。

4.动态规划实现TSP

上面介绍了动态规划就是把大问题分解成小问题。我们现在的大问题是从1 经过2,3,4 回到1花费最少,那么我们把他分解一下。

我们从1出发有三种方案

ac57ec225de9018e9c96099db4191940.png

fbd1d60691d4aabd7f2fb1e5e3d51a4e.png

86cfa5b72bf03f04b406f4f49a5464f2.png

1、 从1出发,到2,然后再从2出发,经过[3,4]这几个城市,然后回到1,使得花费最少。

2、 从1出发,到3,然后再从3出发,经过[2,4]这几个城市,然后回到1,使得花费最少。

3、 从1出发,到4,然后再从4出发,经过[2,3]这几个城市,然后回到1,使得花费最少。

上面也提到了最优结果通过表来保留:设置一个二维的动态规划表dp , dp[1]{2,3,4}表示从1号城市出发,经过2,3,4 回到1花费最少。

要求上面三个方案的最小值意味:(D12表示1到2的距离,其他同理)

dp[1] [{2,3,4}] =  min{ D12+dp[2]{3,4} ,D13+dp[3]{2,4}, D14+dp[4]{2,3}}

由于D12,D13,D14是已知的,那么我们现在的目的就是求dp[2]{3,4},dp[3]{2,4},dp[4]{2,3},

照猫画虎,我们可以列出:(这里只列出dp[2]{3,4} ,其他两个类似)

dp[2]{3,4} = min{ D23+dp[3]{4} ,D24+dp[4][3}}

dp[3]{4}]= D43+dp[4]{}

dp[4]{}=D41

那么经过慢慢的分解,我们知道了我们已知了从4到1的最小花费,那么就可以推出从3出发经过4回到1的花费。。。。。。。从而推出我们所要求的最优解。

5.时间复杂度分析

回溯法:

动态规划法:

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<项目介绍> 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到94.5分,放心下载使用! 该资源适合计算机相关专业(如人工智能、通信工程、自动化、软件工程等)的在校学生、老师或者企业员工下载,适合小白学习或者实际项目借鉴参考! 当然也可作为毕业设计、课程设计、课程作业、项目初期立项演示等。如果基础还行,可以在此代码基础之上做改动以实现更多功能。 基于matlab和python实现的遗传算法解决旅行家问题源码+项目说明.zip 用遗传算法解决旅行家问题,MATLAB与Python实现 ### 旅行商问题 旅行商问题,即 TSP 问题Traveling Salesman Problem)是数学领域中著名问题之一。 假设有一个旅行商人要拜访 n 个城市,他必须选择所要走的路径,路经的限制是每个城市只 能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有 路径之中的最小值。TSP 问题是一个组合优化问题。该问题可以被证明具有 NPC 计算复杂 性。因此,任何能使该问题的求解得以简化的方法,都将受到高度的评价和关注。 ### 遗传算法 遗传算法的基本思想正是基于模仿生物界遗传学的遗传过程。它把问题的参数用基因代 表,把问题的解用染色体代表(在计算机里用二进制码表示),从而得到一个由具有不同染 色体的个体组成的群体。这个群体在问题特定的环境里生存竞争,适者有最好的机会生存和 产生后代。后代随机化地继承了父代的最好特征,并也在生存环境的控制支配下继续这一过 程。群体的染色体都将逐渐适应环境,不断进化,最后收敛到一族最适应环境的类似个体, 即得到问题最优的解。要求利用遗传算法求解 TSP 问题的最短路径。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值