⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ga-pso.m

📁 PSO(粒子群算法)作为添加算子改进GA (遗传算法).
💻 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 + -