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_posAlpha_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))]);endBestFitness = 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代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。