欢乐狗 发表于 2022-6-25 20:48:53

基于梯度优化的混沌PSO算法matlab仿真以及在磁悬浮球系统方面的应用

1.软件版本

matlab2017b
2.系统概述

首先,我们需要构建磁悬浮球系统模型的控制对象模型。这里,我们通过传递函数的形式来实现磁悬浮球的表达式,具体的推导过程如下所示:
https://img-blog.csdnimg.cn/9cb4403f72ab4429b3a348d892c7c851.png
       上图中,Xo为磁悬浮球的平衡位置的间隙,x为钢球在Y方向上的偏离平衡位置的位移。Io和i分别为电磁铁线圈的偏置电流和控制电流,F为电磁铁对钢球所产生的电磁铁,mg为钢球所受重力。为了保持平衡,合理F-mg必须为0.
假设平衡状态下,电流为i0,钢球和电磁铁之间的气隙为x0,那么这个时候有如下的表达式:
https://img-blog.csdnimg.cn/bbd0c94b88df4abea51557424a362916.png
 将钢球作为单质点来处理,当钢球质心在Y方向上有向上的偏移量x时,电磁铁 的吸力为
https://img-blog.csdnimg.cn/2b008b34f4254c8fbfaf627e2c9ced9c.png
 u0——真空或空气导磁率;    
s 0——单个磁极面积;     
n——电磁铁线圈匝数;     
i0——线圈中的偏置电流;     
x0——空气气隙厚度;      
i——由x引起的控制电流分量;      
x——转子在Y方向上偏离平衡位置的位移;
当钢球仅存在平移,且无干扰力存在时,此时转子的中心运动方程可表示为:
https://img-blog.csdnimg.cn/f7ca789a5df8443fb0de7f13fa06e000.png
 式中i是位移x而引起的控制电流,在平衡位置处有x=0,i=0,f0=0;
将上式在平衡位置处用泰勒公式展开,并去除二阶最小量得:
https://img-blog.csdnimg.cn/86cddac2f16f41b480515224782424dc.png
 上述公式就是最后的可以得到磁悬浮球的运动微分方程。
https://img-blog.csdnimg.cn/3e56b07782434dd3b8ff8ec3117e8267.png
 其中K0和P,通过预先给定的参数,可以获得,其为两个固定的常数,这个可以根据实际的参数自己设置,我们将上述的Gs作为控制器系统的控制对象进行控制处理。
3.梯度优化的混沌PSO程序

clc;clear;close all;warning off;RandStream.setDefaultStream(RandStream('mt19937ar','seed',1));global yd y timef%定义磁悬浮球传递函数tmac = 1000;den=;wmax = 0.9;wmin = 0.1;c1   = 0.3;c2   = 0.3;%Kp的范围amin = 0;amax = 100;%Ki的范围bmin = 0;bmax = 100;%Kd的范围cmin = 0;cmax = 100;%速度的范围vmin =-0.1;vmax = 0.1;%粒子数目Pop= 5;BsJ= 0;%迭代次数T    = 200;%粒子初始化for i=1:Pop    Kpid(i,1)   = rand(1)*(amax-amin)+amin;    a_best(i)   = Kpid(i,1);      Kpid(i,2)   = rand(1)*(bmax-bmin)+bmin;    b_best(i)   = Kpid(i,2);      Kpid(i,3)   = rand(1)*(cmax-cmin)+cmin;    c_best(i)   = Kpid(i,3);      va(i)       =(vmax-vmin)*rand(1)+vmin;    vb(i)       =(vmax-vmin)*rand(1)+vmin;    vc(i)       =(vmax-vmin)*rand(1)+vmin;      Kpidi       = Kpid(i,:);         = func_pid_controller_fitness(Kpidi,tmac,den);       BsJi(i)   = BsJ;enda            = Kpid(:,1);b            = Kpid(:,2);c            = Kpid(:,3);= min(BsJi);Ta_best      = a(index);Tb_best      = b(index);Tc_best      = c(index); for t=1:T    time(t) = t;    w       = wmax-t*(wmax-wmin)/T;    for i=1:Pop      va(i)   = w*va(i)+c1*rand(1)*(a_best(i)-Kpid(i,1))+c2*rand(1)*(Ta_best-Kpid(i,1));      Kpid(i,1) = Kpid(i,1)+va(i);      if Kpid(i,1) >= amax         Kpid(i,1)= amax;      end      if Kpid(i,1) = bmax         Kpid(i,2)= bmax;      end      if Kpid(i,2) = cmax         Kpid(i,3)= cmax;      end      if Kpid(i,3) = amax;ya(i+1)   = amax;end;      if ya(i+1)= bmax;yb(i+1)   = bmax;end;      if yb(i+1)= cmax;yc(i+1)   = cmax;end;      if yc(i+1)
页: [1]
查看完整版本: 基于梯度优化的混沌PSO算法matlab仿真以及在磁悬浮球系统方面的应用