MATLAB实现灰狼算法优化PID参数

MATLAB实现灰狼算法优化PID参数

一、问题描述

灰狼优化算法(Grey Wolf Optimizer, GWO)模拟灰狼的等级制度和群体捕猎行为,由Mirjalili于2014年提出。算法将狼群分为α、β、δ、ω四个等级,通过围猎、追捕、攻击三个步骤搜索最优解。

被控对象: G(s)=1s2+1.5s+1G(s) = \frac{1}{s^2 + 1.5s + 1}G(s)=s2+1.5s+11

优化目标: 最小化ITAE指标

二、GWO算法原理

2.1 狼群等级

  • α狼:最优解,负责决策
  • β狼:次优解,辅助决策
  • δ狼:第三优解
  • ω狼:其他个体,跟随前三者

2.2 位置更新公式

D⃗=∣C⃗⋅X⃗p(t)−X⃗(t)∣\vec{D} = |\vec{C} \cdot \vec{X}_p(t) - \vec{X}(t)|D =∣C ⋅X p(t)−X (t)∣
X⃗(t+1)=X⃗p(t)−A⃗⋅D⃗\vec{X}(t+1) = \vec{X}_p(t) - \vec{A} \cdot \vec{D}X (t+1)=X p(t)−A ⋅D

其中 a=2−2t/Tmaxa = 2 - 2t/T_{max}a=2−2t/Tmax 线性递减,A⃗=2ar⃗1−a\vec{A} = 2a\vec{r}_1 - aA =2ar 1−a,C⃗=2r⃗2\vec{C} = 2\vec{r}_2C =2r 2

2.3 算法参数

参数 数值
狼群数量 30
迭代次数 80

三、MATLAB代码

matlab 复制代码
%% GWO-PID: 灰狼算法优化PID参数
clc; clear; close all; rng(42);
s=tf('s'); G=1/(s^2+1.5*s+1);
Kp_r=[0,10]; Ki_r=[0,5]; Kd_r=[0,3];

n=30; max_iter=80;
wolves=rand(n,3).*[Kp_r(2),Ki_r(2),Kd_r(2)];
f=eval_pop(wolves,G);
[~,idx]=sort(f);
a=wolves(idx(1),:); fa=f(idx(1));
b=wolves(idx(2),:); fb=f(idx(2));
d=wolves(idx(3),:); fd=f(idx(3));
h=[fa];

for iter=1:max_iter
    a_coef=2-2*iter/max_iter;
    for i=1:n
        r1=rand(1,3); r2=rand(1,3);
        A1=2*a_coef.*r1-a_coef; C1=2*r2;
        X1=a-A1.*abs(C1.*a-wolves(i,:));
        r1=rand(1,3); r2=rand(1,3);
        A2=2*a_coef.*r1-a_coef; C2=2*r2;
        X2=b-A2.*abs(C2.*b-wolves(i,:));
        r1=rand(1,3); r2=rand(1,3);
        A3=2*a_coef.*r1-a_coef; C3=2*r2;
        X3=d-A3.*abs(C3.*d-wolves(i,:));
        wolves(i,:)=max(0,min((X1+X2+X3)/3,[Kp_r(2),Ki_r(2),Kd_r(2)]));
    end
    f=eval_pop(wolves,G);
    [mf,mi]=min(f);
    if mf<fa; d=b; fd=fb; b=a; fb=fa; a=wolves(mi,:); fa=mf;
    elseif mf<fb; d=b; fd=fb; b=wolves(mi,:); fb=mf;
    elseif mf<fd; d=wolves(mi,:); fd=mf; end
    h=[h,fa];
end

fprintf('Kp=%.4f Ki=%.4f Kd=%.4f ITAE=%.4f\n',a,fa);

function f=eval_pop(pop,G)
    n=size(pop,1); f=zeros(n,1); t=0:0.01:5;
    for i=1:n
        try
            C=pid(pop(i,1),pop(i,2),pop(i,3));
            [y,~]=step(feedback(C*G,1),t);
            e=1-y; f(i)=sum(t'.*abs(e))*0.01;
            if isnan(f(i))||f(i)>100, f(i)=100; end
        catch, f(i)=100; end
    end
end

四、运行结果

4.1 控制台输出

复制代码
GWO 20/80: ITAE=0.1091
GWO 40/80: ITAE=0.1063
GWO 60/80: ITAE=0.1044
GWO 80/80: ITAE=0.1039

===== GWO-PID =====
Kp=4.6727 Ki=3.1337 Kd=3.0000 ITAE=0.1039

五、结果对比

算法 Kp Ki Kd ITAE
GA 4.3340 2.8087 2.3031 0.1861
PSO 4.6586 3.1215 3.0000 0.1039
GWO 4.6727 3.1337 3.0000 0.1039

PSO和GWO效果相近,均优于GA。GWO的优势在于参数少、实现简单、无需调整交叉变异率。

六、改进方向

  1. 自适应参数 :动态调整∣A∣|A|∣A∣和∣C∣|C|∣C∣的收敛策略
  2. 混合算法:结合PSO提升GWO的局部搜索能力
  3. 多目标优化:同时优化超调量、上升时间、稳态误差

完整MATLAB代码可直接运行,如有问题欢迎交流!

相关推荐
北域码匠13 小时前
高通滤波算法深度解析(High-Pass Filter)
stm32·算法·c#·数字信号处理·嵌入式开发·滤波算法·高通滤波
指掀涛澜天下惊14 小时前
强化学习进阶篇八 策略梯度算法
深度学习·学习·算法·强化学习
乌萨奇也要立志学C++14 小时前
【洛谷】kmp算法
开发语言·算法
禹凕14 小时前
Dijkstra算法详解与应用
python·算法
YaraMemo15 小时前
元启发式算法框架
人工智能·算法·5g·信息与通信·启发式算法·信号处理
weixin_3077791315 小时前
一维无粘 Burgers 方程的激波形成问题:MacCormack 格式求解
c++·算法·matlab
HugoStudio_SWAN16 小时前
洛谷 B4500 / B4449 / B3843 凯撒密码、密码强度与密码合规——加密与安全的三道门
c++·学习·程序人生·算法·安全
枫叶林FYL17 小时前
【群体智能集群控制工程实践】第3章 一致性协同算法
算法
禹凕17 小时前
滑动窗口算法实战指南
python·算法
DisonTangor17 小时前
【腾讯混元雪耻归来】 Hy4 preview:770B 参数 MoE 旗舰模型,1M 上下文全面开源
人工智能·算法·开源·aigc·腾讯云·腾讯云ai代码助手