经典蝙蝠算法MATLAB实现

为什么会有这么多基于群智能的算法,蚁群、粒子群、鱼群、烟花、炮竹、猪群、牛群、马群、羊群、猴群、鸡群。。。算法。??????

黑人问号.jpg

蝙蝠算法( BA) 是 Yang 教授于 2010 年基于群体智能提出的启发式搜索算法,是一种搜索全局最优解的有效方法。该算法是一种基于迭代的优化技术,初始化为一组随机解,然后 通过迭代搜寻最优解,且在最优解周围通过随机飞行产生局部新解,加强了局部搜索。与其他算法相比,BA 在准确性和有效性方面远优于其他算法,且没有许多参数要进行调整。

BA算法是模拟自然界中蝙蝠利用一种声呐来探测猎物、避免障碍物的随机搜索算法即模拟蝙蝠利用超声波对障碍物或猎物进行最基本的探测、定位能力并将其和优化目标功能相联系。BA算法的仿生原理将种群数量为的蝙蝠个体映射为D维问题空间中的NP个可行解,将优化过程和搜索模拟成种群蝙蝠个体移动过程和搜寻猎物利用求解问题的适应度函数值来衡量蝙蝠所处位置的优劣,将个体的优胜劣汰过程类比为优化和搜索过程中用好的可行解替代较差可行解的迭代过程。在蝙蝠搜索算法中,为了模拟蝙蝠探测猎物、避免障碍物,需假设如下三个近似的或理想化的规则:
  • 1)所有蝙蝠利用回声定位的方法感知距离,并且它们采用一种巧妙的方式来区别猎物和背景障碍物之间的不同。
  • 2)蝙蝠在位置xi以速度vi随机飞行,以固定的频率fmin、可变的波长λ和音量A0来搜索猎物。蝙蝠根据自身与目标的邻近程度来自动调整发射的脉冲波长(或频率)和调整脉冲发射率r属于[0,1]
  • 3)虽然音量的变化方式有多种但在蝙蝠算法中, 假定音量A是从一个最大值A0(整数)变化到固定最小值Amin

伪代码:

Maltab实现:

主函数代码:

其中evaluate是评价函数,自己写。

14 评论

    • Google Scholar上应该有吧,蝙蝠算法( BA) 是 Yang 教授于 2010。我也记不大清楚了。

  1. 第48行,Stemp=bestS-1+2*rand(1,dim)
    (1) 没有×A嘛,就这样Stemp=bestS-1+2*rand(1,dim)*A,我看论文里有xnew= xold+ ǫA
    (2)为什么中间要 -1+2* 这样写?bestS+rand(1,dim)*A 这样写对吗?

      • 我懂您的意思,我运行了下不对,这是我自己改的
        for i = 1:sizep
        pop(i,:) = Lb+(Ub-Lb).*rand(1,dim);
        end

  2. 您好,我想请教一下代码第32行中pfitness为什么是以dim为维度的矩阵而不是以sizep为维度呢

  3. 您好,我想请教一下为什么代码51行中是fitTemp<=pfitness(i)而不是fitTemp<evaluate(bestS(1,:)呢?

回复 类媛媛取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注