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

2023-11-11 19:30

本文主要是介绍基于布谷鸟与蚁群算法融合的智能优化算法-附Matlab源码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

目录

  • 基于布谷鸟与蚁群算法融合的智能优化算法
  • 前言
  • 一、基本布谷鸟算法
  • 二、基本蚁群算法
  • 三、融合算法
    • 1、改进 CS 算法
    • 2、基于蚁群更新规则的局部搜索方法
  • 四、实验结果和总结


前言

针对标准布谷鸟搜索算法采用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:ns = s+x(j)^2; 
endf2:% % rastrigin
function y= sphere(x)
n = length(x);
s = 0;
for j = 1:ns = 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:nif abs(x(i))<1/2y=x(i);elsey=round(2*x(i))/2;endval=val+y^2-10*cos(2*pi*y)+10;
endf4:% Sphere function 
function s = sphere(x)
n = length(x);
s = 0;
for j = 1:ns = s+x(j)^2; 
endf5:% 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 ↩

这篇关于基于布谷鸟与蚁群算法融合的智能优化算法-附Matlab源码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/392353

相关文章

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

Rust 智能指针的使用详解

《Rust智能指针的使用详解》Rust智能指针是内存管理核心工具,本文就来详细的介绍一下Rust智能指针(Box、Rc、RefCell、Arc、Mutex、RwLock、Weak)的原理与使用场景,... 目录一、www.chinasem.cnRust 智能指针详解1、Box<T>:堆内存分配2、Rc<T>:

java 恺撒加密/解密实现原理(附带源码)

《java恺撒加密/解密实现原理(附带源码)》本文介绍Java实现恺撒加密与解密,通过固定位移量对字母进行循环替换,保留大小写及非字母字符,由于其实现简单、易于理解,恺撒加密常被用作学习加密算法的入... 目录Java 恺撒加密/解密实现1. 项目背景与介绍2. 相关知识2.1 恺撒加密算法原理2.2 Ja

Nginx屏蔽服务器名称与版本信息方式(源码级修改)

《Nginx屏蔽服务器名称与版本信息方式(源码级修改)》本文详解如何通过源码修改Nginx1.25.4,移除Server响应头中的服务类型和版本信息,以增强安全性,需重新配置、编译、安装,升级时需重复... 目录一、背景与目的二、适用版本三、操作步骤修改源码文件四、后续操作提示五、注意事项六、总结一、背景与

Docker多阶段镜像构建与缓存利用性能优化实践指南

《Docker多阶段镜像构建与缓存利用性能优化实践指南》这篇文章将从原理层面深入解析Docker多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少... 目录一、技术背景与应用场景二、核心原理深入分析三、关键 dockerfile 解读3.1 Docke

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变