《MATLAB智能算法30个案例》:第14章 基于粒子群算法的PID控制器优化设计

《MATLAB智能算法30个案例》:第14章 基于粒子群算法的PID控制器优化设计

1. 前言

《MATLAB智能算法30个案例分析》是2011年7月1日由北京航空航天大学出版社出版的图书,作者是郁磊、史峰、王辉、胡斐。本书案例是各位作者多年从事算法研究的经验总结。书中所有案例均因国内各大MATLAB技术论坛网友的切身需求而精心设计,其中不少案例所涉及的内容和求解方法在国内现已出版的MATLAB书籍中鲜有介绍。《MATLAB智能算法30个案例分析》采用案例形式,以智能算法为主线,讲解了遗传算法、免疫算法、退火算法、粒子群算法、鱼群算法、蚁群算法和神经网络算法等最常用的智能算法的MATLAB实现。

本书共给出30个案例,每个案例都是一个使用智能算法解决问题的具体实例,所有案例均由理论讲解、案例背景、MATLAB程序实现和扩展阅读四个部分组成,并配有完整的原创程序,使读者在掌握算法的同时更能快速提高使用算法求解实际问题的能力。《MATLAB智能算法30个案例分析》可作为本科毕业设计、研究生项目设计、博士低年级课题设计参考书籍,同时对广大科研人员也有很高的参考价值。

《MATLAB智能算法30个案例分析》与《MATLAB 神经网络43个案例分析》一样,都是由北京航空航天大学出版社出版,其中的智能算法应该是属于神经网络兴起之前的智能预测分类算法的热门领域,在数字信号处理,如图像和语音相关方面应用较为广泛。本系列文章结合MATLAB与实际案例进行仿真复现,有不少自己在研究生期间与工作后的学习中有过相关学习应用,这次复现仿真示例进行学习,希望可以温故知新,加强并提升自己在智能算法方面的理解与实践。下面开始进行仿真示例,主要以介绍各章节中源码应用示例为主,本文主要基于MATLAB2015b(32位)平台仿真实现,这是本书第十四章基于粒子群算法的PID控制器优化设计实例,话不多说,开始!

2. MATLAB 仿真示例

打开MATLAB,点击“主页”,点击“打开”,找到示例文件
在这里插入图片描述
选中PSO.m,点击“打开”

PSO.m源码如下:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%功能:基于粒子群算法的PID控制器优化设计示例
%环境:Win7,Matlab2015b
%Modi: C.S
%时间:2022-07-07
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% 清空环境
clc
clear all
close all

tic
%% 参数设置
w = 0.6;      % 惯性因子 
c1 = 2;       % 加速常数
c2 = 2;       % 加速常数

Dim = 3;            % 维数
SwarmSize = 100;    % 粒子群规模
ObjFun = @PSO_PID;  % 待优化函数句柄

MaxIter = 100;      % 最大迭代次数  
MinFit = 0.1;       % 最小适应值 

Vmax = 1;
Vmin = -1;
Ub = [300 300 300];
Lb = [0 0 0];

%% 粒子群初始化
    Range = ones(SwarmSize,1)*(Ub-Lb);
    Swarm = rand(SwarmSize,Dim).*Range + ones(SwarmSize,1)*Lb      % 初始化粒子群
    VStep = rand(SwarmSize,Dim)*(Vmax-Vmin) + Vmin                 % 初始化速度
    fSwarm = zeros(SwarmSize,1);
for i=1:SwarmSize
    fSwarm(i,:) = feval(ObjFun,Swarm(i,:));                         % 粒子群的适应值
end

%% 个体极值和群体极值
[bestf bestindex]=min(fSwarm);
zbest=Swarm(bestindex,:);   % 全局最佳
gbest=Swarm;                % 个体最佳
fgbest=fSwarm;              % 个体最佳适应值
fzbest=bestf;               % 全局最佳适应值

%% 迭代寻优
iter = 0;
y_fitness = zeros(1,MaxIter);   % 预先产生4个空矩阵
K_p = zeros(1,MaxIter);         
K_i = zeros(1,MaxIter);
K_d = zeros(1,MaxIter);
while( (iter < MaxIter) && (fzbest > MinFit) )
    for j=1:SwarmSize
        % 速度更新
        VStep(j,:) = w*VStep(j,:) + c1*rand*(gbest(j,:) - Swarm(j,:)) + c2*rand*(zbest - Swarm(j,:));
        if VStep(j,:)>Vmax, VStep(j,:)=Vmax; end
        if VStep(j,:)<Vmin, VStep(j,:)=Vmin; end
        % 位置更新
        Swarm(j,:)=Swarm(j,:)+VStep(j,:);
        for k=1:Dim
            if Swarm(j,k)>Ub(k), Swarm(j,k)=Ub(k); end
            if Swarm(j,k)<Lb(k), Swarm(j,k)=Lb(k); end
        end
        % 适应值
        fSwarm(j,:) = feval(ObjFun,Swarm(j,:));
        % 个体最优更新     
        if fSwarm(j) < fgbest(j)
            gbest(j,:) = Swarm(j,:);
            fgbest(j) = fSwarm(j);
        end
        % 群体最优更新
        if fSwarm(j) < fzbest
            zbest = Swarm(j,:);
            fzbest = fSwarm(j);
        end
    end 
    iter = iter+1;                      % 迭代次数更新
    y_fitness(1,iter) = fzbest;         % 为绘图做准备
    K_p(1,iter) = zbest(1);
    K_i(1,iter) = zbest(2);
    K_d(1,iter) = zbest(3);
end
%% 绘图输出
figure(1)      % 绘制性能指标ITAE的变化曲线
plot(y_fitness,'LineWidth',2)
title('最优个体适应值','fontsize',18);
xlabel('迭代次数','fontsize',18);ylabel('适应值','fontsize',18);
set(gca,'Fontsize',18);

figure(2)      % 绘制PID控制器参数变化曲线
plot(K_p)
hold on
plot(K_i,'k','LineWidth',3)
plot(K_d,'--r')
title('Kp、Ki、Kd 优化曲线','fontsize',18);
xlabel('迭代次数','fontsize',18);ylabel('参数值','fontsize',18);
set(gca,'Fontsize',18);
legend('Kp','Ki','Kd',1);
toc

添加完毕,点击“运行”,开始仿真,输出仿真结果如下:


Swarm =

  195.8055   47.2160  202.0895
  133.7286   69.2696  182.7919
   61.4011  116.2212  197.4790
  120.4879  293.4625   19.2929
  186.0716  113.9308  268.7536
  195.5438  133.3364  101.8596
  223.4571   17.7419  234.3860
   70.7970  282.2028   95.3370
  142.2455  268.7433  184.5191
  194.3038  121.4159   49.9367
  281.0894  131.9804  123.4967
   92.7850  217.1828  156.3636
  255.2413  183.9846  168.2143
  281.1990   87.8607  144.8740
  203.3779  157.0430  118.8032
  235.8481  173.2425   96.3721
  239.0444  179.0324   14.7789
  212.6310   73.5301   98.7241
  216.7190  256.8300  191.0523
   47.3461   17.1588  219.0706
  130.6574  126.7095  231.1595
  218.2005  165.3805   35.2635
  123.6335  296.4213  170.9616
    0.2546  103.0906  126.6415
  235.4638   80.0270  293.0413
  172.2398  151.8103   84.4837
  261.2008  236.6645  117.7225
  168.9683   48.8731   58.5119
  196.8015  106.9075   19.4771
  194.2095   29.2800  113.8576
   81.2208  119.3498   78.8253
  183.9898   67.8250   25.5394
    3.5516  267.6877   18.8853
  284.8483   40.3834  206.6355
    8.8218  299.7030  228.1685
  279.5116  109.1474   47.6189
  169.2404  197.3704  133.6233
  204.7378  105.4926   57.9108
  282.3742  209.8994   83.3171
  277.7195    7.7905  107.7900
  158.1039  256.8412   85.3742
  242.4092    3.9475  113.2864
  140.3985  259.4808    9.6336
  249.6606   70.6802  174.7448
   35.0645  142.3381  125.3878
   24.9141   69.8677  171.5339
   32.0467  165.8119  111.3328
  272.5369  251.8322  119.8119
   19.6268  114.4845   67.9131
  248.5006   32.1626  125.1273
  252.3495  272.8553   15.2949
  276.5482  284.9411   63.1297
  240.6753   45.9196   40.3757
  152.9938  261.9488  163.1968
  108.5670  107.6863    6.1402
  289.4687  277.3247    4.8510
  126.1186   26.8265  183.5973
  165.9966   36.2078  266.0314
  115.7643  244.9043  225.4437
   23.8809   30.2015  240.1302
  191.2970  129.2116  250.1982
  249.1109  278.9291   48.5851
  126.4114  278.0775  212.0028
  175.6077   40.3950  111.5218
   34.1414  126.5238  249.4187
  130.1615    6.8186  190.1207
    6.6841  216.3770  196.6588
  232.4927  259.5831  101.0894
  163.1903  127.7858   87.4738
  289.5108  253.9604  239.2742
  220.5208  183.1585  132.6336
  226.0616  247.9741  148.2276
  104.5903  173.4390    3.2099
  153.3659  291.6642  194.0195
  233.6001  158.6017  122.4647
   40.3612  134.4716  108.4265
  171.6724   80.1669  288.6640
  221.2258   15.4849   13.4902
   98.5121  237.1910   13.6267
  216.8067  261.5788  116.2652
  190.7016  242.3703  294.0177
   93.4157  121.2044   68.8571
  233.6387  288.4046  114.8184
   52.3069  156.4721  259.3962
   86.2665   77.4500  148.5548
   34.9214   74.7299  276.2062
  176.7013   61.8904  240.4013
  207.7431   35.9820  185.1071
  157.2673   15.7305  137.8125
  141.8705  164.9720  279.6028
  133.7144   53.6298  215.8449
  282.2310  226.1214  146.3943
  155.8064   34.4975  245.5115
  238.2745  246.6531  245.8652
  106.9104   38.2902  165.8477
  276.6543   13.9251  133.0425
  299.4028  116.7209  280.8942
   63.7530  189.1818  193.9213
  268.7681  147.8719  148.6455
  123.8940   60.3817   65.0004


VStep =

    0.5970    0.6817    0.5447
   -0.4338   -0.4083   -0.7676
   -0.1886    0.7342   -0.1523
    0.5134    0.4724    0.2554
    0.2737   -0.3152    0.8075
    0.1797   -0.2368   -0.3872
    0.0237   -0.3494    0.3785
    0.0913   -0.4057    0.4843
   -0.2993    0.8354   -0.8436
    0.4500    0.6992   -0.4529
    0.4360    0.1476    0.2202
   -0.8593   -0.1862    0.8812
   -0.9236   -0.7563    0.4879
    0.4916    0.2968    0.1128
    0.3847    0.9017   -0.7080
   -0.0835   -0.1841    0.9742
    0.3043    0.5814    0.7296
    0.0387    0.0961    0.3315
   -0.6261   -0.4404   -0.9318
    0.9565    0.6208    0.8209
    0.3207    0.2523    0.1545
    0.8297   -0.8748   -0.9392
   -0.3462   -0.3901   -0.7898
    0.2426    0.9196    0.6032
    0.8990   -0.4152   -0.6366
    0.2425    0.7750   -0.8268
    0.8278    0.6164   -0.7168
    0.1254   -0.0904    0.0622
    0.2583    0.5696    0.6866
    0.7463    0.3485   -0.8229
   -0.3801    0.8642    0.4206
    0.2988   -0.8517   -0.0742
    0.0513    0.7938   -0.7791
    0.9475    0.0893   -0.8662
   -0.7955    0.3722   -0.7637
    0.0993    0.8034    0.2225
   -0.6274   -0.7580    0.0780
   -0.4589   -0.3719    0.2007
   -0.5602    0.6288   -0.0263
   -0.7362   -0.5764   -0.2601
   -0.7662    0.8168    0.4689
   -0.5520   -0.0768   -0.5117
    0.1304   -0.8741    0.5438
   -0.8606   -0.5922   -0.2132
    0.4188   -0.9981    0.0581
    0.4951   -0.7395    0.1305
   -0.9864   -0.7673   -0.4927
    0.2863   -0.6100    0.1154
   -0.5172   -0.3693    0.7656
    0.5058    0.2444   -0.3679
   -0.1777    0.5459    0.6939
    0.0431    0.4694   -0.9859
    0.4696   -0.5109    0.2262
    0.6810   -0.7207   -0.5385
    0.0544   -0.8348    0.2172
   -0.3772    0.0767    0.9883
    0.3503    0.1305   -0.9639
   -0.6349    0.8810    0.1246
   -0.7760   -0.7621    0.1201
   -0.4043   -0.0641    0.3949
    0.1179    0.1078   -0.2038
   -0.3816   -0.7123    0.3870
   -0.8251    0.5763   -0.9769
   -0.2106    0.0781   -0.4258
    0.3188   -0.8920   -0.2183
    0.9781    0.2174    0.8648
    0.8793    0.6451   -0.0677
   -0.7016   -0.1212   -0.5102
   -0.1392    0.1123    0.9495
   -0.3065    0.3888    0.7073
    0.2868   -0.3206   -0.7552
   -0.5007   -0.4859   -0.4443
   -0.4060   -0.6077    0.0797
   -0.9919    0.7447    0.9545
    0.6079    0.8736    0.3121
    0.0705   -0.1840    0.5668
    0.2884   -0.9727    0.3286
   -0.9008    0.7708   -0.2041
    0.2913   -0.0757   -0.4229
   -0.8333   -0.5589   -0.4093
    0.9871   -0.0559   -0.6868
   -0.3858   -0.5118    0.1914
    0.6119    0.1464    0.2641
   -0.0364    0.0766    0.7031
    0.4223    0.7366   -0.4125
   -0.6667   -0.6561    0.9600
    0.7681   -0.1603    0.4505
   -0.6375    0.1930    0.3545
    0.2995    0.4617   -0.7669
   -0.5628    0.9533    0.3223
    0.0053   -0.0260   -0.9367
   -0.2315   -0.9176   -0.8115
   -0.0990   -0.0996    0.1647
   -0.5811   -0.0932    0.9262
    0.4018   -0.0923    0.3350
   -0.0671    0.4472    0.7353
    0.5870    0.7893    0.5864
    0.4093   -0.7251    0.3725
   -0.7187    0.9627   -0.2712
   -0.8882   -0.9151    0.7634

警告: PID_Model.mdl, line 18: Unknown character encoding 'ibm-1386_P100-2002' specified for model
'PID_Model'. 
> In PSO_PID (line 5)
  In PSO (line 37) 
时间已过 860.062825 秒。

在这里插入图片描述
在这里插入图片描述

3. 小结

PID控制器由于算法很简单、鲁棒性高,可靠性能好,被人们广泛应用于工业控制的各个过程中,在实际的生产过程中往往有线性、以及通常说的时变不确定性,很难建立精确的数学模型,常规DE PID控制器通常不能达到理想的控制效果。针对这些问题,长期以来人们一直在寻求PID控制器参数的自整定的技术,以适应复杂和高指标的控制要求。

由于PID控制器存在着各种各样的优点但是又有着许多令人头疼的缺点,例如存在着参数的鲁棒性整定较为困难的问题,许多专家开始寻求一些优化算法来进行PID参数的寻优,例如,自适应智能控制技术方法、神经网络方法以及遗传算法等。传统的遗传算法在理论上已形成了一套较为完善的算法体系并在许多问题中都有了成功的应用,本文采用粒子群算法进行PID参数的整定和优化。对本章内容感兴趣或者想充分学习了解的,建议去研习书中第十四章节的内容。后期会对其中一些知识点在自己理解的基础上进行补充,欢迎大家一起学习交流。

猜你喜欢

转载自blog.csdn.net/sinat_34897952/article/details/125590399