5 分钟跑通蚁群算法scikit-opt TSP 实战【免费下载链接】scikit-optGenetic Algorithm, Particle Swarm Optimization, Simulated Annealing, Ant Colony Optimization Algorithm,Immune Algorithm, Artificial Fish Swarm Algorithm, Differential Evolution and TSP(Traveling salesman)项目地址: https://gitcode.com/GitHub_Trending/sci/scikit-opt这篇文章带你在 scikit-opt 库里用蚁群算法ACA_TSP解决旅行商问题从安装到调参跑通一个 25 城市的 TSP 求解实例再讲收敛判断和常见坑。 先跑起来安装与最小可运行示例scikit-opt 安装就一条命令pip install scikit-opt然后直接跑这段最小示例6 个城市先看结果再说import numpy as np from scipy import spatial from sko.ACA import ACA_TSP n 6 # 城市数 coords np.random.rand(n, 2) # 随机落点 dist spatial.distance.cdist(coords, coords, metriceuclidean) def total_len(route): # 绕一圈的总路程 return sum(dist[route[i], route[(i 1) % n]] for i in range(n)) ant ACA_TSP(functotal_len, n_dimn, size_pop20, max_iter50, distance_matrixdist) best_route, best_len ant.run() print(最短路径长度:, round(best_len, 4))最短路径长度: 2.3174跑通了有结果了。下面拆开讲它是怎么来的。 蚁群算法到底在干什么30 秒理解版一句话类比一群快递员同时出门跑单谁走通的路线被贴上越多便签后来者就越优先抄这条路便签会随时间褪色所以队伍不会永远困在旧路线上总有新的捷径被试出来。对应到代码里每轮迭代就做四件事信息素初始化所有路段的热度先设成相同的起始值路径选择每只蚂蚁站在当前城市按热度 × 距离倒数加权随机挑下一站信息素更新一圈跑完后总路程越短的蚂蚁在走过的路段上刷越多热度自然挥发每轮先按比例清掉一部分热度再叠加新刷上去的这套逻辑全部封装在ACA_TSP类里源码见 sko/ACA.py你实际只需要关心run()这一个入口。 ACA_TSP 参数速查表ACA_TSP的参数不多一张表讲清楚 ACA_TSP 参数怎么配参数名含义推荐起步值调大的影响调小的影响size_pop蚂蚁数量群体规模城市数的 2 倍路线多样性更高不易卡局部但每轮更慢速度快探索不足解质量下降max_iter最大迭代次数200搜索更充分总耗时线性增加可能没收敛就提前停了alpha信息素权重因子1更信热度偏利用容易反复走同一条路选择更随机探索增强beta启发式信息权重2更信距离偏探索行为趋近贪心挑近路更依赖信息素随机性变大rho信息素挥发系数0.1热度退得快不易早熟但收敛变慢热度残留久容易过早收敛新手阶段先盯size_pop和rho就够了一个决定队伍规模一个决定遗忘速度。其余参数保持默认等结果不理想再回头调。️ 完整实战25 城市 TSP 求解上正题25 个随机城市求一圈的最短访问顺序。完整代码如下import numpy as np from scipy import spatial from sko.ACA import ACA_TSP # 1. 随机生成 25 个城市坐标 n_city 25 city_coords np.random.rand(n_city, 2) # 2. 城市两两间的欧氏距离构成距离矩阵 dist_matrix spatial.distance.cdist(city_coords, city_coords, metriceuclidean) # 3. 目标函数输入访问顺序返回绕一圈的总距离 def route_length(order): return sum(dist_matrix[order[i], order[(i 1) % n_city]] for i in range(n_city)) # 4. 配置蚁群参数并运行 ant ACA_TSP(funcroute_length, n_dimn_city, size_pop50, # 城市数的 2 倍 max_iter200, distance_matrixdist_matrix) best_order, best_length ant.run() # 5. 输出结果 print(最短路径长度:, round(best_length, 4)) print(最优访问顺序:, best_order.tolist())最短路径长度: 3.2841 最优访问顺序: [3, 21, 4, 17, 9, 24, 0, 12, 19, 6, 2, 22, 15, 8, 23, 11, 5, 1, 14, 18, 10, 16, 13, 7, 20]第一段是数据准备坐标随机生成距离矩阵用scipy的cdist一次算好。注意算法本身只依赖这个矩阵坐标仅在计算距离时用了一次。第二段定义目标函数。ACA_TSP对你的问题一无所知它只是拿你给的func给每条路线打分所以距离怎么算完全由你决定。第三段是核心把目标函数、城市数、群体规模、距离矩阵交给ACA_TSPrun()返回最优顺序best_order和对应长度best_length。官方示例在 examples/demo_aca_tsp.py里面还带了画图代码。 看收敛曲线你的解够不够好跑完后ant.y_best_history里存着每一轮的最优长度画出来只要几行import pandas as pd import matplotlib.pyplot as plt pd.DataFrame(ant.y_best_history).cummin().plot() plt.xlabel(迭代次数); plt.ylabel(历史最优路径长度); plt.show()曲线前半段快速下坠、后段贴着底部走平说明基本收敛了如果到最后一轮还在明显下滑就加大max_iter再跑一轮。 调参 避坑指南常见误区正确做法只跑一次就下结论随机性强建议跑 5 次取最优或固定随机种子做对比size_pop设太小经验值是城市数的 1.5~2 倍太小路线多样性不足rho设为 0不挥发热度只增不减队伍很快锁死在一条路上建议 0.1~0.5漏传distance_matrix转移概率要用它算倒数启发值属于必传参数期望得到精确最优解蚁群找的是近似解把max_iter翻倍后长度不再变化就可以接受当前结果alpha和beta是最常被问到的信息素参数调优方向alpha调大蚂蚁更信信息素偏利用beta调大蚂蚁更信距离偏探索。如果你发现结果总停在差不多的位置先调大rho再考虑动alpha。 蚁群算法还能干嘛TSP 只是最顺手的练手题同一套排序即解的思路还能迁到这些场景VRP 车辆路径给多条路线加容量约束解决配送车队怎么派车网络路由节点当路由器、边权当延迟给数据包挑低延迟路径任务调度把任务排成一个执行顺序最小化总完成时间资源分配把分配方案映射成排列顺序按总代价打分scikit-opt 里各算法的接口风格一致目标函数 run()只要你能把问题改写成给一个排列打分换算法基本只是换 import 的事。 延伸阅读这份蚁群算法 Python 实现只是 scikit-opt 的一个模块其他算法可以对照着学粒子群优化sko/PSO.py遗传算法sko/GA.py模拟退火sko/SA.py差分进化sko/DE.py图文教程入口在 docs/中英文文档都有。写在最后参数表里的数字都只是起点曲线和结果才是答案。把上面那段完整实战代码跑起来改两个参数再看一眼收敛曲线你就已经入门蚁群算法了。【免费下载链接】scikit-optGenetic Algorithm, Particle Swarm Optimization, Simulated Annealing, Ant Colony Optimization Algorithm,Immune Algorithm, Artificial Fish Swarm Algorithm, Differential Evolution and TSP(Traveling salesman)项目地址: https://gitcode.com/GitHub_Trending/sci/scikit-opt创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
《API网关》第7章:权限认证组件(Shiro + JWT)设计与实现解析 《API网关》第7章:权限认证组件(Shiro JWT)设计与实现解析 【免费下载链接】CodeGuide :books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总,旨在为大家提供一个清晰详细的学习教程,侧重点更… · 2026/9/23 19:57:24
React Native热更新实践:从零接入CodePush避坑指南 做React Native的人应该都有过这种体验:App提审通过刚松一口气,产品经理就拿着新需求过来了。如果每次改点东西都要走一遍应用商店审核,那这活儿基本没法干了。热更新就是为了解决这个问题而存在的,它让App也能像网页一样“改了就… · 2026/9/23 19:57:18
幼儿口腔溃疡速查手册:3步搞定配置卡壳痛点 幼儿口腔溃疡速查手册:3步搞定配置卡壳痛点 配置环境就卡半天,这是无数开发者在接手新项目或搭建本地开发环境时的真实写照。明明照着文档一步步来,结果依赖装不上、端口冲突、版本不兼容,排查起来耗费大量时间,严重影响开发效率。为了彻底解决这个痛点… · 2026/9/23 19:56:52
3个坑解决自适应远近光代码跑不通最佳实践 3个坑解决自适应远近光代码跑不通最佳实践 刚把同事发来的“自适应远近光”Demo代码拷到本地,一运行直接报错?别慌,这种“看着挺高大上,跑起来全是Bug”的情况,在嵌入式和车规级项目里太常见了。很多人以为这是硬件驱动问题,其实90%是状态机… · 2026/9/23 20:33:35
用管理思维拆解代码结构,3个技巧解决调试难题的最佳实践 用管理思维拆解代码结构,3个技巧解决调试难题的最佳实践 复制来的代码跑不通,报错日志像天书,改了这里崩了那里,是不是你的常态?别急,这往往不是语法问题,而是缺乏 管理思维… · 2026/9/23 20:33:29
斗战神灵猴棍系加点源码解析 5个避坑点助你晋升 斗战神灵猴棍系加点源码解析 5个避坑点助你晋升 面试被问原理答不上来,这大概是很多技术人职业生涯里最尴尬的瞬间。你背了无数八股文,代码也写得飞起,但一旦面试官深挖底层逻辑,或者问到实际业务中的边界处理,脑子瞬间空白。这种“知其然不知其所以然… · 2026/9/23 20:33:22
喜马拉雅网站最佳实践:3个底层逻辑拆解项目搭建 喜马拉雅网站最佳实践:3个底层逻辑拆解项目搭建 学会语法却不知怎么搭项目,这是很多开发者的死穴。 盯着代码编辑器发呆,脑子全是空白的,连个目录结构都建不起来。 想搞懂 最佳实践 ,别光看教程,得拆开看骨架,比如拆解 喜马拉雅网站… · 2026/9/23 20:33:15
图解原理:从零手搓在线翻译网页,解决API变动难题 图解原理:从零手搓在线翻译网页,解决API变动难题 昨天刚发版,今天线上就崩了。原因很简单:上游翻译接口升级,字段名从 data.text 变成了 result.content ,老代码直接抛异常。这种 版本升级后 API 全变了… · 2026/9/23 20:33:09
开发一个app多少钱?揭秘成本构成与最佳实践 开发一个app多少钱?揭秘成本构成与最佳实践 盯着满屏红色的 StackTrace,脑子瞬间炸了?别慌。很多刚转岗移动端开发的朋友,一听到“开发一个app多少钱”,第一反应不是算技术账,而是被那些看不懂的报错堆吓退。其实,搞清楚钱花在哪,比… · 2026/9/23 20:33:02
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29