基于布谷鸟与蚁群算法融合的智能优化算法-附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索引的优化之LIKE模糊查询功能实现

《MySQL索引的优化之LIKE模糊查询功能实现》:本文主要介绍MySQL索引的优化之LIKE模糊查询功能实现,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前缀匹配优化二、后缀匹配优化三、中间匹配优化四、覆盖索引优化五、减少查询范围六、避免通配符开头七、使用外部搜索引擎八、分

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis