Re: [問題] 粒子群演算法解測試函數已回收

看板MATLAB作者 (畜牲)時間16年前 (2009/04/22 21:52), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
C1:粒子認知性 C2:粒子社會性 W:慣性權重 pop_n:粒子群數目 itermax:最大疊代次數 Dimen: 搜索空間維度 function PSO clc clear %--------The settings of PSO parameter------- pop_n=40; Dimen=2; Xmin=-10*ones(1,Dimen); Xmax=10*ones(1,Dimen); iter=0; itermax=20; C1=2; C2=2; Wi=0.9; Wf=0.4; %--------Particle Swarm initialization------- X=zeros(pop_n,Dimen); pbest=zeros(1,pop_n); V=zeros(pop_n,Dimen); Fit=zeros(1,pop_n); Vmax=(Xmax-Xmin)/2; for i=1:pop_n X(i,:)=(Xmax-Xmin).*rand(1,Dimen)+Xmin; pbest(i)=Objectfun(X(i,:)); V(i,:)=-2*Vmax.*rand(1,Dimen)+Vmax; end Pbest=X; [gbest,g]=max(pbest); Gbest=X(g,:); while(1) W=Wi+(Wf-Wi)*iter/itermax; for i=1:pop_n V(i,:)=W*V(i,:)+C1*rand(1,Dimen).*(Pbest(i,:)-X(i,:))... +C2*rand(1,Dimen).*(Gbest-X(i,:)); V(i,:)=(abs(V(i,:))>Vmax).*sign(V(i,:)).*Vmax... +(abs(V(i,:))<=Vmax).*V(i,:); X(i,:)=V(i,:)+X(i,:); X(i,:)=(X(i,:)>Xmax).*Xmax+(X(i,:)<=Xmax).*X(i,:); X(i,:)=(X(i,:)<Xmin).*Xmin+(X(i,:)>=Xmin).*X(i,:); Fit(i)=Objectfun(X(i,:)); if Fit(i)>pbest(i) pbest(i)=Fit(i); Pbest(i,:)=X(i,:); end end [New_gbest,New_g]=max(pbest); if New_gbest>gbest gbest=New_gbest; g=New_g; Gbest=X(g,:); end if iter>=itermax,break,end iter=iter+1; end disp(Gbest) Objectfun(Gbest) function y=Objectfun(X) y=sin(2*X(1)+2*X(2))/(1+0.005*(X(1)^2+X(2)^2)); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.136.234.16
文章代碼(AID): #19xo41A4 (MATLAB)
文章代碼(AID): #19xo41A4 (MATLAB)