📄 ga-pso.m
字号:
load mgcendevwei
[m,n]=size(c); %m输入维数,n隐层单元数 2*m*n+n
%初始个体
for j=1:n
for i=1:m
ind(1,2*(j-1)*m+(2*i-1))=c(i,j);
ind(1,2*(j-1)*m+2*i)=d(i,j);
ind(1,2*m*n+j)=w(j);
end
end
load reconmgdata
for i=1:m
upc(i)=max(Xn(i,:));
loc(i)=min(Xn(i,:));
end
upw=max(xn);
low=min(xn); %输入和输出数据上限和下限
upd=10;
lod=1;
%FieldDR的建立
for j=1:n
for i=1:m
FieldDR(1,2*(j-1)*m+(2*i-1))=loc(i);
FieldDR(1,2*(j-1)*m+2*i)=lod;
FieldDR(1,2*m*n+j)=low;
FieldDR(2,2*(j-1)*m+(2*i-1))=upc(i);
FieldDR(2,2*(j-1)*m+2*i)=upd;
FieldDR(2,2*m*n+j)=upw;
end
end
%initial population
len=(2*m+1)*n;
if len<30
Nind=30;
elseif len>100
Nind=100;
else
Nind=len;
end
Chrom=inireal(Nind,FieldDR);
for i=1:Nind
if Chrom(i,:)==ind
num=1;
else
num=0;
end
end
if num==1
Chrom=Chrom;
else
r = ceil(Nind.*rand(1,1));
Chrom(r,:)=ind;
end
Obj=mgObj(Chrom);
Fit=mgFit(Obj);
[Y,I]=min(Obj);
trace0=sum(Fit)/length(Fit);%初始种群适应函数平均值
GolOpIv=Chrom(I,:);%初始全局最优个体
GolOpIvV=Y; %初始全局最优值
Object=1e-2;
MAXGEN=20;
GGAP=0.5;
Pc=0.8;
Lind=len;
Pm=1/(Nind*Lind^0.5);
trace=zeros(3,MAXGEN);
gen=0;
iter=5;
c1=2;c2=2;w0=1.4;w1=0.9;
vmax=FieldDR(1,:)+FieldDR(2,:);
while GolOpIvV>=Object&gen<=MAXGEN
PreOpIv=GolOpIv; %上一代全局最优个体
PreOpIvV=GolOpIvV; %上一代全局最优值
%PSO强化学习
Chrom = mgpso(Chrom,iter,c1,c2,w0,w1,vmax); %生成群体的学习
Obj=mgObj(Chrom);
Fit=mgFit(Obj);
%繁殖选择
SelCh=select('rws',Chrom,Fit,GGAP);
%交叉
SelCh=recombin('xovdp',SelCh,Pc);
%变异
SelCh=mutbga(SelCh,FieldDR,Pm);
ObjSel=mgObj(SelCh);
%重插
[Chrom Obj]=reins(Chrom,SelCh,1,1,Obj,ObjSel);
%输出最优解及其对应的个体
[Y,I]=min(Obj);
%输出最差解及其对应的个体
[Z,J]=max(Obj);
CurrOpIv=Chrom(I,:); %当前代最优个体
CurrOpIvV=Y; %当前代最优值
if CurrOpIvV<PreOpIvV
GolOpIvV=CurrOpIvV;
GolOpIv=CurrOpIv;
else
GolOpIvV=PreOpIvV;
GolOpIv=PreOpIv;
end %判断全局最优个体及最优值
Chrom(J,:)=GolOpIv;
Obj(J)=GolOpIvV; %全局最优个体代替当前代中的最差个体
%追踪遗传算法性能
gen=gen+1;
Fit=mgFit(Obj);
trace(1,gen)=max(Fit); %全局最优适应函数值
trace(2,gen)=sum(Fit)/length(Fit); %各代适应函数平均值
if gen==1
trace(3,gen)=trace(2,gen)-trace0;
%模糊推理系统调整交叉概率Pc
Pc=mgCP(trace(3,gen),trace0,Pc,gen);
%模糊推理系统调整变异概率Pm
Pm=mgMP(trace(3,gen),trace0,Pm,gen);
else
trace(3,gen)=trace(2,gen)-trace(2,gen-1);
%模糊推理系统调整交叉概率Pc
Pc=mgCP(trace(3,gen),trace(3,gen-1),Pc,gen);
%模糊推理系统调整变异概率Pm
Pm=mgMP(trace(3,gen),trace(3,gen-1),Pm,gen);
end %当前代与前代适应函数平均值之差
end
save ('mgparatrain','GolOpIv','GolOpIvV')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -