%% Update swarm
[~, gbest] = min(swarm(:, 4, 1));
% diversity control
for d=1:num_of_D,
swarm_diversity(d) = 0.5*(max(swarm(:, 1, d))-min(swarm(:, 1, d)));
end
for d=1:num_of_D,
if swarm_diversity(d) < diversity_limit,
swarm_dir(d) = -1;
else
swarm_dir(d) = 1;
end
end
% Updating velocity vectors and positions
for n=1:swarm_size
for d = 1 : num_of_D,
rand1=rand;
rand2=rand;
swarm(n, 2, d) = Kappa*(swarm(n, 2, d)...
+ swarm_dir(d)*correction_factor*rand1*(swarm(n, 3, d) - swarm(n, 1, d))...
+ swarm_dir(d)*correction_factor*rand2*(swarm(gbest, 3, d) - swarm(n, 1, d)));
end
for d = 1 : 4,
swarm(n, 2, d)= min(max(-5e-2,swarm(n, 2, d)),5e-2);
if bound(n,d)==1
if ((swarm(n, 1, d) + swarm(n, 2, d))>0)&&((swarm(n, 1, d) + swarm(n, 2, d))<1)
swarm(n, 1, d) = swarm(n, 1, d) + swarm(n, 2, d);
bound(n,d)=0;
else
swarm(n, 1, d) = swarm(n, 1, d) - swarm(n, 2, d);
end
else
swarm(n, 1, d) = swarm(n, 1, d) + swarm(n, 2, d);
if (swarm(n, 1, d)<0)||(swarm(n, 1, d)>1)
bound(n,d)=1;
end
swarm(n, 1, d)= min(max(0,swarm(n, 1, d)),1);
end
end
for d = 5 : 16,
swarm(n, 2, d)= min(max(-5e-2,swarm(n, 2, d)),5e-2);
if bound(n,d)==1
if ((swarm(n, 1, d) + swarm(n, 2, d))>-1)&&((swarm(n, 1, d) + swarm(n, 2, d))<1) %Lvalues
swarm(n, 1, d) = swarm(n, 1, d) + swarm(n, 2, d);
bound(n,d)=0;
else
swarm(n, 1, d) = swarm(n, 1, d) - swarm(n, 2, d);
end
else
swarm(n, 1, d) = swarm(n, 1, d) + swarm(n, 2, d);
if (swarm(n, 1, d)<-1)||(swarm(n, 1, d)>1) %Lvalues
bound(n,d)=1;
end
swarm(n, 1, d)= min(max(-1,swarm(n, 1, d)),1); %Lvalues
end
end
for d = 17 : 20,
swarm(n, 2, d)= min(max(-5e-2,swarm(n, 2, d)),5e-2);
if bound(n,d)==1
if ((swarm(n, 1, d) + swarm(n, 2, d))>-1)&&((swarm(n, 1, d) + swarm(n, 2, d))<0) %Lvalues
swarm(n, 1, d) = swarm(n, 1, d) + swarm(n, 2, d);
bound(n,d)=0;
else
swarm(n, 1, d) = swarm(n, 1, d) - swarm(n, 2, d);
end
else
swarm(n, 1, d) = swarm(n, 1, d) + swarm(n, 2, d);
if (swarm(n, 1, d)<-1)||(swarm(n, 1, d)>0) %Lvalues
bound(n,d)=1;
end
swarm(n, 1, d)= min(max(-1,swarm(n, 1, d)),0); %Lvalues
end
end
for d = 21 : 24,
swarm(n, 2, d)= min(max(-5e-2,swarm(n, 2, d)),5e-2);
if bound(n,d)==1
if ((swarm(n, 1, d) + swarm(n, 2, d))>0)&&((swarm(n, 1, d) + swarm(n, 2, d))<1) %Lvalues
swarm(n, 1, d) = swarm(n, 1, d) + swarm(n, 2, d);
bound(n,d)=0;
else
swarm(n, 1, d) = swarm(n, 1, d) - swarm(n, 2, d);
end
else
swarm(n, 1, d) = swarm(n, 1, d) + swarm(n, 2, d);
if (swarm(n, 1, d)<0)||(swarm(n, 1, d)>1) %Lvalues
bound(n,d)=1;
end
swarm(n, 1, d)= min(max(0,swarm(n, 1, d)),1); %Lvalues
end
end
end
matlab-燃料电池能量管理策略,采用模糊控制、粒子群优化 使得电动车能量在锂离子电池和超级电
版权申诉
5星 · 超过95%的资源 26 浏览量
2023-03-07
01:01:19
上传
评论 2
收藏 209KB ZIP 举报
wouderw
- 粉丝: 276
- 资源: 2959