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

文章研究了广州番禺配送中心的车辆路径规划问题,针对先送货后取货模式导致的效率低下问题,提出了一种新的同时取送货策略。在VRPSDP模型基础上结合时间窗因素,以最小化总成本为目标,通过Matlab仿真进行路径优化,旨在提高车辆满载率和减少出行次数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

✅作者简介:热爱科研的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电子书和数学建模资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

matlab科研助手

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

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

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

打赏作者

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

抵扣说明:

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

余额充值