1 Boid(bird-bid)模型
自然界中的一些生物行为特征呈现群体特征,可以用简单的几条规格将这种群体行为(swarm behavior)在计算机中建模。
Reynolds 使用了一下3个规则作为简单的行为准则:
- 冲突避免(collision avoidance):群体在一定空间中移动,个体有自己的移动意志,但不能影响其他个体移动,避免碰撞和争执。
- 速度匹配(velocity matching):个体必须配合中心移动速度,不管在方向、距离与速率上都必须互相配合。
- 群体中心(flocking centering):个体将会向群体中心移动,配合群体向目标前进。
2 粒子群算法
在群鸟觅食模型中,每个个体都可以被看做一个粒子,则鸟群可以被看成一个粒子群。假设在一个
D
D
D 维的目标搜索空间中,有
m
m
m 个粒子组成一个群体,其中第
i
i
i 个粒子(
i
=
1
,
2
,
3
,
.
.
.
,
m
i = 1, 2, 3, ..., m
i=1,2,3,...,m)位置表示为
X
i
=
(
x
i
1
,
x
i
2
,
x
i
3
,
.
.
.
,
x
i
D
)
X_i = (x_i^1, x_i^2, x_i^3, ..., x_i^D)
Xi=(xi1,xi2,xi3,...,xiD)。换言之,每个例子的位置就是一个潜在解,将
X
i
X_i
Xi 代入目标函数就可以计算出其适应值,根据适应值的大小衡量其优劣。粒子个体经历过的最好位置记为
P
i
P_i
Pi,整个群体经历过的最好位置记为
P
g
P_g
Pg 。粒子
i
i
i 的速度记为
V
i
V_i
Vi 。
粒子群算法采用下列公式对粒子所在的位置不断更新(单位时间1):
v
i
d
=
ω
v
i
d
+
c
1
r
1
(
p
i
d
−
x
i
d
)
+
c
2
r
2
(
p
g
d
−
x
i
d
)
x
i
d
=
x
i
d
+
α
v
i
d
v_i^d = \omega v_i^d + c_1r_1(p_i^d - x_i^d) + c_2r_2(p_g^d - x_i^d)\\ x_i^d = x_i^d + \alpha v_i^d
vid=ωvid+c1r1(pid−xid)+c2r2(pgd−xid)xid=xid+αvid
其中,
i
=
1
,
2
,
3
,
.
.
.
,
m
i = 1, 2, 3, ..., m
i=1,2,3,...,m,
d
=
1
,
2
,
3
,
.
.
.
,
D
d = 1, 2, 3, ..., D
d=1,2,3,...,D;
ω
\omega
ω是非负数,称为惯性因子;加速常数
c
1
c_1
c1 和
c
2
c_2
c2 是非负常数;
r
1
r_1
r1 和
r
2
r_2
r2 是 [0, 1] 范围内变换的随机数;
α
\alpha
α 称为约束因子,目的是控制速度的权重。
此外,
v
i
d
ϵ
[
−
v
m
a
x
d
,
v
m
a
x
d
]
v_i^d \epsilon[-v_{max}^d, v_max^d]
vidϵ[−vmaxd,vmaxd],即粒子
i
i
i 的速度
V
i
V_i
Vi 被一个最大速度
V
m
a
x
=
(
v
m
a
x
1
,
v
m
a
x
2
,
v
m
a
x
3
,
.
.
.
,
v
m
a
x
d
)
V_{max} = (v_{max}^1, v_{max}^2, v_{max}^3, ..., v_{max}^d)
Vmax=(vmax1,vmax2,vmax3,...,vmaxd) 限制。
v
m
a
x
v_{max}
vmax 为常数,可以根据不同的优化问题而设定。
迭代终止条件根据具体问题设定,一般达到预定最大迭代次数或粒子群目前为止搜索到的最优位置满足目标函数的最小容差。
3 粒子群算法的约束优化
粒子群算法的约束优化问题,关键在于如何处理好约束,即解的可行性,避免出现不能收敛或结果是空集的状况。基于粒子群算法的约束优化工作主要分为两类:
- 罚函数法(将约束优化问题转换为无约束优化问题)。
- 将粒子群的搜索范围都限制在条件约束簇内,即在可行解范围内寻优。
4 粒子群算法程序设计流程
5 参数选取
粒子数 m m m、惯性因子 ω \omega ω、最大飞翔速度 v m a x v_{max} vmax、加速度常数 c 1 c_1 c1 和 c 2 c_2 c2
粒子数 m m m
一般取值为20 ~ 40。对于多数问题,30个粒子就够用了,不过对于特殊的难题需要100 ~ 200个粒子。粒子数量越多,搜索范围越大,越容易找到全局最优解,算法运行的时间也越长。
惯性因子 ω \omega ω
如果 ω \omega ω 是变量,通常在迭代开始时将 ω \omega ω 设置得较大,然后在迭代过程之中逐渐减小。这样可使粒子群在开始优化时搜索较大的解空间,得到合适的种子,然后在后期逐渐收缩到较好的区域进行更精细的收缩,以加快收敛速度和目标精度。 ω \omega ω 也可以取 [0, 1] 区间的随机数。如果 ω \omega ω 是定值,建议取 0.6 ~ 0.75 之间的合理值。
加速度常数 c 1 c_1 c1 和 c 2 c_2 c2
对于简单的常规问题,一般情况下取 c 1 = c 2 = 2.0 c_1 = c_2 = 2.0 c1=c2=2.0。
最大飞翔速度 v m a x v_{max} vmax
参数 v m a x v_max vmax 有利于防止搜索范围毫无意义地发散,防止粒子群由于飞翔速度过大而直接俯冲掠过最优目标值。为了跳出局部最优,需要较大的寻优步长,而在接近最优值时,采用更小的步长会更好。如果 v m a x v_{max} vmax 的选择是固定不变的,通常 v m a x v_{max} vmax 设定为每维变化范围的 10% ~ 20% 。