matlab智能算法之萤火虫算法

1.起源

萤火虫群优化算法是2005年由 K r i s h n a n a n d Krishnanand Krishnanand G h o s e Ghose Ghose 在研究改进蚁群算法求连续型最优化问题时提出的,并且成功将其用于机器人群体协作。算法的起源是来自萤火虫在夜晚发出光亮进行求偶,雄性萤火虫发光越亮,越能吸引雌性萤火虫。

2.萤火虫发光求偶

2.1 雌雄萤火虫

一般的雌萤火虫由于翅膀接近于退化,而且因为雌萤火虫要产卵,腹部体积会比雄萤火虫大,所以它们一般都只能趴在一个地方发出求偶的信号,等待别的雄萤火虫来和它交配;而雄虫为了有更大的发光亮度吸引雌萤火虫,且在黑夜中找到雌萤火虫,所以发光器有两排光,复眼也比较发达。如果雌萤火虫的回复得到了雄萤火虫的答复,那它们就会以同样的方式进行联系,直到两者在一起。雄萤火虫越亮,对雌萤火虫的吸引力越强。

2.2 求偶过程

一到繁殖季节的时候,雌雄萤火虫都能通过发光来寻找自己的配偶。在寻找配偶的时候,雌雄双方都会发出一闪一闪的亮光作为信号。具体为:在一定范围内,雄萤火虫在夜色里一边飞行,一边发出有节奏的闪光信号,然后趴在原地的雌萤火虫根据雄萤火虫发光亮度的强弱进行择偶,通常都是选择对发光亮度最强的,也就是看起来最亮的雄萤火虫做出发光回应。

3.原理

根据萤火虫的求偶方式,可以发现求偶的关键有:闪光强度吸引力。而且标准萤火虫优化算法遵循三个理想化规则:
1、萤火虫不分雌雄,假设都为中性;
2、萤火虫的吸引力和自身的闪光强度成正比,所以闪光亮度弱的萤火虫,都会被更亮的萤火虫吸引;
3、萤火虫的闪光强度受到适应度函数景观的影响。

3.1 闪光强度

萤火虫的闪光强度与适应度函数是成正比的;每个萤火虫都可以看成是问题的一个解,则可以得到 I ( r ) ∝ f ( x ) I(r) \propto f(x) I(r)f(x),其中 f ( x ) f(x) f(x) 则为 x x x 的目标函数,也就是这里的适应度, I ( r ) I(r) I(r) 是间隔距离为 r r r 的闪光强度,具体公式如下: I ( r ) = I 0 e − γ r i j 2 I(r)=I_0e^{-\gamma r^2_{ij}} I(r)=I0eγrij2 其中, I 0 I_0 I0 为光源处的亮度, γ \gamma γ 为光强吸收系数, r i j r_{ij} rij 表示萤火虫 i i i 和萤火虫 j j j 之间的欧式距离: r i j = ∑ k = 1 n ( x i k − x j k ) 2 r_{ij}=\sqrt {\sum_{k=1}^n(x_{ik}-x_{jk})^2} rij=k=1n(xikxjk)2 x i k x_{ik} xik 表示萤火虫 i i i 在维度 k k k 上的值。

3.2 吸引力

萤火虫的吸引力和距离、光强有关,所以函数在这里设计如下单调递减函数: β ( r ) = β 0 e − γ r i j m , m ≥ 1 \beta(r)=\beta_0e^{-\gamma r_{ij}^m}, \quad m \geq 1 β(r)=β0eγrijm,m1 其中, β 0 \beta_0 β0 表示两萤火虫距离为 0 0 0 时的吸引力,也就是最大吸引力; m m m 2 2 2,当距离 r r r 变大时,吸引力则变小,反之则变大;对于规模为 Γ \Gamma Γ 的萤火虫群, γ \gamma γ 的初值可以为: γ = 1 Γ m \gamma = \frac{1}{\Gamma^m} γ=Γm1 γ = 0 \gamma=0 γ=0 时, β ( r ) = β 0 \beta(r)=\beta_0 β(r)=β0,也就是此时种群十分密集,吸引力达到最大;当 γ \gamma γ 趋于 ∞ \infty 时, β ( r ) = 0 \beta(r)=0 β(r)=0,此时相当于萤火虫在迷雾发光,其它萤火虫看不见,吸引力几乎为 0 0 0,所以 γ ∈ [ 0.1 , 10 ] \gamma \in[0.1,10] γ[0.1,10]

3.3 萤火虫移动

萤火虫 i i i 被萤火虫 j j j 吸引后,会发生移动,移动公式为: x i ( t + 1 ) = x i ( t ) + β ( r ) ( x j ( t ) − x i ( t ) ) + s ϵ i x_i(t+1)=x_i(t)+\beta(r)(x_j(t)-x_i(t))+s \epsilon_i xi(t+1)=xi(t)+β(r)(xj(t)xi(t))+sϵi 公式分为三部分:萤火虫 i i i 在第 t t t 次的位置项 x i ( t ) x_i(t) xi(t),吸引力项 β ( r ) ( x j ( t ) − x i ( t ) ) \beta(r)(x_j(t)-x_i(t)) β(r)(xj(t)xi(t)),移动步长项 s ϵ i s \epsilon_i sϵi;其中 s s s 为萤火虫的移动步长, ϵ i \epsilon_i ϵi 为服从正态分布的随机数向量,通常取值范围为 [ − 0.5 , 0.5 ] [-0.5,0.5] [0.5,0.5]。在实际中,通常取 β 0 = 1 , s = 0.2 \beta_0=1,s=0.2 β0=1,s=0.2

4.具体流程

( 1 ) (1) 1初始化:初始化萤火虫优化算法参数 γ , s \gamma,s γ,s,生成初代种群,计算种群每个个体的适应度 f ( x ) f(x) f(x)
( 2 ) (2) 2移动:计算每只萤火虫相对其它萤火虫的闪光强度 I ( r ) I(r) I(r),然后亮度小的萤火虫向着亮度大萤火虫的方向移动,得到新的位置 x ′ x' x,移动完后计算新的个体适应度 f ( x ′ ) f(x') f(x)
( 3 ) (3) 3终止:判断是否达到算法的终止条件,若没有达到,则继续进行步骤 ( 2 ) (2) 2,直至终止。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
萤火虫算法(Firefly Algorithm)是一种启发式优化算法,它模拟了萤火虫的行为,通过萤火虫的互相吸引和追逐来寻找最优解。在MATLAB中实现萤火虫算法可以用以下步骤: 1. 初始化萤火虫种群,包括每个萤火虫的位置和亮度。 2. 设置初始最小亮度和最大迭代次数。 3. 计算每个萤火虫之间的亮度和距离,根据亮度大小和距离远近更新每个萤火虫的位置。 4. 更新每个萤火虫的亮度。 5. 每次迭代时,比较所有萤火虫的亮度,如果出现更亮的萤火虫,则将其作为新的最小亮度。 6. 当达到最大迭代次数或满足停止准则时,输出最小亮度和对应的位置。 以下是MATLAB代码示例: ```matlab % 定义目标函数 fun = @(x) x(1)^2 + x(2)^2; % 初始化参数 n = 50; % 萤火虫数量 d = 2; % 维度 alpha = 0.5; % 吸引因子 beta0 = 0.2; % 衰减因子 gamma = 1; % 扰动因子 lb = [-5, -5]; % 变量下限 ub = [5, 5]; % 变量上限 max_iter = 100; % 最大迭代次数 % 初始化萤火虫位置和亮度 x = rand(n, d) .* (ub - lb) + lb; light = fun(x); % 迭代计算 iter = 1; while iter <= max_iter % 计算每个萤火虫之间的亮度和距离 for i = 1:n for j = 1:n if light(j) > light(i) r = norm(x(i, :) - x(j, :)); beta = beta0 * exp(-gamma * r^2); x(i, :) = x(i, :) + beta * (x(j, :) - x(i, :)) + alpha * (rand(1, d) - 0.5); x(i, :) = max(x(i, :), lb); x(i, :) = min(x(i, :), ub); light(i) = fun(x(i, :)); end end end % 更新最小亮度 [min_light, min_index] = min(light); if min_light < global_min_light global_min_light = min_light; global_min_pos = x(min_index, :); end % 输出当前迭代次数和最小亮度 disp(['Iteration ', num2str(iter), ': ', 'Minimum value = ', num2str(global_min_light)]) % 更新迭代次数 iter = iter + 1; end % 输出最优解 disp(['Global minimum found: ', num2str(global_min_light), ' at (', num2str(global_min_pos(1)), ', ', num2str(global_min_pos(2)), ')']) ``` 在上面的示例代码中,我们定义了一个简单的目标函数 $f(x_1, x_2) = x_1^2 + x_2^2$,并使用萤火虫算法来寻找最小值。我们使用了50个萤火虫,并设置了最大迭代次数为100。在每次迭代中,萤火虫之间的亮度和距离被计算,通过更新萤火虫位置来寻找更优解。最终,输出找到的全局最小值和对应的位置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值