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

📄 pso_m.m

📁 经典的基本PSO粒子群优化算法的测试函数共享一下
💻 M
字号:
%-------------------------------PSO-----------------------------------%
%                          粒子群优化算法                             %
%---------------------------------------------------------------------%
nn=10;                                    %粒子群规模,即粒子数
m=2;                                      %粒子的维数,即寻优参数的个数
X_pso=rand(nn,m);                         %初始化粒子群的位置
V=rand(nn,m);                             %初始化粒子群的速度
Pbest=rand(nn,m);                              %粒子群的个体最优解
Gbest=rand(1,m);                          %粒子群的全体最优解
%Wmax=0.9;
%Wmin=0.1; 
ITERmax=100;                                      %进化代数
iter=1;
C1=2.05;                                           %学习因子
C2=2.05;                                           %学习因子
%K=2/abs(2-(C1+C2)-sqrt((C1+C2)^2-4*(C1+C2)));      %压缩因子
%a=1 ;                                              %约束因子
Xmax=100;               
Vmax=10;                                  
while(iter<=ITERmax)
    for i=1:nn
        for j=1:m
            R1=rand;
            R2=rand;
            %W_pso=Wmax-(Wmax-Wmin)/ITERmax*iter;   %惯性因子
            Vinter=V(i,j)+R1*C1*(Pbest(i,j)-X_pso(i,j))+R2*C2*(Gbest(1,j)-X_pso(i,j));
            if Vinter>Vmax
                V(i,j)=Vmax;
            elseif Vinter<-Vmax
                V(i,j)=-Vmax;   
            else 
                V(i,j)=Vinter;
            end
            Xinter=X_pso(i,j)+V(i,j);
            if Xinter>Xmax
                X_pso(i,j)=Xmax;
            elseif Xinter<-Xmax
                X_pso(i,j)=-Xmax; 
            else
                X_pso(i,j)=Xinter;
            end
        end
    end
    for i=1:nn
        pres_X=fit_m(X_pso(i,:));
        pres_Pbest=fit_m(Pbest(i,:));
        pres_Gbest=fit_m(Gbest(1,:));
        if pres_X<pres_Pbest
            Pbest(i,:)=X_pso(i,:);
        end
        if pres_X<pres_Gbest
            Gbest(1,:)=X_pso(i,:)
        end
    end
    err(iter)=pres_Gbest;
    if pres_Gbest<=10^(-30)
        iter=ITERmax;
    else
        iter=iter+1;
    end
end
%figure(1)
ploterr(err/2)
Gbest'
err/2
hold on
% figure(1)
% iter=1:1:ITERmax;
% plot(iter,err(iter),'b-o'); %每次迭代对应的gBest位置

%------------------------------备注-----------------------------------%
%                                                                     %
%---------------------------------------------------------------------%

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -