【CVRP测评篇】 算法性能如何?来测!

关于CVRP问题的研究 # Routing-problem--CVRP # 项目准备阶段 # 准备相关论文,设计准备数据集,最终决定采用CVRPLIB (opens new window)上的标准数据集作为实验用数据。 # 项目第一阶段 # 参考论文用各种元启发式算法求解CVRP问题 # 采取的算法主要有: # 贪心 (opens new window)、遗传 (opens new window)、蚁群 (op... 阅读详情

我跨越了2100015秒的距离,为你送上更全面的算法性能评测。

往期优质资源

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

     小编推出第一期、第二期《CVRP算法系列》(基础篇+改进篇)后,后台收到了很多粉丝的留言。大家最关心的问题可归结为以下两点:

  1. split算法的作用是什么?为什么要采用它?会降低解的质量吗?
  2. 哪个算法效果最好?有和标准数据集对比吗?结果如何?

     今天,小编将通过累计运行 【2100015秒≈35000分钟≈583小时≈24天】 的实验来回答以上问题。
2100015秒!
也许你只需要花费1分钟完成本文的阅读,但只要能帮助到大家就值得!

1 CVRP数据集

     网络上关于CVRP问题的标准数据集好像挺多的,但好像可用的又没那么多。小编今天采用的是下边这个网站数据
在这里插入图片描述
     小编下载了整个CVRP数据集,里面划分了A,B,E,F,G,M,P,V等8个类别(别担心,小编不会都测评)。考虑到时间成本,这里随机从中抽取了11个数据集。参与测评的11个数据集的最优解信息如下。
在这里插入图片描述
     以上各数据集的数据分布如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2 实验准备

2.1 计算机配置

     本次采用Python3.8编程实现,电脑配置为 Intel® Core™ i7-9700F CPU @ 3.00GHz 3.00 GHz,24G内存。

2.2 调参方法

     元启发式算法的求解效果一方面取决于邻域规则,而另一方面则取决于参数设置。而且同一算法在不同数据集上的最优参数组合也可能是不一样的。
     为了尽可能的找到最优的“算法-参数-算例”组合,小编一开始采用的是网格化调参,虽然可以较为精确的找到最优的参数组合,但需要巧妙的设计搜索空间,否则既浪费了计算资源,又没有找到理想结果。尝试了几次后,发现这种方法太耗时耗力,果断放弃!
     随后想到了机器学习邻域常用的贝叶斯调参工具,简单来说,贝叶斯调参是建立在高斯过程基础之上的,根据历史搜索结果建立目标函数和参数之间的函数关系,然后预测最优的参数位置,再将预测的参数带入算法计算,重复这个过程,直至逼近最优的拟合关系。贝叶斯调参不仅效果好,而且省事!只需设定每个参数的搜索空间即可。于是经过一番探索,搞成了!以ACO调参为例,给出具体代码如下:

import time
import xlsxwriter
from ACO_CVRP_Advance import run
from bayes_opt import BayesianOptimization
​
def F(Q,rho,alpha,beta):
    res = []
    file = f'./{filename}'
    for _ in [1,2]:
        _, obj = run(filepath=file, Q=Q, tau0=tau0, alpha=alpha, beta=beta, rho=rho,epochs=epochs,
                     v_cap=v_cap_dict[filename], popsize=popsize)
        res.append(obj)
    return -min(res)
v_cap_dict = {
    'A-n32-k5.csv':100,
    'A-n46-k7.csv':100,
    'A-n80-k10.csv':100,
    'B-n31-k5.csv':100,
    'B-n50-k7.csv':100,
    'B-n78-k10.csv':100,
    'E-n33-k4.csv':8000,
    'E-n51-k5.csv':160,
    'E-n101-k8.csv':200,
    'E-n101-k14.csv':112,
    'P-n40-k5.csv':140,
    'P-n101-k4.csv':400
}
filename = list(v_cap_dict.keys())[11]
tau0 = 2000
popsize = 100
epochs = 300
start_time = time.time()
rf_bo = BayesianOptimization(f=F,pbounds={'rho':(0.001,0.98),'alpha': (0.001, 5),'beta':(0.001,5),'Q':(1000,2000)})
rf_bo.maximize(n_iter=50, init_points=10)
run_time = time.time() - start_time
sp = rf_bo.space
history_obj = sp.target.tolist()
history_pararm = sp.params.tolist()

贝叶斯调参默认是求最大化,因此这里将目标函数取负数

2.3 参数设定

     不同算法在不同算例上的参数搜索空间基本一样,但由于ALNS算法在大规模算例上的求解较为耗时,因此部分算例上做了缩小,这里仅给出其一种搜索空间。
在这里插入图片描述
在这里插入图片描述

2.4 实验方法

     由于元启发式算法具有很大的随机性,相同的参数设置也可能跑出不同的结果,因此设定每组“算法-参数-算例”组合均运行2次,取最好的一组用于反馈贝叶斯。
     为了加快进度,早一点分享给大家,这里同时运行3组代码,因此可能会对解的质量及求解时间产生干扰。

3 实验结果

3.1 最优解统计

3.1.1各数据集上的算法性能对比

     首先来看看在同一算例上,不同算法的表现如何:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.1.2 求解结果汇总

     以上结果汇总如下:
在这里插入图片描述
     求解误差如下:
在这里插入图片描述

3.1.3小结一下

  1. 整体来看,在实验范围内8个算法均无法找到已知最优解,最小的求解误差为0.39%(ALNS-A-n32-k5)。
  2. ALNS算法在各数据集上的表现大多位列第一(B-n31-k5稍逊于ACO)
  3. ACO算法在各数据集上的表现大多位列第二(在A-n32-k5,B-n31-k5,B-n50-k7三个数据集上稍逊于GA);
  4. GA算法在各数据集上的表现大多位于第三;
  5. 其他算法的性能不再一一列举啦

3.1.4 还有话说

     虽然根据以上结果来看,基于split算法实现的8个算法并未找到已知最优解(虽然很接近啦),但并不代表就无法找到最优解,一方面小编实现的仅是基本的元启发式算法,还有众多改进版本来提升性能。且,加入启发式规则也是不错的想法。这里以文献[A simple and eBective evolutionary algorithm for the vehicle routing problem] 中的数据来佐证:

在这里插入图片描述
     以后再慢慢设计改进策略~

3.2 调参时间统计

3.2.1 各数据集上的运算时间对比

     除了目标函数外,大家肯定也很关注算法的求解时间如何。这里不再具体去分析某一参数组合下的算法运行时间,而是从整个调参过程的时间消耗来评判。这里根据算例的规模大小进行了排序,尝试去看随着问题规模的增大,算法求解时间的变化趋势,并大致做了数据拟合。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2.2 运算时间汇总

     各算法在不同数据集上的求解时间汇总如下:
在这里插入图片描述

3.2.3 小结一下

     整体来看,随着算例规模的增加,各算法的求解时间都呈现出指数增长趋势,ALNS算法和ACO算法的增长速度明显高于其他算法。

3.3 最优参数统计

     8个算法在不同数据集上的最优参数组合如下所示,未在调参范围的参数被设置为默认值。
(1)ACO
在这里插入图片描述
(2)ALNS
在这里插入图片描述
在这里插入图片描述
(3)DE
在这里插入图片描述
(4)DPSO
在这里插入图片描述
(5)GA
在这里插入图片描述
(6)QDPSO
在这里插入图片描述
(7)SA
在这里插入图片描述
(8)TS
在这里插入图片描述

可以看出同一算法在不同数据集上的最优参数组合还是有很大差异的。所以说:调参工作是很重要的!

3.4 最优解路径

     为了尽快地将优质内容分享给各位读者,这里悄悄偷个懒,仅呈现ACO算法在最优参数组合下的优化结果(ALNS算法实在太耗时啦)。此外,由于算法具有随机性,因此在最优参数组合下,不一定保障能得出上述调参时的结果,但差异不大~。
(1)A-n32-k5
在这里插入图片描述
(2)A-n46-k7
在这里插入图片描述
(3)A-n80-k10
在这里插入图片描述
(4)B-n31-k5
在这里插入图片描述
(5)B-n50-k7
在这里插入图片描述
(6)B-n78-k10
在这里插入图片描述
(7)E-n33-k4
在这里插入图片描述
(8)E-n51-k5
在这里插入图片描述
(9)E-n101-k8
在这里插入图片描述
(10)E-n101-k14
在这里插入图片描述
(11)P-n40-k5
在这里插入图片描述
(12)P-n101-k4
在这里插入图片描述

3.5 调参过程

     12套数据集×8套算法=96组结果,实在太多啦,根本分析不完。这里仅以【A-n32-k5】数据集为例,分析使用贝叶斯调参时个别算法的参数探索过程。
(1)ACO
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
(2)ALNS
在这里插入图片描述
在这里插入图片描述
(3)DE
在这里插入图片描述
在这里插入图片描述
(4)DPSO
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(5)GA
在这里插入图片描述
在这里插入图片描述

从上图可以看出,贝叶斯工具会逐渐形成一个高密度采样区,这也是高斯过程的体现(一人之见)。

4 结果分析

     好了,估计各位读者也看累了。长话短说,这里对开头读者的问题做以下回答。

问题一:为什么使用split?会影响求解质量吗?

  1. split方法允许用户采用无车场信息的编码方式(文献中叫做 ‘TSP-like permutation chromosomes’),把容量、时间、里程等约束交给split处理,这样就无需在迭代中反复检查/修复不可行解,便于直接使用各算法的邻域搜索过程。
  2. 特定的split会建立TSP-like permutation chromosomes’ 与车辆路径集合的唯一映射。反过来思考的话,最优解也对应一个唯一的TSP-like permutation
    chromosomes’,因此找到最优的TSP-like permutation
    chromosomes’,就可以找到原问题的最优解。这里究竟影响多大,小编暂时无从考证。
  3. 学习过小编分享的算法的读者应该知道,小编推出的各系列VRP问题,都具有类似的代码架构,其最大的区别在于split机制不同,代码具有很强的迁移和扩展性,这也是小编推崇的原因。

问题二:与标准数据集对比如何?

  1. 上述实验结果大概率代表了目前的代码版本的求解效果:尚无法找到测试数据集的已知最优解,但很接近啦
  2. 从目标函数来看,ALNS,ACO,GA的效果都是很不错的。兼顾时间的话,ACO和GA可能更占优势。
优化算法丨遗传算法求解CVRP问题 智能优化算法系列: (1)遗传算法求解CVRP 引言 前面的ortools虽好,但是不能够制定特意的算法,本次为大家推荐一款新的算法包,大家可以去调试比对 问题 本次的求解问题是:30个顾客,有顾客坐标,以及车场的坐标,指定5辆车,车辆载重为5,而每个点的需求是1。求最优收运或者配送路线 结果 代码 运行环境:python3.6.0,库scikit-opt==0.6.3 如下: 第一步:定义问题 import numpy as np from scipy import spatial import mat 阅读详情

相关推荐

【管理科学】第三十五篇 企业经营中的管理科学01 权力、风险、运营、物流、人力资源、库存、合同、品牌、业绩、项目

编号类型领域子领域/内容问题问题的数学分析(电磁/信息论/数学物理/数学化学/界面科学/表面科学 + 几何/拓扑/代数/集合论/图论/数论/函数评估/数值估计/概率/统计/向量/张量/矩阵/矢量 + 其他)算法逐步推理思考的数学表达式及实现步骤及时序流程 参数列表及参数的数值范围及数值分析及常量/常数1管理科学问题运营管理生产计划如何分配有限资源生产多种产品以最大化利润?线性代数、凸优化、单纯形法;向量与矩阵目标函数 max c^T x,约束 Ax ≤ b, x ≥ 0。步骤:①标准化引入松弛变量;②构建初

weixin_49199313的博客 248

【TWVRP】基于matlab遗传算法求解带时间窗的含充电站车辆路径规划问题【含Matlab源码 1177期】

遗传算法求解带时间窗的含充电站车辆路径规划问题 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 1660

CVRP问题遗传算法实现

遗传算法 CVRP VRP 使用遗传算法求解带容量的路径选择问题源代码

运筹系列17:routing模型之CVRP问题

1. CVRP模型 CVRP指的是有容量(capacity)限制的VRP模型,是最常见的VRP模型。 2. 示例 依旧用上一章节的点,不同的是每个点多了一个送货需求。每辆车的最大容量是15,最小化总运输距离。 dimension可以使用AddDimensionWithVehicleCapacity方法,和AddDimension唯一的区别就是,第三个参数从一个固定值变成了一个列表,表示每一辆车有自...

kittyzc的博客 1万+

A-VRP.zip_A-VRP_CVRP问题_cvrp_vrp 数据_vrp 测试

CVRP问题数据集,可供测试CVRP问题算法

第一章、isaacsim 及 isaaclab 安装教程

本专栏所有内容将根据上述资源地址展开,请结合食用~

m0_47719040的博客 4783

可用于大规模点云表面重建的深度学习算法

整理人:袁赣张秦,付前程,张琛,廖新耀论文:[1] Zhengxin Mi#, Yiming Luo#, Wenbing Tao*. SSRNet: Scalable 3D Surface...

我爱计算机视觉 2757

R链式中介:如何一次性生成4个变量所有可能的链式中介结果?(含结果解读与粗略作图)#bruceR#ggplot2

一次性生成4个变量所能生成的24种链式中介并作图

weixin_64183017的博客 3237

SSRNet:用于大规模点云表面重建的深度学习网络(CVPR2020)

点击上方“3D视觉工坊”,选择“星标”干货第一时间送达整理人:袁赣张秦,付前程,张琛,廖新耀论文:[1] Zhengxin Mi#, Yiming Luo#, Wenbing Tao*. ...

3D视觉工坊 3402

MagicDraw小白必看:BDD图中模块的5种属性详解(含SysML v1.6最新端口配置指南)

本文面向MagicDraw初学者,详细解析SysML BDD图中模块的五种核心结构属性,包括组成部分、引用、值、约束属性及端口。重点阐述了SysML v1.6中端口设计的范式转移,对比了完整端口与代理端口的区别与应用场景,并通过实战案例指导如何利用代理端口进行清晰的接口定义与系统架构设计。

rum55的博客 374

GB28181协议实战:5分钟搞定海康摄像头SIP注册失败问题(附Wireshark抓包分析)

本文详细解析了海康摄像头在GB28181协议下SIP注册失败的7个关键原因及解决方案,包括网络可达性、鉴权参数、NAT穿越等核心问题。通过Wireshark抓包分析,提供快速定位方法,帮助工程师高效解决SIP注册失败问题,提升实时图像联调效率。

weixin_29212867的博客 558

2026年03月04日全球AI前沿动态

本次整理的2026年3月3日AI行业信息显示,行业正处于技术快速迭代与产业深度融合的关键阶段。模型领域,通用大模型向更长上下文、多模态、状态化方向演进,开源生态与商业模型形成互补,垂直大模型在医疗、科研、制造等领域的落地效果显著;技术突破聚焦于推理效率提升、长视频处理、低幻觉优化等核心痛点,框架工具的安全性与易用性持续增强。智能体与应用层面,AI原生产品不断涌现,智能代理功能成为核心竞争力,覆盖浏览器、视频生成、办公协作等多场景,本地化部署与隐私保护成为重要趋势;

ld326的专栏 2万+

【Mode】Mode expansion monitors

对于宽带仿真,因为被支持的模式可能是波长的函数,因此,推荐在波长范围内增加频率的采样点数量去计算支持的波导模式分布或者光纤模式分布。对于宽带仿真,如果在被计算模式上的频率点的数量与通过 frequency-domain monitors 被测量的频率点的数量不匹配,这种情况是正常的。Mode expansion monitors 对于仿真偏振转换器是十分有用的,比如,在偏振转换器中,当你想要提取从输入模式到输出模式的转换效率,或者提取一个装置的 S 参数。给出了进入到被选择模式中的合透射率,

u011699626的博客 2762

基于三角直觉模糊云模型的多属性评价方法附Matlab代码

一、方法提出背景与核心优势1.1 多属性评价的传统痛点模糊性与随机性共存难题:评价信息既包含 “好 / 较好 / 一般” 等模糊语言变量,又受评价者主观偏好、数据测量误差等随机因素影响,单一模糊集(如直觉模糊集)或概率模型(如云模型)难以同时刻画两类不确定性;信息完整性不足:评价过程中常出现 “无法确定评价等级”“部分指标数据缺失” 等情况,传统方法(如加权求和法)易因信息处理粗糙导致评价结果偏差;

2501_91572946的博客 977

C#WPF常用的9种布局方式详解

本文介绍WPF中常用的九种布局,Grid、StackPanel、WrapPanel、DockPanel、UniformGrid、Canvas、ScrollViewer、ViewBox、Border。

qq_30725967的博客 1万+

46.qt quick-自定义非常好看的qml虚拟软键盘-支持换肤、动态加载移除语言(二)

在上章我们学习了45.qt quick-qml虚拟软键盘详解(一)_诺谦的博客-优快云博客 接下来我们便来自定义一款好看的qml软键盘.如下图所示: 支持背景更换、支持动图: 支持动态加载移除语言: 支持拖拽、自由缩小放大: 支持定位坐标: ...

抵抗时间扭曲,坚持做一件有意义的事 4674

基于遗传算法的CVRP建模求解(Python)

单向:纯取货/纯送货; 单配送中心:只有一个配送中心/车场; 单车型:只考虑一种车型, 需求不可拆分:客户需求只能有一辆车满足; 车辆封闭:完成配送任务的车辆需回到配送中心; 车辆充足:不限制车辆数量,即配送车辆需求均能满足; 非满载:任意客户点的需求量小于车辆最大载重;优化目标:最小化车辆启动成本和车辆行驶成本之和; 约束条件:车辆行驶距离约束,重量约束; 已知信息:配送中心位置、客户点位置、客户点需求、车辆最大载重、车辆最大行驶距离、车辆启动成本、车辆单位距离行驶成本;min⁡Z=C0K+C1∑i=0N

博客简介 1万+

Android开发工程师面试问题与参考答案

这是一份Android开发工程师职位面试指南,主要针对自研OS开发岗位。岗位要求3年以上独立开发经验,熟悉Android平台UI设计、四大组件和Java基础。面试问题覆盖五大核心领域:基础知识、开发经验、技术深度、问题解决和性能优化。文章提供了典型面试问题及专业参考答案,帮助应聘者准备关键技术点,如多线程处理、HashMap与ConcurrentHashMap区别、Handler机制等。同时建议应聘者结合项目经验展示优化能力,并注意公司提供完善的薪酬福利和团队文化。

郑伟强dev的专栏 895

CVRP建模与求解-基于粒子群算法(python实现)

本文为单配送中心、单车型、车辆封闭、非满载、需求不可拆分的VRP场景建立数学模型,并设计粒子群算法进行求解。

_2312 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Python求解CVRP问题

数据结构:网络节点self.nodes_seq=None # 解的编码self.obj=None # 目标函数self.fit=None # 适应度self.routes=None # 解的解码# 数据结构:网络节点self.id=0 # 节点idself.name='' # 节点名称,可选self.seq_no=0 # 节点映射idself.x_coord=0 # 节点平面横坐标self.y_coord=0 # 节点平面纵坐标self.demand=0 # 节点需求。

m0_60805357的博客 1986

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: 【改进篇】Python实现VRP常见求解算法——禁忌搜索+模拟退火算法(TS+SA)
下一篇: VRPSolverEasy:可求解多种VRP变体(rich vehicle routing)问题的精确算法python包
Better.C
博客等级 码龄9年 1万+粉丝 72原创
评论 8
成就一亿技术人!
拼手气红包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、付费专栏及课程。

余额充值