Re: [問題] 粒子群求解已回收
※ 引述《umi1008 (賤兔)》之銘言:
: 註備:
: 題目的意思就是解X^2+3*X+8=0的題目
: 解出來的X解為-1.5士2.4i
: 但是我的程式都會亂跳...
: 請大大幫幫忙QQ
: 謝謝您
稍微看了一下
感覺你是把你想求的東西硬塞到 PSO 範例程式吧
你的問題只是數值沒有向量化而已
這類的演算法建議將適應函數另外寫一個 function 存成 mfile
這你可以慢慢研究
我只針對你的程式修改
我把修改的部分標成亮黃色
至於如何修改的比較精簡,就由你慢慢摸索了
clc
clear
%--------The settings of PSO parameter-------
pop_n=50; Dimen=2;
Xmin=-10*ones(1,Dimen);
Xmax=10*ones(1,Dimen);
iter=0; itermax=300;
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=0.05*Xmax;
for i=1:pop_n
X(i,:)=(Xmax-Xmin).*rand(1,Dimen)+Xmin;
c(i)=X(i,1)+X(i,2)*j;
e(i)=(c(i)).^2+3*(c(i))+8;
% E(i)=abs(e(i));
pbest(i)=abs(e(i));
V(i,:)=2*Vmax.*rand(1,Dimen)+Vmax;
end
Pbest=X;
[gbest,g]=min(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,:);
c(i)=X(i,1)+X(i,2)*j;
e(i)=(c(i)).^2+3*(c(i))+8;
Fit(i)=abs(e(i));
if Fit(i)<pbest(i)
pbest(i)=Fit(i);
Pbest(i,:)=X(i,:);
end
end
[New_gbest,New_g]=min(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)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.173.134.45
※ 編輯: s80773 來自: 218.173.134.45 (03/15 23:08)
推
03/16 10:04, , 1F
03/16 10:04, 1F
討論串 (同標題文章)