旅行商问题(Traveling Salesman Problem,TSP)作为组合优化领域的经典难题,在物流配送、电路布线、旅游规划等众多实际场景中具有广泛应用。其核心在于寻找旅行商遍历所有城市且不重复、最终返回起点的最短路径,然而随着城市数量的增加,问题复杂度呈指数级增长,传统算法在求解大规模 TSP 问题时面临巨大挑战。
一方面,早期的指数级算法虽能精确求解,但面对大规模问题时计算时间过长,难以满足实际需求。另一方面,现代启发式智能算法如遗传算法、模拟退火算法等虽可搜索到可行解,但无法确保解的最优性及准确估计偏离程度。在此背景下,本复现聚焦于一种基于图论的逐点扩圈算法,该算法为解决平面 TSP 问题提供了新思路,通过独特的图论模型构建与优化策略,致力于在求解精度与计算效率间取得平衡,为 TSP 问题的有效解决开辟新途径。
points
列表给出城市(点)的坐标信息,如[(0, 0), (1, 2), (3, 1), (2, 3), (4, 0)]
,实际应用中可依问题规模和需求从文件读取或随机生成点坐标,为算法提供输入数据。distance
函数依据两点坐标计算欧几里得距离,通过精确计算点间距离,为后续路径长度评估与最优路径选择提供基础度量。其实现基于勾股定理,确保距离计算准确性,在算法各环节发挥关键作用,决定路径优劣评估与扩圈方向选择。find_outermost_points
函数通过双重循环遍历点集,依据点坐标相对大小关系判断点是否在最外圈。若某点在其他点右侧(横坐标更大或横坐标相同且纵坐标更大),则排除其为最外圈点可能。此函数筛选出的最外圈点集作为逐点扩圈起始边界,极大影响算法效率与最终解质量,其正确性与高效性对算法整体性能至关重要。expand_circle
函数整合上述功能,先调用find_outermost_points
确定最外圈点与内点集,再循环执行逐点扩圈操作。在循环中,穷举所有外圈点与内点组合计算路径长度,依最小路径原则选内点扩充外圈、更新集合与路径,直至内点集为空得最优圈,此过程是算法核心,其高效实现决定求解速度与精度,体现逐点扩圈策略优化求解路径的本质。Optimal Path: [(0, 0), (1, 2), (3, 1), (2, 3), (4, 0)]
,直观展示算法为旅行商规划的城市遍历顺序,可据此计算路径长度评估优劣。多次实验不同参数设置下的结果,分析路径稳定性与长度变化趋势,助于深入理解算法性能特性及应用潜力。