Press "Enter" to skip to content

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

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

1 简介

 

物流配送所获取的利润在现代物流企业利润中所占比例非常大,而车辆路径问题又是物流配送中的核心问题。因此对车辆路径问题(VRP)的研究具有非常重要的意义。在实际生活中,大型的物流企业并不只拥有一个配送中心(车场),而是拥有多个配送中心,这便引出了多车场车辆路径问题(MDVRP)。MDVRP属于NP难问题,求得最优解相当困难,因此该文便采用遗传算法对其进行求解。遗传算法是利用了生物进化的特点,利用染色体在进化过程中的交叉、变异过程,对问题的解空间进行全局搜索,从而寻求较优解。在对多车场车辆路径问题的研究中,设计了两种遗传算法,来适应不同的需求。对小规模,或者求解效果要求不高的数据集,采用单亲遗传算法;而对规模较大,要求求解效果较好,时间要求不高的数据集,采用基于虚拟车场的遗传算法。

 

 

 

 

 

 

 

 

 

2 部分代码

 

%遗传算法 VRP 问题 Matlab实现
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%tic%计时器
clear;
clc
W=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');
%淘汰种群
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;
   else
       i=i+1;
   end
end
L1=CalDist(dislist,car,Citynum);%计算进行优化后的回路长度
if( L1<L(1))
   fprintf('Opt优化有效! %f --> %f',L(1),L1);
   Rbest=car;
   car(find(car>Citynum))=[];%去掉编码中的仓库,再加入父代
   species=[species;car];
   L=[L;L1];
   L_best=L1;
end
  L_best
toc
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
%%
Rbest%最优线路
L_best%最优解
%%画图
[m n]=size(Rbest);
start=1;
temp=[];
i=2;
while(i<=n)
   if(Rbest(i)>Citynum)
       temp=Rbest(start:i);
       
       plot(Clist(temp,2),Clist(temp,3),'-*')
       hold on;
       start=i+1;
       i=i+2;
   else
       i=i+1;
   end
end
plot(Clist(Citynum+1:Citynum+Stornum,2),Clist(Citynum+1:Citynum+Stornum,3),'or')
%toc

 

3 仿真结果

 

 

4 参考文献

 

[1]邓欣. 基于遗传算法的多车场车辆路径问题研究. Diss. 重庆大学.

 

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注