约束条件:
- 拥有多个物流中心。
- 车辆从某一个物流中心出发,完成配送任务后,可以不回到原来出发的物流中心,返回距离最近的物流中心,即开放式车辆路径。当然,根据车辆服务最后一个客户与所有物流中心的距离,如果与原来出发的物流中心是最短距离,也可以返回原来出发的物流中心。
- 优化目标:车辆固定使用成本(200元/辆)、车辆行驶时间成本(0.3元/分钟)、车辆等待时间成本(0.3元/分钟)、车辆服务时间(0.3元/分钟)成本之和最小。
- 约束条件:(1)不超过车辆容量限制(车辆容量为1000单位),(2)服务必须在客户时间窗内进行,(3)车辆可以提前到达客户,产生等待时间。(4)设定车辆从物流中心的出发时间为0时刻,即第0分钟。
%%遗传算法求解vrp问题(为选择操作从新设计后程序)
%D是距离矩阵,n为种群个数
%C为停止代数,遗传到第 C代时程序停止,C的具体取值视问题的规模和耗费的时间而定
%交叉概率Pc,变异概率Pm
%R为最短路径,Rlength为路径长度
function VRP
volume_shangyuan=30; %一架飞机对伤员的载量约束
volume_wuzi=200; %一架飞机对物资的载量约束
sudu_feiji=200; %一架飞机的速度
base_num1=5; %各个仓库的飞机数量
base_num2=5;
base_num3=5;
n=100; %个体数
C=100; %迭代次数
Pc=0.8;
Pm=0.3;
%主程序入口
tab=2 ; %tab=1,则程序跑的是所有点
%tab=2,则程序跑的是有缺失的点
if tab==1
%初始化
load('h.mat');
demand_shangyuan(1,:)=a(:,4);
demand_wuzi(1,:)=a(:,6);
zuobiao(1,:)=a(:,2);zuobiao(2,:)=a(:,3);
timewindow(1,:)=a(:,8);timewindow(2,:)=a(:,9);
D = linjiejuzhen( zuobiao );
[N,NN]=size(D);
%初始化点的出发仓库和回归仓库
for i=1:N;
dis(1,i)=sqrt((zuobiao(1,i)-22)^2+(zuobiao(2,i)-75)^2);
dis(2,i)=sqrt((zuobiao(1,i)-75.8)^2+(zuobiao(2,i)-80.1)^2);
dis(3,i)=sqrt((zuobiao(1,i)-53.4)^2+(zuobiao(2,i)-59.9)^2);
if (dis(1,i)<=dis(2,i))
if (dis(1,i)<=dis(3,i))
dis(4,i)=1;
else
dis(4,i)=3;
end
else
if (dis(2,i)<=dis(3,i))
dis(4,i)=2;
else
dis(4,i)=3;
end
end
end
clear i;
[R,minlen]=geneticVRP(D,dis,timewindow,demand_shangyuan,demand_wuzi,volume_shangyuan,volume_wuzi,sudu_feiji,base_num1,base_num2,base_num3,n,C,Pc,Pm,zuobiao);%运算返回最优路径R和其总距离Rlength
else
%初始化
delete=[49 34 9 10 58];%要删除的点
delete=sort(delete,'descend');
[M,MM]=size(delete);
load('h.mat');
demand_shangyuan(1,:)=a(:,4);
demand_wuzi(1,:)=a(:,6);
zuobiao(1,:)=a(:,2);zuobiao(2,:)=a(:,3);
timewindow(1,:)=a(:,8);timewindow(2,:)=a(:,9);
xiba=0;
for i=1:MM
xiba=xiba+demand_shangyuan(1,delete(i))+demand_wuzi(1,delete(i));
end
[B,BB]=size(demand_shangyuan);
old=(1:BB);
for new=1:MM
old(delete(new))=[];
demand_shangyuan(delete(new))=[ ];
demand_wuzi(delete(new))=[];
zuobiao(:,delete(new))=[];
timewindow(:,delete(new))=[];
end
D = linjiejuzhen( zuobiao );
[N,NN]=size(D);
%初始化点的出发仓库和回归仓库
for i=1:N;
dis(1,i)=sqrt((zuobiao(1,i)-22)^2+(zuobiao(2,i)-75)^2);
dis(2,i)=sqrt((zuobiao(1,i)-75.8)^2+(zuobiao(2,i)-80.1)^2);
dis(3,i)=sqrt((zuobiao(1,i)-53.4)^2+(zuobiao(2,i)-59.9)^2);
if (dis(1,i)<=dis(2,i))
if (dis(1,i)<=dis(3,i))
dis(4,i)=1;
else
dis(4,i)=3;
end
else
if (dis(2,i)<=dis(3,i))
dis(4,i)=2;
else
dis(4,i)=3;
end
end
end
clear i;
[R,minlen]=geneticVRP_delete(old,xiba,D,dis,timewindow,demand_shangyuan,demand_wuzi,volume_shangyuan,volume_wuzi,sudu_feiji,base_num1,base_num2,base_num3,n,C,Pc,Pm,zuobiao);%运算返回最优路径R和其总距离Rlength
end
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
- 66.
- 67.
- 68.
- 69.
- 70.
- 71.
- 72.
- 73.
- 74.
- 75.
- 76.
- 77.
- 78.
- 79.
- 80.
- 81.
- 82.
- 83.
- 84.
- 85.
- 86.
- 87.
- 88.
- 89.
- 90.
- 91.
- 92.
- 93.
- 94.
- 95.
- 96.
- 97.
- 98.
- 99.