【VRP问题】基于头脑风暴优化算法求解带时间窗和同时取送货的车辆路径问题附matlab代码

简介: 【VRP问题】基于头脑风暴优化算法求解带时间窗和同时取送货的车辆路径问题附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机

⛄ 内容介绍

本文主要研究广州番禺配送中心的车辆路径规划问题,首先针对之前车辆运行中的先送货后取货模式,产生车辆运行路线的迂回,以及车辆在回程中的空载,路径规划不合理,送货时间长的问题,采用集成的观点同时考虑有取货要求的客户和有送货要求的客户,把所有的送货订单和取货订单在前一天汇集到配送中心,这样每个客户的取货需求量和送货需求量根据前一天订单信息得到确认;从而可以确定配送中心以及每个顾客的位置和需求量,从而进行同时取送货,送货是针对当天的配送中心收到的货物,取货是针对前一天有发货需求的客户。在基本VRPSDP模型的基础上,加入时间窗因素,以配送车辆总的成本为优化目标,给出T公司广州番禺配送中心同时取送货的运作模式。

1.1. 问题描述

根据番禺配送中心的实际作业情况,本文将传统的同时取送货的车辆路径问题进行重新定义:给定一

个配送中心和多辆配送车辆,多量车辆从番禺配送中心出发,分别根据安排好的路线到各个客户处送货,

同时将具有取货需求的客户的货物运回配送中心。这里配送中心送的货物是当天需要配送的货物,而运回

的货物则是客户前一天需要运回的货物。要求在给定的约束条件下,合理安排车辆的行走路径,在综合考

虑各车型的固定成本和可变配送成本的前提下,以总成本最小为目标,以尽可能提高车辆满载率、减少出

行次数为思路,构建多车型的同时取送货的车辆路径优化模型。本文研究的车辆路径问题的假设如下:

1) 只有 1 个配送中心,且配送中心的地理位置已知;

2) 货物可以混装;

3) 配送中心与需求点的坐标位置及送货和取货量均已知;

4) 各种车型的车辆数已知,且各车型的固定费用、旅行费用、车容量均已知;

5) 每辆车服务 1 条回路,由番禺配送中心出发最终回到番禺配送中心;

6) 每辆车在行驶中的车载质量不超过该车型的容限制;

7) 每辆车每次的配送距离超过该车型允许的最大行驶距离;

8) 每个需求点能且只能由同一辆车进行服务,每个客户最多被服务两次;

9) 货物在运输途中不会变质损坏;不考虑司机的工作时间;不考虑道路的通行情况;不考虑运输时

的规章制度等。

⛄ 部分代码

%% Regret2Ins 依次将removed中的顾客插回配送方案中

%先计算removed中各个顾客插回当前解中所产生最小距离增量,然后再从上述各个最小距离增量的顾客中

%找出一个(距离增量第2小-距离增量第1小)最大的顾客插回,反复执行,直到全部插回

%输入removed:     被移除顾客的集合

%rfvc:            破坏后的配送方案

%输入demands:     顾客需求量

%输入pdemands:    顾客回收量

%输入cap:         车辆最大装载量

%输入a:           顾客时间窗开始时间[a[i],b[i]]

%输入b:           顾客时间窗结束时间[a[i],b[i]]

%输入L:           配送中心时间窗结束时间

%输入s:           客户点的服务时间

%输入dist:        距离矩阵

%输入v:           车辆行驶速度

%repFvc:          修复后的配送方案

function repFvc=Regret2Ins(removed,rfvc,demands,pdemands,cap,a,b,L,s,dist,v)

rfvcp=rfvc;             %复制部分解

%反复插回removed中的顾客,直到全部顾客插回

while ~isempty(removed)

   nr=length(removed);     %移除集合中顾客数目

   ri=zeros(nr,1);         %存储removed各顾客最“好”插回路径

   rid=zeros(nr,1);        %存储removed各顾客插回最“好”插回路径后的遗憾值增量

   NV=size(rfvcp,1);           %当前解所用车辆数目

   %逐个计算removed中的顾客插回当前解中各路径的目标函数值增

   for i=1:nr

       visit=removed(i);           %当前要插回的顾客

       dec=[];                     %对应于rc的成本节约值

       ins=[];                     %记录可以插回路径的序号

       for j=1:NV

           route=rfvcp{j};          %当前路径

           %% 判断能否将一个顾客插入到一条路径中,如果能,则将该顾客插入到最佳位置(目标函数增加最小的位置)

           [~,flag,deltaC]=insRoute(visit,route,demands,pdemands,cap,a,b,L,s,dist,v);

           %flag=1表示能插入,flag=0表示不能插入

           if flag==1

               dec=[dec;deltaC];

               ins=[ins;j];

           end

       end

       %如果存在符合约束的插回路径,则找出记录遗憾值以及对应的路径

       if ~isempty(ins)

           [sd,sdi]=sort(dec);                 %将dec升序排列

           insc=ins(sdi);                      %将ins的序号与dec排序后的序号对应

           ri(i)=insc(1);                      %更新当前顾客最“好”插回路径

           if size(ins)>1

               de12=sd(2)-sd(1);                   %计算第2小成本增量与第1小成本增量差值

               rid(i)=de12;                        %更新当前顾客插回最“好”插回路径后的遗憾值

           else

               de12=sd(1);                   %计算第2小成本增量与第1小成本增量差值

               rid(i)=de12;                        %更新当前顾客插回最“好”插回路径后的遗憾值

           end

       else    %如果不存在符合约束的路径,则新建路径

           temp=[visit];

           ri(i)=NV+1;

           rid(i)=part_length(temp,dist);

       end

   end

   %根据rid  rid最大的顾客就是先插回的顾客

   [~,firIns]=max(rid);            %找出遗憾值最大的顾客序号

   readyV=removed(firIns);          %removed中准备插回的顾客

   rIns=ri(firIns);                %插回路径序号

   %如果插回路径为新建路径

   if rIns==NV+1

       temp=readyV;

       %新建路径,并将removed(firIns)插到该路径中

       rfvcp{rIns,1}=temp;

       %将removed(firIns)顾客从removed中移除

       removed(firIns)=[];

   else

       %将firIns插回到rIns

       rfvcp{rIns,1}=insRoute(removed(firIns),rfvcp{rIns,1},demands,pdemands,cap,a,b,L,s,dist,v);

       %将removed(firIns)顾客从removed中移除

       removed(firIns)=[];

   end

end

repFvc=rfvcp;

end

⛄ 运行结果

⛄ 参考文献

[1] 王超, 刘超, 穆东,等. 基于离散布谷鸟算法求解带时间窗和同时取送货的车辆路径问题[J]. 计算机集成制造系统, 2018, 24(3):13.

[2] 关丽霞. 带软时间窗和同时取送货的车辆路径问题研究[D]. 中南大学, 2010.

[3] 汤雅连, 蔡延光, 蔡颢. 一种求解多车场多车型带同时取送货及时间窗的车辆路径优化问题的改进遗传算法[C]// 中国系统工程学会. 中国系统工程学会, 2014.

[4] 蒋毅. 基于蚁群优化算法的车辆路径问题研究[D]. 吉林大学, 2007.

⛳️ 完整代码

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料


相关文章
|
2月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
213 0
|
3月前
|
传感器 机器学习/深度学习 编解码
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
206 3
|
2月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
147 8
|
2月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
159 8
|
2月前
|
机器学习/深度学习 算法 数据可视化
基于MVO多元宇宙优化的DBSCAN聚类算法matlab仿真
本程序基于MATLAB实现MVO优化的DBSCAN聚类算法,通过多元宇宙优化自动搜索最优参数Eps与MinPts,提升聚类精度。对比传统DBSCAN,MVO-DBSCAN有效克服参数依赖问题,适应复杂数据分布,增强鲁棒性,适用于非均匀密度数据集的高效聚类分析。
|
2月前
|
开发框架 算法 .NET
基于ADMM无穷范数检测算法的MIMO通信系统信号检测MATLAB仿真,对比ML,MMSE,ZF以及LAMA
简介:本文介绍基于ADMM的MIMO信号检测算法,结合无穷范数优化与交替方向乘子法,降低计算复杂度并提升检测性能。涵盖MATLAB 2024b实现效果图、核心代码及详细注释,并对比ML、MMSE、ZF、OCD_MMSE与LAMA等算法。重点分析LAMA基于消息传递的低复杂度优势,适用于大规模MIMO系统,为通信系统检测提供理论支持与实践方案。(238字)
|
3月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
215 2
|
2月前
|
机器学习/深度学习 数据采集 负载均衡
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
141 0
|
2月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
126 0
|
2月前
|
数据采集 分布式计算 并行计算
mRMR算法实现特征选择-MATLAB
mRMR算法实现特征选择-MATLAB
166 2

热门文章

最新文章