一、VRP简介

1 VRP基本原理
车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一。VRP关注有一个供货商与K个销售点的路径规划的情况,可以简述为:对一系列发货点和收货点,组织调用一定的车辆,安排适当的行车路线,使车辆有序地通过它们,在满足指定的约束条件下(例如:货物的需求量与发货量,交发货时间,车辆容量限制,行驶里程限制,行驶时间限制等),力争实现一定的目标(如车辆空驶总里程最短,运输总费用最低,车辆按一定时间到达,使用的车辆数最小等)。
VRP的图例如下所示:

2 问题属性与常见问题
车辆路径问题的特性比较复杂,总的来说包含四个方面的属性:
(1)地址特性包括:车场数目、需求类型、作业要求。
(2)车辆特性包括:车辆数量、载重量约束、可运载品种约束、运行路线约束、工作时间约束。
(3)问题的其他特性。
(4)目标函数可能是总成本极小化,或者极小化最大作业成本,或者最大化准时作业。

3 常见问题有以下几类:
(1)旅行商问题
(2)带容量约束的车辆路线问题(CVRP)



该模型很难拓展到VRP的其他场景,并且不知道具体车辆的执行路径,因此对其模型继续改进。



(3)带时间窗的车辆路线问题
由于VRP问题的持续发展,考虑需求点对于车辆到达的时间有所要求之下,在车辆途程问题之中加入时窗的限制,便成为带时间窗车辆路径问题(VRP with Time Windows, VRPTW)。带时间窗车辆路径问题(VRPTW)是在VRP上加上了客户的被访问的时间窗约束。在VRPTW问题中,除了行驶成本之外, 成本函数还要包括由于早到某个客户而引起的等待时间和客户需要的服务时间。在VRPTW中,车辆除了要满足VRP问题的限制之外,还必须要满足需求点的时窗限制,而需求点的时窗限制可以分为两种,一种是硬时窗(Hard Time Window),硬时窗要求车辆必须要在时窗内到达,早到必须等待,而迟到则拒收;另一种是软时窗(Soft Time Window),不一定要在时窗内到达,但是在时窗之外到达必须要处罚,以处罚替代等待与拒收是软时窗与硬时窗最大的不同。


模型2(参考2017 A generalized formulation for vehicle routing problems):
该模型为2维决策变量



(4)收集和分发问题
(5)多车场车辆路线问题
参考(2005 lim,多车场车辆路径问题的遗传算法_邹彤, 1996 renaud)

由于车辆是同质的,这里的建模在变量中没有加入车辆的维度。


(6)优先约束车辆路线问题
(7)相容性约束车辆路线问题
(8)随机需求车辆路线问题

4 解决方案
(1)数学解析法
(2)人机交互法
(3)先分组再排路线法
(4)先排路线再分组法
(5)节省或插入法
(6)改善或交换法
(7)数学规划近似法
(8)启发式算法

5 VRP与VRPTW对比

二、遗传算法简介

1 引言


2 遗传算法理论
2.1 遗传算法的生物学基础


2.2 遗传算法的理论基础




2.3 遗传算法的基本概念






2.4 标准的遗传算法


2.5 遗传算法的特点


2.6 遗传算法的改进方向

3 遗传算法流程



4 关键参数说明

三、部分源代码

%遗传算法 VRP 问题 Matlab实现%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%tic%计时器
clear;
clcW=80; %每辆车的载重量
Citynum=50; %客户数量
Stornum=4;%仓库个数
%C     %%第二三列 客户坐标,第四列 客户需求   51,52,53,54为四个仓库load('p01-n50-S4-w80.mat');  %载入测试数据,n客户服务点数,S仓库个数,w车辆载重量
load('p02-n50-S4-w160.mat');
load('p04-n100-S2-w100.mat');
load('p05-n100-S2-w200.mat');
load('p06-n100-S3-w100.mat');G=100;%种群大小[dislist,Clist]=vrp(C);%dislist为距离矩阵 ,Clist为点坐标矩阵及客户需
L=[];%存每个种群的回路长度for i=1:GParent(i,:)=randperm(Citynum);%随机产生路径L(i,1)=curlist(Citynum,Clist(:,4),W,Parent(i,:),Stornum,dislist);
endPc=0.8;%交叉比率
Pm=0.3;%变异比率
species=Parent;%种群
children=[];%子代
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
disp('正在运行,时间比较长,请稍等.........')
g=1;
for generation=1:g
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
tic
fprintf('\n正在进行第%d次迭代,共%d次..........',generation,g);
Parent=species;%子代变成父代
children=[];%子代
Lp=L;%选择交叉父代
[n m]=size(Parent);%交叉,代处理
for i=1:nfor j=i:nif rand<Pccrossoverendend
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[n m]=size(Parent);
for i=1:nif rand<Pmparent=Parent(i,:);%变异个体X=floor(rand*Citynum)+1;Y=floor(rand*Citynum)+1;Z=parent(X);parent(X)=parent(Y);parent(Y)=Z;                          %基因交换变异children=[children;parent];end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%计算子代适应值(即路径长度) (这块用时比较长)
[m n]=size(children);
Lc=zeros(m,1);%子代适应值for i=1:mLc(i,1)=curlist(Citynum,Clist(:,4),W,children(i,:),Stornum,dislist);
end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%淘汰子代  剩余前G个最优解
[m n]=size(children);
if(m>G)             [m n]=sort(Lc);children=children(n(1:G),:);Lc=Lc(n(1:G));
end%淘汰种群
species=[children;Parent];
L=[Lc;Lp];
[m n]=sort(L);  species=species(n(1:G),:);  %更新世代
L=L(n(1:G));%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%加入Opt优化%分配仓库进行opt
temp=initialStor(Citynum,Clist(:,4),W,species(1,:),Stornum,dislist);%存储分配仓库后的结果【52 14 5 52 53 6 9 8 53......】
Rbest=temp;
L_best=L(1);
[m n]=size(temp);start=1;
car=[];%存放opt优化后的结果
i=2;
while (i<n+1)if (temp(i)>Citynum)cur=[];cur=Opt(i-start,[1:i-start,1:i-start],dislist,temp(start:i-1),Citynum);car=[car,[cur,cur(1)]];start=i+1;i=i+2;elsei=i+1;end
end
function F=CalDist(dislist,s,Citynum)%计算回路路径距离DistanV=0;%初始距离为0
n=size(s,2);%n为s矩阵的列数,s应为一个线路里有几个点的矩阵
for i=1:(n-1)if(s(i)>Citynum && s(i+1)>Citynum)elseDistanV=DistanV+dislist(s(i),s(i+1));end
endF=DistanV;
end
%OX顺序交叉策略
P1=Parent(i,:);
P2=Parent(j,:);%选择切点,交换中间部分 并且 修复基因
X=floor(rand*(m-2))+2;
Y=floor(rand*(m-2))+2;
if X>YZ=X;X=Y;Y=Z;
endchange1=P1(X:Y);change2=P2(X:Y);%开始修复 Order Crossover%1.列出基因 p1=[P1(Y+1:end),P1(1:X-1),change1];p2=[P2(Y+1:end),change2,P2(1:X-1)];%2.1删除已有基因 P1for i=1:length(change2)p1(find(p1==change2(i)))=[];end%2.2删除已有基因 P2for i=1:length(change1)p2(find(p2==change1(i)))=[];end%3.1修复 P1P1=[p1(m-Y+1:end),change2,p1(1:m-Y)];%3.1修复 P2P2=[change1,p2(m-Y+1:end),p2(1:m-Y)];%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    %加入子代
children=[children;P1;P2];

四、运行结果

五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.

【MDVRP】基于matlab遗传算法求解带距离的多车场车辆路径规划问题(含单线路局部优化)【含Matlab源码 1170期】相关推荐

  1. 【路径规划-VRP问题】基于遗传算法求解带距离的多车场车辆路径规划问题(含单线路局部优化)matlab代码

    1 简介 物流配送所获取的利润在现代物流企业利润中所占比例非常大,而车辆路径问题又是物流配送中的核心问题.因此对车辆路径问题(VRP)的研究具有非常重要的意义.在实际生活中,大型的物流企业并不只拥有一 ...

  2. 【路径规划】基于遗传算法求解带时间窗多电动车充电路径规划问题附matlab代码

    1 简介 电动车在物流领域中取代燃油车是一个广泛的发展趋势.但电动车的电池利用率低,充电时间长,相关充电配套设施建设不完善,存在"续驶里程焦虑"等现象成为了电动车推广和应用的重要制 ...

  3. 【VRP问题】基于节约算法CW求解带硬时间窗的车辆路径规划问题(VRPTW)matlab源码

    1 简介 研究了物流配送中多车运输的集货与送货车辆路径规划问题,以增加时间惩罚费用的方式插入软时间窗约束,将租车费用,货车运输费用和时间惩罚费用三者之和最小作为优化目标,建立数学模型.采用启发式节约算 ...

  4. MATLAB遗传算法求解带过程时间窗和同时取送货的车辆调度问题(VRPSPDTW)代码实例

    MATLAB遗传算法求解带过程时间窗和同时取送货的车辆调度问题(VRPSPDTW)代码实例 实例问题描述:现有一配送中心向14个客户点配送牛奶,并取回奶桶.配总中心和客户点坐标及每个客户点的服务时间如 ...

  5. 【TWVRP】基于matlab遗传算法求解带时间窗且车辆速度车辆路径规划问题【含Matlab源码 2094期】

    ⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...

  6. 【TWVRP】基于matlab蚁群算法求解带时间窗的车辆路径规划(成本最低)【含Matlab源码 2514期】

    ⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...

  7. 蒙特卡洛模拟电动汽车充电matlab,遗传算法求解带充电桩的电动汽车路径规划VRPTW问题MATLAB源码...

    关于VRPTW的问题,我在之前的文章里都有介绍,再次不过多叙述. 那么带充电桩的电动汽车路径规划问题该怎么求解呢? 首先,我们要知道,带充电桩的电动汽车路径规划多了一个什么样的约束:即电动汽车在配送的 ...

  8. 【TWVRP】基于matlab模拟退火算法求解带时间窗的多车型路径规划问题【含Matlab源码 913期】

    ⛄一.模拟退火算法简介 1 引言 模拟退火算法(Simulated Annealing,SA)的思想最早由Metropolis等人于1953年提出:Kirkpatrick于1983年第一次使用模拟退火 ...

  9. 【TWVRP】模拟退火算法求解带时间窗的多车型路径规划问题【含Matlab源码 913期】

    ⛄一.模拟退火算法简介 1 引言 模拟退火算法(Simulated Annealing,SA)的思想最早由Metropolis等人于1953年提出:Kirkpatrick于1983年第一次使用模拟退火 ...

  10. 【路径规划】基于遗传算法求解带时间窗车辆路径规划问题(VRPTW)matlab源码

    1 简介 有时间窗的车辆路径问题(Vehicle Routing Problem with Time Windows,VRPTW)因为其有重要的现实意义而备受关注.其时间窗即为客户接受服务的时间范围, ...

最新文章

  1. maven项目找不到pom.xml配置的dependency jar中的类问题解决方法
  2. 如何通过交货单把B库存发出
  3. ACM之路(16)—— 数位DP
  4. 大家都在看的公众号是哪几个?
  5. 用华为HMS core的秘钥库文件不存在或者已经存在的解决方案
  6. [CQOI2012]模拟工厂 题解(搜索+贪心)
  7. html地图缩放比例,百度地图之添加控件——比例尺、缩略图、平移缩放
  8. linux 退后根目录,linux下半部与退后执行的工作
  9. 【django】二、构建个人博客网站
  10. Jmeter之JDBC Request与mysql
  11. Nginx+Tomcat无法正确获取的域名和ip地址
  12. 计算机网络由 子网,计算机网络系统是由通信子网和资源子网组成的。()
  13. Linux系统中dmesg命令使用详解
  14. 计算机组装与维修论文摘要,计算机组装与维护—本科毕业设计论文摘要.doc
  15. 挪威科技大学计算机硕士,挪威科技大学硕士留学申请条件
  16. 【企业管理】管理学十大原理
  17. ElasticSearch 从5.6.3升级到7.9.3遇到问题总结
  18. 前端展示中实现批量标签动态生成
  19. 量子计算与量子软件(一)
  20. 初学者的3d建模软件。是什么软件?

热门文章

  1. https方式nginx 代理tomcat访问不带www的域名301重定向跳转到www的域名帮助seo集中权重...
  2. linux 用户操作相关命令
  3. SQL数据库中日期时间类型,按日期group by 实现
  4. Linux基础教程之系统管理篇系统部署
  5. jqueryAjax在客户端发送请求的方式(摘抄!)
  6. liunx 中一个命令可以检测 ps -C java --no-heading| wc -l 一般用于shell脚步编写用
  7. stm32增量式光电编码器
  8. Linux高性能集群搭建(2)---NFS共享文件系统安装配置
  9. 七月算法机器学习3 矩阵分析与应用
  10. clion解决中文乱码的问题