鲸鱼算法优化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 参数进行优化十分重要。 

鲸鱼算法优化PID参数优化附matlab代码_第1张图片

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

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

                          

 其中ki为电机的扭矩常数

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

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

                     鲸鱼算法优化PID参数优化附matlab代码_第2张图片          

其中ke是反电动势常数

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

               鲸鱼算法优化PID参数优化附matlab代码_第3张图片       

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

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

        鲸鱼算法优化PID参数优化附matlab代码_第4张图片                  

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

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

  

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

     鲸鱼算法优化PID参数优化附matlab代码_第5张图片                                        

式中:

                                         

     鲸鱼算法优化PID参数优化附matlab代码_第6张图片                                     

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

仿真结果

鲸鱼算法优化PID参数优化附matlab代码_第7张图片

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

鲸鱼算法优化PID参数优化附matlab代码_第8张图片

部分代码

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 tub';
        Flag4lb=Positions(i,:) for maximization problem
            Leader_score=fitness; % Update alpha
            Leader_pos=Positions(i,:);
        end
        
    end

你可能感兴趣的:(jvm,算法,matlab)