【PID优化】基于蝗虫算法PID控制器优化设计含Matlab源码

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
简介: 【PID优化】基于蝗虫算法PID控制器优化设计含Matlab源码

 1 内容介绍

该文针对广泛应用的PID控制器,在MATLAB仿真软件环境下,开发出一个过程控制系统的仿真软件包,能够实现模型辨识和PID参数调节,为过程控制系统仿真研究提供了方便. 该软件界面友好,操作简便,具有实际应用价值.

2 仿真代码

%_________________________________________________________________________%

%  Grasshopper Optimization Algorithm (GOA) source codes demo V1.0        %

%                                                                         %

%  Developed in MATLAB R2014a                                             %

% The Grasshopper Optimization Algorithm

function [TargetFitness,TargetPosition,Convergence_curve,Trajectories,fitness_history, position_history]=GOA(N, Max_iter, lb,ub, dim, fobj)

disp('GOA is now estimating the global optimum for your problem....')

flag=0;

if size(ub,1)==1

   ub=ones(dim,1)*ub;

   lb=ones(dim,1)*lb;

end

if (rem(dim,2)~=0) % this algorithm should be run with a even number of variables. This line is to handle odd number of variables

   dim = dim+1;

   ub = [ub; 100];

   lb = [lb; -100];

   flag=1;

end

%Initialize the population of grasshoppers

GrassHopperPositions=initialization(N,dim,ub,lb);

GrassHopperFitness = zeros(1,N);

fitness_history=zeros(N,Max_iter);

position_history=zeros(N,Max_iter,dim);

Convergence_curve=zeros(1,Max_iter);

Trajectories=zeros(N,Max_iter);

cMax=1;

cMin=0.00004;

%Calculate the fitness of initial grasshoppers

for i=1:size(GrassHopperPositions,1)

   if flag == 1

       GrassHopperFitness(1,i)=fobj(GrassHopperPositions(i,1:end-1));

   else

       GrassHopperFitness(1,i)=fobj(GrassHopperPositions(i,:));

   end

   fitness_history(i,1)=GrassHopperFitness(1,i);

   position_history(i,1,:)=GrassHopperPositions(i,:);

   Trajectories(:,1)=GrassHopperPositions(:,1);

end

[sorted_fitness,sorted_indexes]=sort(GrassHopperFitness);

% Find the best grasshopper (target) in the first population

for newindex=1:N

   Sorted_grasshopper(newindex,:)=GrassHopperPositions(sorted_indexes(newindex),:);

end

TargetPosition=Sorted_grasshopper(1,:);

TargetFitness=sorted_fitness(1);

% Main loop

l=2; % Start from the second iteration since the first iteration was dedicated to calculating the fitness of antlions

while l<Max_iter+1

   

   c=cMax-l*((cMax-cMin)/Max_iter); % Eq. (2.8) in the paper

   

   for i=1:size(GrassHopperPositions,1)

       temp= GrassHopperPositions';

       for k=1:2:dim

           S_i=zeros(2,1);

           for j=1:N

               if i~=j

                   Dist=distance(temp(k:k+1,j), temp(k:k+1,i)); % Calculate the distance between two grasshoppers

                   

                   r_ij_vec=(temp(k:k+1,j)-temp(k:k+1,i))/(Dist+eps); % xj-xi/dij in Eq. (2.7)

                   xj_xi=2+rem(Dist,2); % |xjd - xid| in Eq. (2.7)

                   

                   s_ij=((ub(k:k+1) - lb(k:k+1))*c/2)*S_func(xj_xi).*r_ij_vec; % The first part inside the big bracket in Eq. (2.7)

                   S_i=S_i+s_ij;

               end

           end

           S_i_total(k:k+1, :) = S_i;

           

       end

       

       X_new = c * S_i_total'+ (TargetPosition); % Eq. (2.7) in the paper      

       GrassHopperPositions_temp(i,:)=X_new';

   end

   % GrassHopperPositions

   GrassHopperPositions=GrassHopperPositions_temp;

   

   for i=1:size(GrassHopperPositions,1)

       % Relocate grasshoppers that go outside the search space

       Tp=GrassHopperPositions(i,:)>ub';Tm=GrassHopperPositions(i,:)<lb';GrassHopperPositions(i,:)=(GrassHopperPositions(i,:).*(~(Tp+Tm)))+ub'.*Tp+lb'.*Tm;

       

       % Calculating the objective values for all grasshoppers

       if flag == 1

           GrassHopperFitness(1,i)=fobj(GrassHopperPositions(i,1:end-1));

       else

           GrassHopperFitness(1,i)=fobj(GrassHopperPositions(i,:));

       end

       fitness_history(i,l)=GrassHopperFitness(1,i);

       position_history(i,l,:)=GrassHopperPositions(i,:);

       

       Trajectories(:,l)=GrassHopperPositions(:,1);

       

       % Update the target

       if GrassHopperFitness(1,i)<TargetFitness

           TargetPosition=GrassHopperPositions(i,:);

           TargetFitness=GrassHopperFitness(1,i);

       end

   end

       

   Convergence_curve(l)=TargetFitness;

   disp(['In iteration #', num2str(l), ' , target''s objective = ', num2str(TargetFitness)])

   

   l = l + 1;

end

if (flag==1)

   TargetPosition = TargetPosition(1:dim-1);

end

3 运行结果

image.gif编辑

image.gif编辑

4 参考文献

[1]周蓓晨, 张宏立. 基于SOA-MC算法的二自由度PID控制器优化设计[J]. 计算机仿真, 2018, 35(4):5.

[1]彭珍瑞, 栾睿, 王娴. 基于人工鱼群算法的伺服系统PID控制器参数优化[J]. 兰州交通大学学报, 2012, 31(4):4.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
6天前
|
机器学习/深度学习 传感器 算法
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
82 14
|
6天前
|
机器学习/深度学习 运维 算法
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
|
6天前
|
算法 数据可视化 异构计算
【车辆路径问题VRPTW】基于北极海鹦优化(APO)算法求解带时间窗的车辆路径问题VRPTW研究(Matlab代码实现)
【车辆路径问题VRPTW】基于北极海鹦优化(APO)算法求解带时间窗的车辆路径问题VRPTW研究(Matlab代码实现)
|
6天前
|
机器学习/深度学习 运维 算法
【复现】基于改进秃鹰算法的微电网群经济优化调度研究(Matlab代码实现)
【复现】基于改进秃鹰算法的微电网群经济优化调度研究(Matlab代码实现)
|
6天前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】基于非支配排序的鱼鹰优化算法NSOOA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】基于非支配排序的鱼鹰优化算法NSOOA求解无人机三维路径规划研究(Matlab代码实现)
|
6天前
|
机器学习/深度学习 负载均衡 算法
【柔性作业车间调度】基于四种多目标优化算法(NSOOA、NSPSO、NSDBO、NSCOA)求解柔性作业车间调度问题FJSP研究(Matlab代码实现)
【柔性作业车间调度】基于四种多目标优化算法(NSOOA、NSPSO、NSDBO、NSCOA)求解柔性作业车间调度问题FJSP研究(Matlab代码实现)
|
8天前
|
数据采集 机器学习/深度学习 运维
【故障诊断】基于负熵诱导灰狼优化算法的多目标信息频带选择用于滚动轴承故障诊断(Matlab代码实现)
【故障诊断】基于负熵诱导灰狼优化算法的多目标信息频带选择用于滚动轴承故障诊断(Matlab代码实现)
|
8天前
|
算法 计算机视觉
【MPDR & SMI】失配广义夹角随输入信噪比变化趋势、输出信干噪比随输入信噪比变化趋势研究(Matlab代码实现)
【MPDR & SMI】失配广义夹角随输入信噪比变化趋势、输出信干噪比随输入信噪比变化趋势研究(Matlab代码实现)
|
8天前
|
编解码 人工智能 算法
【采用BPSK或GMSK的Turbo码】MSK、GMSK调制二比特差分解调、turbo+BPSK、turbo+GMSK研究(Matlab代码实现)
【采用BPSK或GMSK的Turbo码】MSK、GMSK调制二比特差分解调、turbo+BPSK、turbo+GMSK研究(Matlab代码实现)
|
8天前
|
机器学习/深度学习 编解码 并行计算
【改进引导滤波器】各向异性引导滤波器,利用加权平均来实现最大扩散,同时保持图像中的强边缘,实现强各向异性滤波,同时保持原始引导滤波器的低低计算成本(Matlab代码实现)
【改进引导滤波器】各向异性引导滤波器,利用加权平均来实现最大扩散,同时保持图像中的强边缘,实现强各向异性滤波,同时保持原始引导滤波器的低低计算成本(Matlab代码实现)

热门文章

最新文章