m基于梯度优化的混沌PSO磁悬浮球系统模型优化的matlab仿真

简介: m基于梯度优化的混沌PSO磁悬浮球系统模型优化的matlab仿真

1.算法描述

     基本确定融合后的优化控制算法,即混沌粒子群优化算法,将该算法应用于对PID的参数整定上,通过仿真验证算法的可行性。将混沌思想引入PSO算法,前期工作首先对混沌算法局部搜索能力差和算法可能需要花费长时间才能取得较好优化性能的不足进行了改进,提出梯度优化混沌算法的思想,基本实现了梯度算法与混沌算法的融合,实现了用梯度算法改善混沌算法的预期目的,达到了取长补短的效果,使得该算法即高效又不容易陷入局部极小,为后期将优化后的混沌算法引入PSO算法做好了准备。主要研究如何把PSO算法与得到的混沌算法有效的结合,实现预期目的,用混沌算法来改善PSO算法,使其能持续在全局范围搜索,避免算法早熟。研究实现如下思路的混沌粒子群优化算法:将混沌映射直接映入PSO算法的迭代过程,使算法能持续在全局范围搜索,避免算法早熟,但对于算法后期收敛精度不高和收敛速度下降的问题,此时考虑再将梯度算法引入,以粒子群当前获得的最优粒子所在位置为初始点进行梯度搜索,提高局部搜索效率。再将混沌PSO和梯度算法的搜索过程进行循环,得到新的混沌PSO优化算法。将该算法应用到PID参数整定上,与前期所设计的算法进行比较,得到更优的。

   我们需要构建磁悬浮球系统模型的控制对象模型。这里,我们通过传递函数的形式来实现磁悬浮球的表达式,具体的推导过程如下所示:

1.png

   上图中,Xo为磁悬浮球的平衡位置的间隙,x为钢球在Y方向上的偏离平衡位置的位移。Io和i分别为电磁铁线圈的偏置电流和控制电流,F为电磁铁对钢球所产生的电磁铁,mg为钢球所受重力。为了保持平衡,合理F-mg必须为0.假设平衡状态下,电流为i0,钢球和电磁铁之间的气隙为x0,那么这个时候有如下的表达式:

2.png
3.png
4.png
5.png

   其中K0和P,通过预先给定的参数,可以获得,其为两个固定的常数,这个可以根据实际的参数自己设置,我们将上述的Gs作为控制器系统的控制对象进行控制处理。

2.仿真效果预览
matlab2022a仿真结果如下:

6.png
7.png
8.png
9.png
10.png
11.png
12.png

3.MATLAB核心程序

global yd y timef
%定义磁悬浮球传递函数
tmac = 1000;
den  =[1,32,2,1];
 
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,:);  
    [BsJ,Y]     = func_pid_controller_fitness(Kpidi,tmac,den);   
    BsJi(i)     = BsJ;
end
a            = Kpid(:,1);
b            = Kpid(:,2);
c            = Kpid(:,3);
[minJi,index]= 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)<=amin
           Kpid(i,1)=amin;
        end
        
        vb(i)     = w*vb(i)+c1*rand(1)*(b_best(i)-Kpid(i,2))+c2*rand(1)*(Tb_best-Kpid(i,2));
        Kpid(i,2) = Kpid(i,2)+vb(i);
        if Kpid(i,2)>=bmax
           Kpid(i,2)=bmax;
        end
        if Kpid(i,2)<=bmin
           Kpid(i,2)=bmin;
        end
        
        vc(i)     = w*vc(i)+c1*rand(1)*(c_best(i)-Kpid(i,3))+c2*rand(1)*(Tc_best-Kpid(i,3));
        Kpid(i,3) = Kpid(i,3)+vc(i);
        if Kpid(i,3)>=cmax
           Kpid(i,3)=cmax;
        end
        if Kpid(i,3)<=cmin
           Kpid(i,3)=cmin;
        end
    
        Kpidi       = Kpid(i,:);
        [BsJ,Y]     = func_pid_controller_fitness(Kpidi,tmac,den);
 
        if BsJ<BsJi(i)
           BsJi(i)   = BsJ;
           a_best(i) = Kpid(i,1);
           b_best(i) = Kpid(i,2);
           c_best(i) = Kpid(i,3);
        end
        if BsJi(i)<minJi
           minJi   = BsJi(i);
           Ta_best = Kpid(i,1);
           Tb_best = Kpid(i,2);
           Tc_best = Kpid(i,3);
        end
    end
    Jibest(t) = minJi;
    A_best(t) = Ta_best;
    B_best(t) = Tb_best;
    C_best(t) = Tc_best;
end
 
figure;
plot(Jibest,'r','linewidth',2);
xlabel('迭代次数');
ylabel('J');
grid on
 
 
save R1.mat Jibest timef yd y
 
figure;
subplot(311);
plot(time,A_best,'b','linewidth',2);
xlabel('times(s)');
ylabel('Kp');
grid on
subplot(312);
plot(time,B_best,'b','linewidth',2);
xlabel('times(s)');
ylabel('Ki');
grid on
subplot(313);
plot(time,C_best,'b','linewidth',2);
xlabel('times(s)');
ylabel('Kd');
grid on
相关文章
|
4天前
|
算法 Serverless
m基于遗传优化的LDPC码NMS译码算法最优归一化参数计算和误码率matlab仿真
MATLAB 2022a仿真实现了遗传优化的归一化最小和(NMS)译码算法,应用于低密度奇偶校验(LDPC)码。结果显示了遗传优化的迭代过程和误码率对比。遗传算法通过选择、交叉和变异操作寻找最佳归一化因子,以提升NMS译码性能。核心程序包括迭代优化、目标函数计算及性能绘图。最终,展示了SNR与误码率的关系,并保存了关键数据。
13 1
|
5天前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
|
5天前
|
算法 调度
考虑需求响应的微网优化调度模型【粒子群算法】【matlab】
考虑需求响应的微网优化调度模型【粒子群算法】【matlab】
|
5天前
|
算法 调度
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
|
5天前
|
供应链 算法
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)
|
5天前
|
数据安全/隐私保护
地震波功率谱密度函数、功率谱密度曲线,反应谱转功率谱,matlab代码
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
5天前
|
算法 调度
面向配电网韧性提升的移动储能预布局与动态调度策略(matlab代码)
面向配电网韧性提升的移动储能预布局与动态调度策略(matlab代码)
|
5天前
|
运维 算法
基于改进遗传算法的配电网故障定位(matlab代码)
基于改进遗传算法的配电网故障定位(matlab代码)
|
5天前
|
Serverless
基于Logistic函数的负荷需求响应(matlab代码)
基于Logistic函数的负荷需求响应(matlab代码)

热门文章

最新文章