1 简介
同时取货和送货车辆路径问题(VRP_SPD)是经典车辆路径问题(VRP)的一个扩展,在VRP_SPD中,顾客可能要求同时取货和送货服务.本文针对这类问题,提出一种以集成方式处理取货和送货操作的遗传算法仿真分析表明,本文算法比现有算法能取得更好的优化结果,且具有很好的稳定性.
2 部分代码
%输出解的序列中插入代表配送中心的0,分隔子路径
function [R,Rlength,carNum]=OUTPUT(chrom)
global Delivery Pickup;
chrom_new=[];
vecOUTtmp=Delivery(chrom);
vecINtmp=Pickup(chrom);
vecAnstmp=chrom;
num=0;
carNum=0; %所需车辆数
totalDis=0;
num_total=length(chrom);
chrom_new(1)=0;
len=2;
old_len=1;
while(1)
vecOUTtmp=vecOUTtmp(num+1:end);
vecINtmp=vecINtmp(num+1:end);
vecAnstmp=vecAnstmp(num+1:end);
num1=rule1_2(vecOUTtmp); %判断满足送货总量小于车的载重量的配送点个数
num2=rule1_2(vecINtmp); %判断满足取货量小于车的载重量的配送点个数
num3=rule3(vecINtmp,vecOUTtmp); %判断满足每个客户点的载重量小于载重负荷的配送点个数
num=min(num1,min(num2,num3)); %满足全部约束条件的配送点个数
carNum=carNum+1;
vecAnsOUT=vecAnstmp(1:num);
totalDis=totalDis+myDist(vecAnsOUT); %计算一辆车的总运输距离
num_total=num_total-num;
chrom_new(len:len+num-1)=chrom(old_len:old_len+num-1);
len=len+num;
old_len=old_len+num;
chrom_new(len)=0;
len=len+1;
if num_total<=0
break;
end
end
R=chrom_new;
Rlength=totalDis;
carNum=carNum;
3 仿真结果
4 参考文献
[1]彭春林, 梁春华, 周泓. 求解同时取货和送货车辆路径问题的改进遗传算法[J]. 系统仿真学报, 2008, 20(9):5.