鲸鱼算法优化PID参数优化附matlab代码

第一 章  鲸鱼优化算法

算法介绍参考文献:Seyedali Mirjalili,Andrew Lewis. The Whale Optimization Algorithm[J]. Advances in Engineering Software,2016,95.

 第二章  鲸鱼优化PID参数

首先我们需要建立一个直流电机PID控制系统,WOA算法通过将系统上的误差作为WOA的评估函数(即适应度函数输入),计算适应度函数的值,然后根据函数的适应度调整三个PID参数来优化PID控制器,以使系统的控制性能最优。图5为WOA的PID参数整定框图,其中为系统的R(t)输入,y(t)为系统的输出,E(t)是输入和输出的偏差,Kp , Ki , Kd 是 PID 控制器中关键参数, 其数值变化直接影响 PID 控制器性能, 故对 PID 参数进行优化十分重要。 

直流电机主要由电气部分以及机械部分组成。电机的模型如图6所示。直流电机中气隙磁通是恒定的,通过调节电枢电路的电压来实现对电机的控制,以实现对电机速度的调节。对于这种电机对象,其某些参数特性(如扭矩常数和粘性摩擦系数)不可用,因此可以将其视为建模中的黑盒,并且可以通过使用输入和输出数据以及使用系统识别来完成建模。直流电机的数学建模过程:

1.确定对象模型结构,假设气隙磁通恒定。

                          

 其中ki为电机的扭矩常数

2. 确定电枢电路电压平衡方程

a)电机反电动势与其角速度之间的关系

                               

其中ke是反电动势常数

b)电枢电路电压平衡方程

                      

式中,ra,la别是电枢电路的电阻和电感。

3. 电机轴上的扭矩平衡方程

                          

式中j是等效转动惯量,b是等效粘性摩擦系数,tl是负载扭矩。

4. 以为输入电压,为输出速度,消除、和求微分

  

5. 通常,电枢电路中的电感La很小,如果忽略其影响,根据拉普拉斯变换将微分方程转换为以下传递函数。

                                             

式中:

                                         

                                          

k为电机的增益常数,t为电机的时间常数。

仿真结果

基准函数测试也可做附matlab代码

部分代码

set(0,'defaultfigurecolor','w')
% parpool(4)  启用4线程并行计算,打开MATLAB时运行一次就可以,否则会报错
clear
tic;  %计时
disp(['提示:程序开始运行,根据电脑配置不同,可能需要时间较长,请耐心等待'])
%%%%%%%%%%%%%参数设置
dim=3;%%%%%因为优化PID参数  所有三个参数维度为3
lb=[0  0  0]';   %变量最小值
ub=[10  10  10]'; %变量最大值
Max_iter=10;
SearchAgents_no=30;




%%%%%%%%%%%%%鲸鱼优化算法
% initialize position vector and score for the leader,初始化位置向量和领导者得分
Leader_pos=zeros(1,dim);
Leader_score=inf; %change this to -inf for maximization problems,将此更改为-inf以获得最大化问题,Inf无穷大


%Initialize the positions of search agents
Positions=initialization(SearchAgents_no,dim,ub,lb);%Positions,存放数个个体的多维位置。

Convergence_curve=zeros(1,Max_iter);%Convergence_curve收敛曲线

t=0;% Loop counter

% Main loop
while t<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;%超过最大值的设置成最大值,超过最小值的设置成最小值
        
        % Calculate objective function for each search agent,目标函数值的计算
        fitness=optfun(Positions(i,:));
        
        % Update the leader
        if fitness<Leader_score % Change this to > for maximization problem
            Leader_score=fitness; % Update alpha
            Leader_pos=Positions(i,:);
        end
        
    end
  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

研究僧111

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

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

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

打赏作者

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

抵扣说明:

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

余额充值