matlab遗传算法求解带有时间窗载重约束的外卖配送路径优化(硬约束)
Posted 张叔zhangshu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab遗传算法求解带有时间窗载重约束的外卖配送路径优化(硬约束)相关的知识,希望对你有一定的参考价值。
模型条件
配送员存在最大载重
必须先去商家,再去顾客
必须在时间窗内送达
主程序
clear
clc
close all
tic
%% 读取数据
load('shuju');
bl=0;
%% 提取数据信息
E=shuju(1,4); %初始点时间窗开始时间
L=shuju(1,5); %初始点心时间窗结束时间
zuobiao=shuju(:,2:3); %所有点的坐标x和y
zb=shuju(1:end,2:3);
dtzb=shuju(end-1:end,2:3);
zuobiao=[zuobiao(:,1),-zuobiao(:,2)];
zb=[zb(:,1),zb(:,2)];
customer=zuobiao(2:end,:); %顾客坐标
dtcustomer=zuobiao(end-1:end,:);
cusnum=size(customer,1); %顾客数
v_num=1; %车辆数
a=shuju(2:end,4); %顾客时间窗开始时间[a[i],b[i]]
b=shuju(2:end,5); %顾客时间窗结束时间[a[i],b[i]]
F=shuju(2:end,1);
dist=Distanse(zb); %根据坐标的欧式距离矩阵
% dist=load('haha.mat');%D导入距离矩阵
% dist=struct2cell(dist);
% dist=cell2mat(dist);
%% 遗传算法参数设置
alpha=100000; %违反的容量约束的惩罚函数系数
belta=0.4;%违反时间窗约束的惩罚函数系数
belta2=1;
chesu=300;%车速
NIND=500; %种群大小
MAXGEN=500; %迭代次数
Pc=0.9; %交叉概率
Pm=0.05; %变异概率
GGAP=0.9; %代沟(Generation gap)
N=cusnum;
%% 初始化种群
FF=F(1:end,:);
[s,g,sj,gk,Chrom]=init(cusnum,NIND,FF); %构造初始解
%% 输出随机解的路线和总距离
disp('初始种群中的一个随机值:')
[VC,TD,violate_cus]=decode(Chrom(1,:),cusnum,a,b,L,dist,chesu,bl);
% disp(['总距离:',num2str(TD)]);
disp(['车辆行驶总距离:',num2str(TD)]);
disp('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
%% 优化
gen=1;
figure;
hold on;box on
xlim([0,MAXGEN])
title('优化过程')
xlabel('代数')
ylabel('最优值')
[ObjV,bsv,gs,w1,w2]=calObj(Chrom,cusnum,a,b,L,dist,alpha,belta,belta2,chesu,bl); %计算种群目标函数值
preObjV=min(ObjV);
%%
while gen<=MAXGEN
%% 计算适应度
[ObjV,bsv,gs,w1,w2]=calObj(Chrom,cusnum,a,b,L,dist,alpha,belta,belta2,chesu,bl); %计算种群目标函数值
line([gen-1,gen],[preObjV,min(ObjV)]);pause(0.0001)%画图 最优函数
preObjV=min(ObjV);
FitnV=Fitness(ObjV);
%% 选择
SelCh=Select(Chrom,FitnV,GGAP);
%% OX交叉操作
SelCh=Recombin(SelCh,Pc,s,g,sj,gk);
%% 变异
SelCh=Mutate(SelCh,Pm,s,g,sj,gk);
%% 重插入子代的新种群
Chrom=Reins(Chrom,SelCh,ObjV);
%% 打印当前最优解
[ObjV,bsv,gs,w1,w2]=calObj(Chrom,cusnum,a,b,L,dist,alpha,belta,belta2,chesu,bl); %计算种群目标函数值
[minObjV,minInd]=min(ObjV);
disp(['第',num2str(gen),'代最优解:'])
[bestVC,bestTD,best_viocus]=decode(Chrom(minInd(1),:),cusnum,a,b,L,dist,chesu,bl);
disp(['车辆行驶总距离:',num2str(bestTD)]);
fprintf('\\n')
%% 更新迭代次数
gen=gen+1 ;
end
%% 画出最优解的路线图
[ObjV,bsv,gs,w1,w2]=calObj(Chrom,cusnum,a,b,L,dist,alpha,belta,belta2,chesu,bl); %计算种群目标函数值
[minObjV,minInd]=min(ObjV);
%% 输出最优解的路线和总距离
disp('最优解:')
bestChrom=Chrom(minInd(1),:);
[bestVC,bestTD,best_viocus]=decode(bestChrom,cusnum,a,b,L,dist,chesu,bl);
disp(['车辆行驶总距离:',num2str(bestTD)]);
disp('-------------------------------------------------------------')
draw_Best(bestVC,zuobiao,b,bsv,gk,sj,cusnum,F);
gs
w1
w2
% save
% toc~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
优化结果
最优解:
车辆行驶总距离:15283.9339
配送路线1:0->1->5->7->9->6->27->31->32->29->30->28->39->40->8->17->15->2->25->23->26->10->3->33->16->34->37->35->36->38->21->13->22->19->20->24->18->14->11->4->
gs =
5
w1 =
19.6187
w2 =
0
如需代码或代写VX:zzs1056600403
以上是关于matlab遗传算法求解带有时间窗载重约束的外卖配送路径优化(硬约束)的主要内容,如果未能解决你的问题,请参考以下文章
TWVRP基于matlab遗传算法求解带时间窗的外卖配送车辆路径规划问题含Matlab源码 1416期
基于遗传算法求解带有时间窗车载容量限制多车辆单配送中心路径优化VRPTW(多约束)matlab代码
基于遗传算法求解带有时间窗车载容量限制多车辆单配送中心路径优化VRPTW(多约束)matlab代码