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

📄 psopidmain.m

📁 pso优化bp神经网络的程序,是师兄论文里的程序,希望对大家有用!
💻 M
字号:
%  PSO算法
% 仿真一个串级系统,并计算出绝对误差矩积分,用PSO算法对PI控制器寻优
clc
close all;
clear all;

%随机初始化
lp=50;         %循环代数

%初始化各个粒子
x=rand(10,2);  
[n,m]=size(x);

 %初始化各个粒子的第一步前进的速度
v=rand(size(x));
vmax=[1 1];
xmax=[5 5 ];
for i=1:n
    y(i)=PsoPidForObj(  x(i,1), x(i,2)  );     %计算原始粒子的目标值 
    py=0;
end

p=x; %原始粒子的历史最优位置既是本身
ymin=inf;                   %原始粒子中的最优值
k=0;
for i=1:n
    if(  ( ymin )  >  y(i)  )
        ymin=y(i);
        k=i;
    end
end
g=x(k,:);                     %原始粒子中的最优值

   
c1=1.5;                     %常数
c2=1.5;
y0=y;                     %保留各个粒子目标值的前一时刻值
gy=inf;

for k=1:lp
     k
    %惯性因子
    %w=1-0.8*k/lp;
    w=0.73;
    % 个体最优值
    for i=1:n
        if(y0(i)>=y(i))
            for j=1:m
                p(i,j)=x(i,j);
            end
            py(i)=y(i);
        end 
    end
    y0=y ;
    
    % 全局最优值
    for i=1:n 
        if(  (gy )      >    (   py(i)   )      ) 
            g=p(i,:);
            gy=py(i) ;
        end
    end
     
    %计算个体前进速度,并限制最大值
    for i=1:n
        for j=1:m
            v(i,j)=w*v(i,j)+c1*rand(1)*( p(i,j)-x(i,j) )+c2*rand(1)*( g(j)-x(i,j) );         
        end
        %速度最大值限制
        for j=1:m
            if (  v(i,j)>vmax(j)  )
                v(i,j)=vmax(j);
            end
            if (  v(i,j)<-vmax(j)  )
                v(i,j)=-vmax(j);
            end
        end        
        %粒子前进一步
        for j=1:m
            x(i,j)=x(i,j)+v(i,j);      
        end
        %粒子活动范围限制
        for j=1:m
            if (  x(i,j)>xmax(j)  )
                x(i,j)=xmax(j);
            end
            if (  x(i,j)<=0  )
                x(i,j)=0.001;
            end
        end         
    
        %当前粒子的当前目标函数值        
        y(i)=PsoPidForObj(  x(i,1), x(i,2)  );           
    end
    best(k)=gy;
    
    if (gy<=400)
        break;
    end
end

g
gy
figure(1);
plot(best);
PsoPidForOut(  g(1),g(2) );

⌨️ 快捷键说明

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