融合黄金正弦,十种混沌映射,搞定!把把最优值,本文思路可用于所有智能算法的改进...

2023-10-30

上一期的2023年最新优化算法之减法优化器算法(SABO),效果已经相当不错了,而且由于其十分简单的公式原理,更适用于刚接触智能优化算法的小伙伴。

今天这篇文章为大家带来:融合黄金正弦的减法优化器(GSABO),本文会讲解一下改进思路,为各位小伙伴在今后改进智能算法提供一种通用可行的思路,该思路亦可改进其他智能优化算法

先上几张结果图,给大家看看效果。其中SABO是减法优化器算法,也是本文要改进的算法本身;DBO算法是蜣螂优化算法,也是一个寻优效果极好的算法;GWO是灰狼算法,用的也很多;GSABO算法就是融合黄金正弦的减法优化器,也是本文的主角。

ca5d85bab7d4ec56eed5222eb366343d.png

3003fbef17dffa6b118d8fc81f037a35.png

c0bdfc2cd4be1e342cb647e1f9bbad56.png

42cc46625938c4ecac75c4ef2a2d8f4c.png

acae03d72093cc7460f3a00bc6da7036.png

61f0bed7adb67aa8ebcdd129982c16d9.png

经常使用智能算法的小伙伴应该知道,在CEC2005函数测试集的测试中,F5,F8函数对智能算法的挑战是极大的。其中F5函数的理论极小值是0,本文改进的GSABO算法寻优值为6.19*e-06,而灰狼算法(GWO),蜣螂优化算法(DBO),减法优化器(SABO)的寻优值都是27左右,这也是大部分智能算法的瓶颈所在,也是大部分博主不敢放的一张对比图。

再看F8函数,F8函数由于其有多个峰值,智能算法在对此函数寻优的过程中极易陷入局部最优,因此该函数对于智能优化算法是非常有挑战性的,它的理论最小值为:-12569.5。一般的智能优化算法在表现好的时候也就是寻优到-7000多,本文提出的融合黄金正弦的减法优化器对F8函数的寻优值为-12569.4737,已经非常接近理论值了,而且其收敛速度极快!

这里附上cec2005函数的公式及对应的极值。0101df8804f7975b6b5951e85f518de4.jpeg

改进原理

这里浅浅讲一下改进的原理,更多详细的解释,还请移步程序看注释即可

本文的改进思路如下:

  • ①采用十种混沌映射的方法初始化粒子

使用该方法可以使粒子具有多样性,加速算法的收敛。关于十种混沌映射改进智能算法的方法,大家可以移步看这一篇文章,讲解更加详细。10种混沌映射优化灰狼算法,可一键切换,可用于优化所有群智能算法,以灰狼算法为例进行介绍

  • ②采用Piecewise映射生成随机数值替换ri值

af2c592427bcae7fa7f829311bb39559.png

原SABO算法中ri值是一个随机值,当把采用Piecewise映射生成随机数值替换ri值时,算法本身会因为随机值分布更加均匀,而帮助算法在做平均差值时增加粒子多样性。大家在以后碰到某些算法有随机值时候,不妨也试试这种方法。

  • ③采用黄金正弦方法,帮助粒子跳出局部最优解

在SABO算法由于其没有在每次迭代时利用全局最优值,而是利用所有粒子的位置做减法平均值而达到更新的目的,因此,当初始化粒子位置不好的时候,极其容易陷入局部最优解,从F5,F8函数也能映证这一点。

因此本文的改进思路是:如果当前迭代下的粒子适应度值没有变化时,就选用黄金正弦算法对粒子位置进行更新。这样既不会过多的增加适应度值的计算量,也可以利用黄金正弦算法在全局寻优的优势帮助SABO算法跳出局部最优解。该方法也可以供大家参考,帮助改进其他算法,会有奇效哦。还有几个细节会在代码中一一标注哈。接下来上代码。

主函数代码

%%
clear
clc
close all
number='F8'; %选定优化函数,自行替换:F1~F23
[lb,ub,dim,fobj]=CEC2005(number);  % [lb,ub,D,y]:下界、上界、维度、目标函数表达式
%% 调用SABO算法
SearchAgents=30;                      % population members 
Max_iterations=1000;                  % maximum number of iteration
numm = 11;  
[Best_score,Best_pos,SABO_curve]=SABO(numm,SearchAgents,Max_iterations,lb,ub,dim,fobj);  % Calculating the solution of the given problem using SABO
display(['The best optimal value of the objective funciton found by SABO  for ' [num2str(number)],'  is : ', num2str(Best_score)]);
fprintf ('Best solution obtained by SABO: %s\n', num2str(Best_pos,'%e  '));
%% 调用DBO算法
[fMin , bestX, DBO_Convergence_curve ] = DBO(SearchAgents, Max_iterations,lb,ub,dim,fobj);
display(['The best optimal value of the objective funciton found by DBO  for ' [num2str(number)],'  is : ', num2str(fMin)]);
fprintf ('Best solution obtained by DBO: %s\n', num2str(bestX,'%e  '));
%% 调用GWO算法
[Alpha_score,Alpha_pos,GWO_Convergence_curve]=GWO(SearchAgents,Max_iterations,lb,ub,dim,fobj);
display(['The best optimal value of the objective funciton found by GWO  for ' [num2str(number)],'  is : ', num2str(Alpha_score)]);
fprintf ('Best solution obtained by GWO: %s\n', num2str(Alpha_pos,'%e  '));
%% 调用GSABO算法
numm = 2;  %10种 混沌映射类型选择,1-10分别为,tent、Logistic、Cubic、chebyshev、Piecewise、sinusoidal、Sine,ICMIC, Circle,Bernoulli
[GBest_score,GBest_pos,GSABO_curve]=GSABO(numm,SearchAgents,Max_iterations,lb,ub,dim,fobj);  % Calculating the solution of the given problem using SABO
display(['The best optimal value of the objective funciton found by GSABO  for ' [num2str(number)],'  is : ', num2str(GBest_score)]);
fprintf ('Best solution obtained by GSABO: %s\n', num2str(GBest_pos,'%e  '));


 %% Figure
figure1 = figure('Color',[1 1 1]);
G1=subplot(1,2,1,'Parent',figure1);
func_plot(number)
title(number)
xlabel('x')
ylabel('y')
zlabel('z')
subplot(1,2,2)
G2=subplot(1,2,2,'Parent',figure1);
CNT=20;
k=round(linspace(1,Max_iterations,CNT)); %随机选CNT个点
% 注意:如果收敛曲线画出来的点很少,随机点很稀疏,说明点取少了,这时应增加取点的数量,100、200、300等,逐渐增加
% 相反,如果收敛曲线上的随机点非常密集,说明点取多了,此时要减少取点数量
iter=1:1:Max_iterations;
if ~strcmp(number,'F16')&&~strcmp(number,'F9')&&~strcmp(number,'F11')  %这里是因为这几个函数收敛太快,不适用于semilogy,直接plot
    semilogy(iter(k),SABO_curve(k),'m-*','linewidth',1);
    hold on
    semilogy(iter(k),DBO_Convergence_curve(k),'b-^','linewidth',1);
    hold on
    semilogy(iter(k),GWO_Convergence_curve(k),'r->','linewidth',1);
    hold on
    semilogy(iter(k),GSABO_curve(k),'g-p','linewidth',1);
else
    plot(iter(k),SABO_curve(k),'m-*','linewidth',1);
    hold on
     plot(iter(k),DBO_Convergence_curve(k),'b-^','linewidth',1);
    hold on
    plot(iter(k),GWO_Convergence_curve(k),'r->','linewidth',1);
    hold on
    plot(iter(k),GSABO_curve(k),'g-p','linewidth',1);
end
grid on;
title('收敛曲线')
xlabel('迭代次数');
ylabel('适应度值');
box on
legend('SABO','DBO','GWO','GSABO')
set (gcf,'position', [300,300,800,330])

下方卡片回复关键词,获取代码,关键词:GSABO

觉得文章不错的,给作者留个赞吧!谢谢!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

融合黄金正弦,十种混沌映射,搞定!把把最优值,本文思路可用于所有智能算法的改进... 的相关文章

  • 一次分配多个字段的聪明方法?

    由于遗留函数调用 我有时被迫编写像这样的丑陋的包装器 function return someWrapper someField a someField a b someField b and so on realistically it
  • Matlab:掩码/创建一个知道其原点且具有一定半径的圆形 roi

    只是一个简单的问题 我有一张图像 并且提取了某个点 特征 我知道每个帧中该点的坐标 说 x1 和 y1 我需要一个圆形 ROI 形式 该点在图像上具有我选择的半径 我尝试了 impoly 和 roipoly 当我知道图像中的要点时 不知道如
  • matlab mex 文件和 C++ dll (Windows)

    我有一个带有 Test 类的 DLL 标题 class MY EXPORT Test public int doit const string str 和来源 int Test doit const string str return in
  • 在 MATLAB 中检索 spfun、cellfun、arrayfun 等中的元素索引

    有什么办法可以找回index调用函数的元素的cellfun arrayfun or spfun行为 即检索函数范围内元素的索引 为了简单起见 假设我有以下玩具示例 S spdiags 1 4 0 4 4 f spfun x 2 x S 它构
  • MATLAB 中时间戳过滤器的优化 - 处理非常大的数据集

    我正在 MATLAB 中编写一个程序 必须使用 MATLAB 并且不能真正使用 MEX 来过滤大量数据 我需要实现的过滤器之一要求我将时间戳向量与其他时间戳不会出现的已知 不良 时间列表进行比较 一个典型的时间戳向量有大约 2 000 00
  • 如何在 Matlab 中使用谷歌翻译?

    我正在编写一个程序 使用 Matlab 列出电影字幕文件中的所有唯一单词 现在我有一个独特的单词列表 我想将其翻译成我的语言并在观看电影之前了解其含义 有谁知道如何在 Matlab 中使用 Google Translate 以便完成我的脚本
  • Matlab:保存后翻转图例顺序和图例重叠图

    我正在尝试根据以下内容反转我的图例条目顺序matlab条形图中图例颜色的逆序 https stackoverflow com questions 31178005 reverse ordering of legend colors in m
  • 如何找到在matlab中重复的矩阵的每一行的索引?

    我想找到矩阵中所有有重复项的行的索引 例如 A 1 2 3 4 1 2 3 4 2 3 4 5 1 2 3 4 6 5 4 3 要返回的向量将是 1 2 4 很多类似的问题建议使用unique函数 我已经尝试过 但我能得到的最接近我想要的功
  • 什么是 ANN 中的纪元以及它如何转换为 MATLAB 中的代码?

    我试图理解 并可视化 训练人工神经网络的时代到底是什么 我们有一个包含约 7000 个产品的训练集 其中有 10 个特征 输入 这些产品必须根据这 10 个输入分为 7 个类别 我们的 ANN 有 10 个输入 这些输入进入由 10 个神经
  • 如何在 Matlab 中将数组打印到 .txt 文件?

    我才刚刚开始学习Matlab 所以这个问题可能非常基本 我有一个变量 a 2 3 3 422 6 121 9 4 55 我希望将值输出到 txt 文件 如下所示 2 3 3 422 6 121 9 4 55 我怎样才能做到这一点 fid f
  • 在 Matlab 中将 datenum 转换为 datetime 的最快方法

    我在 Matlab 中将 datenum 转换为 datetime 时遇到问题 Given dnum floor now floor now 1 我尝试了以下方法 datenum dnum 但这没有用 我发现有效的方法是 datetime
  • 黑白随机着色的六角格子

    我正在尝试绘制一个 10 000 x 10 000 随机半黑半白的六边形格子 我不知道如何将该格子的六边形随机填充为黑色和白色 这是我真正想要从这段代码中得到的示例 但我无法做到 https i stack imgur com RkdCw
  • 在 Matlab 中高效获取像素坐标

    我想在 Matlab 中创建一个函数 给定一个图像 该函数将允许人们通过单击图像中的像素来选择该像素并返回该像素的坐标 理想情况下 人们能够连续单击图像中的多个像素 并且该函数会将所有相应的坐标存储在一个矩阵中 有没有办法在Matlab中做
  • matlab中的排列函数是如何工作的

    这是一个有点愚蠢的问题 但我似乎无法弄清楚排列在 matlab 中是如何工作的 以文档为例 A 1 2 3 4 permute A 2 1 ans 1 3 2 4 到底是怎么回事 这如何告诉 matlab 3 和 2 需要交换 哇 这是我迄
  • 如何使用 MATLAB 的 substruct 函数创建表示使用“end”的引用的结构?

    我想使用substruct http www mathworks com help matlab ref substruct html函数创建一个结构体以供使用subsref 目的是使用索引字符串subsref而不是通常的 符号 因为我正在
  • 理解高斯混合模型的概念

    我试图通过阅读在线资源来理解 GMM 我已经使用 K 均值实现了聚类 并且正在了解 GMM 与 K 均值的比较 以下是我的理解 如有错误请指出 GMM 类似于 KNN 在这两种情况下都实现了聚类 但在 GMM 中 每个簇都有自己独立的均值和
  • 通过 Matlab 访问 Physionet 的 ptbdb 中的数据库

    我首先设置系统 old path which rdsamp if isempty old path rmpath old path 1 end 8 end wfdb url http physionet org physiotools ma
  • 如何在放置颜色条后保持子图大小不变

    假设我们有一个 1 2 子图 我们在其中绘制了一些图形 如下所示 subplot 1 2 1 surf peaks 20 subplot 1 2 2 surf peaks 20 然后我们要添加一个颜色条 colorbar 我不希望结果中的正
  • MATLAB 中的霍夫变换

    有谁知道如何使用霍夫变换来检测二值图像中最强的线 A zeros 7 7 A 6 10 18 24 36 38 41 1 使用 rho theta 格式 其中 theta 以 45 为步长 从 45 到 90 以及如何在 MATLAB 中显
  • “Desort”向量(撤消排序)

    在Matlab中 sort返回排序后的向量和索引向量 显示哪个向量元素已移动到以下位置 v ix sort u Here v是一个包含所有元素的向量u 但已排序 ix是一个向量 显示每个元素的原始位置v in u 使用 Matlab 的语法

随机推荐

  • 可能的错误

    1 target 可能没加载进去
  • 强化学习实践

    参考文献 1 莫烦Python 机械手臂从零开始 机器学习实战 强化学习 哔哩哔哩 bilibili
  • mybatis 支持主键自动生成

    如果你的数据库支持自动生成主键的字段 比如 MySQL 和 SQL Server 那么 你可以设置 useGeneratedKeys true 而且设置 keyProperty 到你已经做好的目标属性上 注解方式 Options useGe
  • 在vue中使用正则表达式与表单校验

    创建校验规则 在src目录下创建util Regexp js文件 添加需要的校验规则 description 验证手机号是否是有效手机号 param String telephone 需要验证的手机号码 returns Boolean se
  • 你了解c++中的关键字virtual吗?

    virtual在英文中表示 虚 虚拟 的含义 c 中的关键字 virtual 主要用在两个方面 虚函数与虚基类 下面将分别从这两个方面对virtual进行介绍 1 虚函数 虚函数源于c 中的类继承 是多态的一种 在c 中 一个基类的指针或者
  • 半路转行,如何学编程?这些建议给你

    有网友在网上提问 转行学编程还能成为技术大牛吗 收到诸多网友评论的同时 也被不少网友反问 1 成不了技术大牛 就不学编程了吗 2 学习是一辈子的事情 哪里来的半路出家 25岁学编程 35岁的时候你就是有10年编程经验的人 3 在互联网时代
  • FBX SDK环境配置

    参照这个https blog csdn net lilysara article details 53940353 注意事项1 选择lib文件夹的时候注意和电脑配置匹配 不匹配的话会报这个错误 配置成功后可以引入fbxsdk头文件 并调试运
  • 高手在交易中总结的期货

    知与行 常听说 做期货 知易行难 但我认为 当 知 的问题解决了 行 就不是问题 知 可以理解为盈利模式 有了盈利模式 严格执行 做到 知行合一 自然就可以做到长期持续盈利 因此 知易行难 常是认识的误区 当你发现 行难 时 其实是 知 的
  • 以太网 ARP

    在以太网中 一个主机和另一个主机进行通信 必须要知道目的主机的 MAC 地址 物理地址 而目的 MAC 地址的获取由 ARP 协议完成 ARP 概述 ARP Address Resolution Protocol 即地址解析协议 是根据 I
  • golang字符串首字母转化为大写

    字符串首字母转化为大写 字符串首字母转化为大写 ios bbbbbbbb gt iosBbbbbbbbb func strFirstToUpper str string string temp strings Split str var u
  • mysql模糊搜索 like_Mysql必知必会(3):模糊查询(LIKE)

    本文介绍什么是通配符 如何利用通配符进行数据库数据过滤查询 本文使用的数据表在本文最后附录 简介 之前几篇文章的所有例子查询的条件都是确定的值 比如大于20 或者用户ID为1 但是 有些时候我们需要查询一些不太确定的值 比如用户在输入框输入
  • 算法之回溯算法

    目录 前言 如何理解回溯算法 两种回溯算法的经典应用 1 0 1背包 2 正则表达式 总结 参考资料 前言 很多经典的数学问题都可以用回溯算法解决 比如数独 八皇后 0 1 背包 图的着色 旅行商问题 全排列等等 用来指导像深度优先收索这种
  • 40-400-044-运维-优化-MySQL order by 优化

    文章目录 1 概述 2 MySQL中的两种排序方式 3 ORDER BY优化的核心原则 4 ORDER BY优化实战 ORDER BY优化 WHERE ORDER BY 优化 Filesort优化 1 概述 本篇文章我们将了解ORDER B
  • 【BUG

    问题 运行Inpaint Anything时 pycharm中的conda环境下的tensorflow问题 2023 04 19 10 53 30 485189 I tensorflow core platform cpu feature
  • [非卷积5D] NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis

    不使用3D建模 使用静态图片进行训练 用 非卷积 深度网络表示场景的5D连续体表示 再通过ray marching进行渲染 paper NeRF Representing Scenes as Neural Radiance Fields f
  • idea数据库表生成实体类

    先说一下实现的功能 根据数据库 生成实体类 生成的实体类的格式可参看下图 生成的实体类中加入的注解有 Table注解 无getset方法 加入了lombok的 DATA Slf4j注解 支持 ID注解 当字段名为id时 如果数据库表中字段通
  • java比较string是否相同

    比较引用 equals 比较值 1 java中字符串的比较 我们经常习惯性的写上if str1 str2 这种写法在java中可能会带来问题 example1 String a abc String b abc 那么a b将返回true 因
  • 弹性盒子(flex布局)

    传统布局 兼容性好 布局繁琐 局限性 不能再移动端很好的布局 flex弹性布局 操作方便 布局极为简单 移动端应用广泛 PC端浏览器支持情况较差 布局原理 flex意为 弹性布局 用来为盒状模型提供最大的灵活性 任何一个容器都可以指定为fl
  • .net core 整洁架构入门

    Clean Architecture with NET Core Getting Started 使用 NET Core整洁架构 Clean Architecture 入门 Over the past two years I ve trav
  • 融合黄金正弦,十种混沌映射,搞定!把把最优值,本文思路可用于所有智能算法的改进...

    上一期的2023年最新优化算法之减法优化器算法 SABO 效果已经相当不错了 而且由于其十分简单的公式原理 更适用于刚接触智能优化算法的小伙伴 今天这篇文章为大家带来 融合黄金正弦的减法优化器 GSABO 本文会讲解一下改进思路 为各位小伙