Java教程

萤火虫算法

本文主要是介绍萤火虫算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1. 萤火虫优化算法背景

image
受萤火虫发光强度的启发,2008年,英国剑桥大学学者Xin-She Yang提出萤火虫算法(Firefly Algorithm, FA)。自然界中,萤火虫可以发出短促、有节奏的闪光。通常这种闪光仅在一定范围内可见。萤火虫通过闪光可以吸引异性和猎取食物。为了使算法更加简单,该算法只考虑了萤火虫强度的变化和吸引力这两个因素。

2. 萤火虫优化算法理想化数学模型

依照萤火虫发光的特性,给出以下理想化规则:
(1) 萤火虫不分雌雄,每个萤火虫都会被比它发光更亮的萤火虫吸引;
(2) 吸引力与发光强度成正比;
(3) 萤火虫的亮度由目标函数值决定。

3. 萤火虫优化算法的更新过程

3.1 绝对亮度的定义

为了表示萤火虫\(i\)的亮度随距离\(r\)的变化,定义如下绝对亮度:
萤火虫\(i\)绝对亮度为距离\(r=0\)时的亮度,记为\(I_i\).
注意:为了降低算法的复杂度,假定萤火虫\(i\)的绝对亮度\(I_i\)与\(x_i\)的目标函数值相等。

3.2 相对亮度的定义

为了表示萤火虫\(i\)对萤火虫\(j\)的吸引大小,定义如下相对亮度:
萤火虫\(i\)在萤火虫\(j\)位置的光强度,记为\(I_{ij}\)

\[I_{ij}(r_{ij}) = I_ie^{-\gamma{r_{ij}^2}} \]

其中,\(\gamma\)为光吸收系数,\(r_{ij}\)为萤火虫\(i\)到萤火虫\(j\)的距离.

3.3 吸引力的定义

假设萤火虫\(i\)对萤火虫\(j\)的吸引力和萤火虫\(i\)对萤火虫\(j\)的相对亮度成比例,所以萤火虫\(i\)对萤火虫\(j\)的吸引力可表示为:

\[\beta_{ij}(r_{ij}) = \beta_0e^{-\gamma{r_{ij}^2}} \]

其中,\(\beta_0\)为最大吸引力,当距离\(r=0\)时,吸引力最大。通常\(\beta_0=1\),\(\gamma\in{[0.01,100]}\).

3.4 萤火虫位置更新公式

萤火虫\(i\)吸引着萤火虫\(j\),因此萤火虫\(j\)的位置更新公式:

\[x_j(t+1) = x_j(t) + \beta_{ij}(r_{ij})(x_i(t) - x_j(t)) + \alpha\varepsilon_j \]

其中,\(t\)为算法的迭代次数;\(x_i\)、\(x_j\)分别为萤火虫\(i\)和萤火虫\(j\)所处的空间位置;\(\alpha\in{[0,1]}\), \(\varepsilon\)是高斯分布得到的随机向量。

4. Matlab代码实现

这篇关于萤火虫算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!