www.gusucode.com > PSO粒子群算法简单应用源码程序 > PSO粒子群算法简单应用源码程序/code/pso.m
function vmfit=pso(data,number) wmax=0.9; wmin=0; itmax=number; c1=2; c2=2; for iter=1:itmax W(iter)=wmax-((wmax-wmin)/itmax)*iter; end; a=-1; b=2; N=number; D=2; m=0.1; n=3; tcl=0.05; f='data'; [x,y]=meshgrid(a:tcl:b,a:tcl:b); vxp=x; vyp=y; vzp=eval(f); x=[]; vmfit=[]; x=a+(b-a)*rand(N,D,1); V=wmin+(wmax-wmin)*rand(N,D,1); for i=1:N F(i,1,1)=x(i,1,1)*sin(4*pi*x(i,1,1))-x(i,2,1)*sin(4*pi*x(i,2,1)+pi+1); end; media=mean(F(:,1,1)); vmfit=[vmfit media]; [C,I]=max(abs(F(:,1,1))); B(1,1,1)=C; gbest(1,1,1)=x(I,1,1); gbest(1,2,1)=x(I,1,1); for p=1:N for r=1:D G(p,r,1)=gbest(1,r,1); end end Fbest(1,1,1)=G(1,1,1)*sin(4*pi.*G(1,1,1))-G(1,2,1)*sin(4*pi.*G(1,2,1)+pi+1); for i=1:N pbest(i,:,1)=x(i,:,1); pbest; end Fb(1,1,1)=gbest(1,1,1)*sin(4*pi.*gbest(1,1,1))-gbest(1,2,1)*sin(4*pi.*gbest(1,2,1)+pi+1); for j=2:itmax V(:,:,j)=W(j-1)*V(:,:,j-1)+c1*rand*(pbest(:,:,j-1)-x(:,:,j-1))+c2*rand*(G(:,:,j-1)-x(:,:,j-1)); x(:,:,j)=x(:,:,j-1)+V(:,:,j); for xx=1:N for yy=1:D if x(xx,yy,j)<a x(xx,yy,j)=a; end; if x(xx,yy,j)>b x(xx,yy,j)=b; end; end; end; for i=1:N F(i,1,j)=x(i,1,j)*sin(4*pi.*x(i,1,j))-x(i,2,j)*sin(4*pi.*x(i,2,j)+pi+1); end; media=mean(F(:,1,j)); vmfit=[vmfit media]; [C,I]=max(abs(F(:,:,j))); B(1,1,j)=C; gbest(1,1,j)=x(I,1,j); gbest(1,2,j)=x(I,2,j); Fb(1,1,j)=gbest(1,1,j)*sin(4*pi.*gbest(1,1,j))-gbest(1,2,j)*sin(4*pi.*gbest(1,2,j)+pi+1); [C,I]=max(Fb(1,1,:)); if C>Fb(1,1,j) gbest(1,1,j)=gbest(1,1,I); gbest(1,2,j)=gbest(1,2,I); end; for p=1:N for r=1:D G(p,r,j)=gbest(1,r,j); end; end; Fbest(1,1,j)=G(1,1,j)*sin(4*pi.*G(1,1,j))-G(1,2,j)*sin(4*pi.*G(1,2,j)+pi+1); for i=1:N [C,I]=max(F(i,1,:)); if F(i,1,j)>=C pbest(i,:,j)=x(i,:,j); else pbest(i,:,j)=x(i,:,I); end; end; end gbest(1,:,itmax); Fbest(1,1,itmax);