matlab求解外卖配送路径优化
Posted 张叔zhangshu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab求解外卖配送路径优化相关的知识,希望对你有一定的参考价值。
模型限制条件
1.先取后送
2.多骑手
3.载重限制
如需帮助请私聊
tic
clear
clc
%% 用importdata这个函数来读取文件
data=importdata('data3.mat');
cap=4;
%% 提取数据信息
vertexs=data(:,2:3); %所有点的坐标x和y
customer=vertexs(2:end,:); %顾客坐标
cusnum=size(customer,1); %顾客数
v_num=6; %初始车辆使用数目
demands=data(2:end,4); %需求量
a=data(2:end,5);
b=data(2:end,6);
s=data(2:end,7);
chesu=50;
h=pdist(vertexs);
dist=squareform(h); %距离矩阵
%% 遗传算法参数设置
alpha=10000; %违反的容量约束的惩罚函数系数
NIND=200; %种群大小
MAXGEN=200; %迭代次数
Pc=0.9; %交叉概率
Pm=0.05; %变异概率
GGAP=0.9; %代沟(Generation gap)
N=cusnum+v_num-1; %染色体长度=顾客数目+车辆最多使用数目-1
%% 种群初始化
Chrom=InitPop(NIND,N,cusnum,v_num);
%% 输出随机解的路线和总距离
disp('初始种群中的一个随机值:')
[currVC,NV,TD]=decode(Chrom(1,:),cusnum,dist); %对初始解解码
%%
currCost=costFuction(currVC,dist,demands,cap,alpha,a,b,chesu,s); %求初始配送方案的成本=车辆行驶总成本+alpha*违反的容量约束之和
disp(['车辆使用数目:',num2str(NV),',车辆行驶总距离:',num2str(TD)]);
disp('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
%% 优化
BestCost=zeros(MAXGEN,1); %记录每一代全局最优解的总成本
gen=1;
while gen<=MAXGEN
%% 计算适应度
ObjV=calObj(Chrom,cusnum,cap,demands,dist,alpha,a,b,chesu,s); %计算种群目标函数值
FitnV=Fitness(ObjV);
%% 选择
SelCh=Select(Chrom,FitnV,GGAP);
%% OX交叉操作
SelCh=Recombin(SelCh,Pc,cusnum,dist);
%% 变异
SelCh=Mutate(SelCh,Pm);
%% 重插入子代的新种群
Chrom=Reins(Chrom,SelCh,ObjV);
%% 删除种群中重复个体,并补齐删除的个体
% Chrom=deal_Repeat(Chrom);
%% 打印当前最优解
ObjV=calObj(Chrom,cusnum,cap,demands,dist,alpha,a,b,chesu,s); %计算种群目标函数值
[minObjV,minInd]=min(ObjV);
BestCost(gen)=minObjV;
disp(['第',num2str(gen),'代最优解:'])
[bestVC,bestNV,bestTD]=decode(Chrom(minInd(1),:),cusnum,dist);
disp(['车辆使用数目:',num2str(bestNV),',车辆行驶总距离:',num2str(bestTD)]);
fprintf('\\n')
%% 更新迭代次数
gen=gen+1 ;
end
%% 打印外层循环每次迭代的全局最优解的总成本变化趋势图
figure;
plot(BestCost,'LineWidth',1);
title('全局最优解的总成本变化趋势图')
xlabel('迭代次数');
ylabel('总成本');
disp(['最低成本为:',num2str(BestCost(end))])
%% 打印全局最优解路线图
draw_Best(bestVC,vertexs);
% toc
配送结果
配送路线1:0->2->3->1->4->12->14->11->13->
配送路线2:0->6->16->
配送路线3:0->8->18->
配送路线4:0->7->17->10->20->
配送路线5:0->9->19->
配送路线6:0->5->15->
其中1-10为商家 11-20为顾客,1与11相对应
以上是关于matlab求解外卖配送路径优化的主要内容,如果未能解决你的问题,请参考以下文章
matlab遗传算法求解带有时间窗载重约束的外卖配送路径优化(硬约束)