基于布谷鸟与蚁群算法融合的智能优化算法-附Matlab源码

基于布谷鸟与蚁群算法融合的智能优化算法


前言

针对标准布谷鸟搜索算法采用Levy飞行机制生成新的鸟巢,使得每次更新的鸟巢位置的随机性较大的问题,提出一种蚁群算法优化的布谷鸟搜索算法.首先,提出的算法将待更新的鸟巢位置作为蚁群优化算法的一组初始解在极小的范围内进行搜索寻优.之后,将此次蚁群优化算法搜索所得的解作为新的候选解.当蚁群优化算法搜索寻优的候选解优于Levy飞行产生的候选解时,替换掉Levy飞行的候选解.最后,再进行布谷鸟搜索算法择优算子,根据遗弃概率替换新的鸟巢位置,实现更新后的鸟巢位置更加趋向于最优解.通过六个典型的测试函数将提出的算法与标准布谷鸟算法进行了寻优性能比较.实验结果表明,提出的算法能够提升布谷鸟搜索算法候选解的质量,提高算法的收敛速度和收敛精度.


一、基本布谷鸟算法

1、原理

在自然界中,布谷鸟的繁殖习性是比较独特的,它是巢寄生鸟类,巢寄生是指利用其他鸟类的巢穴来孵化自己的蛋。若要提高蛋的存活率,则将宿主的蛋破坏掉或者伪装。若蛋被宿主发现,则宿主寻找新的鸟巢或者破坏蛋。这个是自然选择的过程,选择鸟巢的好坏直接影响下一代的生存率。通过布谷鸟搜寻鸟巢的过程来模拟出布谷鸟算法,该算法基于三种理想规则:

规则 1 每只布谷鸟一次只能产一枚卵,并随机选择地放入一个鸟巢中。
规则 2 在随机选择的一组鸟巢中,最好的寄生巢将会被保留到下一代。
规则3 鸟巢数量是固定的,被发现的概率 Pa ,若宿主发现蛋,它会将蛋摧毁或者重新寻找新巢。

2、执行过程如下图所示,

二、基本蚁群算法

在这里插入图片描述

三、融合算法

1、改进 CS 算法

标准的 CS 算法的优点有很多,如结构与其它智能算法来说相对于简单、运算过程中的参数较少、易于实现等优点,但同样也存在着一些不足,比如算法的搜索能力略显不足、搜索的速度也不是很快、在运算过程中容易陷入局部极值等等。本文拟打算改进标准布谷鸟算法,使其收敛过程消耗时间更少,收敛精度更高。
目前改进算法主要集中在三个方面,第一个方面,对种群初始化进行改进,第二个方面,对全局搜索公式的改进,第三点,利用蚁群算法的更新规则对局部搜索公式进行改进。
1.1 种群的初始化
标准的 CS 算法种群的初始化是在解空间里随机生成的,这样生成的解可能只分布在解空间的一小部分,在算法寻优过程中要费较长的时间去找寻解空间里的最优解。并且不能排除分布不均匀的可能性,分布不均匀不利于算法的全局收敛,为了进一步改进,这里根据混沌变化的情况,混沌变换有随机行规律性以及很遍历,利用混沌变换初始化种群,使初始化的种群具有多样性,可以有利于算法的全局收敛,变换公式如公式(1)所示,
(1) x j + 1 = η x i ( 1 − x i ) , x i ∈ ( 0 , 1 ) {x_{j + 1}} = \eta {x_i}(1 - {x_i}),{x_i} \in (0,1) xj+1=ηxi(1xi),xi(0,1)
式中, 为控制参数,当 取值范围几乎均匀分布在整个区域。
1.2 全局搜索公式的改进
标准的 CS 算法在执行全局搜索阶段依赖的是 Levy 飞行,但是 Levy 飞行是一个无法控制的过程,搜索过程中的步长不好确定,可能一下大,也可能一下小,这样算法就无法协调好算法的探索能力和开发能力,当搜索的步长较大的时候,算法的探索能力强,更倾向于全局搜索,搜索速度较快,且便于搜索到全局最优解,其不足之处是搜索精度偏低;当算法的搜索步长较小的时候,算法的开发能力较强,在解空间进行局部细致搜索,虽然搜索的速度变慢了时间变长了,但是算法的搜索精度整体较优,需在多个较小区间内搜索最优解。
正如标准 CS 算法的搜索全部是依赖随机游走,不能调节好算法的探索能力和开发能力,其收敛速度以及精度无法得到保证,基于以上的分析,在布谷鸟算法全局搜索时本文提出一种自适应步长的全局搜索更新公式,可以根据当前的解空间的状态,来动态调整步长大小,如果当前的解比整个种群解的均值要大,说明这个时候,当前解需要较大步长,如果当前的解比整个种群的均值要小,说明当前的解需要较小的步长,因为当前的解以及逼急最优值,这个时候更小的步长可以提供局部的搜索能力,更容易找到更加好的解。
自适应调整算法,根据当前解的情况,对算法的开拓能力以及搜索能力进行了很好的权衡,能够更加快速的收敛,获得更高的精度。
全局搜索的算法更新的如公式(2)所示。
(2) α = { α min ⁡ − ( α min ⁡ − α min ⁡ ) ∗ ( f − f min ⁡ ) / ( f a v g − f min ⁡ ) f < f a v g α max ⁡ f > f a v g \alpha = \left\{ \begin{array}{l} {\alpha _{\min }} - ({\alpha _{\min }} - {\alpha _{\min }})*(f - {f_{\min }})/({f_{avg}} - {f_{\min }}){\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} f < {f_{avg}}\\ {\alpha _{\max }}{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} f > {f_{avg}} \end{array} \right. α={αmin(αminαmin)(ffmin)/(favgfmin)f<favgαmaxf>favg
表示布谷鸟算法鸟巢当前的目标函数值。当各鸟巢的目标值趋于一致或趋于局部最优时,将使惯性权重增大,而各鸟巢的目标值比较分散时,使惯性权重 减小,同时对于目标函数值优于平均目标值的鸟巢,其对应的惯性权重因子 较小,从而保留了该鸟巢,反之对于目标函数值差于平均目标值的鸟巢,其对应的惯性权重因子 较大,使得该微粒向较好的搜索区域靠拢。

2、基于蚁群更新规则的局部搜索方法

蚁群算法在局部搜索以及淘汰的时候,会计算每个蚂蚁经过的路径长度,记录目前的最短路径,同时更新路径上的信息素。为了避免残留信息素过多而淹没启发信息,在每只蚂蚁走完一步或者完成对所有n个城市的遍历(也即一个循环结束)后,要对残留信息进行更新处理。由此,在鸟巢局部搜索方面做以下改进,
算法在进行完全局搜索后,每个鸟巢任意产生一个随机数 R ,用均匀分布的随机数
与 Pa比较,如果随机数 R 小于Pa ,则鸟巢被抛弃并重新生成一个新的鸟巢。在标准 CS 算法内,当布谷鸟鸟蛋i 被宿主鸟发觉的时候是随机选取另一鸟巢 j 位置,应用二者交叉变异的方法调整鸟巢位置,即算法的局部搜索公式。
本文根据蚁群更新规则的启发,会计算每个鸟巢的变化,然后在变化量的基础上,再加上最后一个鸟巢的适应度增量,以及当前最好解的倍数值,使得新生成的鸟巢方位总是朝着质量较优的方位移,具体的公式如公式(3)所示。
动,具体公式如下:
(3) x i t + 1 = x i t + ( γ + Δ x i t ) ( x j t − x i t ) Δ x i t = [ ∑ k = 1 m x i k , ( 1 − σ ) x b e s t ] \begin{array}{l} x_i^{t + 1} = x_i^t + (\gamma + \Delta x_i^t)(x_j^t - x_i^t)\\ \Delta x_i^t = [\sum\limits_{k = 1}^m {x_i^k,(1 - \sigma ){x_{best}}} ] \end{array} xit+1=xit+(γ+Δxit)(xjtxit)Δxit=[k=1mxik,(1σ)xbest]
表示残留信息的变化量,在更新的时候,希望新生的巢穴朝着信息残留更多的地方前进。


四、实验结果和总结

测试函数是f1~f6,分别是

f1:
function s = sphere(x)
n = length(x);
s = 0;
for j = 1:n
    s = s+x(j)^2; 
end

f2:% % rastrigin
function y= sphere(x)
n = length(x);
s = 0;
for j = 1:n
    s = s+(x(j)^2-10*cos(2*pi*x(j))); 
end
y = 10*n+s;

f3:%non_continuous_rastrigin
function val= sphere(x)
n=size(x,2);
val=0;
for i=1:n
    if abs(x(i))<1/2
        y=x(i);
    else
        y=round(2*x(i))/2;
    end
    val=val+y^2-10*cos(2*pi*y)+10;
end

f4:% Sphere function 
function s = sphere(x)
n = length(x);
s = 0;
for j = 1:n
    s = s+x(j)^2; 
end

f5:% Griewank function
function y= sphere(x)
n = length(x);
fr = 4000;
s = 0;
p = 1;
for j = 1:n; 
    s = s+x(j)^2; end
for j = 1:n; 
    p = p*cos(x(j)/sqrt(j)); 
end
y = s/fr-p+1;

f6:% schwefel_2_22
function Schw = sphere(Swarm)
% [SwarmSize, Dim] = size(Swarm);
Schw = sum((abs(Swarm))) + prod((abs(Swarm)));

测试结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
总结:从结果可以看出,改进之后的智能优化算法,比改进之前,能够更快的收敛。
源码链接:https://mianbaoduo.com/o/bread/mbd-YZqbmJhv
参考文献:
【1】https://xueshu.baidu.com/usercenter/paper/show?paperid=1j420t90vm4v0a90444e0x2087489648&site=xueshu_se
【2】Cuckoo search via Lévy flights. Yang XS ↩

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值