1 简介
PID 控制算法是根据输入和输出的偏差值构成控制偏差量,经过比例积分微分运算输出控制量作用于执行机构。由于其具有原理简单且易于实现等优点,因而在变量喷药领域得到广泛的应用。但是,传统的 PID 控制算法参数( Kp,Ki,Kd ) 整定复杂,且对于非线性系统适应性差,进而影响变量喷药系统的稳定性和控制精度。基于以上问题,将灰狼优化算法与 PID 控制结合,构建灰狼优化 PID 控制算法( GWO-PID) ,应用于变量喷药控制,对 PID 参数进行自适应调整,保证系统工作在较好状态下,达到满意的控制效果。GWO-PID 算法的流程如图 5 所示.
2 部分代码
function [BestFitness, gbest, zz] = GWO(N, maxgen, X, fitness, lb, ub, dim, fobj)
%%
[bestfitness, bestindex] = sort(fitness);
gbest = X(bestindex(1), :); % 群体最优极值
fitnessgbest = bestfitness(1); % 种群最优适应度值
% 初始化alpha, beta和delta_pos
Alpha_pos = gbest;
Alpha_score = fitnessgbest;
Beta_pos = X(bestindex(2), :);
Beta_score = bestfitness(2);
Delta_pos = X(bestindex(3), :);
Delta_score = bestfitness(3);
%% 初始结果显示
disp(['初始位置:', num2str(gbest)]);
disp(['初始解:', num2str(fitnessgbest)]);
%% 迭代
for gen = 1:maxgen
% a = aini-(aini-afin)*exp(gen/maxgen-1); % a从2线性减小到0
% a = ainitial/(1+exp(mu*gen/maxgen-k));
a=2-gen*(2/maxgen); % a从2线性减小到0
% 更新包括omegas在内的种群的位置
for i = 1:N
S = X(i, :);
for j = 1:dim
r1 = rand(); % r1是[0,1]中的随机数
r2 = rand(); % r2是[0,1]中的随机数
A1 = 2*a*r1-a; % 公式(4)
C1 = 2*r2; % 公式(5)
D_alpha = abs(C1*Alpha_pos(j)-X(i, j)); % 公式(6)-第一部分
X1 = Alpha_pos(j)-A1*D_alpha; % 公式 (7)-第一部分
r1 = rand();
r2 = rand();
A2 = 2*a*r1-a; % 公式(4)
C2 = 2*r2; % 公式(5)
D_beta = abs(C2*Beta_pos(j)-X(i, j)); % 公式(6)-第二部分
X2 = Beta_pos(j)-A2*D_beta; % 公式 (7)-第二部分
r1 = rand();
r2 = rand();
A3 = 2*a*r1-a; % 公式 (4)
C3 = 2*r2; % 公式 (5)
D_delta = abs(C3*Delta_pos(j)-X(i, j)); % 公式(6)-第三部分
X3 = Delta_pos(j)-A3*D_delta; % 公式 (7)-第三部分
X(i, j)=(X1+X2+X3)/3; % 公式 (8)
end
% 边界处理
X(i, X(i, :) > ub) = ub;
X(i, X(i, :) < lb) = lb;
% 判断
fit = fobj(X(i, :));
if fit < fitness(i)
fitness(i) = fit;
else
X(i, :) = S;
end
end
% 更新
[bestfitness, bestindex] = sort(fitness);
gbest = X(bestindex(1), :); % 群体最优极值
fitnessgbest = bestfitness(1); % 种群最优适应度值
% 初始化alpha, beta和delta_pos
Alpha_pos = gbest;
Alpha_score = fitnessgbest;
Beta_pos = X(bestindex(2), :);
Beta_score = bestfitness(2);
Delta_pos = X(bestindex(3), :);
Delta_score = bestfitness(3);
%% 每一代群体最优值存入zz数组
zz(gen) = Alpha_score;
gbest = Alpha_pos;
%% 显示每代优化结果
display(['At iteration ', num2str(gen), ' the best fitness is ', num2str(zz(gen))]);
end
BestFitness = zz(end);
%% 最终结果显示
disp(['最优位置:', num2str(gbest)]);
disp(['最优解:', num2str(zz(end))]);
% %% 绘图
% figure;
% plot(zz, 'r', 'lineWidth', 2); % 画出迭代图
% xlabel('迭代次数', 'fontsize', 12);
% ylabel('目标函数值', 'fontsize', 12);
3 仿真结果
4 参考文献
[1]王新东, 徐艳蕾, 张奇,等. 基于灰狼优化PID控制的变量喷药系统研究[J]. 农机化研究, 2020(5):6.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。