基于SOA海鸥优化算法的二阶时滞系统PID控制器最优参数计算matlab仿真

目录

1.算法仿真效果

2.MATLAB核心程序

3.算法涉及理论知识概要

4.完整MATLAB


1.算法仿真效果

matlab2022a仿真结果如下:

 

 

 

2.MATLAB核心程序

.........................................................................
%%参数设置
Umax=0.9500;%最大隶属度值
Umin=0.0111;%最小隶属度值
Wmax=0.9;%权重最大值
Wmin=0.1;%权重最小值
Dim = 3;            % 维数
SwarmSize =30;    % 粒子群规模
MaxIter = 100;      % 最大迭代次数
MinFit = 10;       % 最小适应值
Ub = [100 100 100];
Lb = [0 0 0];
%%种群初始化
Range = ones(SwarmSize,1)*(Ub-Lb);
Swarm = rand(SwarmSize,Dim).*Range + ones(SwarmSize,1)*Lb;    % 初始化粒子群
fSwarm = zeros(SwarmSize,1);
for i=1:SwarmSize
    fSwarm(i,:) = PID_SOA(Swarm(i,:));                       % 粒子群的适应值
end
%%个体极值和群体极值
[bestf bestindex]=min(fSwarm);
zbest=Swarm(bestindex,:);   % 全局最佳
gbest=Swarm;                % 个体最佳
fgbest=fSwarm;              % 个体最佳适应值
fzbest=bestf;               % 全局最佳适应值
%迭代寻优
Di=0*rand(SwarmSize,Dim);
Buchang=0*rand(SwarmSize,Dim);
C=0*rand(SwarmSize,Dim);
Diego=0*rand(SwarmSize,Dim);
Dialt=0*rand(SwarmSize,Dim);
Dipro=0*rand(SwarmSize,Dim);
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 i=1:SwarmSize
        W=Wmax-iter*(Wmax-Wmin)/MaxIter;
        Diego(i,:)=sign(gbest(i,:) -Swarm(i,:));%确定利己方向
        Dialt(i,:)=sign(zbest -Swarm(i,:));%确定利他方向
        if PID_SOA(gbest(i,:))>=PID_SOA(Swarm(i,:))%确定预动方向
            Dipro(i,:)=-Di(i,:);
        else
            Dipro(i,:)=Di(i,:);
        end
        Di(i,:)=sign(W* Dipro(i,:)+0.5*Diego(i,:)+0.5*Dialt(i,:));%确定经验梯度方向
        [Orderfgbest,Indexfgbest]=sort(fgbest,'descend');
        u=Umax-(SwarmSize-Indexfgbest(i))*(Umax-Umin)/(SwarmSize-1);
        U=u+(1-u)*rand;
        H=(MaxIter-iter)/MaxIter;%迭代过程中权重的变化
        C(i,:)=H*abs(zbest-10*rand(1,3));%确定高斯函数的参数
        T=sqrt(-log(U));
        Buchang(i,:)=C(i,:)*T;%确定搜索不长的大
        Buchang(i,find(Buchang(i,:)>3*max(C(i,:))))=3*max(C(i,:));
        %更新位置
        Swarm(i,:)=Swarm(i,:)+Di(i,:).*Buchang(i,:);
        Swarm(i,find(Swarm(i,:)>100))=100;
        Swarm(i,find(Swarm(i,:)<0))=0;
        % 适应值
        fSwarm(i,:) =PID_SOA(Swarm(i,:));
        % 个体最优更新     
        if fSwarm(i) < fgbest(i)
            gbest(i,:) = Swarm(i,:);
            fgbest(i) = fSwarm(i);
        end
        % 群体最优更新
        if fSwarm(i) < fzbest
            zbest = Swarm(i,:);
            fzbest = fSwarm(i);
        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('最优个体适应值');
xlabel('迭代次数');ylabel('适应值');
grid on

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

3.算法涉及理论知识概要

       一般来说,海鸥是群居性的,它们用自己的智慧来寻找并攻击猎物。海鸥最重要的是它们的迁徙和攻击行为。迁徙被定义为海鸥从一个地方到另一个地方的季节性迁移,以寻找最丰富食物来源,以提供足够的能量。该行为可描述为:

        在迁徙过程中,它们成群结队地迁徙。海鸥的初始位置不同,以避免相互碰撞;
        在一个群体中,海鸥可以朝着最适合生存的海鸥的方向前进;
        其他海鸥可以根据最适合的海鸥更新它们的初始位置。
        海鸥在迁徙过程中,会经常攻击其他候鸟,在攻击过程中,它们可以做出螺旋形的自然运动,如图1所示。

       海鸥的迁徙和攻击行为。海鸥根据季节更替进行迁徙,迁徙飞行时海鸥会避免相互碰撞;海鸥会攻击猎物,攻击时呈螺旋形的运动形态;在一个群体中,海鸥朝着最佳位置的方向前进。

1.初始化参数;
2.初始化种群位置;
3.计算适应度值并保留全局最优位置;
4.迁徙,全局搜索:
抽象海鸥的迁徙行为主要有三步,第一要满足避免碰撞条件(这样可以确保种群多样性);第二要计算最佳位置的方向;第三要根据该方向移动到新的位置。

SOA的迭代伪代码如下图6所示:

 

4.完整MATLAB

V

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我爱C编程

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值