粒子群算法优化模糊pid

粒子群算法优化模糊pid
粒子群算法优化模糊pid

本文选取常见的二阶惯性加纯滞后环节,传递函数为:

在这里,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);

初始化速度

粒子群的适

相关主题
相关文档
最新文档