粒子群算法( Particle Swarm Optimization, PSO)在应用的过程中主要调整权重,学习因子,才能对解决的问题有所针对性。下面有6种调整权重和学习因子:
一、调整粒子群算法的权重
1.线性递减权重
2.自适应调整权重
3.随机权重
二、调整粒子群算法的学习因子
1.收缩因子
2.同步学习因子
3.异步学习因子
目标函数如下:
function y=A11_01(x)
y=x(1)^2+x(2)^2-x(1)*x(2)-10*x(1)-4*x(2)+60;
一、调整粒子群算法的权重
1.线性递减权重
Shi.Y认为较大的权重惯性有利于全局搜索,较小的权重有利于局部搜索,他提出的线性递减权重刚好满足这样的需求。
一般而言,k为当前迭代次数,T为最大迭代次数。
%粒子群 PSO 线性递减权重
clear
clc
%%预设参数
n=100;
d=2; %变量个数
c1=2;
c2=2;
w=0.9;
K=100;
ws=0.9;
we=0.4;
%%分布粒子
x=-10+20*rand(n,d);
v=-5+10*rand(n,d);
%%计算适应度
fit=zeros(n,1);
for j=1:n
fit(j)=A11_01(x(j,:));
end
%计算个体极值
pbest=x;
ind=find(min(fit)==fit);
gbest=x(ind,:);
%%更新速度与位置
for i=1:K
for m=1:n
v(m,:)=w*v(m,:) + c1*rand*(pbest(m,:)-x(m,:)) + c2*rand*(gbest-x(m,:));
w=ws-(ws-we)*(i/K);
v(m,find(v(m,:)<-10))=-10;
v(m,find(v(m,:)>10))=10;
x(m,:)=x(m,:)+0.5*v(m,:);
x(m,find(x(m,:)<-10))=-10;
x(m,find(x(m,:)>10))=10;
%重新计算适应度
fit(m)=A11_01(x(m,:));
if x(m,:)<A11_01(pbest(m,:))
pbest(m,:)=x(m,:);
end
if A11_01(pbest(m,:))<A11_01(gbest)
gbest=pbest(m,:);
end
end
fitnessbest(i)=A11_01(gbest);
end
plot(fitnessbest);
xlabel('迭代次数');
ylabel('适应度值');
title('迭代优化过程');