强强联合!三种策略改进的蛇优化算法(GOSO)

概述

今天给大家带来的是一个改进的蛇算法(GOSO)。该算法是由作者自行改进。

算法融合了减法优化器算法,反向学习策略和混沌映射。

130a6207dc78f7ff7c754ed187fee9d6.png

01

原理简述

  • 融合减法优化器

    减法优化器算法是2023年最新的优化算法,该算法收敛速度和寻优精度极快,原理简单。有关减法优化器算法的原理请参考这篇文章。2023年优化算法之减法平均优化器,matlab代码直接复制,并与灰狼,粒子群算法比较

    这里简单说明一下为何选择该算法作为融合算法:

    减法优化器器算法原理简单,寻优速度快。由减法优化器的收敛曲线可以看到,该算法不论是前期还是后期,其寻优曲线基本上是一条直线,证明该算法不属于那种分阶段的寻优,不会因为前期或者后期更新方式的不同而导致陷入局部最优。反观蛇优化算法,蛇优化算法链接。在算法前期的寻优速度极慢,证明蛇算法在算法前期由于更新方式的缺陷,导致蛇处于休眠状态,无法快速找到食物。因此将勘探阶段的位置更新公式替换为减法优化器算法。

  • 透镜成像反向学习策略

    在蛇算法中加入反向学习策略,可以进一步加快收敛速度。透镜成像反向学习主要的思想是以当前坐标为基准通过凸透镜成像的原理生成一个反向位置来扩大搜索范围,这样可以既能跳出当前位置,又可以扩大搜索范围,提高了种群的多样性。基于透镜成像原理的反向学习公式如下:

    89cde724239282e586d3397522df4a91.png

  • 混沌映射策略

    该算法的粒子初始化公式太过单一,采用混沌映射的方法初始化粒子,可以优化初始解,提高算法的收敛速度。关于混沌映射的原理文章前面也介绍过,这里就不再详细介绍了。10种混沌映射优化灰狼算法,可一键切换,可用于优化所有群智能算法,以灰狼算法为例进行介绍

02改进效果

654fd38a682ab5dd472059c5f94e731c.png

2e4c5da054210546d2ae742bf8b1ce27.png

809551d5a186681d3ab865f7786d9805.png

e7dd9c3d5de2dafc8e947075860d329b.png

f63434cee3e2ca2efe151f9cd0db8403.png

029542d65b45e3d3fe1988858137c83e.png

c195baffa66bece855bc299b8f539620.png

评价:

可以看到,改进后的蛇优化算法(GOSO)效果还是不错的!以上结果作者都是一次性跑出来的。即便多次反复尝试,GOSO的效果都是最佳,并没有偶然性。该算法是作者自行改进,目前网上是搜索不到的。

03代码展示

%% 淘个代码 %%
% 2023/07/30 %
%微信公众号搜索:淘个代码
%%
clear
clc
close all
number='F9'; %选定优化函数,自行替换:F1~F23
[lb,ub,dim,fobj]=CEC2005(number);  % [lb,ub,D,y]:下界、上界、维度、目标函数表达式
SearchAgents=60;                      % population members 
Max_iterations=1000;                  % maximum number of iteration
%% 调用SO算法
[Xfood, Xvalue,CNVG] = SO(SearchAgents,Max_iterations,fobj, dim,lb,ub);  % Calculating the solution of the given problem using SO
display(['The best optimal value of the objective funciton found by SO  for ' [num2str(number)],'  is : ', num2str(Xvalue)]);
fprintf ('Best solution obtained by SO: %s\n', num2str(Xfood,'%e  '));
  %% 调用PSO算法
[g,gbest,gb]=PSO(SearchAgents,Max_iterations,lb,ub,dim,fobj);  % g 最佳位置% gbest 最佳适应度值% gb 收敛曲线
display(['The best optimal value of the objective funciton found by PSO  for ' [num2str(number)],'  is : ', num2str(gbest)]);
fprintf ('Best solution obtained by PSO: %s\n', num2str(g,'%e  '));
  %% 调用GWO算法
[Alpha_score,Alpha_pos,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  '));
%% 调用GOSO算法
[GOSO_Xfood, GOSO_Xvalue,GOSO_CNVG] = GOSO(SearchAgents,Max_iterations,fobj, dim,lb,ub);  % Calculating the solution of the given problem using SO
display(['The best optimal value of the objective funciton found by GOSO  for ' [num2str(number)],'  is : ', num2str(GOSO_Xvalue)]);
fprintf ('Best solution obtained by GOSO: %s\n', num2str(GOSO_Xfood,'%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=35;
k=round(linspace(1,Max_iterations,CNT)); %随机选CNT个点
% 注意:如果收敛曲线画出来的点很少,随机点很稀疏,说明点取少了,这时应增加取点的数量,100、200、300等,逐渐增加
% 相反,如果收敛曲线上的随机点非常密集,说明点取多了,此时要减少取点数量
iter=1:1:Max_iterations;
semilogy(iter(k),gb(k),'k-*','linewidth',1);
hold on
semilogy(iter(k),Convergence_curve(k),'m->','linewidth',1);
hold on
semilogy(iter(k),CNVG(k),'r-^','linewidth',1);
hold on
semilogy(iter(k),GOSO_CNVG(k),'g-p','linewidth',1);




grid on;
title('收敛曲线')
xlabel('迭代次数');
ylabel('适应度值');
box on
legend('PSO','GWO','SO','GOSO')
set (gcf,'position', [300,300,800,350])

04

代码获取

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

GOSO

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天吃饺子

不想刀我的可以选择爱我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值