新闻详情

新闻详情

首页 / 资讯中心 / 详情

旅行商问题:从数学模型到 Python 实战

发布时间:2026/10/1 17:03:11来源:尧图网络
旅行商问题:从数学模型到 Python 实战
旅行商问题Traveling Salesman Problem, TSP是组合优化领域中一颗璀璨的明珠也是计算机科学中 NP-hard 问题的典型代表。其问题描述简洁而优雅给定nnn个城市以及两两之间的距离d(i,j)d(i, j)d(i,j)求解一条从某一城市出发恰好访问每个城市一次并最终返回起点的最短哈密顿回路。尽管表述简单但随着城市数量的增加其解空间呈阶乘级增长使得寻找最优解成为一项极具挑战性的任务。从数学角度看TSP 可以被形式化为在一个带权完全图中寻找最小权重的哈密顿回路。设城市集合为V{1,2,…,n}V \{1, 2, \dots, n\}V{1,2,…,n}距离函数为d:V×V→Rd: V \times V \to \mathbb{R}^d:V×V→R我们的目标是最小化路径总长度LLL即Lmin⁡∑i1nd(πi,πi1) L \min \sum_{i1}^{n} d(\pi_i, \pi_{i1})Lmini1∑n​d(πi​,πi1​)其中π\piπ是城市的一个排列且πn1π1\pi_{n1} \pi_1πn1​π1​。由于 TSP 的复杂度极高时间复杂度约为O(n!)O(n!)O(n!)对于大规模实例精确算法往往无能为力因此工程实践中常采用启发式算法寻求近似最优解。为了将理论落地我们考虑一个具体的对称 TSP 实例。假设有 4 个城市A,B,C,DA, B, C, DA,B,C,D它们之间的距离矩阵DDD定义如下D[0101520100352515350302025300] D \begin{bmatrix} 0 10 15 20 \\ 10 0 35 25 \\ 15 35 0 30 \\ 20 25 30 0 \end{bmatrix}D​0101520​1003525​1535030​2025300​​该矩阵是对称的即d(i,j)d(j,i)d(i, j) d(j, i)d(i,j)d(j,i)且对角线为 0符合欧几里得空间的基本直觉。针对此问题我们首先实现暴力枚举法Brute Force。该方法通过遍历所有可能的城市排列Permutation来寻找全局最优解。虽然这种方法的时间复杂度为O(n!)O(n!)O(n!)仅适用于小规模问题但它保证了结果的绝对精确。以下是 Python 实现importitertoolsimportmath# 城市节点cities[A,B,C,D]# 距离字典邻接表形式dist{(A,A):0,(A,B):10,(A,C):15,(A,D):20,(B,A):10,(B,B):0,(B,C):35,(B,D):25,(C,A):15,(C,B):35,(C,C):0,(C,D):30,(D,A):20,(D,B):25,(D,C):30,(D,D):0}defcalculate_path_length(path):计算路径总长度total0foriinrange(len(path)-1):totaldist[(path[i],path[i1])]totaldist[(path[-1],path[0])]# 回到起点returntotal# 固定起点为 A对其他城市进行全排列start_nodeAother_nodes[cityforcityincitiesifcity!start_node]optimal_pathNonemin_distancemath.inf# 遍历所有排列组合forperminitertools.permutations(other_nodes):current_path(start_node,)perm current_distcalculate_path_length(current_path)ifcurrent_distmin_distance:min_distancecurrent_dist optimal_pathcurrent_pathprint(f最优路径精确解:{optimal_path})print(f最短距离:{min_distance})运行上述代码我们可以得到最优路径为A→B→D→CA \to B \to D \to CA→B→D→C总距离为808080。然而当城市数量增加到 20 个以上时暴力枚举将消耗天文数字的时间。此时我们需要转向启发式算法。这里我们实现最近邻算法Nearest Neighbor这是一种贪婪策略每一步都选择距离当前城市最近的未访问城市。虽然它不能保证最优但其时间复杂度仅为O(n2)O(n^2)O(n2)速度极快。# 城市列表cities{A,B,C,D}# 距离映射必须包含所有城市对dist{(A,B):10,(B,A):10,(A,C):15,(C,A):15,(A,D):20,(D,A):20,(B,C):35,(C,B):35,(B,D):25,(D,B):25,(C,D):30,(D,C):30,}defcalculate_path_length(route):计算路径总距离total0foriinrange(len(route)-1):totaldist[(route[i],route[i1])]# 可选回到起点totaldist[(route[-1],route[0])]returntotaldefnearest_neighbor_tsp(start,distance_map):最近邻启发式求解 TSPunvisitedset(cities)route[start]unvisited.remove(start)current_citystartwhileunvisited:next_citymin(unvisited,keylambdacity:distance_map[(current_city,city)])route.append(next_city)unvisited.remove(next_city)current_citynext_cityreturnroute# 执行最近邻算法nn_routenearest_neighbor_tsp(A,dist)nn_distancecalculate_path_length(nn_route)print(f最近邻路径:{nn_route})print(f最近邻距离:{nn_distance})在本例中最近邻算法同样输出了808080的最优解但在更复杂的数据集中结果通常会略逊于最优解。这种权衡体现了算法设计中“时间”与“精度”的经典博弈。对于更大规模的现实问题我们往往需要引入更复杂的元启发式算法如遗传算法、模拟退火或使用 Google OR-Tools 等专业优化库。TSP 不仅是理论的试金石更是物流配送、电路板钻孔、基因测序等众多实际应用的核心模型。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

TBOX信息安全系列9设计篇-安全启动方案 2026/10/1 17:03:10

TBOX信息安全系列9设计篇-安全启动方案

黑客攻击TBOX,最狠的一招不是破解通信——而是直接刷入恶意固件。一旦固件被换,你的TBOX就变成了黑客的"傀儡",之前所有的通信加密、访问控制全白搭。安全启动(Secure Boot)就是守固件这道门的第一把锁&…

阅读更多 →
Claude Code实测:从9圈费曼积分到科研工作流自动化 2026/10/1 17:03:10

Claude Code实测:从9圈费曼积分到科研工作流自动化

标题里那句"刷新物理学世界纪录"放在媒介稿上确实抓眼球,但作为一个常年把AI工具用在正经计算上的人,我更关心的是:这次不是摆个Demo就完事,而是一整套可以被复用的工作流。你看了新闻可能会觉得,这种基于杨…

阅读更多 →
基于OpenCV的图像处理与轮廓检测实现回形针高效计数 2026/10/1 17:03:10

基于OpenCV的图像处理与轮廓检测实现回形针高效计数

1. 项目概述与核心价值1.1 一个看似简单实则经典的视觉识别任务“paperclip”这个项目听起来特别不起眼——不就是识别回形针吗?但真正上手做一遍你就会发现,这个小小的目标物几乎把计算机视觉里的经典问题全演了一遍:小目标检测、类内差异、…

阅读更多 →
I2C从设备设计:时钟延展与死锁恢复全攻略 2026/10/1 17:03:09

I2C从设备设计:时钟延展与死锁恢复全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
n8n常用节点详解:文件操作、数据整形与代码执行实战 2026/10/1 17:03:03

n8n常用节点详解:文件操作、数据整形与代码执行实战

做自动化这行,我遇到最多的问题不是"怎么搭一个惊天动地的工作流",而是"怎么把一个文件从A点挪到B点,中间顺手改个格式、加个字段"。n8n 的节点体系恰好就是为这类事设计的,从文件操作到代码执行,…

阅读更多 →
Magenta 论文精读专栏指南:六篇生成模型经典论文的深度解读 2026/10/1 17:03:03

Magenta 论文精读专栏指南:六篇生成模型经典论文的深度解读

人工智能深度学习音频媒体生成计算机视觉 【免费下载链接】magenta Magenta: Music and Art Generation with Machine Intelligence 项目地址: https://gitcode.com/gh_mirrors/ma/magenta 点击查看 免费下载 Magenta 项目(Music and Art Generation wi…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉