• 大小: 8KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-18
  • 语言: Matlab
  • 标签: matlab  

资源简介

协同粒子群matlab程序,协同PSO算法的系统辨识,算法可实现逐维寻优,避免算法的退化 ,本人在matlab2016a上面运行能够跑通,希望对需要的人有用。

资源截图

代码片段和文件信息

clear all
close all

iter =40;   %迭代次数
n = 5;   %粒子维数
m = 50;   %种群规模
%w = 0.1;  %算法参数
c1 = 2;   %算法参数
c2 = 2;   %算法参数 

%粒子初始化
%(T1,T2,T3,K,t)
for i=1:m
    for j=1
    pop(ij)=10+5*rands(11);
    end
end
for i=1:m
    for j=2
    pop(ij)=20+5*rands(11);
    end
end
for i=1:m
    for j=3
    pop(ij)=30+5*rands(11);
    end
end
for i=1:m
    for j=4
        pop(ij)=rand(11);
    end
end
for i=1:m
    for j=5
        pop(ij)=60+5*rands(11);
    end
end
V=zeros(mn);%初始化粒子速度
BsJ=0;

%初始化种群中的粒子最优和个体最优
for s=1:m
    indivi=pop(s:);
    [indivisBsJ]=fitness(indivisBsJ);
    P(s)=BsJ;
end

[OrderErIndexEr]=sort(P);%适应值排序
Pleast=OrderEr(1);%最小误差

for i=1:m   %群体最优
    if Pleast==P(i)
        gbest=pop(i:);
        break
    end
end

pbest=pop;%个体最优

%循环
for t=1:iter
    t
    w=0.9-(0.5*t)/iter;
    for s=1:m
        %r1r2粒子群算法参数
        r1=rand(1);
        r2=rand(1);
       % C=c1+c2;
       % A=2/(abs(2-C-sqrt(C*C-4*C)));
        %速度更新
       V(s:) = (w*V(s:) + c1*r1*(pbest(s:)-pop(s:)) + c2*r2*(gbest-pop(s:)));
        
        %位置更新
       for i=1:3
           if V(si)>3
               V(si)=3;
           end
           if V(si)<-3
               V(si)=-3;
           end
       end
       for i=4
           if V(si)>0.2
               V(si)=0.2;
           end
           if V(si)<-0.2
               V(si)=-0.2;
           end
       end
       for i=5
           if V(si)>10
               V(si)=10;
           end
           if V(si)<-10
               V(si)=-10;
           end
       end
               
        pop(s:)=pop(s:)+V(s:);
 

        %更新后的适应度值
        [pop(s:)sBsJ]=fitness(pop(s:)sBsJ);
        p(s)=BsJ;
        %根据适应度值对个体和群体最优进行更新
        if p(s)            pbest(s:)=pop(s:);
            P(s)=p(s);
        end
        if p(s)            gbest=pop(s:);
            Pleast=p(s);
            N=s;
        end
        
    end
    G=gbest;
    g=gbest;
    for i=1:n
        for s=1:m
            g(i)=pbest(si);
            [gNBsJ]=fitness(gNBsJ);
            if BsJ                G(i)=g(i);
            end
        end
    end
    [GNBsJ]=fitness(GNBsJ);
    if BsJ        Pleast=BsJ;
        gbest=G;
    end
    Best(t)=Pleast;
    gbest
end
plot(Best);
title(‘G(s)函数适应度曲线‘)
xlabel(‘进化次数‘);  

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-11-08 15:35  copso\
     文件        2672  2013-09-10 23:48  copso\copso.fig
     文件        2585  2013-09-24 20:52  copso\copso.m
     文件        2681  2013-09-24 21:00  copso\copso1.fig
     文件         868  2013-09-02 15:10  copso\fitness.asv
     文件         884  2013-09-02 15:22  copso\fitness.m

评论

共有 条评论