改进正弦算法引导的蜣螂优化算法(MSADBO)

news2024/9/23 23:28:37

概述

蜣螂优化算法由于其寻优速度和收敛精度,自2023年问世以来,热度一直很高。本篇文章对蜣螂算法进行改进,改进思路是参考2023年6月25号发表在知网的一篇文献(文献放在了文章末尾)。

改进的蜣螂优化算法融合了改进的正弦算法,自适应高斯-柯西混合变异扰动和Bernoulli混沌映射。

01原理简述

  • 融合改进的正弦算法

    改进正弦算法(MSA)策略是受到正余弦算法、正弦算法和指数正余弦算法函 数以 及 改进的正弦余弦算法等各类相关算法的启发,利用数学中的正弦函数进行迭代寻优, 具有较强的全局探索能力。同时在位置更新过程中引入自适应的可变惯性权重系数 使算法能够对局部区域进行充分搜索,使全局探索和局部开发能力达到良好的平 衡。改进正弦算法位置更新公式如下所示:

636825d83aa9294049bb4585c1166df0.png

    r1为非线性递减函数,r2是区间[0,2π]上的随机数,r3是区间[-2, 2]上的随机数。r1表达式如下:

486f020cc4eba6ae2ba835ee86a43b4b.png

50f3e2f58016a39c0461856bfa37f615.png

    为进一步改进 DBO算法协调全局的探索与局部开发 的能力,该文献引入了正弦引导机制,MSA 作为替代蜣螂正切跳舞的策略嵌入DBO算法,即在滚球阶段对整个蜣螂个体进行正弦的操作引导蜣螂位置更新,改进后的公式如下:

219888a6c6654fe0438b0b36b75a963f.png

    其实就是将蜣螂正切跳舞阶段的公式进行了改进,融合和正弦算法,然后对正弦算法的一些参数因子进行了改进。

  • 融合自适应高斯-柯西混合变异扰动

    在智能优化算法中引入变异算子,既可以增强种群的多样性,又可以使算法避免陷入局部极小,对每个个体进行变异扰动,然后比较其变异前后的位置,选择较好的位置进入下一次迭代,充分增加蜣螂的多样性,扩大种群搜索范围,具体公式如下:

052ce0a0982096a84f05b7b25bfbd0e5.png

  • Bernoulli混沌映射策略

        该文献采用 Bernoulli映射初始化蜣螂个体位置,先利用Bernoulli映射关系将所得的值投影到混沌变量空间内,然后将产生的混沌值通过线性变换映射到算法初始空间中,Bernoulli映射具体表达式为:

b961cc503a8512ae47d3502d345f4e62.png

关于混沌映射,之前整理过十种混沌映射优化智能算法,新关注的童鞋可以参考一下这篇文章。。10种混沌映射优化灰狼算法,可一键切换,可用于优化所有群智能算法,以灰狼算法为例进行介绍

02 改进效果

为了看出改进效果,作者同时与白鲸算法(BWO),麻雀算法(SSA),沙猫群优化算法(SCSO),蜣螂优化算法(DBO),以及改进正弦算法引导的蜣螂优化算法(MSADBO),一共五种算法进行对比。在CEC2005函数上测试,设置粒子个数为50,迭代次数为1000。截图前10个函数供大家参考。

fa4088eb35e548de7e0788205aef878f.png

2213142023339cbafa1c5582ae1c53dc.png

5b7c6e373de6fdf017d75d938ed9d626.png

5655a924911764c746f3c36a2604c605.png

fe43ff66bda2bb2ce8c8a95d36a8a316.png

ebac39444e8ea9fde866ecdb896c7129.png

97eb1ea1e37e039b5c5d4582105d3810.png

c3932ba8276c5028cfcaba5d874993d4.png

c9a35d0d35eb649acd4ae4a16c0d9dd5.png

a0c2840bc66e147c313f6e52dfb4cccb.png

可以看到,改进正弦算法引导的蜣螂优化算法(MSADBO)表现还是非常不错的!除了第五个函比不上麻雀算法之外,其他九个函数效果都是十分不错的。

03核心代码展示

%% 淘个代码 %%
% 2023/07/20 %
%微信公众号搜索:淘个代码
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all 
clc
close
PD_no=50;      %Number of sand cat
F_name='F14';     %Name of the test function
Max_iter=1000;    %Maximum number of iterations
[LB,UB,Dim,F_obj]=CEC2005(F_name); %Get details of the benchmark functions
%% BWO    
[Best_pos,Best_score, BWO_cg_curve ] = BWO(PD_no,Max_iter,LB,UB,Dim,F_obj); % Call BWO
fprintf ('Best solution obtained by BWO: %s\n', num2str(Best_score,'%e  '));
display(['The best optimal value of the objective funciton found by BWO  for ' [num2str(F_name)],'  is : ', num2str(Best_pos)]);


%% SSA    
[Best_pos,Best_score, SSA_cg_curve ] = SSA(PD_no,Max_iter,LB,UB,Dim,F_obj); % Call SSA
fprintf ('Best solution obtained by SSA: %s\n', num2str(Best_score,'%e  '));
display(['The best optimal value of the objective funciton found by SSA  for ' [num2str(F_name)],'  is : ', num2str(Best_pos)]);


%% SCSO
[BsSCSO,BpSCSO,SCSO_cg_curve]=SCSO(PD_no,Max_iter,LB,UB,Dim,F_obj); % Call MSCSO
fprintf ('Best solution obtained by SCSO: %s\n', num2str(BsSCSO,'%e  '));
display(['The best optimal value of the objective funciton found by SCSO  for ' [num2str(F_name)],'  is : ', num2str(BpSCSO)]);


%% DBO    
[Best_pos,Best_score, DBO_cg_curve ] = DBO(PD_no,Max_iter,LB,UB,Dim,F_obj); % Call DBO
fprintf ('Best solution obtained by DBO: %s\n', num2str(Best_score,'%e  '));
display(['The best optimal value of the objective funciton found by DBO  for ' [num2str(F_name)],'  is : ', num2str(Best_pos)]);


%% MSADBO    
[MSADBOBest_pos,MSADBOBest_score, MSADBO_cg_curve ] = MSADBO(PD_no,Max_iter,LB,UB,Dim,F_obj); % Call MSADBO
fprintf ('Best solution obtained by MSADBO: %s\n', num2str(MSADBOBest_score,'%e  '));
display(['The best optimal value of the objective funciton found by MSADBO  for ' [num2str(F_name)],'  is : ', num2str(MSADBOBest_pos)]);


%%
CNT=40;
k=round(linspace(1,Max_iter,CNT)); %随机选CNT个点
% 注意:如果收敛曲线画出来的点很少,随机点很稀疏,说明点取少了,这时应增加取点的数量,100、200、300等,逐渐增加
% 相反,如果收敛曲线上的随机点非常密集,说明点取多了,此时要减少取点数量
iter=1:1:Max_iter;
figure('Position',[154   145   894   357]);
subplot(1,2,1);
func_plot(F_name);     % Function plot
title('Parameter space')
xlabel('x_1');
ylabel('x_2');
zlabel([F_name,'( x_1 , x_2 )'])
subplot(1,2,2);       % Convergence plot
h1 = semilogy(iter(k),BWO_cg_curve(k),'y-+','linewidth',1);
hold on
h2 = semilogy(iter(k),SSA_cg_curve(k),'k-s','linewidth',1);
hold on
h3 = semilogy(iter(k),SCSO_cg_curve(k),'m-^','linewidth',1);
hold on
h4 = semilogy(iter(k),DBO_cg_curve(k),'b-*','linewidth',1);
hold on
h5 = semilogy(iter(k),MSADBO_cg_curve(k),'g-o','linewidth',1);
xlabel('Iteration#');
ylabel('Best fitness so far');
legend('BWO','SSA','SCSO','DBO','MSADBO');

04参考文献

[1]潘劲成,李少波,周鹏等.改进正弦算法引导的蜣螂优化算法[J/OL].计算机工程与应用:1-21[2023-07-31].http://kns.cnki.net/kcms/detail/11.2127.TP.20230626.1952.024.html

05

代码获取,点击下方卡片,后台回复关键词:

MSADBO

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/833987.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis 变慢了 解决方案

一、Redis为什么变慢了 1.Redis真的变慢了吗? 对 Redis 进行基准性能测试 例如,我的机器配置比较低,当延迟为 2ms 时,我就认为 Redis 变慢了,但是如果你的硬件配置比较高,那么在你的运行环境下&#xff…

Cloud Keys Delphi Edition Crack

Cloud Keys Delphi Edition Crack 云密钥使基于云的密钥和秘密管理与任何支持的平台或开发技术轻松集成。这些易于使用的组件可用于与流行的云密钥管理提供商安全集成,如Amazon KMS、Amazon AWS Secrets、Azure key Vault、Google cloud KMS和Google Secret Manager…

自动化测试工具在软件测试中扮演了重要的角色

随着软件开发行业的发展和变革,软件测试变得愈发重要。在传统的软件测试过程中,测试人员需要手动执行测试用例,耗费大量时间和资源。然而,随着自动化测试工具的出现,软件测试的效率和质量得到了极大的提升。 自动化测试…

用Python自制软件,看视频畅通无阻

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 一个账号只能登录一台设备?涨价就涨价,至少还能借借朋友的,谁还没几个朋友,搞限制登录这一出,瞬间不稀罕了 这个年头谁还不会点技术了,直接拿python自制一…

Excel中——日期列后添加星期

需求:在日期列中添加星期几? 第一步:打开需要添加星期的Excel文件,在日期后面添加日期 第二步:选择日期列,点击鼠标右键,在下拉列表中,选择“设置单元格格式” 第三步: 在…

Miniled透明屏:超薄、轻便,还有哪些特点?

Miniled透明屏是一种新型的显示屏技术,它采用了微小的LED灯珠作为显示单元,通过透明的材料进行封装,使得整个屏幕具有透明的特性。Miniled透明屏具有以下几个特点: 首先,Miniled透明屏具有高亮度和高对比度的特点。 由…

TypeScript实战篇 - TS实战: 服务层开发-令牌

目录 接口说明 服务设计 WHY NOT Socket? huatian/svc【node.js 接口服务端】 huatian-svc/package.json huatian-svc/tsconfig.json huatian-svc/src/main.ts huatian-svc/nodemon.json huatian-svc/src/context/AccountContext.ts huatian-svc/src/repo…

软件测试面试真题 | 什么是PO设计模式?

面试官问:UI自动化测试中有使用过设计模式吗?了解什么是PO设计模式吗? 考察点 《page object 设计模式》:PageObject设计模式的设计思想、设计原则 《web自动化测试实战》:结合PageObject在真实项目中的实践与应用情…

活动目录密码更改

定期更改密码是一种健康的习惯,因为它有助于阻止使用被盗凭据的网络攻击,安全专家建议管理员应确保用户使用有效的密码过期策略更改其密码。 管理员可以通过电子邮件通知用户在密码即将过期时更改其密码,但在许多组织中,用户只能…

举个栗子!Tableau 技巧(256):灵活折叠文本表的多级数据行

通常,Tableau 默认的图表分层结构是统一打开或关上,有什么办法可以按需选择展开或折叠?如下示例:单击“”展开层级,单击“-“收起层级。 可以试试集操作!今天的栗子,就来分享具体实现方法吧~ 本…

解读Spring的context:property-placeholder

在spring中&#xff0c;如果要给程序定义一些参数&#xff0c;可以放在application.properties中&#xff0c;通过<context:property-placeholder>加载这个属性文件&#xff0c;然后就可以通过value给我们的变量自动赋值&#xff0c;如果你们的程序可能运行在多个环境中&…

什么是头脑风暴法,有哪些原则?

1. 什么是头脑风暴法&#xff1f; 头脑风暴法&#xff08;Brainstorming&#xff09;是一种用于创造性思维和问题解决的方法。它旨在通过集体讨论和思维碰撞&#xff0c;激发团队成员的创造力和想象力&#xff0c;从而产生新的创意和解决方案。 在头脑风暴会议中&#xff…

数据结构 10-排序4 统计工龄 桶排序/计数排序(C语言)

给定公司名员工的工龄&#xff0c;要求按工龄增序输出每个工龄段有多少员工。 输入格式: 输入首先给出正整数&#xff08;≤&#xff09;&#xff0c;即员工总人数&#xff1b;随后给出个整数&#xff0c;即每个员工的工龄&#xff0c;范围在[0, 50]。 输出格式: 按工龄的递…

【福建事业单位-推理判断】01图形推理(位置,样式、属性、特殊)

【福建事业单位-推理判断】01图形推理 一、位置规律&#xff08;&#xff08;元素组成相同&#xff09;&#xff09;1.1平移旋转翻转1.1.1先判定方向&#xff0c;再确定路径1.1.2分内外圈走 1.2 旋转1.3翻转左右翻只有左右变&#xff0c;上下翻只有上下变&#xff0c;旋转180全…

真的不想知道如何进行语音翻译才简单吗

郑希&#xff1a;嘿&#xff0c;王浩&#xff01;我听说你最近去了日本旅游&#xff0c;怎么样&#xff1f;体验如何&#xff1f; 王浩&#xff1a;哈哈&#xff0c;太棒了&#xff01;日本真是一个充满魅力的国家。不过&#xff0c;要说令我惊喜的还是语音翻译技术&#xff0…

大同市副市长孟维君赴大同互联网职业技术学院指导建设工作

8月2日&#xff0c;大同市副市长孟维君一行莅临大同互联网职业技术学院&#xff08;以下简称&#xff1a;大同互联网学院&#xff09;&#xff0c;对学院的建设工作进行了重要指导。孟维君副市长深入施工现场&#xff0c;详细了解了项目施工的进展情况&#xff0c;并提出三点重…

【LeetCode-简单】剑指 Offer 18. 删除链表的节点(详解)

题目 定单向链表的头指针和一个要删除的节点的值&#xff0c;定义一个函数删除该节点。 返回删除后的链表的头节点。 注意&#xff1a;此题对比原题有改动 题目地址&#xff1a;剑指 Offer 18. 删除链表的节点 - 力扣&#xff08;LeetCode&#xff09; 方法 删除一个节点…

初始创建一个apex应用程序

在应用程序构建器 点击创建选择新建应用程序你只需要填写你应用程序的名称然后点击创建应用程序 在工作区页面&#xff0c;点开上方SQL工作室&#xff0c;点击对象浏览器然后你可以在右上角看到一个加号&#xff0c;点开&#xff0c;选“表”起好表名&#xff0c;并写好你需要的…

CPU缓存那些事儿

CPU缓存那些事儿 CPU高速缓存集成于CPU的内部&#xff0c;其是CPU可以高效运行的成分之一&#xff0c;本文围绕下面三个话题来讲解CPU缓存的作用&#xff1a; 为什么需要高速缓存&#xff1f;高速缓存的内部结构是怎样的&#xff1f;如何利用好cache&#xff0c;优化代码执行…

Nacos 抽取公共配置

文章目录 创建一个公共配置文件其他配置文件引用springboot配置文件 创建一个公共配置文件 其他配置文件引用 ${变量} springboot配置文件 spring:cloud:nacos:discovery:server-addr: current.ip:8848namespace: word_register_proconfig:server-addr: current.ip:8848auto-r…