粒子群算法,也称粒子群优化算法或鸟群觅食算法(Particle Swarm Optimization),缩写为 PSO, 是近年来由J. Kennedy和R. C. Eberhart等开发的一种新的进化算法(Evolutionary Algorithm - EA)。PSO算法属于进化算法的一种,和模拟退火算法相似,它也是从随机解出发,通过迭代寻找最优解,它也是通过适应度来评价解的品质,但它比遗传算法规则更为简单,它没有遗传算法的“交叉”(Crossover) 和“变异”(Mutation) 操作,它通过追随当前搜索到的最优值来寻找全局最优。这种算法以其实现容易、精度高、收敛快等优点引起了学术界的重视,并且在解决实际问题中展示了其优越性。粒子群算法是一种并行算法。
粒子群算法使用在解空间中不断移动的粒子作为寻优的群体,每个粒子具有位置和速度两个属性(位置和速度的维数和解空间的维数相同),粒子的位置代表了某个可行解,速度代表了与下一个寻找到的可行解的差值。
每个粒子根据自己已经寻找过的最优解和群体当前寻找到的最优解来调整自己的速度(按某种特定规则),以搜索到更优的解。
1. 算法原理
粒子的位置用于表示优化问题的优化变量,粒子的速度决定其飞行方向和速率大小,每个粒子性能的优劣程度取决于优化目标所建立的适应度函数。第i个粒子在迭代到第t代时的位置和速度分别为:
X
i
(
t
)
=
(
x
i
1
(
t
)
,
x
i
2
(
t
)
,
x
i
3
(
t
)
,
⋯
,
x
i
d
(
t
)
)
V
i
(
t
)
=
(
v
i
1
(
t
)
,
v
i
2
(
t
)
,
v
i
3
(
t
)
,
⋯
,
v
i
d
(
t
)
)
\begin{array}{l} X_{i}(t)=\left(x_{i 1}(t), x_{i 2}(t), x_{i 3}(t), \cdots, x_{i d}(t)\right) \\ V_{i}(t)=\left(v_{i 1}(t), v_{i 2}(t), v_{i 3}(t), \cdots, v_{i d}(t)\right) \end{array}
Xi(t)=(xi1(t),xi2(t),xi3(t),⋯,xid(t))Vi(t)=(vi1(t),vi2(t),vi3(t),⋯,vid(t))
式中d为优化变量的个数,同时每个粒子都有一个优化目标所决定的适应度函数
T
(
X
i
)
T\left(X_{i}\right)
T(Xi)。
PSO算法流程是求解空间中随机初始化粒子的位置和速度。初始化的粒子第m维(1≤
m
d
\boldsymbol{m}_{d}
md)的位置
x
i
m
\boldsymbol{x}_{i m}
xim和速度
v
i
m
\boldsymbol{v}_{i m}
vim为:
x
i
m
(
1
)
=
x
min
+
p
1
(
x
max
−
x
min
)
v
1
m
(
1
)
=
p
2
(
x
max
−
x
min
)
Δ
t
\begin{array}{l} x_{i m}(1)=x_{\min }+p_{1}\left(x_{\max }-x_{\min }\right) \\ v_{1 m}(1)=\frac{p_{2}\left(x_{\max }-x_{\min }\right)}{\Delta t} \end{array}
xim(1)=xmin+p1(xmax−xmin)v1m(1)=Δtp2(xmax−xmin)
式中
x
max
x_{\max }
xmax,
x
min
x_{\min}
xmin分别为优化变量x取值的上限和下限; Δt为时间间隔,通常取为1;
p
1
p_{1}
p1,
p
2
p_{2}
p2为区间[0,1]内的随机数。
粒子群在迭代到第t 代时将产生2个极值:个体极值
P
b
e
s
t
P_{best}
Pbest,即单个粒子在t次迭代过程中得到的最优解,其位置表示为:
p
i
(
t
)
=
(
p
i
1
(
t
)
,
p
i
2
(
t
)
,
p
i
3
(
t
)
,
⋯
,
p
i
d
(
t
)
)
p_{i}(t)=\left(p_{i 1}(t), p_{i 2}(t), p_{i 3}(t), \cdots, p_{i d}(t)\right)
pi(t)=(pi1(t),pi2(t),pi3(t),⋯,pid(t))
全局极值
G
b
e
s
t
G_{best}
Gbest,即所有粒子在t次迭代过程中找到的最优解,其位置表示为:
p
g
(
t
)
=
(
p
g
1
(
t
)
,
p
g
2
(
t
)
,
p
g
3
(
t
)
,
⋯
,
p
g
d
(
t
)
)
p_{\mathrm{g}}(t)=\left(p_{\mathrm{g} 1}(t), p_{\mathrm{g} 2}(t), p_{\mathrm{g} 3}(t), \cdots, p_{\mathrm{g} d}(t)\right)
pg(t)=(pg1(t),pg2(t),pg3(t),⋯,pgd(t))
在得到上述2个极值后,第(t+1)迭代时粒子的第m维(1≤
m
d
\boldsymbol{m}_{d}
md)速度
v
i
m
(
t
+
1
)
v_{i m}(t+1)
vim(t+1)和位置
x
i
m
(
t
+
1
)
x_{i m}(t+1)
xim(t+1)可以根据下式得到,即:
v
i
m
(
t
+
1
)
=
w
v
i
m
(
t
)
+
φ
1
q
1
(
p
i
m
(
t
)
−
x
i
m
(
t
)
)
+
φ
2
q
2
(
p
g
m
(
t
)
−
x
i
m
(
t
)
)
x
i
m
(
t
+
1
)
=
x
i
m
(
t
)
+
v
i
m
(
t
)
⋅
Δ
t
\begin{array}{l} v_{i m}(t+1)=w v_{i m}(t)+\varphi_{1} q_{1}\left(p_{i m}(t)-x_{i m}(t)\right)+\varphi_{2} q_{2}\left(p_{g m}(t)-x_{i m}(t)\right) \\ x_{i m}(t+1)=x_{i m}(t)+v_{i m}(t) \cdot \Delta t \end{array}
vim(t+1)=wvim(t)+φ1q1(pim(t)−xim(t))+φ2q2(pgm(t)−xim(t))xim(t+1)=xim(t)+vim(t)⋅Δt
式中w为惯性权重;
φ
1
φ_{1}
φ1,
φ
2
φ_{2}
φ2为2个加速度系数;
p
1
p_{1}
p1,
p
1
p_{1}
p1为区间[0,1]内的随机数。
一文简单了解粒子群算法(PSO)
最新推荐文章于 2024-07-08 22:12:26 发布