clear all;
clc
wmin=0.4;
wmax=0.9;
w=0.4;
c1=2.0;
c2=2.0;
NP =5;
itermax = 25;
x=unifrnd(1,5,NP,1);
y=unifrnd(2,4,NP,1);
initp=[x,y]
v1=unifrnd(-0.5,0.5,NP,1);
v2=unifrnd(-0.4,0.4,NP,1);
initv=[v1,v2];
m=unifrnd(0,1);
n=unifrnd(0,1);
j=1;
for i=1:NP
z(i,j)=(x(i,j)*x(i,j))+(3*y(i,j))+(100*(x(i,j)+y(i,j)-5)*(x(i,j)+y(i,j)-5));
end
% z
fprintf('\n\nz = %5.4f\n',z);
pbest=initp;
minval=min(z);
[a b]=min(z);
gbest = [x(b);y(b)]'; %Take the values corresponding to minimum value of z
for i=1:NP
for j=1:2
newvelo(i,j)=(w*initv(i,j))+(c1*m*(pbest(i,j)-initp(i,j)))+(c2*n*(gbest(1,j)-initp(i,j)));
end
end
newvelo;
for j=1
for i=1:NP
if newvelo(i,j)>0.5 %check for any velocity violation
newvelo(i,j)=0.5;
elseif newvelo(i,j)<-0.5 %check for any velocity violation
newvelo(i,j)=-0.5;
end
end
end
for j=2
for i=1:NP
if newvelo(i,j)>0.4 %check for any velocity violation
newvelo(i,j)=0.4;
elseif newvelo(i,j)<-0.4 %check for any velocity violation
newvelo(i,j)=-0.4;
end
end
end
newvelo;
for i=1:NP
for j=1:2
newposi(i,j)=initp(i,j)+newvelo(i,j);
end
end
newposi;
for j =1:1
for i = 1:NP
if newposi(i,j)>5
newposi(i,j)=5;
elseif newposi(i,j)<1;
newposi(i,j)=1;
end
end
end
for j =1:2
for i = 1:NP
if newposi(i,j)>4
newposi(i,j)=4;
elseif newposi(i,j)<2;
newposi(i,j)=2;
end
end
end
for iter = 1:itermax
for i=1:NP
newz(i,1)=(newposi(i,1)*newposi(i,1))+(3*newposi(i,2))+(100*(newposi(i,1)+newposi(i,2)-5)*(newposi(i,1)+newposi(i,2)-5));
end
newz;
for i =1:NP
for j=1:2
if newz(i)<z(i)
newz(i)=newz(i);
pbest(i,j)=newposi(i,j);
else
newz(i)=z(i);
pbest(i,j)=pbest(i,j);
end
end
end
newz;
pbest;
newminval = min(newz);
[a b] = min(newz);
newgbest = [pbest(b,1);pbest(b,2)]';
if newminval<minval
gbest=newgbest;
else
gbest=gbest;
end
gbest;
for i=1:NP
for j=1:2
newvelo(i,j)=(w*newvelo(i,j))+(c1*m*(pbest(i,j)-newposi(i,j)))+(c2*n*(gbest(1,j)-newposi(i,j)));
end
end
newvelo;
for j=1
for i=1:NP
if newvelo(i,j)>0.5 %check for any velocity violation
newvelo(i,j)=0.5;
elseif newvelo(i,j)<-0.5 %check for any velocity violation
newvelo(i,j)=-0.5;
end
end
end
for j=2
for i=1:NP
if newvelo(i,j)>0.4 %check for any velocity violation
newvelo(i,j)=0.4;
elseif newvelo(i,j)<-0.4 %check for any velocity violation
newvelo(i,j)=-0.4;
end
end
end
newvelo;
for i=1:NP
for j=1:2
newposi(i,j)=newposi(i,j)+newvelo(i,j);
end
end
newposi;
for j =1:1
for i = 1:NP
if newposi(i,j)>5
newposi(i,j)=5;
elseif newposi(i,j)<1;
newposi(i,j)=1;
end
end
end
for j =1:2
for i = 1:NP
if newposi(i,j)>4
newposi(i,j)=4;
elseif newposi(i,j)<2;
newposi(i,j)=2;
end
end
end
newposi;
%w=(wmax-((wmax-wmin)/itermax))*iter;
end
newposi
PSO.rar_PSO_simple_simple pso_simple pso matlab
版权申诉
103 浏览量
2022-09-24
06:52:07
上传
评论
收藏 828B RAR 举报
![avatar](https://profile-avatar.csdnimg.cn/3b38fb294f114a0a8dfd7bc633aed231_weixin_42660494.jpg!1)
alvarocfc
- 粉丝: 112
- 资源: 1万+