基于遗传算法求解新能源充电桩与路径选择matlab代码

1 遗传算法

第一步:相关参数的设定,一般主要包含编码长度L,种群大小M,迭代次数G,交叉率Pc,变异率Pm等。
第二步:算法中不能直接采用数学模型中的解进行运算,需要对解进行处理,去构造适应函数的染色体。
第三步:随机产生M个个体组成初始种群Po,并且让个体有序的分布在解空间中,每个个体为问题对应的一个解。
第四步:计算出每个个体的适应度,根据适应度进行种群中的选择和其他操作。
第五步:根据每个个体适应度的大小,选择适应度高的个体进行个体的选择等操作,通常采用的方法有轮盘赌等。
第六步:设置交叉率Pc控制父代染色体的交叉操作,被交叉的个体将代替父代进入新种群。
第七步:设置突变率Pm,控制父代染色体的突变操作。突变可导致群体中未出现或在选择过程中被淘汰的基因重新出现,突变个体取代父代进入新种群。
第八步:判断下一次迭代的选择、交叉、变异操作后的更新种群是否满足终止条件,如果不满足,则重新进入第四步进行循环迭代过程;如果满足,则停止算法运行,通常采用最大迭代次数作为终止准则。
第九步:对符合终止条件的染色体进行解码,得到问题的最优解。根据以上步骤,可知遗传算法的基本过程
基于遗传算法求解新能源充电桩与路径选择matlab代码

2 代码展示

%遗传算法求解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)]);

优化结果

基于遗传算法求解新能源充电桩与路径选择matlab代码
基于遗传算法求解新能源充电桩与路径选择matlab代码基于遗传算法求解新能源充电桩与路径选择matlab代码
ans =
10 4 2 3 1 5 8 11 9 7 6
最优解:
1—>4—>11
总距离:321997.6348

代码下载https://www.cnblogs.com/matlabxiao/p/14883637.html

上一篇:【路径规划】基于matlab遗传算法求解同时取送货车辆路径问题【含Matlab源码 1072期】


下一篇:【优化求解】基于matalb改进的遗传算法IGA的城市交通信号优化【含Matlab源码 215期】