人工智能自动组方实习笔记2—萤火虫算法

本文记录的是在实习人工智能自动组方时有关聚类分类时阅读过的一篇相关论文,虽然在最后没有使用该算法思想,但我觉得这种随机搜索最优解的方法对于很多场景都有应用,则将其整理记录下来。 如果有哪位小伙伴在做相关内容,可以发邮件联系([email protected])与我互相学习
以下为该项目的系列文章
工作记录
萤火虫算法
FCM模糊C聚类
爬虫及python代码
数据预处理
中医分类及python代码
数据预处理python代码
基于字典的最大正向匹配
基于欧式距离的方剂推荐
基于方剂相似性的方剂推荐
GitHub地址

萤火虫算法

萤火虫算法是一种新颖的进化算法,是根据自然界中萤火虫的发光行为所构造出的基于群体搜索的智能优化算法。该算法的基本思想是利用在一定范围内萤火虫发光低的向发光高的萤火虫移动,从而有效的实现寻找最优解。
由于萤火虫算法原理相对简单、且易于实现;而且还具有良好的全局寻优能力,能够快速地收敛于最优解等特性,现在萤火虫算法已经应用到工业优化、动态路径规划、图像处理、经济调度等领域。
在萤火虫算法中的每个个体都被看做萤火虫,亮度低的萤火虫被亮度高的萤火虫吸引,亮度越高越好。对于每个个体而言,其他个体对自身的吸引程度和发光亮度根据距离变化而变化。
在算法初始化时,将所有个体(及所有的萤火虫)随机分布在空间中,每个萤火虫的最大吸引度设置为$ \beta _0 $每个萤火虫在自己的感知范围内向最高亮度的萤火虫移动,完成初始值设置之后,FA算法循环迭代:1每个个体的吸引度更新,位置更新,目前最亮的萤火虫随机移动位置。

算法迭代

吸引度更新

在算法中,每个萤火虫都有自己的吸引度范围,初试吸引度为 β \beta β,在空间中传播时随距离被衰减,定义 γ \gamma γ为荧光的吸收率,则吸引度的更新为:
β ( γ ) = β 0 ∗ e − γ R j \beta(\gamma) = \beta_0*e^{-\gamma R_j} β(γ)=β0eγRj
其中 R j R_j Rj定义为两个萤火虫之间的距离, β 0 \beta_0 β0为当两个萤火虫距离 R j = 0 R_j = 0 Rj=0时的吸引度,其中
R 0 ∈ [ 0 , 1 ] , γ ∈ [ 0 , 10 ] R_0 \in [0,1],\gamma \in [0,10] R0[0,1],γ[0,10]

所在位置更新

在算法中,萤火虫 i i i向萤火虫 j j j移动,必须满足的条件:

  • i i i j j j的感知范围内(简化该步骤,可以将感知范围设置为全局,及每个萤火虫都可以被其他所有的萤火虫感知到)
  • j j j的发光亮度高于 i i i
    则低亮度萤火虫 i i i的位置移动:
    x i ( t + 1 ) = x i ( t ) + β 0 ∗ e − γ R j ∗ ( x j ( t ) − x i ( t ) ) + α ∗ ( r 1 − 0.5 ) ∗ x n x_i(t+1) = x_i(t) + \beta_0*e^{-\gamma R_j}*(x_j(t)-x_i(t)) + \alpha *(r_1 - 0.5)*x_n xi(t+1)=xi(t)+β0eγRj(xj(t)xi(t))+α(r10.5)xn
    其中 x i ( t ) x_i(t) xi(t) i i i个萤火虫在第 t t t代时的位置向量, α ∈ [ 0 , 1 ] , r 1 ∈ [ 0 , 1 ] \alpha \in [0,1],r_1 \in [0,1] α[0,1],r1[0,1],如果 r 1 < 0.5 r_1<0.5 r1<0.5,则 x n 取 值 x m a x − x i ( t ) x_n取值x_{max} -x_i(t) xnxmaxxi(t),否则 x n x_n xn取值为 x i ( t ) − x m i n x_i(t)-x_{min} xi(t)xmin x m a x x_{max} xmax是在搜索空间的位子向量上限, x m i n x_{min} xmin是搜索空间的位置向量下限。
    ###最亮萤火虫随机移动
    x b ( t + 1 ) = x b ( t ) + α ( r 2 − 0.5 ) ∗ x n x_{b(t+1)} = x_{b(t)} +\alpha (r_2-0.5)*x_n xb(t+1)=xb(t)+α(r20.5)xn
    其中 x b ( t ) x_{b(t)} xb(t)是在 t 时刻的全局最优位置(及全局最优解), r 2 r_2 r2为[0,1]之间的随机数,同上若 r 2 < 0.5 r_2<0.5 r2<0.5,则 x n 取 值 x m a x − x b ( t ) x_n取值x_{max} -x_{b(t)} xnxmaxxb(t),否则 x n x_n xn取值为 x b ( t ) − x m i n x_{b(t)}-x_{min} xb(t)xmin x m a x x_{max} xmax是在搜索空间的位子向量上限, x m i n x_{min} xmin是搜索空间的位置向量下限。

吸引度选择策略

在FA算法中,萤火虫在感知范围内采取的贪婪算法的随机选择机制,如果选择了距离较远的个体,则在运动过程中时间过长,如果是选择较近但亮度较低则收敛效果不好,所以在移动时需要考虑到距离和亮度两个标准,具体策略如下:
P i j = x B ( t ) x B ( t ) + R j P_{ij } = {x_{B(t)} \over {x_{B(t) + R_j}}} Pij=xB(t)+RjxB(t)
每个萤火虫选择 P i j P_{ij} Pij值最高的个体移动,
其中 R j = ∣ ∣ x i − x j ∣ ∣ 2 R_j = ||x_i -x_j ||_2 Rj=xixj2为第二范式。

算法流程

  1. 初始化问题,将个体转化为萤火虫,设置亮度函数,并初始化所有参数 β , γ , α \beta, \gamma,\alpha β,γ,α
  2. 确定每个萤火虫两两之间的距离
  3. 计算对周围萤火虫的吸引度
  4. 对于每个萤火虫而言,找到吸引度最高的萤火虫个体,并更新位置
  5. 使最亮的萤火虫随机移动位置
  6. 如果完成迭代或者达到精度则结束,否则转第2步

你可能感兴趣的:(机器学习,人工智能自动组方)