粒子群算法是通过群体中不同粒子之间的相互合作和相互竞争来实现在寻优空间中的搜索过程以找到所求问题的最优位置。
粒子群算法首先随机初始化一群均匀分布在给定的寻优空间中的粒子(种群规模一般为30),然后所有的粒子根据两个极值来更新自身的速度:
一个是个体极值(
p
b
s
e
t
pbset
pbset),另一个是群体极值(
g
b
e
s
t
gbest
gbest)。
目前广泛使用的准确粒子群算法的数学描述为:设粒子群中粒子的总数为
p
o
p
s
i
z
e
popsize
popsize,粒子的维数为
m
m
m,算法的最大迭代次数为
m
a
x
i
t
e
r
maxiter
maxiter,第
i
i
i个粒子在
t
t
t时刻的飞行速度和在搜索空间中的位置分别为:
v
i
(
t
)
=
[
v
i
1
(
t
)
,
v
i
2
(
t
)
,
.
.
.
,
v
i
m
(
t
)
]
T
,
x
i
(
t
)
=
[
x
i
1
(
t
)
,
x
i
2
(
t
)
,
.
.
.
,
x
i
m
(
t
)
]
v_i(t)=[v_{i1}(t),v_{i2}(t),...,v_{im}(t)]^T, x_i(t)=[x_{i1}(t),x_{i2}(t),...,x_{im}(t)]
vi(t)=[vi1(t),vi2(t),...,vim(t)]T,xi(t)=[xi1(t),xi2(t),...,xim(t)],
粒子在
t
t
t时刻的个体极值和群体极值分别为:
p
b
e
s
t
i
(
t
)
=
[
p
i
1
(
t
)
,
p
i
2
(
t
)
,
.
.
.
,
p
i
m
(
t
)
]
T
,
g
b
e
s
t
=
[
g
1
,
g
2
,
.
.
.
,
g
m
]
T
pbest_i(t)=[p_{i1}(t),p_{i2}(t),...,p_{im}(t)]^T,gbest=[g_1,g_2,...,g_m]^T
pbesti(t)=[pi1(t),pi2(t),...,pim(t)]T,gbest=[g1,g2,...,gm]T
所有的粒子按照如下的更新方式在搜索空间中飞行以找到最优解:
v
i
+
1
(
t
+
1
)
=
ω
v
i
(
t
)
+
c
1
r
1
(
p
b
e
s
t
i
(
t
)
−
x
i
(
t
)
)
+
c
2
r
2
(
g
b
e
s
t
−
x
i
(
t
)
)
v_{i+1}{(t+1)}=\omega v_i(t)+c_1r_1(pbest_i(t)-x_i(t))+c_2r_2(gbest-x_i(t))
vi+1(t+1)=ωvi(t)+c1r1(pbesti(t)−xi(t))+c2r2(gbest−xi(t))
x
i
+
1
(
t
+
1
)
=
x
i
(
t
)
+
v
i
+
1
(
t
+
1
)
x_{i+1}{(t+1)}=x_i(t)+v_{i+1}{(t+1)}
xi+1(t+1)=xi(t)+vi+1(t+1)
其中,
ω
\omega
ω为惯性权重系数,决定了上次迭代速度保留的多少。可以通过调节它的大小来平衡算法的全局搜索和局部搜索的能力。算法初期,选择较大的惯性权重值可以使算法有很强的全局搜索能力,算法后期可以选择较小值使得粒子逐渐收敛到全局最优。
c
1
,
c
2
c_1,c_2
c1,c2为算法的学习因子,它们分别影响着粒子的“自我学习”能力和“社会学习”能力。设置较大的
c
1
c_1
c1,会使得所有粒子过多的在局部范围内徘徊,不利于算法的全局搜索;而设置较大的
c
2
c_2
c2,会使得粒子过早的陷入局部极值,降低解的精度。
r
1
,
r
2
r_1,r_2
r1,r2是介于
[
0
,
1
]
[0,1]
[0,1]之间的随机数。
标准粒子群算法的流程如下:
1)设置种群规模、变量范围、惯性权重、学习因子等参数,并随机的初始化一群均匀分布在给定的寻优空间中的粒子(包含速度和位置信息)
2)计算群体中各个粒子的适应度值(即函数值)。设置第
i
i
i个粒子的适应值为它的当前个体极值
p
b
e
s
t
i
pbest_i
pbesti,所有粒子中的最好粒子设置为群体的全体极值
g
b
e
s
t
gbest
gbest。
3)根据公式1)和2)更新每个粒子的速度和位置。
4)对所有粒子,将其当前的函数值与它以前找到过的最好位置进行比较,如果当前位置较好,则将个体最优位置设置为这个粒子的位置,然后在对群体的全局极值
g
b
e
s
t
gbest
gbest更新。
5)判断给定的终止1条件是否满足,若满足终止条件,停止搜索,输出需要的结果;否则,返回3)继续搜索。
粒子群算法的缺点:
1)寻找到的最优解可能是局部最优解而不是全局最优解
2)算法搜索初期收敛速度快而搜索后期收敛速度变慢
3)参数选择的随机性。
改进方法:
1)添加压缩因子
2)协同粒子群算法
3)粒子群混合算法
3.1)基于自然选择机制的粒子群算法
3.2)基于模拟退火的粒子群算法
参考文献:
[1]赵乃刚. 粒子群优化算法综述①[J]. 科技创新导报, 2015.