;
=x(i,
;* L# x. z) c& W
;$ o5 x, I: R6 V0 D
=w*v(i,
+c1*rand*(personalbest_x(i,
-x(i,
)... W3 n8 o4 V7 _$ X2 L; d2 Q, A
);! \6 n) [ v% z4 V& n
=x(i,
+v(i,
;8 I* I# V4 V* A+ k* v! U( |( a
; 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 |