;
=x(i,
;) y0 r. i" I4 E; C
;
=w*v(i,
+c1*rand*(personalbest_x(i,
-x(i,
)...9 \ n' ~+ g9 F' U+ }0 I
);% O* j+ F* X- _$ U
=x(i,
+v(i,
;( ~0 @2 v! z( Y# p2 s7 h# g( j
; k=1; while k<=MaxNum for i=1:particlesize for j=1:narvs; f(i)=fitness(x(i,j)); end if f(i)<personalbest_faval(i) %判断当前位置是否历史上最佳位置 personalbest_faval(i)=f(i); personalbest_x(i,
=x(i,
; end end [globalbest_faval i]=min(personalbest_faval); globalbest_x=personalbest_x(i,
; for i=1:particlesize %更新粒子群里每个个体的最新位置 v(i,
=w*v(i,
+c1*rand*(personalbest_x(i,
-x(i,
)... +c2*rand*(globalbest_x-x(i,
); for j=1:narvs %判断粒子的飞翔速度是否超过了最大飞行速度 if v(i.j)>vmax; v(i,j)=vmax; else if v(i,j)<-vmax; v(i,j)=-vmax; end end x(i,
=x(i,
+v(i,
; end if abs(globalbest_faval)<E0,break,end k=k+1; end Valuel=1/globalbest_faval-1;Valuel=num2str(Valuel); %strcat指令可以实现字符的组合输出 disp(strcat('the maximun valuel','=',Valuel)); %输出最大值所在的横坐标位置 Value2=globalbest_x; Value2=num2str(Value2); disp(strcat('the corresponding coordinate','=',Value2)); x=-5:0.01:5; y=2.1*(1-x+2*x.^2).*exp(-x.^2/2); plot(x,y,'m-','linewidth',3); hold on; plot(globalbest_x,1/globalbest_faval-1,'kp','linewidth',4); legend('目标函数','搜索到的最大值'); xlabel('x');ylabel('y');grid on;toc;
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) | Powered by Discuz! X2.5 |