灰狼算法整定PID参数,传递函数可以任意修改,附MATLAB代码

今天的主题是:采用灰狼算法整定各种常见传递函数的PID参数

PID参数整定的方法有很多,其中包括正交试验法、极点配置法,另一类为智能优化算法,包括遗传算法、粒子群算法、神经网络算法。今天给大家带来一期,采用灰狼算法整定PID参数,并比较整定前后的时域指标

传递函数包含以下五种,基本上包含了所有常见的传递函数。

测试在阶跃响应下,采用灰狼算法整定PID的结果图如下:

01

161c904d039e89571c7968f093be1369.png

取T = 50; K = 5; n = 3,(这几个参数在代码中可自行修改)

GWO优化前后结果如下:

37ac15297bc79d55d530f3a57fe79e58.png

控制台输入结果如下:

3b22189ebdf7e1fb8f7503a777b3aaf2.png

02

d5d21907f8f3039feb40aa18fab2f8ab.png

取Tz = [40,20,60,100,20];  K = 6;  n = 5,(这几个参数在代码中可自行修改)

GWO优化前后结果如下:

692a6d43a35e8e3df75af2e54be8cf77.png

控制台输入结果如下:

dcfe02a330813a02fc6e8e18a0647134.png

03

203bbe0176c955cc164fef1911936898.png

取T = 15; K = 10; n= 5;  tt = 5; (这几个参数在代码中可自行修改)

GWO优化前后结果如下:

b394e165fb3b0657b3a87e9fa3043498.png

控制台输入结果如下:

f65588a59b49b15d0e9bd98db2bfa14f.png

04

9ce563cac3b06f4cdc235422be06a325.png

取T1 = 10; K1 = 2; n1=3;  tt1 = 0.02;  T2 = 2; K2 = 0.1; n2=4;  tt2 = 0.001; (这几个参数在代码中可自行修改)

GWO优化前后结果如下:370bfdb383f423a56e680a76d719395e.png

控制台输入结果如下:

4b191f39f489b0d6ab727c0cc385d4a4.png

05

a81732dab3dbd39187b7b8a71e72e9d1.png

取K = 10;T = 50; n = 4;  tt = 5; (这几个参数在代码中可自行修改)

GWO优化前后结果如下:

657971366a6ab3517312f8e15ee03094.png

控制台输入结果如下:

be1805f78e2872c79b5d3fefca278b48.png

代码:

clear
clc
%% 五种适应度函数分别 对应图片1-5
flag = 1;   %1-5分别对应图片1-5,图片中对应的参数请自行修改即可
KP0 = 0.1;  %优化前先手动给一个P , I , D指标,方便与优化后做对比,这三个参数也可以自行更改
Ti0 = 100;
Kd0 = 0.5;
if flag == 1
    T = 50; K = 5; n = 3;                           %这几个参数可以自行修改
    PI_1;                                           %PI_1-5分别对应5个传递函数。采用手动给的PID指标算响应曲线
elseif flag==2
    Tz = [40,20,60,100,20];  K = 6;  n = 5;         %这里注意,n和Tz变量的长度一致,这几个参数可以自行修改
    PI_2;                                           %采用手动给的PID指标算响应曲线
elseif flag==3
    T = 15; K = 10; n= 5;  tt = 5;                  %这几个参数可以自行修改
    PI_3;                                           %采用手动给的PID指标算响应曲线
elseif flag==4
    T1 = 10; K1 = 2; n1=3;  tt1 = 0.02;                %这几个参数可以自行修改
    T2 = 2; K2 = 0.1; n2=4;  tt2 = 0.001;  
    PI_4;                                           %采用手动给的PID指标算响应曲线
elseif flag==5
    K = 10;T = 50; n = 4;  tt = 5;                  %这几个参数可以自行修改
    PI_5;                                           %采用手动给的PID指标算响应曲线
else
    T = 50; K = 5; n = 3;                           %这几个参数可以自行修改 
    PI_1;                                           %采用手动给的PID指标算响应曲线
end


% Grey Wolf Optimizer
SearchAgents_no = 50;
dim = 3;  %优化参数个数
ub = [100,200,10];%优化变量的上限
lb = [0.01,20,0];%优化变量的下限
Max_iter = 100;
% initialize alpha, beta, and delta_pos
Alpha_pos=zeros(1,dim);
Alpha_score=inf; %change this to -inf for maximization problems
Beta_pos=zeros(1,dim);
Beta_score=inf; %change this to -inf for maximization problems
Delta_pos=zeros(1,dim);
Delta_score=inf; %change this to -inf for maximization problems


%Initialize the positions of search agents
Positions=initialization(SearchAgents_no,dim,ub,lb);


Convergence_curve=zeros(1,Max_iter);


l=0;% Loop counter


% Main loop
while l<Max_iter
    for i=1:size(Positions,1)  
        
       % Return back the search agents that go beyond the boundaries of the search space
        Flag4ub=Positions(i,:)>ub;
        Flag4lb=Positions(i,:)<lb;
        Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;               
            
        % Update Alpha, Beta, and Delta
        if fitness<Alpha_score 
            Alpha_score=fitness; % Update alpha
            Alpha_pos=Positions(i,:);
        end
        
        if fitness>Alpha_score && fitness<Beta_score 
            Beta_score=fitness; % Update beta
            Beta_pos=Positions(i,:);
        end
        
        if fitness>Alpha_score && fitness>Beta_score && fitness<Delta_score 
            Delta_score=fitness; % Update delta
            Delta_pos=Positions(i,:);
        end
    end
    
    
    a=2-l*((2)/Max_iter); % a decreases linearly fron 2 to 0
    
    % Update the Position of search agents including omegas
    for i=1:size(Positions,1)
        for j=1:size(Positions,2)     
                       
            r1=rand(); % r1 is a random number in [0,1]
            r2=rand(); % r2 is a random number in [0,1]
            
            A1=2*a*r1-a; % Equation (3.3)
            C1=2*r2; % Equation (3.4)
            
            D_alpha=abs(C1*Alpha_pos(j)-Positions(i,j)); % Equation (3.5)-part 1
            X1=Alpha_pos(j)-A1*D_alpha; % Equation (3.6)-part 1
                       
            r1=rand();
            r2=rand();
            
            A2=2*a*r1-a; % Equation (3.3)
            C2=2*r2; % Equation (3.4)
            
            D_beta=abs(C2*Beta_pos(j)-Positions(i,j)); % Equation (3.5)-part 2
            X2=Beta_pos(j)-A2*D_beta; % Equation (3.6)-part 2       
            
            r1=rand();
            r2=rand(); 
            
            A3=2*a*r1-a; % Equation (3.3)
            C3=2*r2; % Equation (3.4)
            
            D_delta=abs(C3*Delta_pos(j)-Positions(i,j)); % Equation (3.5)-part 3
            X3=Delta_pos(j)-A3*D_delta; % Equation (3.5)-part 3             
            
            Positions(i,j)=(X1+X2+X3)/3;% Equation (3.7)
            
        end
    end
    l=l+1;    
    Convergence_curve(l)=Alpha_score;
end


Best_pos = Alpha_pos;


if flag==1
    [Qbg,y_gwo,u,t]=Object1(Best_pos,T,K,n);
elseif flag==2
    [Qbg,y_gwo,u,t]=Object2(Best_pos,Tz,K,n);
elseif flag==3
    [Qbg,y_gwo,u,t]=Object3(Best_pos,T,K,n,tt);
elseif flag==4
    [Qbg,y_gwo,u,t]=Object4(Best_pos,T1,K1,tt1,n1,T2,K2,tt2,n2);
elseif flag==5
    [Qbg,y_gwo,u,t]=Object5(Best_pos,T,K,tt,n);
else
    [Qbg,y_gwo,u,t]=Object1(Best_pos,T,K,n);
end


%计算优化后的时域性能指标
[Overshoot,tp,tr,ts]=performance_index(y_gwo,t);
disp(['优化后的阶跃响应曲线参数:   超调量:',num2str(Overshoot),',峰值时间:',num2str(tp),',上升时间:',num2str(tr),',调节时间:',num2str(ts)])
disp(['优化后的PID参数为:',num2str(Best_pos)])
[Overshoot0,tp0,tr0,ts0]=performance_index(y0,t0);
disp(['优化后的阶跃响应曲线参数:   超调量:',num2str(Overshoot0),',峰值时间:',num2str(tp0),',上升时间:',num2str(tr0),',调节时间:',num2str(ts0)])
disp(['优化前的PID参数为:',num2str([KP0,Ti0,Kd0])])


%% 作图
figure
plot(t0,y0,"Color",'b','LineWidth',1);
hold on
plot(t,y_gwo,"Color",'r','LineWidth',1);
hold on
plot(t,ones(length(t),1),'LineStyle','--',"Color",'k','LineWidth',1);
legend('优化前','GWO优化后');
xlabel('时间/s');
ylabel('输出');

观察代码第4行,可以通过修改参数flag,任意切换五种传递函数,除此之外,大家可以自行将传递函数改成自己想要的任意参数。

代码注释很详细。获取完整代码方式:点击下方卡片回复关键词获取。

关键词:GWOPID

  • 0
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 灰狼优化算法是一种新兴的智能优化算法,主要基于模拟狼群的寻找食物和生存的行为方式,通过模拟群体的协作行为和适应性调整策略,实现对优化问题的求解。模糊免疫PID是一种基于模糊控制和免疫学原理的控制算法,主要采用模糊逻辑的思想来处理系统的模型不确定性和复杂性,通过免疫模型来实现控制过程中的鲁棒性和适应性优化。 灰狼优化模糊免疫PID是将这两种优化方法相结合而成的一种高效的控制策略。该方法可以通过模拟狼群的群体协作和适应性调整策略来优化PID控制器的模糊判定规则和控制参数,并通过免疫学原理来处理系统的不确定性和复杂性,以实现对控制过程中的鲁棒性和适应性优化。 该方法具有以下几个优点:首先,灰狼优化算法可以通过群体协作和适应性调整策略来快速寻找最优解,从而提高控制器优化的效率和精度;其次,模糊控制可以有效地处理系统的模糊性和非线性,从而提高控制器的鲁棒性和性能;最后,免疫模型可以提高系统的抗干扰能力和适应性,从而进一步提高控制器的鲁棒性和性能。 总而言之,灰狼优化模糊免疫PID是一种创新的控制策略,具有快速、高精度、鲁棒性和适应性强等优点,在实际应用中有着广泛的应用价值和发展前景。 ### 回答2: 灰狼优化模糊免疫PID(Proportional-Integral-Derivative)是一种基于群体智能算法的控制策略,它结合了灰狼优化算法和模糊免疫PID控制方法。 灰狼优化算法是一种模拟灰狼群体行为的优化算法,其基本原理是模拟灰狼的捕食行为和社会等级,通过模拟灰狼的“狩猎”过程来搜索最优解。在灰狼优化算法中,灰狼个体通过迭代搜索的过程,逐步优化目标函数的值,从而获得最优解。 模糊免疫PID控制方法是一种基于模糊逻辑和免疫理论的控制策略。它通过模糊逻辑建立模糊控制器,并利用免疫理论中的抗体免疫机制进行系统的控制。模糊免疫PID控制方法能够充分利用模糊控制和免疫机制的优势,对复杂、非线性的系统进行控制。 将灰狼优化算法和模糊免疫PID控制方法结合起来,可以充分利用灰狼群体的搜索能力和模糊逻辑的自适应性,提高控制系统的性能和鲁棒性。在灰狼优化模糊免疫PID中,首先利用灰狼优化算法搜索到一组较优的控制参数,然后将这些参数输入到模糊免疫PID控制器中进行控制。 通过灰狼优化模糊免疫PID,可以有效解决控制系统中的非线性、时变和不确定性等问题。同时,灰狼优化模糊免疫PID还具有较强的自适应性和鲁棒性,能够适应不同工况和环境的变化。总之,灰狼优化模糊免疫PID是一种有效的控制策略,能够提高控制系统的性能和鲁棒性。 ### 回答3: 灰狼优化模糊免疫PID(Proportional-Integral-Derivative)控制是一种基于灰狼优化算法和模糊免疫控制的PID控制方法。 灰狼优化算法是一种模拟灰狼社群行为的优化算法,通过模拟灰狼群体中的优势与劣势成员的位置更新规律来搜索最优解。而模糊免疫控制是一种基于模糊理论和免疫学原理的控制方法,能够在不确定或复杂的环境中获得较好的控制效果。 在灰狼优化模糊免疫PID中,首先利用灰狼优化算法确定PID控制器的参数。灰狼优化算法中的灰狼位置代表了PID参数的值,根据灰狼的适应度来评估参数优劣。通过迭代更新灰狼位置,直到获得最优PID参数。 然后,应用模糊免疫控制方法将优化得到的PID参数与系统反馈信息结合起来,实现对系统的控制。模糊免疫控制根据模糊推理和模糊规则进行决策,根据控制误差和误差变化率来调整PID输出。 灰狼优化模糊免疫PID方法的优势在于能够有效解决传统PID控制器在复杂或变化环境中的不足。通过灰狼优化算法的搜索和模糊免疫控制的决策,可以快速获得最优控制参数,并根据实时反馈信息进行动态调整。 总之,灰狼优化模糊免疫PID方法结合了灰狼优化算法和模糊免疫控制的优势,可以提高系统控制的稳定性和性能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天吃饺子

不想刀我的可以选择爱我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值