【改进篇】Python实现VRP常见求解算法——差分进化算法(DE)

数学建模竞赛C题解题全攻略:从顶流思路到无盲点解析 数学建模是运用数学工具解决实际问题的核心方法,其关键在于将现实问题抽象为数学模型,并通过算法求解。这一过程不仅需要扎实的数学和编程基础,更强调系统性的问题分析与工程化实现能力,其技术价值在于培养解决复杂系统问题的综合思维。在高校竞赛、科研训练及工业优化等场景中,掌握高效的建模与求解流程至关重要。本文聚焦于数学建模竞赛中的经典C题,深入剖析如何构建兼具创新性与鲁棒性的“顶流思路”,并通过对数据处理、模型选型、算法实现及论文呈现等环节的“无盲点解析”,确保解决方案的严谨与可靠,助力参赛者全面提升竞赛实战能力。 阅读详情

基于python语言,实现经典差分进化算法(DE)对车辆路径规划问题(CVRP)进行求解, 优化代码结构,改进Split函数

往期优质资源

CVRP系列
遗传算法
蚁群算法
禁忌搜索算法
模拟退火算法
自适应大邻域算法
粒子群算法
量子粒子群算法
差分进化算法
MDVRP系列
遗传算法
蚁群算法
禁忌搜索算法
模拟退火算法
自适应大邻域算法
粒子群算法
量子粒子群算法
差分进化算法
VRPTW系列
遗传算法
蚁群算法
禁忌搜索算法
模拟退火算法
自适应大邻域算法
粒子群算法
量子粒子群算法
差分进化算法
HVRP系列
遗传算法
蚁群算法
禁忌搜索算法
模拟退火算法
自适应大邻域算法
粒子群算法
量子粒子群算法
差分进化算法
MDHFVRPTW系列
遗传算法
蚁群算法
禁忌搜索算法
模拟退火算法
自适应大邻域算法
粒子群算法
量子粒子群算法
差分进化算法

1. 适用场景

  • 求解CVRP
  • 车辆类型单一
  • 车辆容量不小于需求节点最大需求
  • 单一车辆基地

2. 改进效果对比

这里做了简单的参数敏感性分析,比较不同参数组合下两个版本code的最优值与求解时间的差异。具体为:1)设定交叉概率Cr为0.2,0.4,0.5,0.8 ;2)设定变异概率为0.2,0.4,0.6,0.8,1.0,1.2,1.5,1.6,2.0等不同值;其他参数:最大迭代次数为300,车辆容量为80。

2.1 实验结果汇总

改进后的split算子是基于图论的,相对比较耗时,但有一定提升效果。

在这里插入图片描述

2.2 目标函数对比

在这里插入图片描述

2.3 求解时间对比

在这里插入图片描述

3. 求解结果

(1)收敛曲线
在这里插入图片描述
(2)车辆路径

在这里插入图片描述

(3)输出文件
在这里插入图片描述

4. 部分代码

(1)数据结构

# 数据结构:解
class Sol():
    def __init__(self):
        self.node_no_seq=None # 解的编码
        self.obj=None  # 目标函数
        self.route_list=None # 解的解码
        self.route_distance = None  # 车辆路径的长度集合
# 数据结构:网络节点
class Node():
    def __init__(self):
        self.id=0 # 节点id
        self.x_coord=0 # 节点平面横坐标
        self.y_coord=0 # 节点平面纵坐标
        self.demand=0 # 节点需求
class Model():
    def __init__(self):
        self.best_sol=None # 全局最优解
        self.node_id_list=[] # 需求节点集合
        self.sol_list=[] # 解的集合
        self.demand_dict={}  #需求节点映射id集合
        self.distance_matrix = {}
        self.depot=None # 车场节点
        self.number_of_demands=0  # 需求节点数量
        self.vehicle_cap=0 # 车辆最大容量
        self.Cr=0.5 # 差分交叉概率
        self.F=0.5 # 差分变异概率
        self.popsize=0

(2)距离矩阵

# 计算距离矩阵
def calDistanceMatrix(model):
    for i in model.node_id_list:
        for j in model.node_id_list:
            d=math.sqrt((model.demand_dict[i].x_coord-model.demand_dict[j].x_coord)**2+
                        (model.demand_dict[i].y_coord-model.demand_dict[j].y_coord)**2)
            model.distance_matrix[i,j]=d
        dist = math.sqrt((model.demand_dict[i].x_coord - model.depot.x_coord) ** 2
                             + (model.demand_dict[i].y_coord - model.depot.y_coord) ** 2)
        model.distance_matrix[i, model.depot.id] = dist
        model.distance_matrix[model.depot.id, i] = dist

(3)路径提取

def extractRoutes(node_no_seq,P,depot_id):
    route_list = []
    j = len(node_no_seq)
    while True:
        i = P[node_no_seq[j-1]]
        route = [depot_id]
        route.extend(node_no_seq[k] for k in range(i+1, j))
        route.append(depot_id)
        route_list.append(route)
        j = i+1
        if i == -1:
            break
    return route_list

(4)变异:DE/rand/1/bin

#差分变异;变异策略:DE/rand/1/bin
def muSol(model,v1):
    x1=model.sol_list[v1].node_no_seq
    while True:
        v2=random.randint(0,model.number_of_demands-1)
        if v2!=v1:
            break
    while True:
        v3=random.randint(0,model.number_of_demands-1)
        if v3!=v2 and v3!=v1:
            break
    x2=model.sol_list[v2].node_no_seq
    x3=model.sol_list[v3].node_no_seq
    mu_x=[min(int(x1[i]+model.F*(x2[i]-x3[i])),model.number_of_demands-1) for i in range(model.number_of_demands) ]
    return mu_x

(5)交叉

#差分交叉
def crossSol(model,vx,vy):
    cro_x=[]
    for i in range(model.number_of_demands):
        if random.random()<model.Cr:
            cro_x.append(vy[i])
        else:
            cro_x.append(vx[i])
    cro_x=adjustRoutes(cro_x,model)
    return cro_x

5. 完整代码

如有错误,欢迎交流。

私信,有偿

参考

  1. A simple and effective evolutionary algorithm for the vehicle routing problem
元启发式算法实战指南:从原理到工业级VRPTW优化 元启发式算法是一类面向NP-Hard组合优化问题的智能搜索范式,核心在于通过可调控的邻域探索、解质量评估与自适应接受机制,在有限时间内逼近高质量可行解。它不依赖目标函数可导性或精确数学建模,天然适配物流路径规划、生产调度、能源管理等含离散变量、多冲突约束与黑盒目标的实际场景。相比传统整数规划求解器,其技术价值体现在可控计算开销、强业务规则嵌入能力及全程可观测的搜索过程。典型应用如带时间窗的车辆路径问题(VRPTW),可通过自适应大邻域搜索(ALNS)框架实现秒级响应与20%以上运营指标提升。本文聚焦工程落地 阅读详情

相关推荐

遗传算法实战进阶:从黑箱调参到问题驱动的算子设计

遗传算法(GA)作为一种经典进化优化方法,其本质并非简单模拟自然选择,而是构建可控的信息演化系统。理解其核心在于把握适应度函数如何定义搜索方向、交叉与变异如何响应问题空间的几何特性(如多峰性、病态性、约束耦合),以及种群如何作为动态信息流网络进行结构化传播。工程实践中,GA失效往往源于编码与语义失配、算子参数脱离问题Lipschitz常数与维度特征、或适应度计算缺乏鲁棒性工程化处理。本文聚焦真实工业场景——柔性调度、PID整定、神经架构搜索等——系统阐释如何基于问题结构反推算子逻辑、实施七步适应度工程、建立

ailiao2015的博客 461

【论文阅读】(2004)A simple and effective evolutionary algorithm for the vehicle routing problem

车辆路径问题(VRP)在配送网络优化中发挥着核心作用。由于一些具有 75 个节点的经典实例抵制最佳精确解法,因此大多数研究人员专注于元启发式算法来解决现实生活中的问题。与具有时间窗口的 VRP 相反,没有任何遗传算法 (GA) 可以与为 VRP 设计的强大禁忌搜索 (TS) 方法竞争。本文通过提出一种相对简单但有效的混合遗传算法来弥补这一差距。

知不足而奋进,望远山而前行 1447

【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 01

算法设计

weixin_49199313的博客 1503

【运筹优化】带时间窗约束的车辆路径规划问题(VRPTW)详解 + Python 调用 Gurobi 建模求解

车辆路径规划问题(Vehicle Routing Problem,VRP)一般指的是:对一系列发货点和收货点,组织调用一定的车辆,安排适当的行车路线,使车辆有序地通过它们,在满足指定的约束条件下(例如:货物的需求量与发货量,交发货时间,车辆容量限制,行驶里程限制,行驶时间限制等),力争实现一定的目标(如车辆空驶总里程最短,运输总费用最低,车辆按一定时间到达,使用的车辆数最小等)。下图给出了一个简单的VRP的例子最基本的VRP问题叫做带容量约束的车辆路径规划问题(Capacitated Vehicle Rou

知不足而奋进,望远山而前行 4万+

Pickup-Delivery-VRP(python)取送货的VRP问题(Python)

1、完整代码,可直接运行(如有疑问可私信) 2、擅长领域:路径规划、机器学习、数据爬虫、数据分析处理等 3、该资源有较为详尽的注解,非常方便大家阅读与理解。 Pickup-Delivery-VRP(python) 取送货的VRP问题(Python)

CST软件中SPICE模型的高效导出与转换技巧(txt到cir实战指南)

本文详细介绍了在CST Studio Suite中高效导出与转换SPICE模型的实战技巧,重点讲解了如何将txt格式的模型转换为通用的cir格式。内容涵盖三种模型存在形式的处理方法、格式检查与内容清理、端口一致性验证等关键步骤,并提供了利用LTspice Export功能、批处理脚本以及结果一致性校验等进阶指南,帮助工程师实现场路协同仿真模型的无缝迁移与应用。

silver的专栏 1185

量子退火Python实战(1):车辆路径问题(VRP : Vehicle Routing Problem)

建模车辆路径问题(VRP:Vehicle Routing Problem)的QUBO矩阵,并提供Python实现代码。

gangshen1993的博客 1万+

无人机蜂群联合指挥作战技术详解

随着人工智能、通信技术、新材料等领域的不断进步,无人机蜂群联合指挥作战技术将迎来更加广阔的发展前景。未来,无人机蜂群将更加智能化、自主化,能够执行更加复杂、精细的作战任务。同时,加强国际合作,共同制定国际规则和标准,将是推动无人机蜂群技术健康发展的重要方向。无人机蜂群技术,是指通过先进的通信技术、自主导航与决策算法,将大量小型、低成本、功能各异的无人机组织成一个高度协同的群体,执行复杂多样的军事任务。2. 通信与数据链:采用高速、低延迟、抗干扰的通信技术,保障群体内无人机间的信息交换。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 1546

【VRP问题】基于混合遗传算法求解车辆路径规划问题附matlab代码

对配送中心来说,物流配送车辆的路径优化(VRP)是物流系统优化的一个关键环节。VRP是典型的NP难问题,遗传算法是一种自适应随机搜索方法,被认为是解决NP难题的途径。针对标准遗传算法局部搜索能力差的缺陷,文中以带时间窗的VRP为研究对象,构造了一种混合遗传算法。该方法在标准遗传算法的基础上引进了扫描-节约操作,充分利用不同的搜索方法,以提高遗传算法的局部搜索能力。​。

matlab_dingdang的博客 458

Ubuntu下安装Hive3.1.2教程(附MySQL安装方法及安装包)

文章目录前言一、安装Hive1. 下载压缩包并解压2. 安装Hive3. 配置环境变量4. 修改配置文件二、MySQL安装与配置1. 安装MySQL2. 安装MySQL jdbc包3. 为Hive创建MySQL账号三、验证Hive安装及错误处理1. 启动Hadoop2. 启动hive3. 运行Hive实例总结 前言 Hive 的安装需要建立在 Hadoop 的之上(类似于Hbase),关于 Hadoop 的单机安装以及伪分布式安装可以参考作者的另两篇博客: Ubuntu下单机安装Hadoop详细教程(附

程序必须为人类阅读而编写,并且仅仅碰巧可以让机器执行 1万+

VS Code 配置 LaTeX 写作环境完全指南

本文详细介绍了如何在 VS Code 中配置 LaTeX 写作环境,涵盖了从安装必备组件到高级功能的全面指南。首先,用户需要安装 LaTeX 发行版(如 TeX Live 或 MiKTeX)和 VS Code 插件(如 LaTeX Workshop)。接着,通过修改 settings.json 和 keybindings.json 文件,用户可以自定义编译、查看快捷键等基础配置。文章还提供了高效写作技巧,如使用代码片段和多文件项目管理,并介绍了高级功能如反向同步、公式预览和参考文献管理。此外,针对常见问题(

weixin_70043030的博客 1984

Python实现VRP常见求解算法——差分进化算法(DE)

基于python语言,实现经典差分进化算法(DE)对车辆路径规划问题(CVRP)进行求解。

Better.C的博客 2478

银行监管报送系统介绍(十五):金融审计平台

金审平台主要包括基础、财务、结算、信贷和中间业务五大板块,主要服务于审计署对中国银行的各项审计任务,同时也可为行内审计、稽核检查、数据分析、总分行提供基础数据服务,为实现基础数据共享提供了有力的数据保障。2019年1月某全国性股份制商业银行收到审计署2019-23号文,文中指出为进一步提高审计数据质量,审计署审计组派员前往9家重点商业银行,就完善标准化数据的相关情况与各银行有关部门进行讨论协商。关于数据报送频率及报送内容:数据从2019年4月开始,按月报送,即于每月25日之前报送上月数据;

银行信息系统应用架构详解 2059

【进阶五】Python实现SDVRP(需求拆分)常见求解算法——差分进化算法(DE)

基于python语言,采用经典差分进化算法(DE)对 需求拆分车辆路径规划问题(SDVRP) 进行求解。

Better.C的博客 1316

第七节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门 - 用户管理(上)

本节的内容是用户管理,后端Python代码的实现。

cuiwin的专栏 780

【文献笔记】CVPR 2023|Attention-Based Point Cloud Edge Sampling

优点能够有效采出点云数据的边缘点分类任务性能优越不足没有设计出一个更好的上采样方法,导致分割任务的性能略低只考虑了边缘特征,没有利用其他几何特征。

m0_55908255的博客 321

【改进篇】Python实现VRP常见求解算法——自适应大邻域算法(ALNS)

基于python语言,实现经典自适应大邻域算法(ALNS)对车辆路径规划问题(CVRP)进行求解, 优化代码结构,改进Split函数

Better.C的博客 2717

如何离线环境下安装Dify插件 (可提供远程指导协助)

离线环境下安装Dify插件

litlit023的专栏 8101

【进阶六】Python实现SDVRPTW常见求解算法——差分进化算法(DE)

基于python语言,采用经典差分进化算法(DE)对 带硬时间窗的需求拆分车辆路径规划问题(SDVRPTW) 进行求解。

Better.C的博客 873

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

改进灰狼优化算法I-GWO:原理、实现与多元函数寻优实战

元启发式算法是解决复杂优化问题的重要工具,其核心思想是通过模拟自然现象或群体智能行为,在解空间中进行高效搜索。灰狼优化算法(GWO)作为一种经典的群体智能算法,因其结构简单、参数少而受到关注,但在处理高维、多峰函数时,存在易陷入局部最优、探索与开发失衡等局限。其技术价值在于通过模拟灰狼社会等级和狩猎行为,为连续空间优化问题提供了有效的求解框架。针对经典GWO的不足,改进的灰狼优化算法(I-GWO)应运而生,它通过引入自适应参数策略、动态权重和混合搜索机制(如融合差分进化DE),显著提升了算法的全局搜索能力和

weixin_34364071的博客 718

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

2021-11-08

蒙特卡罗算法 算法介绍 蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,它是一种思想或者方法的统称,而不是严格意义上的算法。蒙特卡罗方法的起源是1777年由法国数学家布丰(Comte de Buffon)提出的用投针实验方法求圆周率(具体算法见文末的好文推荐),在20世纪40年代中期,由于计算机的发明结合概率统计理论的指导,从而正式总结为一种数值计算方法,其主要是用随机数来估算计算问题。 算法基本思想 蒙特卡罗方法的基本思想为:假想你有一袋豆子,把豆子均匀地朝这个正方形上撒,然后

qq_52226520的博客 299

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

运筹优化算法学习实践:从入门到精通

运筹学(Operations Research, OR) 是一门应用数学学科,起源于二战时期的军事行动研究,旨在通过数学建模、统计分析和优化方法为复杂系统的决策问题提供最优或近优解。优化(Optimization) 是运筹学的核心,简单来说就是:任何一个优化问题都可以用以下三要素来描述:min⁡f(x)(目标函数 Objective Function)s.t.gi(x)≤0,i=1,...,m(不等式约束 Inequality Constraints)hj(x)=0,j=1,...,p(等式约束 Equal

Together_CZ的博客 1036

算法思维导图

fill:#333;color:#333;color:#333;fill:none;算法图算法最短路径Dijkstra。

多看多听多总结 602

遗传算法工业实战:选择压力、交叉设计与动态变异调优

遗传算法(GA)作为一种无梯度的全局优化方法,其核心价值在于解决目标函数不可导、非凸、多峰或黑箱的真实工程问题。理解其进化机制的关键在于把握三大支柱:选择操作如何调控种群‘进化温度’以平衡探索与开发;交叉算子如何适配问题结构(如排列编码需OX、浮点向量宜用SBX)以保障解合法性;变异策略如何通过动态调节率与自适应扰动维持多样性并延缓早熟收敛。这些技术细节直接决定GA在超参优化、路径规划、工艺参数寻优等场景中的鲁棒性与收敛效率。本文聚焦工业级落地经验,覆盖种群初始化、适应度建模、收敛诊断及多目标Pareto前

weixin_36250541的博客 466

遗传算法工程实践:种群多样性与适应度函数设计核心指南

遗传算法(GA)作为经典进化优化方法,其本质是通过模拟自然选择在解空间中搜索最优解。但实际应用中,算法失效往往不源于原理错误,而在于种群多样性丧失、适应度函数设计失当等工程细节。种群多样性维持直接决定全局探索能力,适应度函数则承担着将业务目标精准翻译为选择压力的关键角色。二者共同构成GA收敛性与鲁棒性的底层支柱。本文聚焦工业级GA落地中的高频痛点,深入解析多样性监控指标(如序列熵)、自适应变异机制、适应度四象限校验法等可复用技术方案,并结合柔性作业车间调度(FJSP)等真实场景,说明如何让GA从‘能跑’走向

weixin_34408717的博客 383

VRP,TSP路径编码,路径分割的方法

VRP、TSP问题,种群含0编码的分割方法

非计算机相关专业 516
上一篇: 软件工具 | Python调用运筹优化求解器(一):以CVRP&VRPTW为例
下一篇: 【改进篇】Python实现VRP常见求解算法——粒子群算法(DPSO)
Better.C
博客等级 码龄9年 1万+粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Better.C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值