优化算法——粒子群优化介绍
1. 基本概念
粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation)。源于对鸟群捕食的行为研究。粒子群优化算法的基本思想:是通过群体中个体之间的协作和信息共享来寻找最优解.
PSO的优势:在于简单容易实现并且没有许多参数的调节。
2. 算法分析
2.1 基本思想
粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。每个粒子在搜索空间中单独的搜寻最优解,并将其记为当前个体极值,并将个体极值与整个粒子群里的其他粒子共享,找到最优的那个个体极值作为整个粒子群的当前全局最优解,粒子群中的所有粒子根据自己找到的当前个体极值和整个粒子群共享的当前全局最优解来调整自己的速度和位置。
2.2 更新规则
PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次的迭代中,粒子通过跟踪两个“极值”(pbest,gbest)来更新自己。在找到这两个最优值后,粒子通过下面的公式来更新自己的速度和位置。
(
1
)
v
i
=
v
i
+
c
1
×
rand
(
)
×
(
p
b
e
s
t
i
−
x
i
)
+
c
2
×
r
a
n
d
0
×
(
g
b
e
s
t
i
−
x
i
)
(1) v_{i}=v_{i}+c_{1} \times \operatorname{rand}() \times\left(p b e s t_{i}-x_{i}\right)+c_{2} \times r a n d 0 \times\left(g b e s t_{i}-x_{i}\right)
(1)vi=vi+c1×rand()×(pbesti−xi)+c2×rand0×(gbesti−xi)
( 2 ) x i = x i + v i (2)x_{i}=x_{i}+v_{i} (2)xi=xi+vi
式子中,i=1,2,3…N,N是此群中的粒子数量。rand()是介于(0,1)的随机数。 c 1 c_1 c1和 c 2 c_2 c2是学习因子,通常=2.
公式(1)的第一部分称为【记忆项】,表示上次速度大小和方向的影响;公式(1)的第二部分称为【自身认知项】,是从当前点指向粒子自身最好点的一个矢量,表示粒子的动作来源于自己经验的部分;公式(1)的第三部分称为【群体认知项】,是一个从当前点指向种群最好点的矢量,反映了粒子间的协同合作和知识共享。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。以上面两个公式为基础,形成了PSO的标准形式。
v
i
=
ω
×
v
i
+
c
1
×
rand
(
)
×
(
p
best
i
−
x
i
)
+
c
2
×
rand
(
)
×
(
gbest
i
−
x
i
)
v_{i}=\omega \times v_{i}+c_{1} \times \operatorname{rand}() \times\left(p \text { best }_{i}-x_{i}\right)+c_{2} \times \operatorname{rand}() \times\left(\text { gbest }_{i}-x_{i}\right)
vi=ω×vi+c1×rand()×(p best i−xi)+c2×rand()×( gbest i−xi)
ω
\omega
ω叫做惯性因子,其值非负。值较大,全局寻优能力强,局部寻优能力弱;值较小,全局寻优能力弱,局部寻优能力强。动态
ω
\omega
ω可以获得更好的寻优结果。目前采用较多的是线性递减权值策略。
2.3 流程图、伪代码
3. 量子粒子群算法
3.1 PSO算法的缺点:
1、需要设定的参数(惯性因子
ω
\omega
ω ,局部学习因子
c
1
c_1
c1 和全局学习因子
c
2
c_2
c2 )太多,不利于找到待优化模型的最优参数。
2、粒子位置变化缺少随机性,容易陷入局部最优的陷阱。
3.2 量子粒子群算法
量子粒子群优化(Quantum Particle Swarm Optimization,QPSO)算法取消了粒子的移动方向属性,粒子位置的更新跟该粒子之前的运动没有任何关系,这样就增加了粒子位置的随机性。
量子粒子群算法中引入的新名词:
mbest:表示pbest的平均值,即平均的粒子历史最好位置。
量子粒子群算法的粒子更新步骤:
- 计算mbest
M b e s t = 1 M ∑ i = 1 M p b e s t − i M_{b e s t}=\frac{1}{M} \sum_{i=1}^{M} p_{b e s t_{-} i} Mbest=M1i=1∑Mpbest−i
其中M表示粒子群的大小, p b e s t _ i p_{{best}\_i} pbest_i 表示当前迭代中的第 i i i 个 p b e s t pbest pbest 。
- 粒子位置更新
KaTeX parse error: Expected '}', got '_' at position 33: … p_{\text {best_̲i}}+(1-\phi) \t…
其中
g
b
e
s
t
gbest
gbest 表示当前全局最优粒子,
P
i
P_i
Pi 用于第
i
i
i 个粒子位置的更新。
粒子位置更新公式为:
x
i
=
P
i
±
α
∣
M
b
e
s
t
−
x
i
∣
ln
(
1
u
)
x_{i}=P_{i} \pm \alpha\left|M_{b e s t}-x_{i}\right| \ln \left(\frac{1}{u}\right)
xi=Pi±α∣Mbest−xi∣ln(u1)
其中
x
i
x_i
xi 表示第
i
i
i 个粒子的位置,
α
\alpha
α 为创新参数,
ϕ
\phi
ϕ 和
u
u
u 为(0,1)上的均匀分布数值。取+和−的概率为0.5。
由上所示,QPSO算法中只有一个创新参数 α \alpha α 设置,一般 α \alpha α 不大于1。
转载请注明:Daniel的博客