【改进篇】Python实现VRP常见求解算法——量子粒子群算法(QDPSO)

量子粒子群算法 % 量子粒子群算法 function QPSO(PopNum,Maxstep,dim) close all; % PopNum Number of Population % Maxstep the max step of generate a = rand; u = rand; pop_bound = [-5 5];% the boundary of population dim = 阅读详情

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

往期优质资源

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

1. 适用场景

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

2. 改进效果对比

这里做了简单的参数敏感性分析,量子粒子群算法的参数较少,只有一个 创新参数 alpha,参数调整范围为:[0.1,0.95],步长为0.05其他参数:最大迭代次数为300,车辆容量为80。

2.1 实验结果汇总

在这里插入图片描述

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)位置更新

# 更新位置
def updatePosition(model):
    alpha=model.alpha
    pg=model.pg
    mg=model.mg
    #更新历史平均最优位置
    mg_=[0]*model.number_of_demands
    for id, sol in enumerate(model.sol_list):
        x=sol.node_no_seq
        pl = model.pl[id].node_no_seq
        pi=[]
        for k in range(model.number_of_demands):
            phi = random.random()
            pi.append(phi*pl[k]+(1-phi)*pg[k])
        if random.random()<=0.5:
            X=[min(int(pi[k]+alpha*abs(mg[k]-x[k])*math.log(1/random.random())),model.number_of_demands-1)
               for k in range(model.number_of_demands)]
        else:
            X=[min(int(pi[k]-alpha*abs(mg[k]-x[k])*math.log(1/random.random())),model.number_of_demands-1)
               for k in range(model.number_of_demands)]
        #调整可行性
        X= adjustRoutes(X, model)
        X_obj, X_route_list,X_route_distance = calObj(X,model)

        if X_obj < model.pl[id].obj:
            model.pl[id].node_no_seq = copy.deepcopy(X)
            model.pl[id].obj = X_obj
            model.pl[id].route_list = X_route_list
            model.pl[id].route_distance = X_route_distance
        if X_obj < model.best_sol.obj:
            model.best_sol.obj = copy.deepcopy(X_obj)
            model.best_sol.node_no_seq = copy.deepcopy(X)
            model.best_sol.route_list = copy.deepcopy(X_route_list)
            model.best_sol.route_distance = copy.deepcopy(X_route_distance)
            model.pg = copy.deepcopy(X)
        mg_ = [mg_[k] + model.pl[id].node_no_seq[k] / model.popsize for k in range(model.number_of_demands)]
        model.sol_list[id].node_no_seq = copy.deepcopy(X)
        model.sol_list[id].obj = copy.deepcopy(X_obj)
        model.sol_list[id].route_list = copy.deepcopy(X_route_list)
        model.sol_list[id].route_distance = copy.deepcopy(X_route_distance)
    model.mg=copy.deepcopy(mg_)

5. 完整代码

如有错误,欢迎交流。

私信,有偿

参考

  1. A simple and effective evolutionary algorithm for the vehicle routing problem
深入解析:如何使用改进的PSO(粒子群优化)算法高效地解决VRPTW问题 - Python实现指南 PSO算法是一种群体智能优化技术,它是通过模拟鸟群觅食行为来找到问题的最优解的。在PSO中,每个“鸟”被称为一个“粒子”,每个粒子在搜索空间中代表一个可能的解。通过追踪每个粒子的最佳位置和整个群体的最佳位置,粒子可以更新其速度和位置,从而向最优解靠近。通过本文,我们深入探讨了如何使用改进的PSO算法来解决具有时间窗约束的车辆路径问题。我们介绍了VRPTW的基础知识,传统的PSO算法,以及如何对其进行改进以获得更好的性能。通过Python的实现,我们展示了如何将这些理论应用到实践中。 阅读详情

相关推荐

GA-VRPTW-python版本遗传算法求解带时间窗的路径规划问题(Python版本)

1、完整代码,可直接运行 ,包运行(如有疑问可私信) 2、擅长领域:路径规划、机器学习、数据爬虫、数据分析处理等 3、该资源有较为详尽的注解,非常方便大家阅读与理解。 GA-VRPTW-python版本 遗传算法求解带时间窗的路径规划问题(Python版本) 该资源适用于研究路径规划的同学,以及研究遗传算法的同学

【超参数寻优】量子粒子群算法(QPSO) 超参数寻优的python实现

【超参数寻优】量子粒子群算法(QPSO) 超参数寻优的python实现 一、粒子群算法的缺点 二、量子粒子群算法 三、QPSO算法的python实现 参考资料 一、粒子群算法的缺点 本人之前的博文(参考资料【1】)已经详细介绍了PSO算法,学习本博文前需要先学习PSO算法。 PSO算法的缺点: 1、需要设定的参数(惯性因子w w,局部学习因子c1c1​和全局...

phymat.nico的专栏 8207

使用改进的 PSO(粒子 群优化)算法解决 VRPTW 问题_python_代码_下载

什么是PSO算法 基本算法(PSO,Particlewarm Optimization)是在1995年由Eberhart博士和肯尼迪博士共同提出的,它是对鸟群捕食行为的研究。整个群体的问题到了既定的问题中,从根本上解决了问题的产生过程,从而使最优化的过程。 什么是 VRPTW 车辆路径问题 (VRP) 是一个组合优化和整数规划问题,它询问“为了交付给给定的一组客户,车队要穿越的最佳路线集是什么?”。它概括了著名的旅行商问题(TSP)。它首次出现在 George Dantzig 和 John Ramser 于 1959 年的一篇论文中,[1] 其中第一个算法方法被编写并应用于汽油运输。通常,上下文是将位于中央仓库的货物交付给已订购此类货物的客户。而VRPTW意味着每个客户限制一个时间窗口[开始服务器时间,结束服务器时间]。 更多详情、使用方法,请下载后阅读README.md文件

软件工具 | Python调用运筹优化求解器(一):以CVRP&VRPTW为例

以CVRP & VRPTW问题为例,介绍Python调用Gurobi,COPT,SCIP的方法。

Better.C的博客 7639

【路径规划-VRP问题】基于粒子群算法求解带时间窗车辆路径规划问题(VRPTW)附matlab代码.zip.zip

1.版本:matlab2014/2019a,内含运行结果,不会运行可私信 2.领域:智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,更多内容可点击博主头像 3.内容:标题所示,对于介绍可点击主页搜索博客 4.适合人群:本科,硕士等教研学习使用 5.博客介绍:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可si信

量子粒子群算法的matlab实现,有程序说明_量子粒子群算法_matlab

量子粒子群算发代码,有中文注释,适合初学者编程学习。。。。。。。。。。

【进阶五】Python实现SDVRP(需求拆分)常见求解算法——量子粒子群算法(QDPSO)

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

Better.C的博客 996

自由曲面与衍射光学元件DOE:从基础理论到工业应用的全景解析

本文全景解析了自由曲面与衍射光学元件的核心理论与工业应用。文章深入探讨了自由曲面在非对称光学设计中的灵活性及其数学描述与制造挑战,并阐述了衍射光学元件通过微纳结构进行波前相位调制的原理与多样化功能。两者与经典光学互补融合,共同构成了高端成像、智能照明、激光加工及AR/VR等前沿领域的底层技术支柱。

devops8pract的博客 392

【进阶六】Python实现SDVRPTW常见求解算法——量子粒子群算法(QDPSO)

基于python语言,采用经典量子离散粒子群算法(QDPSO)对 带硬时间窗的需求拆分车辆路径规划问题(SDVRPTW) 进行求解。

Better.C的博客 839

密码学小白必看:三大顶级会议论文下载与阅读指南(附完整资源链接)

本文为密码学初学者提供了系统获取和阅读三大顶级会议(Crypto、Eurocrypt、Asiacrypt)论文的实战指南。详细介绍了通过IACR官方渠道、ePrint预印本等权威资源免费下载论文的方法,并分享了高效筛选、精读核心章节及构建个人知识体系的具体策略,帮助读者快速切入密码学研究前沿。

weixin_28363123的博客 411

《21天学通C++》阶段性成果测试题——hstring(手写string类)

总体考察了类的使用,缓冲区考察了指针和数组的使用、增删改查、考察编码思维、考察了类的重载。1.初始化子字符串的起始位置为-1,表示未找到,若buffer或findHstring为空,则返回-1。右边的字符串不为空,则分别获取母串和子串的长度(用循环),然后创建一个固定大小的数组。3.然后循环遍历寻找子串在母串中的起始位置,循环时可以通过两个长度相减,避免循环越界。2.如都不为空,则分别获取双方的字符串长度(用循环),然后。右边的字符串为空,则输出原来的字符串。是否为空,有一方为空则返回另一方。

立志成为炼丹师? 1265

Python实现VRP常见求解算法——离散粒子群(DPSO)

基于python语言,实现经典粒子群算法(DPSO)对车辆路径规划问题(CVRP)进行求解。

Better.C的博客 6227

别再为授权费头疼了!手把手教你免授权搞定西门子、马扎克等12种主流数控机床的数据采集

本文提供了一套免授权采集西门子、马扎克等12种主流数控机床数据的实战指南,帮助中小型机加工车间节省80%以上的采集成本。通过TCP/UDP协议逆向工程和跨平台数据整合,实现经济、灵活且可持续的数据采集方案,涵盖设备兼容性处理、数据频率优化等关键问题。

weixin_26873711的博客 709

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

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

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

2.STM32F407ZGT6 学习笔记-移植 FreeRTOS

1. 在工程下建议FreeRTOS文件夹 2. 在FreeRTOS文件夹下建立 src 和 port 文件夹 (src用于存放freertos源码,port文件夹存放内存和接口相关的文件) 3. 复制freertos/source文件夹下所有c文件复制到刚刚建立的freertos/src目录下 4. 复制FreeRTOSv9.0.0\FreeRTOS\Source\portablex下的MemMang和RVDS文件夹复制到刚刚建立的port问价夹下 5. 将FreeRTOSv9.0.0\FreeRTOS

Car12 1233

最近腾讯手机管家a.gray.Bulimia.a病毒提示决解方案

仅供参考(个人问题已解决 未申诉) 用户反馈app提示病毒图如下 然后下载生产包去https://www.virustotal.com/gui/这个网站去检测 果真提示病毒 重新加版本 打了个包 未加固 检测没问有问题 同一个包用360加固之后再检测有问题 ,但是没有a.gray.Bulimia.a报病毒 然后再用应用宝加固检测也没问题,个人以前都是用360加固的,很尴尬啊 最重要的一点的是,更新一个版本号,其余的啥都没改,更新替换手机的原来版本app,腾讯手机.

村头那抠脚大叔的专栏 3万+

python 实现粒子群算法(带绘制)

速度 = 速度 + 学习因子(c1)*rand(0~1)*(最好位置-当前位置)+学习因子(c2)*rand(0~1)*(群体最好位置-当前位置)本文章用python实现了粒子群算法,# 位置 = 位置+速度。这里取-5~5的部分。

i道i的博客 1946

机器人中的数值优化(十三)——QP二次规划

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例

慕羽★的博客 2793

【智能优化算法-粒子群算法】基于量子粒子群算法求解单目标优化问题附matlab代码

量子粒子群优化(QPSO)算法是在经典的粒子群优化(PSO)算法的基础上所提出的一种具有量子行为的粒子群优化算法,具有高效的全局搜索能力。通过求解J.D.Schaffer提出的多峰函数优化问题的实验分析表明,方法具有良好的收敛性和稳定性。智能优化算法。

qq_59747472的博客 965

基于SAHI算法优化YOLOv8的小目标检测性能研究

SAHI(SliceAwareHyperInference)是一种推理优化算法,通过将大图切片为小块并分别推理的方式,实现更精细的小目标检测。提升小目标检测精度:切片后的小目标在每个小块中占比更大,模型能够更好地聚焦。兼容性强:可直接集成到现有目标检测框架中(如YOLO系列、Detectron2等)。支持大分辨率图片和视频推理:减少硬件对大图推理的限制。本文详细探讨了如何通过SAHI(切片辅助超推理算法)结合YOLOv8模型,有效提升小目标检测性能,尤其是在高分辨率图片和视频场景中表现优异。

博客 2373

IDEA的使用指南

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

matlab 云模型量子粒子群算法

第一个博客讲述云模型量子粒子群算法基本理论,接下来展示matlab代码 %% 1.清空环境变量 clc; clear; %% 2.初始化参数 N=20; %种群规模 MAXITER=200; %最大迭代次数 中间是模型建立过程,根据不同项目进行添加,此处省略 for t=1:MAXITER g=min(find(f_pbest==max(f_pbest(1:N)))); gworst=pbest(g,:);%全局最差1个群 f_gworst=f_pbest(g); EX=f_gbest; EN=a

m0_47179175的博客 1139

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

VRPTW

带时间窗的VRP问题是在该基础上,还需要满足服务时间约束,即配送人员需要在一定的时间窗内到达客户需求点进行服务。带时间窗的VRP问题分为硬时间窗和软时间窗两种,硬时间窗是车辆一定要在时间窗范围内到达指定用户处,不能早于时间窗要求的最早时间,也不能晚于时间窗的最晚时间;VRP问题一般是指从物流配送中心用多辆车向多个客户需求点送货,每个客户需求点的位置和需求量是已知的,车辆的最大载质量是一定的,要求合理安排配送路线使得目标函数最优,并且满足以下条件:每个客户需求点只能被一辆车访问,并且只能访问一次;

FanSunshineboy的博客 2936

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【智能优化算法详解】粒子群算法PSO&量子粒子群算法QPSO

博主言简意赅总结PSO算法思想:大方向下个体自学习探索+群体交流共享-对比适应度找到最优点【智能优化算法详解】粒子群算法PSO&量子粒子群算法QPSO

嵌入式阿齐Archie 1万+

【智能优化算法】粒子群优化算法(PSO)【附python实现代码】

粒子群优化算法(PSO)【附python实现代码】

学无止境、积少成多、厚积薄发 1万+

粒子群算法(Python代码实例)

本文介绍的是智能算法之一------粒子群优化算法

xirongxu_dlut的博客 1206

基于量子粒子群算法(QPSO)优化LSTM的风电、负荷等时间序列预测算法(Matlab代码实现)

该代码可用于风电和光伏等负荷的预测,数据为时间序列数据,输入和输出均为单一变量。[2]乔鹏,田俊梅.基于改进QPSO-SVM的输电线路覆冰厚度预测[J].自动化与仪表,2023,38(02):10-14+34.DOI:10.19557/j.cnki.1001-9944.2023.02.003.[3]赵泽昆,王瑶,陈超等.基于量子粒子群优化BP神经网络的风机出力预测[J].电器与能效管理技术,2019(24):45-50.DOI:10.16628/j.cnki.2095-8188.2019.24.009.

weixin_67304359的博客 1407
上一篇: 【改进篇】Python实现VRP常见求解算法——粒子群算法(DPSO)
下一篇: 【改进篇】Python实现VRP常见求解算法——禁忌搜索+模拟退火算法(TS+SA)
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、付费专栏及课程。

余额充值