智能优化算法之磷虾群算法(KHA)的实现(Python附源码)

一、磷虾群算法的实现思路

磷虾群算法(Krill Herd Algorithm,KHA)是由Gandomi等人于2012年提出的一种群智能优化算法,该算法主要对磷虾个体的聚集行为进行模拟,模拟的过程中磷虾个体的移动行为主要受三个方面的影响,分别为其他个体的存在引起的移动、觅食活动引起的移动以及随机扩散,除此之外,还将遗传算法中的交叉、变异这两个遗传算子加入到算法思想中以增加算法的多样性。
下面将分别就磷虾个体位置移动的几种影响因素展开相关介绍。

1、其他个体引起的移动

一般在磷虾的移动过程中,主要受到其一定范围内的其他个体的影响、种群中位置信息最优的个体的影响以及在上次移动中的影响惯性,因此可以将其他个体引起的移动使用下列公式进行归纳:
在这里插入图片描述

其中第i个个体在本次移动过程中受到其他个体影响而进行的运动等于受到其他个体影响的移动速度加上上次受到其他个体影响的移动速度,ωn为惯性权重,取值范围在0到1之间,Nmax表示最大诱导速度,αi表示第i个个体受到一定范围内的其他个体以及种群中位置信息最优的个体的影响,其计算公式为:
在这里插入图片描述

当磷虾群受到一定范围内其他个体的影响时,主要伴随着吸引或排斥运动,此影响的计算公式分别如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其中x_i与x_j分别表示第i个个体以及对其造成影响的第j个个体的位置信息,f_i与f_j分别对应着它们的适应度值,f_worst与f_best分别为种群中最低的适应度值与最高的适应度值,ε为避免分母为0而设置的极小值, M为个体i周围能对其造成影响的个体总数。由上述公式可知,个体受到周围个体的影响主要由两个因素决定,一个是不同个体之间的距离,另一个是不同个体之间的适应值比较,当周围个体较第i个个体的适应度值更高,则f_ij为正值,个体将朝向周围个体移动,反之则个体远离此个体移动。
由于磷虾个体的位置是在不断变化的,因此在每一次移动位置后都需要对能够影响其移动的个体进行确定,判定的依据为个体之间的空间距离,公式如下:
在这里插入图片描述

其中d_si为磷虾之间的感应距离,N为磷虾群的个体总数,若种群中某个个体个体与个体i之间的空间距离小于此感应距离,则个体i将会受到此个体的影响。
当磷虾个体受到种群中适应度值最高的个体影响时,此影响的计算公式如下:
在这里插入图片描述

其中f_ibest与x_ibest的计算方式与个体受到周围某个个体影响的计算方式一致,C^best表示适应度最高的个体对第i个个体进行影响的有效系数,其计算公式如下:
在这里插入图片描述

其中rand为0到1之间的随机数,I为当前迭代次数,I_max为预设的最大迭代次数,此有效系数随着迭代次数的增加不断增大。

2、觅食移动

磷虾的觅食移动主要由两个因素进行诱导,一个是食物所在的位置,另一个则是先前关于食物位置的相关经验,可以将觅食移动使用下列公式进行描述:
在这里插入图片描述

其中个体i在本次移动的觅食移动量等于受到食物的影响量加上上次移动中的觅食移动量,ω_f为惯性权重,取值范围在0到1之间,V_f为觅食速度,而受到食物的影响β_i主要由两个部分组成,一个为当前食物的吸引力,另一个则为第i个个体的历史最优位置信息的影响,其计算公式为:
在这里插入图片描述

通常食物的具体位置是无法确定的,但可以通过每次迭代过程中个体的位置及其适应度值对食物的位置进行估计,估计的方式如下:
在这里插入图片描述

通过估计食物的位置计算出其对应的适应度值,然后通过下列公式计算得出当前食物对个体的吸引力:
在这里插入图片描述

其中f_ifood与x_ifood的计算方式与个体受到周围某个个体影响的计算方式一致,而C^food表示食物影响系数,由于随着时间的流逝,食物对个体的影响将逐渐减小,因此食物系数取值是在不断变化的,其计算公式如下:
在这里插入图片描述

一般磷虾群会被食物逐渐吸引,从而到达食物所在的位置,而由前面的定义可知食物所在的位置即为全局最优解,因此将食物影响系数按照上述方式进行设置有助于种群进行全局收敛。
第i个个体的历史最优位置信息对此个体位置移动的影响主要通过下列公式进行描述:
在这里插入图片描述

其中f_ibest与x_ibest的计算方式与个体受到周围某个个体影响的计算方式一致。

3、物理随机扩散移动

在磷虾个体进行物理扩散移动时,主要是基于最大扩散速度以及随机的扩散方向来进行描述,其计算公式为:
在这里插入图片描述

其中D^max为最大扩散速度,δ为随机方向矢量,该矢量的数组为-1到1之间的随机值。在磷虾个体进行物理扩散行为时,其随机方向矢量不受其他因素影响,但其最大扩散速度会随着迭代次数的增加而在不断减小,这主要是因为当磷虾个体的位置信息越好,则越不需要通过物理扩散进行位置移动,随着迭代次数的增加,个体的位置信息也在逐渐变好,则扩散速度相应逐渐变小。结合最大扩散速度不断减小的远离,可以磷虾个体物理扩散移动的计算公式总结如下:
在这里插入图片描述

4、主要移动行为对磷虾个体造成的综合影响

磷虾个体位置移动主要受到其他个体的存在引起的移动、觅食活动引起的移动以及随机扩散三个方面的影响,可将使用拉格朗日模型将其移动距离与这三个因素之间的关系归纳如下:
在这里插入图片描述

其中N_i是由其他磷虾个体引起的运动,F_i是觅食运动,D_i是磷虾个体的随机物理扩散。

5、磷虾个体位置移动量计算

结合磷虾个体主要移动行为对其造成的综合影响,可将其在每次迭代中的位置移动公式归纳如下:
在这里插入图片描述

在上述公式中∆t为速度的比例因子向量,因此该值的设置主要与优化问题的搜索空间直接相关,一般可以使用下列公式对其进行定义:
在这里插入图片描述

其中V表示优化问题中的变量总数,UB_j与LB_j表示第j个变量的上下界,C_t为0到2之间的常数。

6、遗传与变异操作

为了提高算法的性能,磷虾群算法将遗传算法中的交叉操作与变异操作引入其中,以此来提高种群的多样性。交叉操作主要由交叉概率Cr进行控制,对个体位置信息的交叉操作可以使用下列公式进行描述:
在这里插入图片描述

上述交叉过程可以归纳为首先根据个体i当前的适应度值与历史最优适应度值的相关情况计算个体i的交叉概率,然后针对个体i的位置信息中的每个变量随机生成一个0到1之间均匀分布的随机数,当此数小于个体i的交叉概率时,则随机选择种群中的一个个体的对应变量作为个体i的新变量,反之则该变量保持不变。
变异操作主要由变异概率Mu进行控制,对个体位置信息的变异操作可以使用下列公式进行描述:
在这里插入图片描述

其中x_(gbest,m)表示种群历史最优位置信息的第m个变量,x_(p,m)与x_(q,m)表示随机选取的两个个体的第m个变量,μ表示0到1之间的随机数。
上述变异过程可以归纳为首先根据个体i当前的适应度值与历史最优适应度值的相关情况计算个体i的变异概率,然后针对个体i的位置信息中的每个变量随机生成一个0到1之间均匀分布的随机数,当此数小于个体i的变异概率时,对该变量进行变异操作,反之则该变量保持不变。

二、算法步骤

使用磷虾群算法对优化问题进行求解时的具体步骤可以归纳如下:

  1. 设置种群的个体数量、最大诱导速度N_max、惯性权重ω_n初始值、觅食速度V_f、惯性权重ω_f初始值以及参数C_t初始值;
  2. 将磷虾群个体的位置信息作为待优化问题的解,根据待优化问题的解的范围,随机初始化种群所有个体的位置信息;
  3. 根据待求解问题,计算种群中每个个体的适应度值,将其作为每个个体的历史最优适应度值,将此时对应的位置信息作为每个个体的历史最优位置信息,之后对种群个体的适应度值进行比较,将最高适应度值作为种群的历史最优适应度值,将其对应的位置信息作为种群的历史最优位置信息;
  4. 根据当前迭代次数及迭代周期对惯性权重ω_n、ω_f、参数C_t、食物影响系数以及种群最优个体影响系数进行更新;
  5. 依次对每个磷虾个体计算其他个体引起的移动量、觅食行为的移动量以及物理随机扩散的移动量;
  6. 按照上述三种移动量对个体的位置信息进行更新;
  7. 针对每个个体的适应度值以及个体的历史最优适应度值计算其交叉概率与变异概率;
  8. 遍历每个个体位置信息中的每个变量,按照个体的交叉概率与变异概率对所有变量进行交叉与变异操作;
  9. 计算每个个体进行交叉与变异操作后的位置信息以及对应的适应度值,对个体的历史最优适应度值、历史最优位置信息以及种群的历史最优适应度值、历史最优位置信息进行更新;
  10. 根据预设的迭代次数重复步骤4到步骤9,当达到最大迭代次数时停止迭代过程,输出种群的历史最优位置信息,此位置信息即为算法优化后获得的问题最优解。

三、实例

待求解问题:
Rosenbrock’s,取值范围为[-10,10],取值范围内的理想最优解为0,将其搜索的空间维度设为20。
在这里插入图片描述

实现源码:

#库的导入
import numpy as np
import matplotlib.pyplot as plt

#待求解问题,求解问题为求最小值
def function(x):
    y1 = 0
    for i in range(len(x) - 1):
        y2 = 100 * ((x[i + 1] - x[i] ** 2) ** 2) + (x[i] - 1) ** 2
        y1 = y1 + y2
    y = abs(0 - y1)
    return y


m = 50   #种群数量
imax = 100   #迭代次数
dimen =
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

七层楼的疯子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值