当前位置: 首页 > article >正文

别再只盯着TSP了!用Python+遗传算法搞定多旅行商问题(MTSP)实战,附完整代码

用Python遗传算法攻克多旅行商问题从理论到代码的实战指南想象一下你是一家生鲜配送公司的技术负责人每天需要调度20辆货车为200个社区送货。如果每辆车随意分配路线不仅燃油成本飙升司机们也会抱怨工作量不均。这正是经典旅行商问题(TSP)在现实中的升级版——多旅行商问题(MTSP)的典型场景。本文将带你用Python的DEAP框架实现遗传算法解决单仓库(SD-MTSP)和多仓库(MD-MTSP)两类实际问题包含可直接复用的完整代码和可视化方案。1. 为什么MTSP比TSP更值得关注传统TSP研究单个旅行商的最优路径而现实中更多面临的是资源分配问题10辆物流车如何划分100个配送点负载均衡需求确保每个销售代表拜访客户数量相当多中心调度从不同仓库发车的协同配送以生鲜配送为例SD-MTSP对应单冷链中心发车场景而MD-MTSP则适用于区域前置仓模式。遗传算法特别适合这类组合优化问题因为它能处理离散的解空间并行探索多个潜在解通过适应度函数灵活定义优化目标# 适应度函数示例最小化总路径长度 def evaluate(individual): total_distance 0 for route in decode_routes(individual): total_distance calculate_route_distance(route) return total_distance,2. 环境搭建与DEAP库核心概念安装必要的Python包pip install deap matplotlib numpyDEAP框架的关键组件Creator定义个体和适应度类型Toolbox注册遗传操作函数Base.Fitness封装适应度计算逻辑初始化遗传算法环境的典型代码结构from deap import base, creator, tools creator.create(FitnessMin, base.Fitness, weights(-1.0,)) creator.create(Individual, list, fitnesscreator.FitnessMin) toolbox base.Toolbox() toolbox.register(attr_float, random.random) toolbox.register(individual, tools.initRepeat, creator.Individual, toolbox.attr_float, n100)提示权重参数(-1.0,)表示最小化问题对于多目标优化可扩展为(1.0, -1.0)等形式3. SD-MTSP单仓库模型实现3.1 染色体编码设计采用分段编码方案例如前10个基因表示城市分配阈值后续基因代表城市访问顺序def create_individual(n_cities, n_salesmen): # 分配阈值部分 thresholds [random.random() for _ in range(n_salesmen-1)] # 城市访问顺序部分 cities random.sample(range(n_cities), n_cities) return creator.Individual(thresholds cities)3.2 遗传算子定制关键参数经验值操作类型推荐值调整建议交叉概率0.7-0.9高值促进探索变异概率0.01-0.1低值保持稳定种群大小50-200复杂问题需增大实现有序交叉(OX)的示例toolbox.register(mate, tools.cxOrdered) toolbox.register(mutate, tools.mutShuffleIndexes, indpb0.05)3.3 结果可视化使用Matplotlib绘制路线图def plot_routes(routes, depot): colors plt.cm.rainbow(np.linspace(0, 1, len(routes))) for i, (route, color) in enumerate(zip(routes, colors)): x [depot[0]] [c[0] for c in route] [depot[0]] y [depot[1]] [c[1] for c in route] [depot[1]] plt.plot(x, y, o-, colorcolor, labelfSalesman {i1}) plt.legend()4. MD-MTSP多仓库模型进阶4.1 双阶段编码策略第一阶段基因决定销售员-仓库的归属关系第二阶段基因控制城市分配和访问顺序适应度函数需考虑各销售员路径长度均衡性仓库之间的负载平衡总运输成本最小化4.2 约束处理技巧常用方法对比方法优点缺点惩罚函数实现简单需调参修复算子保证可行解设计复杂特殊编码自然满足约束限制搜索空间示例约束处理代码def feasible(individual): routes decode_routes(individual) # 检查是否所有城市都被访问 visited sum([len(r) for r in routes]) return visited total_cities4.3 多目标优化实现扩展适应度函数creator.create(FitnessMulti, base.Fitness, weights(-1.0, -1.0)) # 第一个目标总距离 # 第二个目标最长路径与最短路径的差值5. 性能优化实战技巧5.1 加速计算的关键使用numpy向量化距离计算实现记忆化(memoization)缓存常见路径并行化评估函数from multiprocessing import Pool pool Pool(processes4) toolbox.register(map, pool.map)5.2 超参数调优策略建议的调参流程固定其他参数调整种群大小(50→200)优化选择压力(tournsize3→10)微调交叉/变异概率引入自适应机制5.3 真实案例参数参考某物流公司实施的配置params { pop_size: 150, cx_prob: 0.85, mut_prob: 0.02, ngen: 500, toursize: 5 }6. 常见问题与解决方案Q1 算法收敛过快怎么办增加变异概率采用多样性保护策略尝试岛模型并行进化Q2 如何处理动态需求变化def dynamic_adjustment(population, new_cities): for ind in population: extend_chromosome(ind, len(new_cities)) toolbox.update_environment(new_cities)Q3 大规模实例性能瓶颈突破分治策略先聚类再分区优化启发式初始化用贪心算法生成初始解混合算法结合局部搜索如2-opt在最近一个社区团购项目中通过引入基于Voronoi图的初始分区我们将2000个点的计算时间从8小时缩短到47分钟。关键是要记住没有银弹参数需要根据具体问题特性进行针对性优化。当处理超大规模实例时可以考虑将Python原型重写为C扩展或者转向专门的优化求解器如OR-Tools作为补充方案。

相关文章:

别再只盯着TSP了!用Python+遗传算法搞定多旅行商问题(MTSP)实战,附完整代码

用Python遗传算法攻克多旅行商问题:从理论到代码的实战指南 想象一下你是一家生鲜配送公司的技术负责人,每天需要调度20辆货车为200个社区送货。如果每辆车随意分配路线,不仅燃油成本飙升,司机们也会抱怨工作量不均。这正是经典旅…...

MIMO-AFDM系统硬件损伤分析与优化策略

1. MIMO-AFDM系统硬件损伤性能分析概述在高速移动通信场景中,多输入多输出(MIMO)技术与新型调制波形(如AFDM)的结合正成为研究热点。AFDM(Affine Frequency Division Multiplexing)作为一种基于…...

Linux Power Management 子系统:从 suspend/resume 到 Runtime PM、PM QoS

做 Linux 驱动或 BSP 时,电源管理问题通常不是一句“进 suspend 了”就能解释清楚的。 同样是省电,echo mem > /sys/power/state 是整机进入睡眠;pm_runtime_put_autosuspend() 是单个设备在运行态下自动降功耗;CPUIdle 是 CP…...

5大架构革新:UiCard框架如何重构卡牌游戏UI开发范式

5大架构革新:UiCard框架如何重构卡牌游戏UI开发范式 【免费下载链接】UiCard Generic UI for card games like Hearthstone, Magic Arena and Slay the Spire... 项目地址: https://gitcode.com/gh_mirrors/ui/UiCard UiCard是一个专为Unity引擎设计的卡牌游…...

如何通过 curl 命令快速测试 Taotoken 的 API 连通性与响应

如何通过 curl 命令快速测试 Taotoken 的 API 连通性与响应 1. 准备工作 在开始测试之前,请确保您已经完成以下准备工作。首先登录 Taotoken 控制台,在「API 密钥」页面创建一个新的密钥并妥善保存。其次访问「模型广场」页面,记录您希望测…...

使用 Taotoken 后如何清晰观测各模型的月度用量与成本分布

使用 Taotoken 后如何清晰观测各模型的月度用量与成本分布 1. 用量看板的核心功能 Taotoken 控制台的用量看板提供了多维度的模型调用数据可视化。进入控制台后,默认展示最近30天的聚合数据,包括总请求次数、成功率和各模型消耗的token总量。用户可以通…...

从MySQL到ClickHouse:手把手教你迁移亿级日志数据(含性能对比)

从MySQL到ClickHouse:亿级日志数据迁移实战指南 1. 为什么选择ClickHouse处理海量日志数据 当你的MySQL数据库开始因日志数据的爆炸式增长而呻吟时,是时候考虑更专业的解决方案了。ClickHouse作为一款开源的列式OLAP数据库,在处理大规模日志分…...

基于大语言模型的婚恋情感助手:技术架构与伦理实践

1. 项目概述:当大语言模型遇见婚恋场景最近在GitHub上看到一个挺有意思的项目,叫saofund/marrywise-llm。光看名字,marrywise这个词就挺有嚼头,结合llm,基本能猜到这是一个将大语言模型(LLM)应用…...

探索 Taotoken 模型广场如何辅助开发者进行初步的模型选型与对比

探索 Taotoken 模型广场如何辅助开发者进行初步的模型选型与对比 1. 模型广场的核心功能概览 Taotoken 模型广场为开发者提供了一个集中查看和管理可用大模型的界面。首次进入控制台时,开发者可以在模型广场看到平台当前支持的主流模型列表。每个模型卡片展示了基…...

从星巴克不进意大利,聊聊广告拍卖里的‘帕累托最优’:为啥平台总想让你多赢一点?

从星巴克不进意大利,聊聊广告拍卖里的‘帕累托最优’:为啥平台总想让你多赢一点? 走在米兰的街头,你会发现一个有趣的现象——这座以咖啡文化闻名的城市,竟然找不到一家星巴克。这并非偶然,而是星巴克主动选…...

别再到处找了!GWAS数据下载保姆级指南:从IEU、FinnGen到UK Biobank

GWAS数据高效获取实战手册:从数据库选择到自动化处理 引言:为什么GWAS数据获取成为研究瓶颈? 刚接触全基因组关联分析(GWAS)的研究者,往往会在数据获取环节耗费大量时间。面对分散在不同平台、格式各异的GWAS数据集,如…...

在Taotoken平台管理多个API Key并设置访问限制的教程

在Taotoken平台管理多个API Key并设置访问限制的教程 1. 创建API Key的基础步骤 登录Taotoken控制台后,导航至「API密钥管理」页面。点击「新建API Key」按钮,系统会生成一个以sk-开头的密钥字符串。创建时建议填写描述字段,例如标注该密钥…...

别再为API格式发愁了!用LiteLLM一键统一Hugging Face、OpenAI等上百种模型调用

用LiteLLM统一上百种AI模型API调用的终极指南 当你的项目需要同时调用Hugging Face、OpenAI、Anthropic等不同厂商的大模型时,是否经常被五花八门的API格式搞得焦头烂额?每个平台都有自己的参数命名规则、返回数据结构,甚至认证方式都各不相同…...

Umi-OCR架构解析:离线OCR引擎的性能调优与实战指南

Umi-OCR架构解析:离线OCR引擎的性能调优与实战指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国语言库…...

北美5G网络必备:用Wireshark抓包实战解析CMAS紧急警报(SIB8)

北美5G网络实战:用Wireshark解码CMAS紧急警报的SIB8消息 当北美地区的手机突然响起刺耳的警报声,屏幕弹出"总统警报"或极端天气警告时,背后是5G网络中一个关键系统消息在发挥作用——SIB8。作为网络工程师,我们不仅需要…...

VMware macOS虚拟机快速解锁指南:免费实现跨平台开发环境

VMware macOS虚拟机快速解锁指南:免费实现跨平台开发环境 【免费下载链接】unlocker VMware Workstation macOS 项目地址: https://gitcode.com/gh_mirrors/unloc/unlocker 你是否想在Windows或Linux电脑上运行macOS系统进行iOS开发或软件测试,却…...

魔兽争霸3终极优化指南:免费开源工具让你的经典游戏焕发新生

魔兽争霸3终极优化指南:免费开源工具让你的经典游戏焕发新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为《魔兽争霸3》的卡顿、…...

对比自行搭建代理,使用Taotoken聚合服务在稳定性上的感受差异

从自建方案迁移到 Taotoken 平台的使用体验 1. 迁移背景与初期考量 我们团队最初采用自建方案接入多个大模型服务,主要出于对灵活性和成本控制的考虑。自建方案需要维护多个厂商的 API Key,并自行处理不同接口的兼容性问题。随着业务规模扩大&#xff…...

使用 pip install 命令快速安装 Taotoken 官方 Python SDK 并完成配置

使用 pip install 命令快速安装 Taotoken 官方 Python SDK 并完成配置 1. 安装 Taotoken Python SDK Taotoken 提供了与 OpenAI 官方 Python SDK 兼容的客户端库,可通过 pip 直接安装。在终端或命令行中执行以下命令: pip install taotoken该命令会自…...

OpenSpeedy:免费开源游戏变速工具,让你的游戏体验飞起来!

OpenSpeedy:免费开源游戏变速工具,让你的游戏体验飞起来! 【免费下载链接】OpenSpeedy 🎮 An open-source game speed modifier. 项目地址: https://gitcode.com/gh_mirrors/op/OpenSpeedy 你是否曾经在玩单机游戏时&#…...

如何快速检测微信单向好友?WechatRealFriends终极指南

如何快速检测微信单向好友?WechatRealFriends终极指南 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFriends …...

量子计算误差抑制与缓解技术解析

1. 量子计算误差问题的本质与挑战量子计算机在实际运行中面临着各种噪声和误差的干扰,这些干扰主要来源于量子比特与环境的相互作用(退相干效应)、量子门操作的不完美性(门保真度问题)以及测量过程中的随机误差。在典型…...

Halcon实战:用edges_sub_pix和fit_rectangle2搞定金属冲孔边缘缺陷检测(附完整代码)

Halcon工业视觉实战:金属冲孔边缘缺陷检测的工程化实现 金属冲压件的质量控制是工业自动化领域的关键环节。想象一下,当你站在生产线旁,数以千计的金属冲孔件正以每分钟数百件的速度通过检测工位——任何微小的边缘毛刺或凸起都可能导致后续组…...

多分类逻辑回归原理与Python实战指南

1. 多分类逻辑回归基础解析多分类逻辑回归(Multinomial Logistic Regression)是机器学习中处理分类问题的经典算法,特别适用于目标变量有三个或更多无序类别的场景。与二分类逻辑回归不同,它通过softmax函数扩展了模型能力,能够同时计算多个类…...

华为OD机试在家考,用自己电脑还是公司电脑?保姆级环境配置与避坑指南

华为OD机试环境配置全攻略:个人电脑与公司电脑的实战选择与避坑指南 当那封期待已久的华为OD机试邀请邮件终于出现在收件箱时,除了兴奋,更多涌上心头的是对考试环境的焦虑——究竟该用自己朝夕相处的个人电脑,还是公司配备的那台性…...

ColFlor:轻量级视觉语言文档检索模型解析

1. 项目概述:ColFlor——轻量级视觉语言文档检索模型在文档检索领域,传统方法通常依赖OCR(光学字符识别)技术将文档图像转换为文本,再通过文本检索模型进行处理。然而OCR流程存在两个显著痛点:一是识别准确…...

别再只盯着PSNR了!用Python和OpenCV手把手教你计算SSIM,评估图像修复效果更靠谱

超越PSNR:用Python实战SSIM评估图像修复效果的科学方法论 当你在GitHub上看到一个炫酷的图像去雾模型,或是朋友圈里有人分享最新的超分辨率算法时,如何判断这些技术的真实效果?大多数开发者会不假思索地甩出一句"PSNR多少&am…...

戴尔笔记本的‘私有协议’破解记:深入拆解那颗关键的DS2501芯片与三线电源接口

戴尔电源私有协议逆向工程:从DS2501芯片到三线接口的深度技术解析 当Type-C接口逐渐成为电子设备的通用充电标准时,戴尔却在其笔记本电源设计中保留了一套独特的私有通信协议。这种设计让许多追求便携性的用户在使用第三方氮化镓充电器时遇到了障碍——虽…...

3步掌握yuque-exporter:语雀文档备份的完整实战指南

3步掌握yuque-exporter:语雀文档备份的完整实战指南 【免费下载链接】yuque-exporter export yuque to local markdown 项目地址: https://gitcode.com/gh_mirrors/yuq/yuque-exporter 在数字化创作时代,你的知识资产安全至关重要。当语雀平台策略…...

Pytorch图像去噪实战(十三):DDIM加速扩散模型采样,让去噪从1000步降到50步

Pytorch图像去噪实战(十三):DDIM加速扩散模型采样,让去噪从1000步降到50步一、问题场景:DDPM效果能看,但采样实在太慢 上一篇我们把 DDPM 图像去噪工程搭起来了。 训练流程跑通后,很快会遇到一个…...