一、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(参考 A generalized formulation for vehicle routing problems):
该模型为2维决策变量
(4)收集和分发问题
(5)多车场车辆路线问题
参考( 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 关键参数说明
三、部分源代码
function main()clear;clc;for xx=1:2tic % 参数初始化genmax=500;[xy,n,nind,D,Q,TT,ET,EL,ELL,CT,CL,dmax,qmax,fitmax,c0,c1,k,v]=datas();%生成初试种群chrom=initpop(nind,n,k);gen=1; while gen<=genmax%计算适应值矩阵[fit,fitx]=fitness(D,Q,chrom,TT,ET,EL,CT,CL,dmax,qmax,fitmax,c0,c1,k,v,n,nind);%找出最优个体适应值avefit(gen)=sum(fit)/nind;%平均适应值[bestfitc,bestindex]=min(fit);bestindex=bestindex(1);bestfit(gen)=bestfitc;%最小适应值fit的集bestpop(gen,:)=chrom(bestindex,:);%最优个体集%选择chrom=select(chrom,fitx);%交叉chrom=crossover(chrom);%变异chrom=mutate(chrom,avefit,gen);%精英策略chrom(1,:)=bestpop(gen,:);gen=gen+1;endbestpop;y=bestfit;%各代最优适应值%y1=avefit;%各代平均适应值%找出最优的适应值、个体[minbestfit,minindex]=min(bestfit);%取最优适应值的位置、最优适应值minindex=minindex(1);%取最优个体minbestpop=bestpop(minindex,:);%解码最优染色体a=randperm(size(minbestpop,2));a1=sort(a);a2=sort(minbestpop);a3=zeros(1,size(minbestpop,2));for i=1:size(minbestpop,2)for j=1:size(minbestpop,2)if minbestpop(i)==a2(j);a3(i)=a1(j);a2(j)=0;break;endendenda3;for i=1:size(a3,2) if a3(i)>n a3(i)=1;endenda4=[1,a3,1];%去重for i=1:size(a4,2)-1if a4(i)-a4(i+1)==0a4(i)=0;endendii=find(a4==0);a4(ii)=[];a4;%最优方案minbestpop1=a4;minbestfit;%最低适应值%画线路DrawPath(minbestpop1,xy);%迭代图figurex=1:1:genmax;plot(x,y,'r--')%plot(x,y);hold on%plot(x,y1,'r--');%适应值平均数title('遗传优化过程')xlabel('迭代次数')ylabel('最优适应值')axis([0,genmax,0,2000])%输出最优解disp('最优解为:');N=size(minbestpop1,2);p=num2str(minbestpop1(1));for i=2:N;p=[p,'->',num2str(minbestpop1(i))];enddisp(p);disp(['最优解为:',num2str(minbestpop1)]);disp(['最优成本为:',num2str(minbestfit)]);s=0;r=minbestpop1;for i=1:size(r,2)-1s=s+D(r(i),r(i+1));enddisp(['行驶里程:',num2str(s)]);tocendfunction [fit,fitx]=rfitness(D,Q,chrom,TT,ET,ELL,CT,CL,dmax,qmax,fitmax,c0,c1,k,v,n,nind)% chrom 变更后的初始种群% D 节点距离矩阵% Q 节点的需求量矩阵% ET,EL % ELL % CT,CL % dmax 单车最大行驶距离% qmax 车辆最大载货量 % fitmax 一个很大的值替代适应值% c0 发车成本% c1 单位运输成本% k 初始设定车辆数% n 客户点数% nind 种群个数% fitx 适应值% fit 适应值倒数% 染色体解码N=n+k-2;chrom1=zeros(nind,N);for i=1:ninda=chrom(i,:);b=sort(randperm(N));aa=sort(a);bb=zeros(1,N);for i1=1:Nfor i2=1:Nif a(i1)==aa(i2)bb(i1)=b(i2);aa(i2)=0;break;endendendchrom1(i,:)=bb;end% 虚拟节点转换for j=1:nindfor j1=1:size(chrom1,2) if chrom1(j,j1)>n chrom1(j,j1)=1;endendendA=ones(nind,1);chrom1=[A,chrom1,A];% 适应值计算[nx,ny]=size(chrom1);for i=1:nx% 初始化各个变量d=0;q=0; t=0;cfe=0;cost=0;B=chrom1(i,:);for j=1:ny-1d=d+D(B(j),B(j+1));q=q+Q(B(j+1));[t,cfe0]=rtimepunish(TT,ET,ELL,CT,CL,B,d,j,dmax,t,v);%时间惩罚cfe=cfe+cfe0;if B(j+1)==1if d>dmax|q>qmaxcost=fitmax;break;elsecost0=d*c1+cfe;cost=cost+cost0;endd=0;q=0;t=0;cfe=0;endendk0=k;for jj=1:size(B,2)-1 if B(jj+1)-B(jj)==0k0=k0-1;endendfit(i)=cost+k0*c0;fitx(i)=1/(cost+k0*c0+eps);end
四、运行结果
五、matlab版本及参考文献
1 matlab版本
a
2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,.