【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】

⛄一、遗传算法简介

1 引言
【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】_第1张图片
【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】_第2张图片
2 遗传算法理论
2.1 遗传算法的生物学基础
【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】_第3张图片
【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】_第4张图片
2.2 遗传算法的理论基础
【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】_第5张图片
【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】_第6张图片
在这里插入图片描述
【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】_第7张图片
2.3 遗传算法的基本概念
【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】_第8张图片
【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】_第9张图片
在这里插入图片描述
【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】_第10张图片
在这里插入图片描述
【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】_第11张图片
2.4 标准的遗传算法
【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】_第12张图片
【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】_第13张图片
2.5 遗传算法的特点
【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】_第14张图片
【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】_第15张图片
2.6 遗传算法的改进方向
【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】_第16张图片
3 遗传算法流程
【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】_第17张图片
【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】_第18张图片
【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】_第19张图片
4 关键参数说明
【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】_第20张图片

⛄二、部分源代码

%%------------------------------------------------------
%利用遗传算法对电动汽车有序充电进行优化;优化目标包括充电费用最低,充电时间达到要求(电动汽车充到足够的电)
%考虑电动汽车充电对电网负荷的影响,使负荷峰谷差最小。
%--------------------------------------------------------
clc
clear
warning off
%实时电价数据导入,数据来源PJM
RP=[3.10000000000000,3.05000000000000,3,2.80000000000000,2.60000000000000,2.55000000000000,2.50000000000000,2.60000000000000,2.70000000000000,2.80000000000000,2.90000000000000,3.20000000000000,3.50000000000000,3.60000000000000,3.70000000000000,3.67500000000000,3.65000000000000,3.70000000000000,3.75000000000000,3.82500000000000,3.90000000000000,3.92500000000000,3.95000000000000,4.02500000000000,4.10000000000000,4.15000000000000,4.20000000000000,4.20500000000000,4.21000000000000,4.28000000000000,4.35000000000000,4.42500000000000,4.50000000000000,4.60000000000000,4.70000000000000,4.62000000000000,4.54000000000000,4.39500000000000,4.25000000000000,4.22500000000000,4.20000000000000,4.05000000000000,3.90000000000000,3.60000000000000,3.30000000000000,3.20000000000000,3.10000000000000,3.10000000000000];
Price=[RP(35:48),RP(1:14)];% 设定车辆每天17:00之后才回家充电;每天7点之后就离家不充电
Num=100;%电动车数量
PEV=4;
global PEV
% load SOC_start
SOC_start=normrnd(0.3,0.05,1,Num);
global SOC_start
SOC_end=0.90*ones(1,Num);
global SOC_end
C=35; 
global C
number=Num;%种群中个体数量
%% 遗传算法参数设定
NP=300;% 产生初始种群的总数
NG=80 ;% 迭代的 总次数
Pc=0.8;  
Pm=0.4;% 变异率
%% 产生初始种群
for i=1:NP
    data(i).Initial=Initial(number);
    data(i).generation=data(i).Initial;
end
%% 计算初始种群适应度
for i=1:NP
    data(i).Fitness=Fitness(data(i).generation,PEV,Price,SOC_start,SOC_end,C);
end
intinial_Fitness_1=max([data(:).Fitness]);
%% 进行遗传,交叉,变异
maxium_Fitness=[];
temp_Fitness=intinial_Fitness_1;
for k=1:NG
    sum_Fitness=sum([data(1:NP).Fitness]);                %所有个体适应值之和
    Px = [data(1:NP).Fitness]/sum_Fitness;                   %所有个体适应值的平均值
    PPx = 0;
    PPx(1) = Px(1);
    for i=2:NP                        %用于轮盘赌策略的概率累加
        PPx(i) = PPx(i-1) + Px(i);
    end
    for i=1:NP
        sita = rand();
        for n=1:NP
            if sita <= PPx(n)  
                SelFather = n;           %根据轮盘赌策略确定的父亲
                break;
            end 
        end
        Selmother = floor(rand()*(NP-1))+1;  %随机选择母亲
        posCut = floor(rand()*(number-2)) + 1;     %随机确定交叉点
        r1 = rand();
        %% 交叉
        if r1<=Pc     %Pc为交叉率                               
            data1(i).generation(:,1:posCut) = data(SelFather).generation(:,1:posCut);
           data1(i).generation(:,(posCut+1):number) = data(Selmother).generation(:,(posCut+1):number);
            r2 = rand();
            %% 变异
            if r2 <= Pm                               % Pm变异率
                posMut = round(rand()*(number-1) + 1);
                for j=1:size(data1,2)
                    data1(j).generation(:,posMut)=generate( data1(j).generation(:,posMut));
                end
            end
            
        else
            data1(i).generation =data(SelFather).generation(:,:);
        end
    end
    %% 选择
    for i=1:NP
      data(i).Fitness= Fitness(data(i).generation,PEV,Price,SOC_start,SOC_end,C);   %子代适应值
    end
    for i=1:NP
      data1(i).Fitness= Fitness(data1(i).generation,PEV,Price,SOC_start,SOC_end,C);   %子代适应值
    end
    [value1,index1]=sort([data(1:NP).Fitness],'descend');
    [value2,index2]=sort([data1(1:NP).Fitness],'descend');
    j=1;
    for i=index1(1:NP/2)
        temp_1(j).p=data(i).generation;
        j=j+1;
    end
    j=1;
    for i=index2(1:NP/2)
        temp_2(j).p=data1(i).generation;
        j=j+1;
    end
    for i=1:NP/2
    data(i).generation =temp_1(i).p;
    end
    for i=1:NP/2
    data(NP/2+i).generation =temp_2(i).p;
    end
    for i=1:NP
      data(i).Fitness= Fitness(data(i).generation,PEV,Price,SOC_start,SOC_end,C);   %子代适应值
    end
    temp_Fitness=max([data(1:NP).Fitness]); 
    maxium_Fitness=[maxium_Fitness;temp_Fitness];

end
Fitness_initial= -inf;
for i=1:NP
    if data(i).Fitness> Fitness_initial
           INDEX=i;                                %取个体中的最好值作为最终结果
           Fitness_initial=data(i).Fitness;
    end
end
%% 遗传算法结果可视化
figure(1)                                                                         
plot(-maxium_Fitness)% 画出每一代最优个体的适应度
xlabel('遗传代数')
ylabel('组合目标函数值')
title('进化过程')
FITNESS_NORMAL=-maxium_Fitness;
save FITNESS_NORMAL
figure(2)
EV_load=sum(data(INDEX).generation');
EV=[EV_load(15:end),zeros(1,20),EV_load(1:14)];
plot(EV*PEV)
set(gca, 'XLim',[1 48]); % X轴的数据显示范围
set(gca, 'XTick',[8,16,24,32,40,48] ); % X轴的记号点
set(gca, 'XTicklabel',{'4','8','12','16','20','24'}); % X轴的记号
xlabel('时间/h')
ylabel('负荷功率/kW')
figure(3)
Residential_load=[1962.55433333333,1617.09200000000,1397.80300000000,1240.56566666667,1139.44666666667,1087.19533333333,1047.75966666667,1039.21600000000,1025.50600000000,1055.46700000000,1082.60533333333,1130.10900000000,1361.02566666667,1719.95200000000,2047.19933333333,2384.35633333333,2527.08400000000,2849.10700000000,3038.91600000000,3026.13366666667,2888.03833333333,2787.28300000000,2730.16333333333,2762.67133333333,2965.20133333333,3403.65066666667,3292.44533333333,3011.74400000000,2804.51133333333,2717.41300000000,2834.95466666667,3040.08966666667,3160.87966666667,3381.25666666667,3864.43433333333,4218.04066666667,4372.06066666667,4467.65866666667,4694.08000000000,4610.18166666667,4374.74966666667,4266.39233333333,4200.47800000000,4027.01666666667,3845.33500000000,3510.83266666667,3183.25400000000,2515.23000000000]*0.1;
plot(Residential_load,'r-');hold on% 当地负荷曲线
plot(EV+Residential_load,'k-')% 叠加电动汽车后的当地负荷曲线
EV_BY=EV;
function Fitness_result=Fitness(X,PEV,Price,SOC_start,SOC_end,C)
%x矩阵是48*N  SOC_start是一个服从正态分布的1*N  SOC_start是一个的1*N的1矩阵
L=[1962.55433333333,1617.09200000000,1397.80300000000,1240.56566666667,1139.44666666667,1087.19533333333,1047.75966666667,1039.21600000000,1025.50600000000,1055.46700000000,1082.60533333333,1130.10900000000,1361.02566666667,1719.95200000000,2047.19933333333,2384.35633333333,2527.08400000000,2849.10700000000,3038.91600000000,3026.13366666667,2888.03833333333,2787.28300000000,2730.16333333333,2762.67133333333,2965.20133333333,3403.65066666667,3292.44533333333,3011.74400000000,2804.51133333333,2717.41300000000,2834.95466666667,3040.08966666667,3160.87966666667,3381.25666666667,3864.43433333333,4218.04066666667,4372.06066666667,4467.65866666667,4694.08000000000,4610.18166666667,4374.74966666667,4266.39233333333,4200.47800000000,4027.01666666667,3845.33500000000,3510.83266666667,3183.25400000000,2515.23000000000]*0.1;
F1=sum(PEV.*Price*X)./1000;
EV_load=sum(X');
x=[EV_load(15:end),zeros(1,20),EV_load(1:14)];
F2=(max(L+x.*PEV)-min(L+x.*PEV))/100;
if sum(find((((SOC_end-SOC_start).*C)/(0.5*PEV)-sum(X))>0))+sum(find(((1.1-SOC_start).*C)/(0.5*PEV)-sum(X)<0))
    K1=1000000;
else
    K1=0;
end
Fitness_result=-(0.6*F1+0.4*F2+K1);
end

⛄三、运行结果

【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】_第21张图片
【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】_第22张图片
【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】_第23张图片
【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】_第24张图片
【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】_第25张图片
【优化充电】多种遗传算法求解电动汽车有序充电优化问题【含Matlab源码 792期】_第26张图片

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
《智能优化算法及其MATLAB实例(第2版)》包子阳 余继周 杨杉著 电子工业出版社

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

你可能感兴趣的:(Matlab优化求解(进阶版),matlab,算法,开发语言)