智能优化算法:蝴蝶优化算法-附代码

智能优化算法:蝴蝶优化算法-附代码


摘要:蝴蝶优化算法 (Butterfly optimization algorithm,BOA)是由 Arora于基于蝴蝶BOA觅食过程提出的自然启发式算法。该算法具有较高的收敛精度。

1.算法原理

蝴蝶利用自身的感知器定位食物的来源。该算法中,假设每只蝴蝶产生一定强度的香味,这些香味会传播并被区域内的其它蝴蝶感知。每只蝴蝶释放出的香味与它的适应度有关。这就意味着当一只蝴蝶移动了位置,它的适应度也将随之变化。当蝴蝶感觉到另一只蝴蝶在这个区域散发出更多的香味时,就会去靠近,这个阶段被称为全局搜索。另外一种情况,当蝴蝶不能感知大于它自己的香味时,它会随机移动,这个阶段称为局部搜索阶段。

香味是根据 刺 激 的 物 理 强 度 来 表 述 的。其 计 算 如 式(1)所示:
f=cIα(1) f=cI^\alpha\tag{1}
蝴蝶产生的香味涉及到 3 个参数,分别为感觉因子cc,刺激强度II和幂指数 α\alpha。刺激强度与蝴蝶 (解)的适应度相关。

该算法有两个关键步骤:全局搜索阶段和局部搜索阶段。在全局搜索阶段,蝴蝶将向最优解 gg^* 移动,可表示为:
xit+1=xit+rand(0,1)(gxit)fi(2) x_i^{t+1}=x_i^{t}+rand(0,1)*(g^*-x_i^t)*f_i\tag{2}
其中,xitx_i^t表示第 ii个蝴蝶在第tt次迭代中的解向量。这里gg^* 表示目 前 为 止 的 最 优 解。第ii只 蝴 蝶 的 香 味 用fif_i来表示。

局部搜索可表示为
xit+1=xit+rand(0,1)(xktxjt)fi(3) x_i^{t+1}=x_i^t+rand(0,1)*(x_k^t-x_j^t)*f_i\tag{3}
其中,xktx_k^txjkx_j^k 表示从解空间中随机选择的第kk只和第 jj只蝴蝶。在蝴蝶的觅食过程中,全局和局部搜索都会发生,为此,设定一个开关概率 pp来转换普通的全局搜索和密集的局部搜索。每次迭代用式(4)随机产生一个数 rr,与开关概率pp进行比较来决定进行全局搜索还是局部搜索。
r=rand(0,1)(4) r=rand(0,1)\tag{4}

2.算法流程:

(1) 计算适应度函数f(x),x=(x1,...,xdim)f(x),x=(x1,...,xdim)
(2) 给每个蝴蝶生成个初始解 xi=(i=1,2,...,n)x_i=(i=1,2,...,n)
(3) 声明变量 c,α,g,pc,\alpha,g^*,p
(4) while未到终止条件do
(5) for每一个蝴蝶do
(6) 采用式(1)计算其香味函数ff
(7) end for
(8) 找出最优的香味函数ff,并赋值给gg^*
(9) for 每一个蝴蝶do
(10) 采用式(4)计算概率 r
(11) if r<p then
(12) 采用式(2)进行全局搜索
(13) else
(14) 采用式(3)进行局部随机搜索
(15) end if
(16) end for
(17) end while
(18) 输出最优解 .

3.算法结果

智能优化算法:蝴蝶优化算法-附代码

4.参考文献:

[1] Arora S, Singh S. Butterfly optimization algorithm: a novel approach for global optimization[C]. soft computing, 2019, 23(3): 715-734.

[2]李田来,刘方爱.带混沌映射的WSN蝴蝶优化定位算法[J].计算机工程与设计,2019,40(06):1729-1733.

[3]刘云涛.基于蝴蝶优化的粒子滤波算法[J].信息技术与网络安全,2018,37(07):37-41.

5.MATLAB代码

https://mianbaoduo.com/o/bread/Z5mXmpw=