1 简介
PID控制器的参数整定表现为在3个参数空间中寻求最优值,使得系统的控制性能达到最优。麻雀算法是一种新兴的群智能优化算法。为加强PID控制器的参数整定,基于麻雀算法,提出一种PID控制器参数自整定方法,实现PID控制器的参数寻优。
2 部分代码
function [fMin , bestX, Convergence_curve] = SSA(X, N, M, c, d, dim, fobj)P_percent = 0.2; % 发现者的种群规模占总种群规模的百分比pNum = round(N*P_percent); % 发现者数量20%SD = pNum/2; % 警戒者数量10%ST = 0.8; % 安全阈值lb = c.*ones(1, dim); % 下限ub = d.*ones(1,dim); % 上限% 初始化for i = 1:N% X(i, :) = lb + (ub - lb) .* rand(1, dim);fitness(i) = fobj(X(i, :));endpFit = fitness;pX = X; % 与pFit相对应的个体最佳位置[fMin, bestI] = min(fitness); % fMin表示全局最优解bestX = X(bestI, :); % bestX表示全局最优位置%% 迭代寻优for t = 1 : M[~, sortIndex] = sort(pFit); % 排序[fmax, B] = max(pFit);worst = X(B, :);%% 发现者位置更新r2 = rand(1);if r2 < STfor i = 1:pNum % Equation (3)r1 = rand(1);X(sortIndex(i), :) = pX(sortIndex(i), :)*exp(-(i)/(r1*M));X(sortIndex(i), :) = Bounds(X(sortIndex(i), :), lb, ub);fitness(sortIndex(i)) = fobj(X(sortIndex(i), :));endelsefor i = 1:pNumX(sortIndex(i), :) = pX(sortIndex(i), :)+randn(1)*ones(1, dim);X(sortIndex(i), :) = Bounds(X(sortIndex(i), :), lb, ub);fitness(sortIndex(i)) = fobj(X(sortIndex(i), :));endend[~, bestII] = min(fitness);bestXX = X(bestII, :);%% 跟随者位置更新for i = (pNum+1):N % Equation (4)A = floor(rand(1, dim)*2)*2-1;if i > N/2X(sortIndex(i), :) = randn(1)*exp((worst-pX(sortIndex(i), :))/(i)^2);elseX(sortIndex(i), :) = bestXX+(abs((pX(sortIndex(i), :)-bestXX)))*(A'*(A*A')^(-1))*ones(1, dim);endX(sortIndex(i), :) = Bounds(X(sortIndex(i), :), lb, ub);fitness(sortIndex(i)) = fobj(X(sortIndex(i), :));end%% 警戒者位置更新c = randperm(numel(sortIndex));b = sortIndex(c(1:SD));for j = 1:length(b) % Equation (5)if pFit(sortIndex(b(j))) > fMinX(sortIndex(b(j)), :) = bestX+(randn(1, dim)).*(abs((pX(sortIndex(b(j)), :) -bestX)));elseX(sortIndex(b(j)), :) = pX(sortIndex(b(j)), :)+(2*rand(1)-1)*(abs(pX(sortIndex(b(j)), :)-worst))/(pFit(sortIndex(b(j)))-fmax+1e-50);endX(sortIndex(b(j)), :) = Bounds(X(sortIndex(b(j)), :), lb, ub);fitness(sortIndex(b(j))) = fobj(X(sortIndex(b(j)), :));endfor i = 1:N% 更新个体最优if fitness(i) < pFit(i)pFit(i) = fitness(i);pX(i, :) = X(i, :);end% 更新全局最优if pFit(i) < fMinfMin = pFit(i);bestX = pX(i, :);endendConvergence_curve(t) = fMin;disp(['SSA: At iteration ', num2str(t), ' ,the best fitness is ', num2str(fMin)]);end%% 边界处理function s = Bounds(s, Lb, Ub)% 下界temp = s;I = temp < Lb;temp(I) = Lb(I);% 上界J = temp > Ub;temp(J) = Ub(J);% 更新s = temp;
3 仿真结果


4 参考文献
[1]何学明, 苗燕楠, 罗再磊. 基于教与学优化算法的PID控制器参数寻优[J]. 计算机工程, 2015, 41(008):313-316.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。
本文介绍了一种基于麻雀算法的PID控制器参数自整定方法,通过将群智能技术应用于PID控制系统的参数搜索,实现了控制性能的优化。作者分享了使用SSA算法的具体代码实现过程,并展示了通过仿真得到的优化效果,对比了传统方法,突显了新兴算法在控制领域的优势。
644

被折叠的 条评论
为什么被折叠?



