up目录
一、理论基础
首先,传统的遗传优化算法,其标准的优化过程如下所示:
步骤一:根据所需要处理的问题特点,选择问题解对应的编码,并给出一个初始群体,该初始群体包括N各染色体。
步骤二:计算遗传算法中群体的每一个染色体的适应函数值。
步骤三:当遗传算法的某一次迭代结果符合停止迭代条件,则算法停止迭代,如果不满足停止迭代条件,则以一个随机的概率分布值,从旧的种群中随机的选择N个染色体组成一个新的种群进行下一次的迭代。
步骤四:通过交叉得到N个染色体的交叉集合。
步骤五:设置一个较小的变异概率,使染色体中的某些基因进行变异,获得新的种群,并重复步骤二的计算过程。
二、核心程序
%***************遗传算法二进制编码求解混合发电系统配置优化问题
function [Apv,Aw,Cp,CT,LPSP,Pdump,Pdeficit,SOC,Iteration,BestJ,Bfi]=GASolveHybirdSystemSize(WindDataPV,SolarDataPVR,LoadDataPV,Apv_max,Aw_max,Cb_max)
%**************遗传参数设置
Size=100;%种群大小
G=100;%迭代代数
CodeL=10;%编码长度
%**************问题解约束空间
u1max=Apv_max;
u1min=0;
u2max=Aw_max;
u2min=0;
u3max=Cb_max;
u3min=0;
%**************初始化编码
E=round(rand(Size,3*CodeL));
%**************GA主程序
for k=1:1:G
Iteration(k)=k;
for s=1:1:Size
m=E(s,:);
y1=0;y2=0;y3=0;
%*******************解码
m1=m(1:1:CodeL);
for i=1:1:CodeL
y1=y1+m1(i)*2^(i-1);
end
x1=(u1max-u1min)*y1/1023+u1min;
m2=m(CodeL+1:1:2*CodeL);
for i=1:1:CodeL
y2=y2+m2(i)*2^(i-1);
end
x2=(u2max-u2min)*y2/1023+u2min;
m3=m(2*CodeL+1:1:3*CodeL);
for i=1:1:CodeL
y3=y3+m3(i)*2^(i-1);
end
x3=(u3max-u3min)*y3/1023+u3min;
%******************适应度函数
[F(s),~,~,~,~,~]=GAFitnessFunction(x1,x2,x3,WindDataPV,SolarDataPVR,LoadDataPV);
end
Ji=1./F;
%*****************第一步:评估适应度
BestJ(k)=min(Ji);
fi=F; %适应度函数
[Oderfi,Indexfi]=sort(fi); %按照适应度大小从小到大排序
Bestfi=Oderfi(Size); %选取最佳适应度
BestS=E(Indexfi(Size),:); %最佳基因序列
Bfi(k)=Bestfi; %记录最佳适应度值
%*****************第二步:选择和复制操作
fi_sum=sum(fi);
fi_Size=(Oderfi/fi_sum)*Size;
fi_S=floor(fi_Size); %选择适应度较好的基因个体
kk=1;
for i=1:1:Size
for j=1:1:fi_S(i) %选择和复制操作
TempE(kk,:)=E(Indexfi(i),:);
kk=kk+1;
end
end
%*****************第三步:交叉操作
pc=0.60;%交叉概率
n=ceil(30*rand);
for i=1:2:(Size-1)
temp=rand;
if pc>temp %交叉条件
for j=n:1:30
TempE(i,j)=E(i+1,j);
TempE(i+1,j)=E(i,j);
end
end
end
TempE(Size,:)=BestS;
E=TempE;
%*****************第三步:变异操作
pm=0.1; %变异概率
for i=1:1:Size
for j=1:1:2*CodeL
temp=rand;
if pm>temp %变异条件
if TempE(i,j)==0
TempE(i,j)=1;
else
TempE(i,j)=0;
end
end
end
end
%保证第30个基因个体是最佳基因序列
TempE(Size,:)=BestS;
E=TempE;
end
%**********************解码最佳基因序列对应的各个参数优化值
y1=0;y2=0;y3=0;
m1=BestS(1:1:CodeL);
for i=1:1:CodeL
y1=y1+m1(i)*2^(i-1);
end
m2=BestS(CodeL+1:1:2*CodeL);
for i=1:1:CodeL
y2=y2+m2(i)*2^(i-1);
end
m3=BestS(2*CodeL+1:1:3*CodeL);
for i=1:1:CodeL
y3=y3+m3(i)*2^(i-1);
end
Apv=(u1max-u1min)*y1/1023+u1min
Aw=(u2max-u2min)*y2/1023+u2min;
Cp=(u3max-u3min)*y3/1023+u3min;
%**********************混合发电系统最佳配置的性能参数输出
[~,LPSP,Pdump,Pdeficit,SOC,CT]=GAFitnessFunction(x1,x2,x3,WindDataPV,SolarDataPVR,LoadDataPV);
up103
三、测试结果
标签:end,TempE,二进制,优化,y1,fi,系统配置,CodeL,Size From: https://www.cnblogs.com/matlabfpga/p/17139406.html