資源簡(jiǎn)介
PSO算法是從這種生物種群行為特征中得到啟發(fā)并用于求解優(yōu)化問題的,算法中每個(gè)粒子都代表問題的一個(gè)潛在解,每個(gè)粒子對(duì)應(yīng)一個(gè)由適應(yīng)度函數(shù)決定的適應(yīng)度值。粒子的速度決定了粒子移動(dòng)的方向和距離,速度隨自身及其他粒子的移動(dòng)經(jīng)驗(yàn)進(jìn)行動(dòng)態(tài)調(diào)整,從而實(shí)現(xiàn)個(gè)體在可解空間中的尋優(yōu)。

代碼片段和文件信息
%%清空環(huán)境
clear
clc
%%參數(shù)設(shè)計(jì)
w?=?0.6;
c1?=?2;
c2?=?2;
Dim?=?3;??????????????????????%維數(shù)
SwarmSize?=?100;??????????????%粒子群規(guī)模
ObjFun?=?@PSO_PID;?????????????%待優(yōu)化函數(shù)句柄
MaxIter?=?100;????????????????%最大迭代次數(shù)
MinFit?=?0.1;?????????????????%最小迭代次數(shù)
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(ObjFun?Swarm(i:));??????%粒子群的適應(yīng)值計(jì)算
end
%%個(gè)體極值和群體極值
[bestf?bestindex]?=?min(fSwarm);
zbest?=?Swarm(bestindex:);?????????????%全局最佳
gbest?=?Swarm;??????????????????????????%個(gè)體最佳
fgbest?=?fSwarm;????????????????????????%個(gè)體最佳適應(yīng)值
fzbest?=?bestf;?????????????????????????%全局最佳適應(yīng)值
%%迭代尋優(yōu)
iter?=?0;
y_fitness?=?zeros(1MaxIter);???????????%預(yù)先產(chǎn)生4個(gè)空矩陣
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
????????%適應(yīng)值
????????fSwarm(j:)?=?feval(ObjFunSwarm(j:));
????????%個(gè)體最優(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;???????????????????????%為繪圖做準(zhǔn)備
????K_p(1iter)?=?zbest(1);
????K_i(1iter)?=?zbest(2);
????K_d(1iter)?=?zbest(3);
end
%%繪圖輸出
figure(1)??????????????????????????????????????????????%繪制性能指標(biāo)ITAE的變化曲線
plot(y_fitness‘LineWidth‘2)
title(‘最優(yōu)個(gè)體適應(yīng)值‘‘fontsize‘18);
xlabel(‘迭代次數(shù)‘‘fontsize‘18);ylabel(‘適應(yīng)值‘‘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‘);
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????360??2018-11-22?16:27??PSO_PID.m
?????文件??????21795??2018-11-22?20:16??PID_Model.slx
?????文件???????2773??2018-11-22?19:51??pso.m
-----------?---------??----------?-----??----
????????????????24928????????????????????3
評(píng)論
共有 條評(píng)論