粒子群算法优化模糊pid
![粒子群算法优化模糊pid](https://img.360docs.net/img38/16ktfhn88z9qb97f2lk8h26p3fcczm2i-81.webp)
![粒子群算法优化模糊pid](https://img.360docs.net/img38/16ktfhn88z9qb97f2lk8h26p3fcczm2i-52.webp)
本文选取常见的二阶惯性加纯滞后环节,传递函数为:
在这里,T i =1,,T 2 = 2, . =0.3 PID 参数取为 K p = 2,心=1,0=2
本设计中的模糊控制器采用两输入(e, ec ),三输出(P,I,D )的形式来调整 PID 参数。e 的论域为[-3,3] ,ec 的论域为[-3,3]。推理机使用 {NB,NM,NS,O,PS, PM,PB },表示{负大,负中,负小,零,正小,正中,正大} 为了可以调节尽可能多的系统,此控制器选定在负边界处和正边界处分别选用平 滑连续的Z 型隶属度函数和S 型隶属度函数,在中间部分采用灵敏度较强的三角 形隶属度函数。规则表如下图所示:
(1 )主程序: clear clc %%参数设置 w = 0.6; % 惯性因子
c1 = 1.414; % 加速常数 c2 = 1.623; % 加速常数 Dim = 5;
%
维数 SwarmSize = 100; %
粒子群规模
ObjF un = @PS0_PID; %待优化函数句柄 MaxIter = 100; % 最大迭代次数 MinF it = 0.01; % 最小适应值
Vmax = 2; Vmin =-2;
Ub = [20 50 1 1 1]; Lb = [0 0 0 0 0]; %%粒子群初始化
Ra nge = on es(SwarmSize,1)*(Ub-Lb);
Swarm = ran d(SwarmSize,Dim).*Ra nge + on es(SwarmSize,1)*Lb; % 群
G s
e-或 (T i s 1)(T 2S 1)
初始化粒子
VStep = rand(SwarmSize,Dim)*(Vmax-Vmin) + Vmin; fSwarm = zeros(SwarmSize,1); for i=1:SwarmSize
fSwarm(i,:) = feval(ObjFun,Swarm(i,:)); % 应值 end %%个体极值和群体极值 [bestf,bestindex]=min(fSwarm); zbest=Swarm(bestindex,:); % 全局最佳 gbest=Swarm; % 个体最佳 fgbest=fSwarm; % 个体最佳适应值 fzbest=bestf;
%
全局最佳适应值
%%迭代寻优
iter = 0;
y_fitness = zeros(1
,MaxIter); % 预先产生 4 个空矩阵
K_p = zeros(1,MaxIter); K_i = zeros(1,MaxIter); K_d = zeros(1,MaxIter); e= zeros(1,MaxIter); ec = zeros(1,MaxIter);
while( (iter < MaxIter) && (fzbest > 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(j,k)>Ub(k), Swarm(j,k)=Ub(k); end if Swarm(j,k) % 适应值 fSwarm(j,:) = feval(ObjFun,Swarm(j,:)); % 个体最优更新 if fSwarm(j) < fgbest(j) gbest(j,:) = Swarm(j,:); fgbest(j) = fSwarm(j); end % 群体最优更新 if fSwarm(j) < fzbest zbest = Swarm(j,:); fzbest = fSwarm(j); 初始化速度 粒子群的适