我是靠谱客的博主 贤惠绿草,最近开发中收集的这篇文章主要介绍鲸鱼算法优化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

最后

以上就是贤惠绿草为你收集整理的鲸鱼算法优化PID参数优化附matlab代码的全部内容,希望文章能够帮你解决鲸鱼算法优化PID参数优化附matlab代码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部