資源簡介
用天牛須算法優化PID參數,壓縮包里有兩文件,一個是Simulink畫的PID,一個是天牛須算法,這里對天牛須進行了一點改進,用的是群體天牛須.里面傳函我設置的比較簡單,可以用復雜的傳函跑一跑

代碼片段和文件信息
clear?all
close?all
clc
Dim?=?3;????????????%?維數
SwarmSize?=?10;????%?群規模
MaxIter?=100;??????%?最大迭代次數
MinFit?=?0.1;???????%?最小適應值
d=4;
step=15;
Ub?=?[200?200?200?];
Lb?=?[-100?-100?-100];
%%?初始化
for?i=1:SwarmSize
????pop(i:)=Ub.*rand(1Dim);
?m(i)=?BAS_PID(pop(i:));
%?????m(i)=?BAS_PID(pop(i:));
end
%?%%?個體極值和群體極值
[bestfbestindex]=min(m);
zbest=pop(bestindex:);???%?最佳
fzbest=bestf;???????????????%?全局最佳適應值
iter?=?0;
y_fitness?=?zeros(1MaxIter);???%?預先產生4個空矩陣
K_p1?=?zeros(1MaxIter);
K_i1?=?zeros(1MaxIter);
K_d1?=?zeros(1MaxIter);
%?K_p2?=?zeros(1MaxIter);
%?K_i2?=?zeros(1MaxIter);
%?K_d2?=?zeros(1MaxIter);
for?t=1:MaxIter
????t
????for?i=1:SwarmSize
????????dir=rand(1Dim);
????????b=dir./(norm(dir));
????????xl(i:)=pop(i:)-d.*b;
????????fl(i)=?BAS_PID(xl(i:));
????????xr(i:)=pop(i:)+d.*b;
????????fr(i)=?BAS_PID(xr(i:));
????????pop(i:)=pop(i:)-step.*b.*sign(fr(i)-fl(i));
????????
%?????????for?k=1:Dim
%?????????????if?pop(ik)>Ub(k)?pop(ik)=Ub(k);?end
%?????????????if?pop(ik)
%?????????end
????????mm(i)=?BAS_PID(pop(i:));??????
????end
????[aaabbb]=sort(mm);
????zmm=aaa(1);
????ccc=bbb(1);
????bestxx=pop(ccc:);
????step=step*0.98?+0.1;
????d=0.99*d+0.01;
????if??zmm<=?fzbest
????????fzbest=zmm;
????????zbest=bestxx;
????end
????fzbest
????iter?=?iter+1;??????????????????????%?迭代次數更新
????y_fitness(1iter)?=?fzbest;?????????%?為繪圖做準備
????K_p1(1iter)?=?bestxx(1);
????K_i1(1iter)?=?bestxx(2);
????K_d1(1iter)?=?bestxx(3);??
end
%%?繪圖輸出%%
figure(1)
hold?on
plot(y_fitness‘k-‘‘LineWidth‘1.5)
title(‘The?ITAE?‘‘fontsize‘14);
xlabel(‘iterations?‘‘fontsize‘14);
ylabel(‘ITAE‘‘fontsize‘14);
set(gca‘Fontsize‘14);
figure(2)%?繪制PID控制器參數變化曲線
hold?on
title(‘Kp1?Ki1?Kd2?variation?curve‘‘fontsize‘14);
plot(K_p1‘r‘‘LineWidth‘1.5)
plot(K_d1‘b‘‘LineWidth‘1.5)
plot(K_i1‘k‘‘LineWidth‘1.5)
xlabel(‘iterations‘‘fontsize‘18);
ylabel(‘value‘‘fontsize‘18);
legend(‘Kp1‘‘Ki1‘‘Kd1‘);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2140??2020-06-24?10:13??BAS-PID\BAS.m
?????文件????????174??2019-12-01?13:39??BAS-PID\BAS_PID.m
?????文件??????45797??2020-05-12?16:27??BAS-PID\PID_Model.mdl
?????文件???????4592??2020-06-24?10:17??BAS-PID\PID_Model.slxc
?????文件????????392??2020-06-24?10:17??BAS-PID\slprj\sim\varcache\PID_Model\checksumOfCache.mat
?????文件????????312??2020-06-24?10:17??BAS-PID\slprj\sim\varcache\PID_Model\tmwinternal\simuli
?????文件???????1352??2020-06-24?10:17??BAS-PID\slprj\sim\varcache\PID_Model\varInfo.mat
?????目錄??????????0??2020-06-24?10:17??BAS-PID\slprj\sim\varcache\PID_Model\tmwinternal
?????目錄??????????0??2020-06-24?10:17??BAS-PID\slprj\sim\varcache\PID_Model
?????目錄??????????0??2020-06-24?10:17??BAS-PID\slprj\sim\varcache
?????目錄??????????0??2020-06-24?10:17??BAS-PID\slprj\sim
?????目錄??????????0??2020-06-24?10:17??BAS-PID\slprj
?????目錄??????????0??2020-06-24?10:17??BAS-PID
-----------?---------??----------?-----??----
????????????????54759????????????????????13
- 上一篇:倒立擺MATLAB程序
- 下一篇:灰色預測模型代碼
評論
共有 條評論