Re: [問題] 粒子群求解已回收

看板MATLAB作者 (GaWii)時間16年前 (2010/03/15 23:05), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串3/3 (看更多)
※ 引述《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
超感謝!!我會繼續努力專研它的Q.Q
03/16 10:04, 1F
文章代碼(AID): #1Bdaox6_ (MATLAB)
文章代碼(AID): #1Bdaox6_ (MATLAB)