人工蜂群算法是模仿蜜蜂行为提出的一种优化方法,是集群智能思想的一个具体应用,它的主要特点是不需要了解问题的特殊信息,只需要对问题进行优劣的比较,通过各人工蜂个体的局部寻优行为,最终在群体中使全局最优值突现出来,有着较快的收敛速度。为了解决多变量函数优化问题,Karaboga提出了人工蜂群算法ABC模型(artificial bee colony algorithm)。
蜜蜂采蜜机理
蜜蜂是一种群居昆虫,虽然单个昆虫的行为极其简单,但是由单个简单的个体所组成的群体却表现出极其复杂的行为。真实的蜜蜂种群能够在任何环境下,以极高的效率从食物源(花朵)中采集花蜜;同时,它们能适应环境的改变。
蜂群产生群体智慧的最小搜索模型包含基本的三个组成要素:食物源、被雇佣的蜜蜂(employed foragers)和未被雇佣的蜜蜂(unemployed foragers);两种最为基本的行为模型:为食物源招募(recruit)蜜蜂和放弃(abandon)某个食物源。
(1)食物源:食物源的价值由多方面的因素决定,如:它离蜂巢的远近,包含花蜜的丰富程度和获得花蜜的难易程度。使用单一的参数,食物源的“收益率”(profitability),来代表以上各个因素。
(2)被雇用的蜜蜂:也称引领蜂(Leader),其与所采集的食物源一一对应。引领蜂储存有某一个食物源的相关信息(相对于蜂巢的距离、方向、食物源的丰富程度等)并且将这些信息以一定的概率与其他蜜蜂分享。
(3)未被雇用的蜜蜂:其主要任务是寻找和开采食物源。有两种未被雇用的蜜蜂:侦查蜂(Scouter)和跟随蜂(Follower)。侦察蜂搜索蜂巢附近的新食物源;跟随蜂等在蜂巢里面并通过与引领蜂分享相关信息找到食物源。一般情况下,侦察蜂的平均数目是蜂群的5%-20%。
在群体智慧的形成过程中,蜜蜂间交换信息是最为重要的一环。舞蹈区是蜂巢中最为重要的信息交换地。蜜蜂的舞蹈叫做摇摆舞。食物源的信息在舞蹈区通过摇摆舞的形式与其他蜜蜂共享,引领蜂通过摇摆舞的持续时间等来表现食物源的收益率,故跟随蜂可以观察到大量的舞蹈并依据收益率来选择到哪个食物源采蜜。收益率与食物源被选择的可能性成正比。因而,蜜蜂被招募到某一个食物源的概率与食物源的收益率成正比。
初始时刻,蜜蜂以侦察蜂的身份搜索。其搜索可以由系统提供的先验知识决定,也可以完全随机。经过一轮侦查后,若蜜蜂找到食物源,蜜蜂利用它本身的存储能力记录位置信息并开始采蜜。此时,蜜蜂将成为“被雇用者”。蜜蜂在食物源采蜜后回到蜂巢卸下蜂蜜然后将有如下选择:
(1)放弃食物源而成为非雇佣蜂。
(2)跳摇摆舞为所对应的食物源招募更多的蜜蜂,然后回到食物源采蜜。
(3)继续在同一个食物源采蜜而不进行招募。
对于非雇佣蜂有如下选择:
(1)转变成为侦察蜂并搜索蜂巢附近的食物源。其搜索可以由先验知识决定,也可以完全随机。
(2)在观察完摇摆舞后被雇用成为跟随蜂,开始搜索对应食物源邻域并采蜜。
(以上摘自百度百科)
ABC算法原理
在基本的ABC算法中,人工蜂群包含3中个体:雇佣蜂,跟随蜂和侦查蜂。
每个雇佣蜂对应一个确定的蜜源(解向量),并在迭代中对蜜源的邻域进行搜索。
根据蜜源的丰富程度(适应值的大小),采用轮盘赌的方式雇佣跟随蜂采蜜(搜索新蜜源)。
如果蜜源多次更新都没有改进,则放弃该蜜源,雇佣蜂转为侦查蜂随机搜索新蜜源。
##蜜源初始化
初始化时,随机生成SN个可行解(等于雇佣蜂的数量)并计算适应度函数值。随机产生可行解的公式如下:
x
i
j
=
x
m
i
n
,
j
+
r
a
n
d
(
0
,
1
)
(
x
m
a
x
,
j
−
x
m
i
n
,
j
)
(
1
)
x_{ij}=x_{min,j}+rand(0,1)(x_{max,j}-x_{min,j})\qquad (1)
xij=xmin,j+rand(0,1)(xmax,j−xmin,j)(1)
式中,
x
i
(
i
=
1
,
2
,
.
.
.
,
S
N
)
x_i(i=1,2,...,SN)
xi(i=1,2,...,SN)为D维向量,D为优化参数个数,
j
∈
{
1
,
2
,
.
.
.
,
D
}
j\in \{1,2,...,D\}
j∈{1,2,...,D}。
##新蜜源的更新搜索
蜜蜂记录自己到目前位置的最优解,并在当前蜜源邻域内展开搜索,基本ABC在蜜源附近搜索新蜜源的公式为:
v
i
j
=
x
i
j
+
ϕ
i
j
(
x
i
j
−
x
k
j
)
(
2
)
v_{ij}=x_{ij}+\phi_{ij}(x_{ij}-x_{kj})\qquad (2)
vij=xij+ϕij(xij−xkj)(2)
式中,
j
∈
{
1
,
2
,
.
.
.
D
}
,
k
∈
{
1
,
2
,
.
.
.
,
S
N
}
j\in \{1,2,...D\},k\in\{1,2,...,SN\}
j∈{1,2,...D},k∈{1,2,...,SN},k位随机生成且
k
≠
i
,
ϕ
i
k
k\ne i,\phi_{ik}
k=i,ϕik为[-1,1]之间的随机数。
##跟随蜂选择雇佣蜂的概率
P
i
=
f
i
t
(
x
i
)
Σ
n
=
1
S
N
f
i
t
(
x
n
)
(
3
)
P_i = \frac{fit(x_i)}{\Sigma_{n=1}^{SN}fit(x_n)}\qquad(3)
Pi=Σn=1SNfit(xn)fit(xi)(3)
式中,
f
i
t
(
x
i
)
fit(x_i)
fit(xi)为第i个解的适应值对应蜜源的丰富程度。蜜源越丰富,被跟随蜂选择的概率越大。
适应度的计算公式:
f
i
t
m
(
x
m
)
=
{
1
+
a
b
s
(
f
m
(
x
m
)
)
i
f
f
m
(
x
m
)
<
0
1
1
+
f
m
(
x
m
)
i
f
f
m
(
x
m
)
≥
0
fit_m(x_m)=\{^{\frac{1}{1+f_m(x_m)}\quad if\quad f_m(x_m)\ge 0}_{1+abs(f_m(x_m))\quad if \quad f_m(x_m)< 0}
fitm(xm)={1+abs(fm(xm))iffm(xm)<01+fm(xm)1iffm(xm)≥0
##侦查蜂的产生
为防止算法陷入局部最优,当某蜜源迭代limit次没有改进时,便放弃该蜜源,并且将该蜜源记录在禁忌表中,同时该蜜源对应的雇佣蜂变为侦查蜂按式(1)随机产生一个新位置代替原蜜源。
#参数控制
- 蜜源的个数(与雇佣蜂相等)SN
- 算法终止的最大进化数(maximum evaluation number)MEN
- limit。
#ABC算法的基本流程
ABC算法优点
-
根据蜜蜂的觅食行为而得到;
-
是全局优化算法;
-
为了数值优化而设计;
-
也可以用来求解组合优化问题;
-
可以用于有约束的和无约束的优化问题;
-
只使用了三个参数(种群数量,最大循环次数以及阈值),这些参数是用户事先确定的;
-
非常的简单,具有柔性和鲁棒性。