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


    目录

    1.算法描述

    2.仿真效果预览

    3.MATLAB核心程序

    4.完整MATLAB


    1.算法描述

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

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

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

     

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

    2.仿真效果预览

    matlab2022a仿真结果如下:

     

     

     

     

     

    3.MATLAB核心程序

    1. ...................................
    2. global yd y timef
    3. %定义磁悬浮球传递函数
    4. tmac = 1000;
    5. den =[1,32,2,1];
    6. wmax = 0.9;
    7. wmin = 0.1;
    8. c1 = 0.3;
    9. c2 = 0.3;
    10. %Kp的范围
    11. amin = 0;
    12. amax = 100;
    13. %Ki的范围
    14. bmin = 0;
    15. bmax = 100;
    16. %Kd的范围
    17. cmin = 0;
    18. cmax = 100;
    19. %速度的范围
    20. vmin =-0.1;
    21. vmax = 0.1;
    22. %粒子数目
    23. Pop = 5;
    24. BsJ = 0;
    25. %迭代次数
    26. T = 200;
    27. %粒子初始化
    28. for i=1:Pop
    29. Kpid(i,1) = rand(1)*(amax-amin)+amin;
    30. a_best(i) = Kpid(i,1);
    31. Kpid(i,2) = rand(1)*(bmax-bmin)+bmin;
    32. b_best(i) = Kpid(i,2);
    33. Kpid(i,3) = rand(1)*(cmax-cmin)+cmin;
    34. c_best(i) = Kpid(i,3);
    35. va(i) =(vmax-vmin)*rand(1)+vmin;
    36. vb(i) =(vmax-vmin)*rand(1)+vmin;
    37. vc(i) =(vmax-vmin)*rand(1)+vmin;
    38. Kpidi = Kpid(i,:);
    39. [BsJ,Y] = func_pid_controller_fitness(Kpidi,tmac,den);
    40. BsJi(i) = BsJ;
    41. end
    42. a = Kpid(:,1);
    43. b = Kpid(:,2);
    44. c = Kpid(:,3);
    45. [minJi,index]= min(BsJi);
    46. Ta_best = a(index);
    47. Tb_best = b(index);
    48. Tc_best = c(index);
    49. for t=1:T
    50. time(t) = t;
    51. w = wmax-t*(wmax-wmin)/T;
    52. for i=1:Pop
    53. va(i) = w*va(i)+c1*rand(1)*(a_best(i)-Kpid(i,1))+c2*rand(1)*(Ta_best-Kpid(i,1));
    54. Kpid(i,1) = Kpid(i,1)+va(i);
    55. if Kpid(i,1)>=amax
    56. Kpid(i,1)=amax;
    57. end
    58. if Kpid(i,1)<=amin
    59. Kpid(i,1)=amin;
    60. end
    61. vb(i) = w*vb(i)+c1*rand(1)*(b_best(i)-Kpid(i,2))+c2*rand(1)*(Tb_best-Kpid(i,2));
    62. Kpid(i,2) = Kpid(i,2)+vb(i);
    63. if Kpid(i,2)>=bmax
    64. Kpid(i,2)=bmax;
    65. end
    66. if Kpid(i,2)<=bmin
    67. Kpid(i,2)=bmin;
    68. end
    69. vc(i) = w*vc(i)+c1*rand(1)*(c_best(i)-Kpid(i,3))+c2*rand(1)*(Tc_best-Kpid(i,3));
    70. Kpid(i,3) = Kpid(i,3)+vc(i);
    71. if Kpid(i,3)>=cmax
    72. Kpid(i,3)=cmax;
    73. end
    74. if Kpid(i,3)<=cmin
    75. Kpid(i,3)=cmin;
    76. end
    77. Kpidi = Kpid(i,:);
    78. [BsJ,Y] = func_pid_controller_fitness(Kpidi,tmac,den);
    79. if BsJ<BsJi(i)
    80. BsJi(i) = BsJ;
    81. a_best(i) = Kpid(i,1);
    82. b_best(i) = Kpid(i,2);
    83. c_best(i) = Kpid(i,3);
    84. end
    85. if BsJi(i)<minJi
    86. minJi = BsJi(i);
    87. Ta_best = Kpid(i,1);
    88. Tb_best = Kpid(i,2);
    89. Tc_best = Kpid(i,3);
    90. end
    91. end
    92. Jibest(t) = minJi;
    93. A_best(t) = Ta_best;
    94. B_best(t) = Tb_best;
    95. C_best(t) = Tc_best;
    96. end
    97. figure;
    98. plot(Jibest,'r','linewidth',2);
    99. xlabel('迭代次数');
    100. ylabel('J');
    101. grid on
    102. save R1.mat Jibest timef yd y
    103. figure;
    104. subplot(311);
    105. plot(time,A_best,'b','linewidth',2);
    106. xlabel('times(s)');
    107. ylabel('Kp');
    108. grid on
    109. subplot(312);
    110. plot(time,B_best,'b','linewidth',2);
    111. xlabel('times(s)');
    112. ylabel('Ki');
    113. grid on
    114. subplot(313);
    115. plot(time,C_best,'b','linewidth',2);
    116. xlabel('times(s)');
    117. ylabel('Kd');
    118. grid on
    119. 02_026m

    4.完整MATLAB

    matlab源码说明_我爱C编程的博客-CSDN博客

    V

  • 相关阅读:
    内外“双驱”, NFT价值UPUP
    [PHP]ShopXO企业级B2C免费开源商城系统 v2.3.1
    rabbitMq (2)
    太厉害了,阿里内网最新发布的【MySQL面试小册】把MySQL架构+索引原理+性能优化都讲清楚了
    金仓数据库KingbaseES客户端编程接口指南-JDBC(10. JDBC 读写分离最佳实践)
    什么蓝牙耳机的音质比较好?2022最适合听歌的蓝牙耳机推荐
    【资源推荐】一站式机器学习学习资料
    软件设计模式系列之十二——外观模式
    abstract抽象 与interface接口
    第十四届蓝桥杯(Web应用开发)模拟赛1期-大学组
  • 原文地址:https://blog.csdn.net/hlayumi1234567/article/details/128081720