function y=PSO1(xmin,xmax,N,D,N_MAX,P,T,net)%N为种群数量,D为维数
c1=2;
c2=2;
w=0.8;
vmax=0.5*(xmax-xmin);
for j=1:D
x(:,j)=unifrnd(xmin,xmax,1,N);
v(:,j)=unifrnd(-vmax,vmax,1,N);
end
for i=1:N
f(i)=fitness(x(i,:),P,T,net);
end
pfbest=f;
pxbest=x;
[glbest,i]=min(f);
gxbest=pxbest(i,:);
for t=1:N_MAX
for i=1:N
v(i,:)=w*v(i,:)+c1*rand*(pxbest(i,:)-x(i,:))+c2*rand*(gxbest-x(i,:));
x(i,:)=x(i,:)+v(i,:);
for j=1:D
if v(:,j)>vmax
v(:,j)=vmax;
elseif v(:,j)<-vmax
v(:,j)=-vmax;
end
if x(:,j)>xmax
x(:,j)=xmax;
elseif x(:,j)<xmin
x(:,j)=xmin;
end
end
f(i)=fitness(x(i,:),P,T,net);
if f(i)<pfbest(i)
pfbest(i)=f(i);
pxbest(i,:)=x(i,:);
end
if min(f)<glbest
[glbest,i]=min(f);
gxbest=pxbest(i,:);
end
end
end
y=gxbest;
end
评论0