Re: [問題] 粒子群演算法解測試函數已回收
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
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章