旅行商问题(TSP)即给定一组城市以及每对城市之间的距离,需要找到一条最短的路线,该路线只对每个城市进行一次访问并返回起点。

这里注意汉密尔顿活路(Hamiltonian Cycle)和TSP之间的区别。汉密尔顿回路问题是要找出是否存在一次游览每个城市一次的路线。在TSP问题中,我们是已知存在汉密尔顿回路(因为该图是完整的),并且实际上,存在许多此类回路,TSP问题在于找到最小权重的汉密尔顿回路。

例如,考虑下图中的图形。图中的TSP回路应该是1-2-4-3-1。游览费用为10 + 25 + 30 + 15,即80。

该问题是一个著名的NP难题。

本文讨论一个简单解决方案的实现,如下:

将城市1作为起点和终点。 由于路线是循环的,因此我们可以将任何点视为起点。
生成所有(n-1)个! 城市的序列。
计算每个序列的成本,并跟踪最小的排列成本,最后以最小的成本返回序列。

代码如下:

from sys import maxsize
from itertools import permutations
V = 4# implementation of traveling Salesman Problem
def travellingSalesmanProblem(graph, s): # store all vertex apart from source vertex vertex = [] for i in range(V): if i != s: vertex.append(i) # store minimum weight Hamiltonian Cycle min_path = maxsize next_permutation=permutations(vertex)for i in next_permutation:# store current Path weight(cost) current_pathweight = 0# compute current path weight k = s for j in i: current_pathweight += graph[k][j] k = j current_pathweight += graph[k][s] # update minimum min_path = min(min_path, current_pathweight) return min_path # Driver Code
if __name__ == "__main__": # matrix representation of graph graph = [[0, 10, 15, 20], [10, 0, 35, 25], [15, 35, 0, 30], [20, 25, 30, 0]] s = 0print(travellingSalesmanProblem(graph, s))

输出为:

80

旅行商问题以及python实现相关推荐

  1. 遗传算法解决旅行商问题(Python版)

    完整代码点这里 遗传算法解决旅行商问题(Python版) 一.问题描述 TSP问题(Travelling Salesman Problem)即旅行商问题,又译为旅行推销员问题.货郎担问题,是数学领域中 ...

  2. 模拟退火算法求解旅行商问题(python实现)

    模拟退火算法求解旅行商问题 文章目录 模拟退火算法求解旅行商问题 一.模拟退火算法原理 二.旅行商问题 1.求解思路 2.代码 总结 旅行商问题(TSP 问题).假设有一个旅行商人要拜访全国31个省会 ...

  3. 遗传算法求最短路径(旅行商问题)python实现

    问题描述 一个商品推销员要去若干个城市推销商品,该推销员从一个城市出发,需要经过所有城市后,回到出发地.应如何选择行进路线,以使总的行程最短. 对于n个城市的TSP,本文利用python分别实现遗传算 ...

  4. Python数模笔记-模拟退火算法(4)旅行商问题

    1.旅行商问题(Travelling salesman problem, TSP) 旅行商问题是经典的组合优化问题,要求找到遍历所有城市且每个城市只访问一次的最短旅行路线,即对给定的正权完全图求其总权 ...

  5. 粒子群算法求解旅行商问题

    算法原理 旅行商问题是一个经典的NP问题,假设有N个城市,需要确定一个访问顺序,使得每个城市都访问一面,最后回到起点城市,且保证行走的总距离最短.        假设随机生成10个城市坐标,城市之间的 ...

  6. 万字字符长文带你了解遗传算法(有几个算例源码)

    一.遗传算法的基本概念 简单而言,遗传算法使用群体搜索技术,将种群代表一组问题解, 通过对当前种群施加选择.交叉和变异等一系列遗传操作来产生新-一代的种群,并逐步使种群进化到包含近似最优解的状态.由于 ...

  7. GitHub#python#:用自组织映射解决旅行商问题

    项目名称:som-tsp:用自组织映射解决旅行商问题 (2018年1月21日发布,作者:Diego Vicente) 项目地址: GitHub地址:https://github.com/DiegoVi ...

  8. python实现大规模邻域搜索(LNS)求解旅行商问题(TSP)

    文章目录 1. 大规模邻域搜索算法 1.1. LNS定义 1.2. LNS邻域 1.3. LNS框架 2. 旅行商问题TSP 3. python代码示例及结果 1. 大规模邻域搜索算法 参考<H ...

  9. java寻优算法_模拟退火算法SA原理及python、java、php、c++语言代码实现TSP旅行商问题,智能优化算法,随机寻优算法,全局最短路径...

    模拟退火算法SA原理及python.java.php.c++语言代码实现TSP旅行商问题,智能优化算法,随机寻优算法,全局最短路径 模拟退火算法(Simulated Annealing,SA)最早的思 ...

最新文章

  1. 一张图实现3D人脸建模!这是中科院博士生入选ECCV的新研究 | 开源
  2. flutter 如何自定义一个loadmore / 加载更多
  3. python逻辑运算符不懂_Python之逻辑运算符
  4. Kafka高性能相关
  5. Hibernate映射组件属性(一)
  6. 中国指定银行支行数据及省市数据获取
  7. informix数据库常用的命令
  8. Debug python - Segmentation fault (core dumped)
  9. 【Android】 Firebase登录、FCM、Google Play支付、adbrix、ONEStore、Galaxy Store、Google Install Referrer
  10. 生育指南(写给临产准妈妈)
  11. OpenCV开发笔记(六十九):红胖子8分钟带你使用传统方法识别已知物体(图文并茂+浅显易懂+程序源码)
  12. 南京工程学院计算机英语,南京工程学院是什么意思
  13. AtCoder Beginner Contest 190 E.Magical Ornament
  14. win10命令窗口在哪里
  15. android 电池续航时间,如何提高安卓手机电池续航能力 这份省电指南拿好
  16. L6305W: Image does not have an entry point. (Not specified or not set due to multiple choices.)
  17. 电子阅览室使用云终端解决方案的重要性
  18. HALCON之焊点检测(一):焊点检测工艺要求
  19. 进阶篇|手游联运系统营收的途径有哪些?手游联运系统营收秘诀?
  20. CNCERT:关于Spring框架存在远程命令执行漏洞的安全公告

热门文章

  1. react总结之jsx是什么,jsx语法规则
  2. css鼠标放上按钮变色
  3. 利用Python提取视频中的字幕(文字识别)
  4. Vue项目使用splitpanes插件(垂直水平分割窗口)
  5. 02.创新与企业精神——有目的的创新和创新机遇的7个来源
  6. 我的极限Scrum实践
  7. LinuxQQ3.0体验和下载方式
  8. 在二叉树中找到两个节点的最近公共祖先(C++)
  9. 数据结构---王道408
  10. 一年中的十二个月(英语)分别表示什么意思/