当前位置:文档之家› 遗传算法求解VRP问题的技术报告

遗传算法求解VRP问题的技术报告

遗传算法求解VRP 问题的技术报告摘要:本文通过遗传算法解决基本的无时限车辆调度问题。

采用车辆和客户对应排列编码的遗传算法,通过种群初始化,选择,交叉,变异等操作最终得到车辆配送的最短路径。

通过MA TLAB 仿真结果可知,通过遗传算法配送的路径为61.5000km,比随机配送路径67km 缩短了5.5km 。

此结果表明遗传算法可以有效的求解VRP 问题。

一、 问题描述1.问题描述车辆调度问题(Vehicle Scheduling/Routing Problem,VSP/VRP )的一般定义为[1]:对一系列送货点和/或收货点,组织适当的行车路线,使车辆有序地通过它们,在满足一定的约束条件(如货物需求量、发送量,送发货时间、车辆容量限制、行驶里程限制、时间限制等)下,达到一定的目标(如路程最短、费用极小、时间尽量少、使用车辆数尽量少等)。

问题描述如下[2]:有一个或几个配送中心),...,1(n i D i =,每个配送中心有K 种不同类型的车型,每种车型有n 辆车。

有一批配送业务),...,1(n i R i =,已知每个配送业务需求量),...,1(n i q i =和位置或要求在一定的时间范围内完成,求在满足不超过配送车辆载重等的约束条件下,安排配送车辆在合适的时间、最优路线使用成本最小。

2.数学模型设配送中心有K 台车,每台车的载重量为),...,2,1(K k Q k =,其一次配送的最大行驶距离为k D ,需要向L 个客户送货,每个客户的货物需求量为),...,2,1(L i q i =,客户i 到j 的运距为ij d ,配送中心到各个客户的距离为),...,2,1,(0L j i d j =,再设k n 为第K 台车配送的客户数(k n =0表示未使用第K 台车),用集合k R 表示第k 条路径,其中ki r 表示客户ki r 在路径 k 中的顺序为 (不包括配送中心),令 0k r 表示配送中心,若以配送总里程最短为目标函数,则可建立如下数学模型:∑∑==•+=-K k k rk r n i r r n sign d d Z k kn k ki i k 101)]([min )1( (1)k n i ki Q qr k ≤∑=1 (2) k k rk r n i r r D n sign d dk kn k ki i k ≤•+∑=-)(01)1( (3)L n k ≤≤0 (4)L nK k k =∑=1 (5)},...,2,1},,...,2,1{{k ki ki k n i L r r R =∈= (6)21,21k k R R k k ≠∀∅=⋂ (7)⎩⎨⎧⎭⎬⎫≥=其他01n 1)(k k n sign (8)上述模型中,式(1)为目标函数,即要求配送里程最短;式(2)保证每条路径上各个客户的货物需求量之和不超过配送车的载重;式(3)保证每条配送路径的长度不超过配送车的最大行驶距离;式(4)表明每条路径上的客户数不超过总客户数;式(5)表明每个客户都得到配送服务;式(6)表示每条路径的客户组成;式(7)限制每个客户仅能由一台配送车送货;式(8)表示当第 k 辆车服务的客户数大于等于1时,说明该台车参加了配送,则sign(n)的值取1,否则为0。

二、 研究现状车辆调度问题在目标和范围方面有很大差别,主要是研究的目标和限定条件不同。

在研究目标方面有的是最短路线,有的是最短时间,有的是客户的方便程度等等。

在限定条件方面,有配送中心方面的区别,和有单配送中心的,有多配送中心;有配送车辆的数量、种类方面的区别,如车辆数有限、无限、单一车型和多种车型;在业务种类方面,有的是集货任务,有的是送货业务,有的是集送一体化业务,有的是各种业务混合情况。

有时间窗的车辆调度问题是最为普通的问题,以成为研究热点。

遗传算法在搜索过程中能够自动获取和积累有关搜索空间的知识,并能利用问题固有的知识来缩小搜索空间,自适应地控制搜索过程,动态有效地降低问题的复杂度,从而求得原问题的真正最优解或满意解,因此我来选用遗传算法来求解VSP 问题。

三、 解决方法遗传算法的流程图如下:初始化群体个体评价t<T?终止NY选择交叉变异基于车辆和客户对应排列编码的遗传算法的基本步骤:(1)编码:采用车辆和客户对应排列的编码方法,其基本思路是:用车辆数间的任意自然数(可重复)的排列表示车辆排列,用客户数间的互不重复的自然数排列表示客户排列,两者相对应,构成一个解,并对应一个配送路径方案。

例如:对于一个用3台车向9个客户送货的车辆调度优化问题,设某解为(122131223)(456712398),即车辆排列为122131223,客户排列为456712398,两个排列相对应。

(2)适应度函数:直接采用公式(1)作为适应度评估函数。

对不可行路径进行权重惩罚。

(3)选择策略:采用最佳个体保存与赌轮相结合的选择策略。

其具体操作为:将每代群体中的N个个体按适应度由小到达排列,排在首位的个体性能最好,将它直接复制到下一代。

下一代群体的令N-1个体需要根据上一代群体的N个个体的适应度采用赌轮选择。

(4)交叉操作:在该编码方式下有几种编码方式:仅对车辆编码进行交叉、仅对客户编码进行交叉和同时对客户编码和车辆编码进行交叉。

本方法中采用仅对车辆编码的方式来交叉。

(5)变异操作:本程序中对于变异操作,采用对客户编码变异的方式。

用MA TLAB编程,在内存为2G,CPU 2.10GHz的微机上运行。

采用运行参数:种群规模为100,交叉概率为0.9,变异概率为0.2,进化代数100。

变异仅对客户编码,对不可行路径的惩罚权重去100km,具体程序代码见附录。

四、仿真结果某配送中心有2台车,其载重量均为8t,车辆每次配送的最大行驶距离均为50km,配送中心与8个客户之间及8个客户之间相互距离及货物需求见下表:表1 客户需求表2 点对间距表运行结果如下:五、结论从以上仿真结果可知,用遗传算法通过选择,交叉,变异等操作最终求得配送车辆物流问题中的最短路径,减少了车辆资源和时间的浪费,缩短了运输成本。

同时,在车辆调度问题中,进一步加入时间窗等参数的车辆调度问题的遗传算法的求解,还需要进一步的学习研究。

六、参考文献[1]施朝春,王旭,葛显龙。

带有时间窗的多配送中心车辆调度问题研究[J] 。

计算机工程与应用,2009;45(34):21—24[2]程世东,刘小明,王兆赓。

物流配送车辆调度研究的回顾与展望[J]。

交通运输工程与信息学报,2004;2(3):93—97七、附录:程序clear all;close all;D=[ 0 6.5 4 10 5 7.5 11 10 4;6.5 07.5 10 10 7.5 7.5 7.5 6;4 7.5 0 10 5 9 9 15 7.5;10 10 10 0 10 7.5 7.5 10 9;5 10 5 10 0 7 9 7.5 20;7.5 7.5 9 7.5 7 0 7 10 10;11 7.5 9 7.5 9 7 0 10 16;10 7.5 15 10 7.5 10 10 0 8;4 6 7.5 9 20 10 16 8 0];n=40;C=100;Pc=0.9;Pm=0.2;N=8;family=zeros(n,N);ticfor i=1:nfamily(i,:)=randperm(N);endGt=family(1,:);Ln=zeros(n,1);for kg=1:1:Ctime(kg)=kg;%------------------------------计算路径长度-----------------------------for i=1:1:nLn(i,1)=fitness1(D,family(i,:)); %计算每条染色体的适应度值EndMinLn(kg)=min(Ln);minLn=MinLn(kg);rr=find(Ln==minLn);Gt=family(rr(1,1),:);%更新最短路径Family=family;kg;minLn;%--------------------------------选择复制-------------------------------K=30;aa=0;bb=0;[aa,bb]=size(Family);Family2=Family;Ln2=Ln;[Ln]=sort(Ln);for i=1:aatt=find(Ln2==Ln(i,1));Family(i,:)=Family(tt(1,1),:);endfor i=1:Kj=aa+1-i;Family(j,:)=Family(i,:);end%---------------------------------交叉---------------------------------[aa,bb]=size(Family);Family2=Family;for i=1:2:aaif Pc>rand&&i<aaA=Family(i,:);B=Family(i+1,:);[A,B]=intercross(A,B);Family(i,:)=A;Family(i+1,:)=B;e ndend%-------------------------------变异-----------------------------------Family2=Family;for i=1:aaif Pm>=rand %变异条件Family(i,:)=mutate(Family(i,:));EndendFamily=[Gt;Family]; %保留上一代最短路径[aa,bb]=size(Family);if aa>nFamily=Family(1:n,:);endfamily=Family;clear FamilyendtocGtRL=fitness1(D,Gt)plot(time,MinLn);xlabel('times');ylabel('MinLn');(1)适应度函数function len=fitness1(D,p)N=8;len=0;for i=1:(N-1)len=len+D(p(i),p(i+1));endlen=D(N,p(1))+len+D(p(N),N);b=0;total=[0 0];volume=8;demand=[1 2 1 2 1 4 2 2 0];b=find(p==8);if b==1total(1)=0;for i=2:Ntotal(2)=demand(p(i))+total(2);endelseif b==9total(2)=0;for i=1:(N-1)total(1)=demand(p(i))+total(1);endelsefor i=1:(b-1)total(1)=demand(p(i))+total(1);endfor i=(b+1):Ntotal(2)=demand(p(i))+total(2);endendif total(2)>volume|total(1)>volumelen=len+100;end(2)交叉操作函数function [a1,b1]=intercross(a1,b1)L=length(a1);w=[0 0];w(1)=unidrnd(L-2);w(2)=L-w(1);if w(2)<w(1)[w(1),w(2)]=exchange(w(1),w(2));elsew(1)=w(1);w(2)=w(2);endfor i=w(1):(w(2)-1)xx=find(a1==b1(i+1));yy=find(b1==a1(i+1));[a1(i+1),b1(i+1)]=exchange(a1(i+1),b1(i+1));[a1(xx),b1(yy)]=exchange(a1(xx),b1(yy));end(3)对调操作函数function [x1,y1]=exchange(x1,y1)temp=x1;x1=y1;y1=temp;(4)变异函数function c=mutate(c)L1=length(c);rray=randperm(L1);[c(rray(1)),c(rray(2))]=exchange(c(rray(1)),c(rray(2)));。

相关主题