clc
clear
close all
E=0.000001;
maxnum=800;%最大迭代次數
narvs=2;%目標函數的自變量個數
particlesize=50;%粒子群規模
c1=2;%每個粒子的個體學習因子,加速度常數
c2=2;%每個粒子的社會學習因子,加速度常數
w=0.6;%慣性因子
vmax=5;%粒子的最大飛翔速度
v=2*rand(particlesize,narvs);%粒子飛翔速度
x=-300+600*rand(particlesize,narvs);%粒子所在位置
%定義適應度函數
fitness=inline('(x(1)^2+x(2)^2)/10000','x');
for i=1:particlesize
f(i)=fitness(x(i,:));
end
personalbest_x=x;
personalbest_faval=f;
[globalbest_faval,i]=min(personalbest_faval);
globalbest_x=personalbest_x(i,:);
k=1;
while (k<=maxnum)
for i=1:particlesize
f(i)=fitness(x(i,:));
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;
elseif v(i,j)<-vmax
v(i,j)=-vmax;
end
end
x(i,:)=x(i,:)+v(i,:);
end
ff(k)=globalbest_faval;
if globalbest_faval<E
break
end
k=k+1;
end
xbest=globalbest_x;
plot(1:length(ff),ff)
|