matlab遗传算法求解新能源充电桩与路径选择
Posted 张叔zhangshu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab遗传算法求解新能源充电桩与路径选择相关的知识,希望对你有一定的参考价值。
模型描述
车辆存在最大的幸事里程,必须在电量耗尽完到达下一个点进行充电
主程序
%遗传算法求解TSP问题(为选择操作从新设计后程序)
%输入:
%D 距离矩阵
%NIND 为种群个数
%X 参数是中国34个城市的坐标(初始给定)
%MAXGEN 为停止代数,遗传到第MAXGEN代时程序停止,MAXGEN的具体取值视问题的规模和耗费的时间而定
%m 为适值淘汰加速指数,最好取为1,2,3,4,不宜太大
%Pc 交叉概率
%Pm 变异概率
%输出:
%R 为最短路径
%Rlength 为路径长度
clear
clc
close all
%% 加载数据 %%遗传参数
load zby;%个城市坐标位置
NIND=50; %种群大小
MAXGEN=200;
Pc=0.9; %交叉概率
Pm=0.2; %变异概率
GGAP=0.9; %代沟(Generation gap)
load('D.mat')
D=D; %生成距离矩阵
N=size(D,1);
%% 初始化种群
Chrom=InitPop(NIND,N,D);
%% 在二维图上画出所有坐标点
% figure
% plot(X(:,1),X(:,2),'o');
% pause(2)
% %% 画出随机解的路线图
% DrawPath(Chrom(1,:),X)
%
%% 输出随机解的路线和总距离
% disp('初始种群中的一个随机值:')
% OutputPath(Chrom(1,:));
% Rlength=PathLength(D,Chrom(1,:));
% disp(['总距离:',num2str(Rlength)]);
% disp('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
pause(1)
%% 优化
gen=0;
figure;
hold on;box on
xlim([0,MAXGEN])
title('优化过程')
xlabel('代数')
ylabel('最优值')
ObjV=PathLength(D,Chrom); %计算路线长度
preObjV=min(ObjV);
while gen<MAXGEN
%% 计算适应度
ObjV=PathLength(D,Chrom); %计算路线长度
% fprintf('%d %1.10f\\n',gen,min(ObjV))
line([gen-1,gen],[preObjV,min(ObjV)]);pause(0.0001)
preObjV=min(ObjV);
FitnV=Fitness(ObjV);
%% 选择
SelCh=Select(Chrom,FitnV,GGAP);
%% 交叉操作
% SelCh=cross(SelCh,FitnV,D);
SelCh=Recombin(SelCh,Pc);
%% 变异
SelCh=Multate(SelCh,Pm);
%% 重插入子代的新种群
Chrom=Reins(Chrom,SelCh,ObjV);
for j=1:NIND
cdd=Chrom(j,:);
if cdd(1,1)~=1
cc=find(cdd==1);
cdd(cc)=[];
Chrom(j,:)=[1,cdd];
end
end
%% 更新迭代次数
gen=gen+1 ;
end
%% 画出最优解的路线图
ObjV=PathLength(D,Chrom); %计算路线长度
[minObjV,minInd]=min(ObjV);
minchr=Chrom(minInd(1),:);
acs=find(minchr==11);
minch=minchr(1:acs);
DrawPath(minch,X)
%% 输出最优解的路线和总距离
disp('最优解:')
p=OutputPath(minch);
disp(['总距离:',num2str(ObjV(minInd(1)))]);
disp('-------------------------------------------------------------')
[~,cc]=size(minch);
disp(['充电次数:',num2str(cc-2)]);
disp('-------------------------------------------------------------')
disp(['剩余电量:',num2str(100-D(minch(end-1),minch(end))),'%']);
disp('-------------------------------------------------------------')
disp(['用时:',num2str(ObjV(minInd(1))/70+1*(D(minch(1),minch(2)))/100)]);
优化结果
ans =
10 4 2 3 1 5 8 11 9 7 6
最优解:
1—>4—>11
总距离:321997.6348
充电次数:1
以上是关于matlab遗传算法求解新能源充电桩与路径选择的主要内容,如果未能解决你的问题,请参考以下文章
VRP基于matlab遗传算法求解多中心车辆路径规划问题含Matlab源码 1965期
ETWVRP基于matlab遗传算法求解带时间窗多电动车充电路径规划问题含Matlab源码 1966期