資源簡介
本文在介紹PID控制系統(tǒng)參數(shù)的優(yōu)化方面提出了一種新型的優(yōu)化方式,即將粒子群PSO算法引進參數(shù)的優(yōu)化設計中,本文具體做了以下幾個方面的工作:
(1)利用經(jīng)典控制系統(tǒng)原理對PID控制算法的參數(shù)進行初步給定;
(2)采用粒子群算法并且利用SIMULINK的仿真工具對PID參數(shù)進行優(yōu)化,得出系統(tǒng)的響應曲線。
(3)將優(yōu)化后系統(tǒng)的性能與優(yōu)化前系統(tǒng)性能進行比較,得出經(jīng)過PSO優(yōu)化的系統(tǒng)的性能得到提高。

代碼片段和文件信息
%%?清空環(huán)境
clear
clc
%%?參數(shù)設置
w?=?0.6;??????%?慣性因子?
c1?=?2;???????%?加速常數(shù)
c2?=?2;???????%?加速常數(shù)
Dim?=?3;????????????%?維數(shù)
SwarmSize?=?5;????%?粒子群規(guī)模
ObjFun?=?@PSO_PID;??%?待優(yōu)化函數(shù)句柄
MaxIter?=?5;??????%?最大迭代次數(shù)??
MinFit?=?0.1;???????%?最小適應值?
Vmax?=?1;
Vmin?=?-1;
Ub?=?[300?300?300];
Lb?=?[0?0?0];
%%?粒子群初始化
????Range?=?ones(SwarmSize1)*(Ub-Lb);
????Swarm?=?rand(SwarmSizeDim).*Range?+?ones(SwarmSize1)*Lb??????%?初始化粒子群
????VStep?=?rand(SwarmSizeDim)*(Vmax-Vmin)?+?Vmin?????????????????%?初始化速度
????fSwarm?=?zeros(SwarmSize1);
for?i=1:SwarmSize
????fSwarm(i:)?=?feval(ObjFunSwarm(i:));?????????????????????????%?粒子群的適應值
end
%%?個體極值和群體極值
[bestf?bestindex]=min(fSwarm);
zbest=Swarm(bestindex:);???%?全局最佳
gbest=Swarm;????????????????%?個體最佳
fgbest=fSwarm;??????????????%?個體最佳適應值
fzbest=bestf;???????????????%?全局最佳適應值
%%?迭代尋優(yōu)
iter?=?0;
y_fitness?=?zeros(1MaxIter);???%?預先產(chǎn)生4個空矩陣
K_p?=?zeros(1MaxIter);?????????
K_i?=?zeros(1MaxIter);
K_d?=?zeros(1MaxIter);
while(?(iter??MinFit)?)
????for?j=1:SwarmSize
????????%?速度更新
????????VStep(j:)?=?w*VStep(j:)?+?c1*rand*(gbest(j:)?-?Swarm(j:))?+?c2*rand*(zbest?-?Swarm(j:));
????????if?VStep(j:)>Vmax?VStep(j:)=Vmax;?end
????????if?VStep(j:) ????????%?位置更新
????????Swarm(j:)=Swarm(j:)+VStep(j:);
????????for?k=1:Dim
????????????if?Swarm(jk)>Ub(k)?Swarm(jk)=Ub(k);?end
????????????if?Swarm(jk)
????????end
????????%?適應值
????????fSwarm(j:)?=?feval(ObjFunSwarm(j:));
????????%?個體最優(yōu)更新?????
????????if?fSwarm(j)?????????????gbest(j:)?=?Swarm(j:);
????????????fgbest(j)?=?fSwarm(j);
????????end
????????%?群體最優(yōu)更新
????????if?fSwarm(j)?????????????zbest?=?Swarm(j:);
????????????fzbest?=?fSwarm(j);
????????end
????end?
????iter?=?iter+1;??????????????????????%?迭代次數(shù)更新
????y_fitness(1iter)?=?fzbest;?????????%?為繪圖做準備
????K_p(1iter)?=?zbest(1);
????K_i(1iter)?=?zbest(2);
????K_d(1iter)?=?zbest(3);
end
%%?繪圖輸出
figure(1)??????%?繪制性能指標ITAE的變化曲線
plot(y_fitness‘LineWidth‘2)
title(‘最優(yōu)個體適應值‘‘fontsize‘18);
xlabel(‘迭代次數(shù)‘‘fontsize‘18);ylabel(‘適應值‘‘fontsize‘18);
set(gca‘Fontsize‘18);
figure(2)??????%?繪制PID控制器參數(shù)變化曲線
plot(K_p)
hold?on
plot(K_i‘k‘‘LineWidth‘3)
plot(K_d‘--r‘)
title(‘Kp、Ki、Kd?優(yōu)化曲線‘‘fontsize‘18);
xlabel(‘迭代次數(shù)‘‘fontsize‘18);ylabel(‘參數(shù)值‘‘fontsize‘18);
set(gca‘Fontsize‘18);
legend(‘Kp‘‘Ki‘‘Kd‘1);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-04-22?00:10??程序\
?????文件???????29558??2010-08-22?18:38??程序\PID_Model.mdl
?????文件????????2585??2014-11-19?15:29??程序\PSO.m
?????文件?????????174??2010-08-22?18:38??程序\PSO_PID.m
?????文件??????539169??2018-04-22?00:09??基于PSO算法的PID控制器設計與實現(xiàn)論文.docx
- 上一篇:運輸問題西北角法
- 下一篇:MATLAB2019b
評論
共有 條評論