1算法简介
粒子群优化算法,在1995年由Eberhart博士和kennedy博士提出,源于对鸟群捕食的行为研究。该算法最初是受到飞鸟集群活动的规律性启发,进而利用群体智能建立的一个简化模型。算法流程图如下所示。
核心公式( 更新速度和位置):
这里
w
\ w
w称为惯性因子,
C
1
\ C1
C1 和
C
2
\ C2
C2 称为加速常数,一般取
[
0
,
4
]
\ [0,4]
[0,4] 。
P
i
d
\ Pid
Pid 表示第
i
\ i
i 个变量的个体极值的第
d
\ d
d 维。
P
g
d
\ Pgd
Pgd 表示全局最优解的第
d
\ d
d维。
2 算法优缺点
PSO算法是一种随机的、并行的优化算法。
优点 是:不要求被优化函数具有可微、可导、连续等性质,收敛速度较快,算法简单,容易编程实现。
然而,PSO算法的 缺点 在于:
(1)对于有多个局部极值点的函数,容易陷入到局部极值点中,得不到正确的结果。
造成这种现象的原因有两种,其一是由于待优化函数的性质;其二是由于微粒群算法中微粒的多样性迅速消失,造成早熟收敛。这两个因素通常密不可分地纠缠在一起。
(2)由于缺乏精密搜索方法的配合,PSO算法往往不能得到精确的结果。
造成这种问题的原因是PSO算法并没有很充分地利用计算过程中获得的信息,在每一步迭代中,仅仅利用了群体最优和个体最优的信息。
(3)PSO算法虽然提供了全局搜索的可能,但是并不能保证收敛到全局最优点上。
因此,PSO算法一般适用于一类高维的、存在多个局部极值点而并不需要得到很高精度解的优化问题。
3 算法原理伪代码(matlab)
for i=1:N
for j=1:D
x=xmin+rand(N,D)*(xmax-xmin); %随机初始化位置
v=rand(N,D); %随机初始化速度
end
end
%------先计算各个粒子的适应度,并初始化Pi和Pg----------------------
for i=1:N
p(i)=fitness(x(i,:)); %计算初始粒子的适应度值
y(i,:)=x(i,:); %个体极值中的变量值等于粒子的初始值---为了后期进行保存全局最优值
end
pg=x(N,:); %Pg为全局最优值---将初始位置的最后一列元素赋给全局最优值---目的在于保存全局最优值
for i=1:(N-1)
if fitness(x(i,:)) <fitness(pg)
pg=x(i,:); %更新全局最优值,保存最优值
end
end
%------进入主要循环,按照公式依次迭代,直到满足精度要求------------ for t=1:M %做一个主循环,用于迭代
time(t)=t;
for i=1:N %更新速度、位移
v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:));
if v(i,:)<xmin %防止越界
v(i,:)=xmin;
end
if v(i,:)>xmax
v(i,:)=xmax;
end
x(i,:)=x(i,:)+v(i,:); % 更新之后的点
if fitness(x(i,:))< p(i) % 使用选择函数
p(i)=fitness(x(i,:));
y(i,:)=x(i,:);%更新个体极值
end
if p(i)<fitness(pg) %选择保存最优值
pg=y(i,:);
% pg=x(i,:);
end
end
Pbest(t)=fitness(pg); %将全局最优值赋给Pbest end