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

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(使用前将#替换为@)

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

  • 频域和空间域的汉明滤波器

    我想通过在 MATLAB 中应用汉明滤波器来消除一维信号中的吉布斯伪影 我所拥有的是k1这是频域中的信号 我可以通过应用 DFT 来获取时域信号k1 s1 ifft ifftshift k1 该信号具有吉布斯伪影 现在 我想通过 A 乘以汉
  • Matlab Solve():未给出所有解决方案

    我试图找到两条曲线的交点 syms x y g x 20 exp x 30 3 5 1 sol x sol y solve x 22 3097 2 y 16 2497 2 25 y g x x y Real true 它只提供一种解决方案
  • 从 imread 返回的 ndims

    我正在从文件夹中选取图像 尺寸为128 128 为此 我使用以下代码行 FileName PathName uigetfile jpg Select the Cover Image file fullfile PathName FileNa
  • 如何每次使用按钮将数据添加到 MATLAB 中的现有 XLSX 文件?

    我有一个函数可以生成一些变量 例如分数 对 错 未回答 使用按钮调用此功能 问题是如何每次将函数生成的这些值添加 附加到 XLSX 文件中 或者 如何创建 MAT 文件以便可以添加它 可能的解决方案是什么 附加到 xls 文件所涉及的挑战是
  • 为什么 mex 文件中的 OpenMP 仅产生 1 个线程?

    我是 OpenMP 新手 我有以下代码 使用配置了 MSVS2010 的 Matlab mex 可以正常编译 计算机有 8 个可用处理器 我也使用 matlabpool 检查过 include mex h include
  • 将数据提示堆栈放在轴标签顶部,并在轴位置发生更改后更新轴标签

    此问题仅适用于 unix matlab Windows 用户将无法重现该问题 我在尝试创建位于 y 轴标签顶部的数据提示时遇到问题 下图很能说明问题 正如您所看到的 在 ylabel 附近创建的数据提示将到达 ylabel 文本的底部 而期
  • 直方图均衡结果

    I am trying to code histogram equalization by my self but the results are different from the built in function in matlab
  • 在 Matlab 的命令窗口中获取旧式帮助

    问题的简短版本 在最新版本的 Matlab 中 我在 Windows 上的 R2014b 和 R2015a 中看到过 当您键入help foo你得到一个简要描述 简介函数及其签名 例如 输入help bsxfun产生类似这样的东西 只有更好
  • 从 MATLAB 调用 Java?

    我想要Matlab程序调用java文件 最好有一个例子 需要考虑三种情况 Java 内置库 也就是说 任何描述的here http docs oracle com javase 6 docs api 这些项目可以直接调用 例如 map ja
  • 我如何编写一个名为 dedbi 的 MATLAB 函数,它将输入 xtx 作为字符串并返回另一个字符串 xtxx 作为输出。

    dedbi 反转单词 即 a 将被 z 替换 b 将被 y 替换 c 将被 x 替换 依此类推 dedbi 将对大写字母执行相同的操作 即将字符串 A 替换为 Z 将 B 替换为 Y 将 C 替换为 X 依此类推 如果我给函数这个字符串 a
  • for 循环中的绘图没有可见点

    我正在努力解决我想使用 for 循环制作的情节 我知道当我在循环之后添加它时它会起作用 只是一个简单的图 但我想用另一种方式尝试一下 fib ones 1 10 for k 3 10 hold on fib k fib k 1 fib k
  • matlab中无限while嵌套在for循环中

    我想做一个while循环 嵌套在for在 Matlab 中循环以查找数据中不同对之间的距离 我的数据具有以下形式 ID lon lat time 1 33 56 40 89 803 2 32 45 41 03 803 3 35 78 39
  • 在matlab中不使用for循环检查数组中的成员资格

    我想简化这段代码 使其无需 for 循环即可工作 for i 1 N for j 1 N if ismember j A PID i i TFP i j PID i i end end end 其中A是一个包含一些标签的矩阵 我之前存储的T
  • MATLAB 除法...29/128 应该返回 0 吗?

    我真的不认为这是一个精度问题 答案应该是0 226左右 这是确切的代码 val I i j bucketSize pos val bucketSize I只是我从中获取值的矩阵 以下是 MATLAB 的输出 val 29 bucketSiz
  • MATLAB - 通过垂直连接子矩阵重新排列矩阵

    我在执行以下任务时遇到问题 假设一个 3x6 矩阵 A 0 2787 0 2948 0 4635 0 8388 0 0627 0 0435 0 6917 0 1185 0 3660 0 1867 0 2383 0 7577 0 6179 0
  • 如何选择面积最大的对象?

    我用过bwconvhull检测图像的某个部分 正如您在图像中看到的那样 有许多具有特定质心的对象 我想做的是检测面积最大的物体 左起第一个大物体 并忽略其他物体 我应该遵循哪种方法 我将非常感谢您的帮助 以下是代码 由于我仍在努力 所以写得
  • 使用简单矩阵乘法时出错

    我在一次简单的乘法运算中偶然发现了一个错误 这让我感到非常惊讶 我一直以为这里发生了什么 只为矩阵乘法 http www mathworks nl help matlab matlab prog operators html x 2 y z
  • 帮助我理解FFT函数(Matlab)

    1 除了负频率之外 FFT 函数提供的最小频率是多少 是零吗 2 如果它为零 我们如何在对数刻度上绘制零 3 结果总是对称的 或者只是看起来是对称的 4 如果我使用abs fft y 来比较2个信号 我是否会失去一些准确性 1 除了负频率之
  • Matlab:2行10列的子图

    如何在 matlab 中绘制 20 幅图像 2 行 10 列 我知道我必须使用 子图 功能 但我对给出的参数感到困惑 我尝试给予 子图 2 10 行索引 列索引 但它似乎不起作用 请帮忙 的前两个参数subplot函数分别给出图中子图的总行
  • Mathworks 生成 Matlab HTML 文档的方法是什么?

    我正在开发共享的 Matlab 代码 我们希望在本地网络中将生成的文档作为可搜索的 HTML 文档共享 我知道以下生成文档的方法 编写一个类似于 C 文件的转换器 这是在中完成的将 Doxygen 与 Matlab 结合使用 http ww

随机推荐

  • 可能的错误

    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 本文会讲解一下改进思路 为各位小伙