5 分钟跑通蚁群算法:scikit-opt TSP 实战
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),仅供参考

相关新闻

八音盒原理避坑指南:新手环境配置不卡壳

八音盒原理避坑指南:新手环境配置不卡壳

八音盒原理避坑指南:新手环境配置不卡壳 配置环境就卡半天,代码报错满天飞,这种绝望感谁懂?别急,这份八音盒原理避坑指南专治各种“水土不服”。很多新手在搭建音频合成项目时,往往卡在依赖库版本冲突或者采样率不匹配上,导致项目跑不起来。…

2026/9/23 19:58:11 阅读更多 →
七绝山副本入门到精通:别再瞎刷题,这5个坑让你从0到1

七绝山副本入门到精通:别再瞎刷题,这5个坑让你从0到1

七绝山副本入门到精通:别再瞎刷题,这5个坑让你从0到1 看了一堆教程还是不会写项目?别急着自我怀疑,问题可能出在你根本没搞懂“七绝山副本”背后的逻辑闭环。很多人以为这是某个游戏里的BOSS战,或者某款手游的通关攻略,其实不然。在市政公用工程…

2026/9/23 19:58:11 阅读更多 →
Kornia 3D 亚像素定位修复:`max_candidates` 从批次共享预算改为逐图像预算

Kornia 3D 亚像素定位修复:`max_candidates` 从批次共享预算改为逐图像预算

计算机视觉深度学习人工智能图像处理 【免费下载链接】kornia 🐍 空间人工智能的几何计算机视觉库 项目地址: https://gitcode.com/kornia/kornia 点击查看 免费下载 导读 本文解读 Kornia 在 migration-047(对应 #4256、#4350)…

2026/9/23 19:58:11 阅读更多 →

最新新闻

Surface Duo刷机教程:fastboot与EDL救砖全流程详解

Surface Duo刷机教程:fastboot与EDL救砖全流程详解

简介:面向不熟悉官方文档、希望给微软Surface Duo刷机却无从下手的普通用户,这份教程用口语化讲解替代复杂术语,把“小白”最常卡住的环节拆开说明。内容没有停留在转载官方步骤,而是围绕真实操作补足了细节:刷机前如何…

2026/9/23 20:41:00 阅读更多 →
AI生成代码安全审查:三条信任边界与实操方法

AI生成代码安全审查:三条信任边界与实操方法

1. 为什么“看代码对不对”在 AI 生成场景下已经不够用了过去几年我参与过不少代码审查,传统模式下大家习惯盯的是语法、逻辑、边界条件、异常处理这些点。但自从团队开始大规模用 AI 辅助生成代码之后,我发现一个很明显的转变:代码本身“看起…

2026/9/23 20:41:00 阅读更多 →
技术分享:GBase 8s数据库启动服务基础说明

技术分享:GBase 8s数据库启动服务基础说明

南大通用GBase 8s数据库(gbase database)服务器启动基础说明完成 GBase 8s安装与基础配置后,还有一系列基础运维任务需要落地,包含准备应用连接、启动数据库、初始化磁盘空间、创建存储空间,配置备份恢复以及日常管理维…

2026/9/23 20:41:00 阅读更多 →
WAS8.5静默安装实战:imcl命令与节点联邦配置全解析

WAS8.5静默安装实战:imcl命令与节点联邦配置全解析

简介:面向WebSphere Application Server运维与实施人员的WAS 8.5静默安装及补丁升级完整步骤文档,覆盖Linux环境下安装包准备、目录结构规划、Installation Manager与WAS 8.5.5静默安装、管理概要与应用概要创建、Web管理控制台启动、Node节点配置&#…

2026/9/23 20:41:00 阅读更多 →
ramsey/uuid 安全漏洞披露政策(VDP)全解析:Scope 范围、Safe Harbor 条款与 PGP 加密上报流程

ramsey/uuid 安全漏洞披露政策(VDP)全解析:Scope 范围、Safe Harbor 条款与 PGP 加密上报流程

ramsey/uuid 安全漏洞披露政策(VDP)全解析:Scope 范围、Safe Harbor 条款与 PGP 加密上报流程 【免费下载链接】uuid :snowflake: A PHP library for generating universally unique identifiers (UUIDs). 项目地址: https://gitcode.com/g…

2026/9/23 20:41:00 阅读更多 →
Java企业报销系统实战:Spring Boot+Flowable流程驱动开发

Java企业报销系统实战:Spring Boot+Flowable流程驱动开发

简介:本资源是一套完整的Java毕业设计项目——企业报销管理系统,面向计算机专业本科生及Java初学者,聚焦办公自动化场景,解决传统纸质报销流程效率低、信息难共享、审批难追溯等实际问题。压缩包共206个文件,含109个编…

2026/9/23 20:40:00 阅读更多 →

日新闻

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A…

2026/9/23 0:00:23 阅读更多 →
2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我 刚把开发环境的显示器从1080P换到2K,跑老项目直接报错,版本升级后 API…

2026/9/23 0:01:25 阅读更多 →
3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点 官方文档翻了三遍还是云里雾里?别急,美眉图在实战项目中常被用来做数据可视化,但它的原理比你想的简单。今天咱们直接上手,用一个完整的小项目把美眉图跑通,不再死磕那些冗长的理论说明。…

2026/9/23 0:01:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →