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

概述

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

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

130a6207dc78f7ff7c754ed187fee9d6.png

01

原理简述

  • 融合减法优化器

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

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

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

  • 透镜成像反向学习策略

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

    强强联合!三种策略改进的蛇优化算法(GOSO)_第1张图片

  • 混沌映射策略

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

02改进效果

强强联合!三种策略改进的蛇优化算法(GOSO)_第2张图片

强强联合!三种策略改进的蛇优化算法(GOSO)_第3张图片

强强联合!三种策略改进的蛇优化算法(GOSO)_第4张图片

强强联合!三种策略改进的蛇优化算法(GOSO)_第5张图片

强强联合!三种策略改进的蛇优化算法(GOSO)_第6张图片

强强联合!三种策略改进的蛇优化算法(GOSO)_第7张图片

强强联合!三种策略改进的蛇优化算法(GOSO)_第8张图片

评价:

可以看到,改进后的蛇优化算法(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

你可能感兴趣的:(算法)