(源码)智能优化算法—藤壶交配优化算法(Barnacles Mating Optimizer,BMO)
获取更多资讯,赶快关注上面的公众号吧!
文章目录
2018年由马来西亚的Mohd Herwan Sulaiman等人提出了一种新颖的仿生进化优化算法——藤壶交配优化(Barnacles Mating Optimizer,BMO),该算法模拟了自然界中藤壶的交配行为来解决优化问题。**扫码关注上面的公众号后回复“藤壶“”获取下载链接!
藤壶是自侏罗纪时代就存在的微生物,出生时即会游泳,当成年时,它们会附着在水中的物体上,并长出壳。大多数藤壶雌雄同体,这意味着它们有雄性和雌性繁殖。为了应对潮汐变化和久坐不动的生活方式,它们的「生殖器」(penises)可以达到身长的7~8倍,生殖器所能接触到的所有邻居和潜在的配偶竞争者就构成了其交配种群,因此生殖器长度变化在确定交配种群大小和局部交配竞争中起到重要作用。
图1为藤壶的生命周期,藤壶的幼虫发育包括6个无节幼体龄期和1个不进食的定居介虫龄期,当介虫在物体表面定居后,就蜕变为成年个体。
哈迪-温伯格(Hardy-Weinberg)法则将用于BMO子代的生成过程。在最简单的情况下,两个等位基因D和M分别代表频率 f ( D ) = p f(\mathrm{D})=p f(D)=p和 f ( M ) = q f(\mathrm{M})=q f(M)=q下的父亲和母亲,那么正常交配下的预期基因型频率可以表示为:对于 D D DD DD纯合子为 f ( D D ) = p 2 f(D D)=p^{2} f(DD)=p2,对于 M M MM MM纯合子为 f ( D M M ) = q 2 f(DMM)=q^{2} f(DMM)=q2,对于杂合子为 f ( D M ) = 2 p q f(D M)=2pq f(DM)=2pq。图2中的旁氏表说明了下一代子代中基因的不同形成方式。
从图中可以看出,当 p = 0.6 , q = 0.4 p=0.6,q=0.4 p=0.6,q=0.4时,矩形区域表达了如下的基因型频率: D D : D M : M M = 0.36 : 0.48 : 0.16 DD:DM:MM=0.36:0.48:0.16 DD:DM:MM=0.36:0.48:0.16,所有项和为 p 2 + 2 p q + q 2 = 1 p^{2}+2 p q+q^{2}=1 p2+2pq+q2=1,同时 p + q = 1 p+q=1 p+q=1。因此,为了简化,新子代的产生是以藤壶父代的p和q为基础的。
3.1 初始化
在提出的BMO中,假设候选解为藤壶,其中种群向量可以表达为:
X
=
[
x
1
1
?
x
1
N
?
?
?
x
n
1
?
x
n
N
]
(1)
X=\left[\begin{array}{ccc} x_{1}^{1} & \cdots & x_{1}^{N} \\ \vdots & \ddots & \vdots \\ x_{n}^{1} & \cdots & x_{n}^{N} \end{array}\right] ag{1}
X=????x11??xn1??????x1N??xnN??????(1)
其中
N
N
N为控制变量个数(问题维度),
n
n
n为种群大小或藤壶数量。每个控制变量都有相应的上下界约束:
u
b
=
[
u
b
1
,
…
,
u
b
i
]
(2)
u b=\left[u b_{1}, \ldots, u b_{i}\right] ag{2}
ub=[ub1?,…,ubi?](2)
l
b
=
[
l
b
1
,
…
,
l
b
i
]
(3)
l b=\left[l b_{1}, \ldots, l b_{i}\right] ag{3}
lb=[lb1?,…,lbi?](3)
其中 u b u b ub和 l b l b lb分别表示第 i i i个变量的上界和下界。首先对初始种群 X X X进行评估,然后对各个解进行排序,当前最优解在X的最顶部。
3.2 选择过程
与遗传算法、DE算法等其他进化算法相比,该算法采用了不同的选择方法。由于藤壶的选择是基于它们生殖器的长度 p l pl pl,所以选择过程基于以下假设模仿了藤壶的行为:
- 选择过程是随机的,但它会被限制在藤壶的生殖器长度, p l pl pl;
- 每只藤壶可以提供自己的精子,也可以接受其他藤壶的精子,而且每只藤壶一次只能与一只藤壶受精(尽管在现实生活中,雌性藤壶可能会与多个雄性藤壶受精);
- 如果在某一时刻,选择过程选择了同一只藤壶,这意味着应该发生了自交配或自受精。即使藤壶同时有雄性和雌性繁殖(大多数藤壶没有自我交配),但自我交配是非常罕见的,因此本文将不考虑自我交配,此时不会产生新的子代。
- 如果在特定迭代中选择的 p l pl pl大于已设置的 p l pl pl,则进行远程授精过程。
从以上假设可以看出,算法中执行了利用(假设1和2)和探索(假设4)。图3展示了10个藤壶交配过程的选择。
可以看出当前最优解位于候选解X的最顶部。现在假设藤壶的最大生殖器长度为其体长的7倍( p l = 7 pl=7 pl=7),那么在某一次迭代中,藤壶1只能与藤壶2~7中的一个进行交配,如果藤壶1选择了藤壶8,那么将不会执行正常的交配过程,因此子代的产生是通过远程授精过程进行的(探索)。选择过程的数学形式如下:
?barnacle_d?=?rand?perm? ( n ) (4) ext { barnacle\_d = rand perm }(n) ag{4} ?barnacle_d?=?rand?perm?(n)(4)
?barnacle_m?=?rand?perm? ( n ) (5) ext { barnacle\_m = rand perm }(n) ag{5} ?barnacle_m?=?rand?perm?(n)(5)
其中 ?barnacle_d ext { barnacle\_d} ?barnacle_d和 ?barnacle_m ext { barnacle\_m} ?barnacle_m为交配的父代, n n n为种群大小。上式表明选择是随机执行的,从而满足假设1。
3.3 繁殖
BMO主要根据Hardy Weinberg原理研究藤壶父代在产生子代时的遗传特征或基因型频率,为了显示所提出的BMO的简单性,给出如下表达式从藤壶的父代产生新的子代变量:
x
i
N
?
n
e
w
=
p
x
b
a
r
n
a
c
l
e
?
d
N
+
q
x
b
a
r
n
a
c
l
e
?
m
N
(6)
x_{i}^{N_{-} n e w}=p x_{b a r n a c l e_{-} d}^{N}+q x_{b a r n a c l e_{-} m}^{N} ag{6}
xiN??new?=pxbarnacle??dN?+qxbarnacle??mN?(6)
其中 p p p为[0,1]内均匀分布的随机数, q = ( 1 ? p ) q=(1-p) q=(1?p), x b a r n a c l e ? d N x_{b a r n a c l e_{-} d}^{N} xbarnacle??dN?和 x b a r n a c l e ? m N x_{b a r n a c l e_{-} m}^{N} xbarnacle??mN?分别为等式(4)和(5)选择的父亲藤壶和母亲藤壶的变量。可以理解为,可以说, p p p和 q q q代表了父亲和母亲的特征在下一代中所占的百分比。因此,子代根据0到1之间的随机数概率继承父亲和母亲的行为。
值得强调的是,
p
l
pl
pl的值在决定探索和利用过程中起着重要的作用。如果选择的藤壶是在父亲的藤壶生殖器长度的范围内,就发生了利用过程(公式6)。如在选择过程中所述,在BMO中将远程授精作为探索过程处理,当要交配的藤壶的选择超过了预期的
p
l
pl
pl值时,就会发生远程授精:
x
i
n
?
n
e
w
=
?rand?
(
)
×
x
barnacle
?
m
n
(7)
x_{i}^{n_{-}new} = ext { rand }() imes x_{ ext {barnacle}_{-} m}^{n} ag{7}
xin??new?=?rand?()×xbarnacle??mn?(7)
其中
?rand?
(
)
ext { rand }()
?rand?()为[0,1]内的随机数。
可以看出,等式(7)为藤壶子代进化的简单方法,新的子代根据母亲藤壶生成以进行探索,这是由于新的子代是由母亲藤壶产生的,因为它接受了水中由其他藤壶释放的精子。
BMO的伪码如下所示。BMO通过创建一组随机解来开始优化过程。基于式(6)和(7)产生新的藤壶。在每次迭代中更新到目前为止的最优解,其位置位于向量X的顶部。为了控制种群扩大,对每一个新的藤壶子代进行评估并与父代合并。然后执行排序过程,只保留最优的一半解,而丢弃劣解。
1:初始化藤壶种群 X i X_i Xi?
2:计算每个藤壶的适应度值
3:对解进行排序,最优解在最顶端
4:( T T T=当前最优解)
5:while(i<最大迭代次数)
6:?设置生殖器长度 p l pl pl
7:?根据式(4)和(5)进行选择
8:?if 选择 ≤ p l \le pl ≤pl
9:for 每个变量
10:?根据式(6)生成子代
11:end for
12:?else if 选择 > p l \gt pl >pl
13:for 每个变量
14:?根据式(7)生成子代
15:end for
16:?end if
17:?调整每个变量的边界
18:?计算每个藤壶的适应度值
19:?排序并更新 T T T
20:end while
21:Return T T T