|
clc
clear
close all
E=0.000001;
maxnum=800;%最大迭代次數(shù)
narvs=2;%目標(biāo)函數(shù)的自變量個(gè)數(shù)
particlesize=50;%粒子群規(guī)模
c1=2;%每個(gè)粒子的個(gè)體學(xué)習(xí)因子,加速度常數(shù)
c2=2;%每個(gè)粒子的社會(huì)學(xué)習(xí)因子,加速度常數(shù)
w=0.6;%慣性因子
vmax=5;%粒子的最大飛翔速度
v=2*rand(particlesize,narvs);%粒子飛翔速度
x=-300+600*rand(particlesize,narvs);%粒子所在位置
%定義適應(yīng)度函數(shù)
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)
|
|