智能算法终极大比拼,以CEC2017测试函数为例,十种智能算法直接打包带走,不含任何套路

这篇具有很好参考价值的文章主要介绍了智能算法终极大比拼,以CEC2017测试函数为例,十种智能算法直接打包带走,不含任何套路。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

包含人工蜂群(ABC)、灰狼(GWO)、差分进化(DE)、粒子群(PSO)、麻雀优化(SSA)、蜣螂优化(DBO)、白鲸优化(BWO)、遗传算法(GA)、粒子群算法(PSO)基于反向动态学习的差分进化算法,共种算法,直接一文全部搞定!

其中基于反向动态学习的差分进化算法是我自己改进的。大家可以参考这种改进方式去改进别的算法,效果还是不错的!

以CEC2017函数为例,我随意选择了几个函数,每个算法迭代了500次,先上结果图:

智能算法终极大比拼,以CEC2017测试函数为例,十种智能算法直接打包带走,不含任何套路智能算法终极大比拼,以CEC2017测试函数为例,十种智能算法直接打包带走,不含任何套路

智能算法终极大比拼,以CEC2017测试函数为例,十种智能算法直接打包带走,不含任何套路 智能算法终极大比拼,以CEC2017测试函数为例,十种智能算法直接打包带走,不含任何套路

智能算法终极大比拼,以CEC2017测试函数为例,十种智能算法直接打包带走,不含任何套路 智能算法终极大比拼,以CEC2017测试函数为例,十种智能算法直接打包带走,不含任何套路

 以上几个函数,都是我随机选择的,其他函数我没有一一测试。看上去确实很花里胡哨哈!大家可以根据自己需求进行删减。

不过就从这个随机选择的函数中,OBLDE算法(也就是动态反向学习的DE算法)在每个函数中的表现确实还不错!因此大家今后在改进智能算法的时候,可以参考这个动态反向学习的方法进行改进。

接下来到了最关键的上代码阶段!但是,无奈10个算法代码量实在是太大了,这里就截取部分代码啦!

【关键词:智能算法,优化算法,下方卡片任选其一回复。】

clear
clc
close all
addpath(genpath(pwd));
func_num=25;  %选择函数
D=100;  %维度
lb=-100;  %下限
ub=100;  %上限
N=50;    %种群个数
T=500;  %迭代次数
fhd=str2func('cec17_func');  %选择cec2017
%%  各类算法
[OBLDEfMin,OBLDEbestX,OBLDE_curve]=OBL_impDE(fhd,func_num,N,T,lb,ub,D);   %动态反向学习的DE算法
[DEfMin,DEbestX,DE_curve]=DE(fhd,func_num,N,T,lb,ub,D);      %DE算法
[Alpha_score,Alpha_pos,GWO_curve]=GWO(fhd,func_num,N,T,lb,ub,D);   %灰狼算法
pso_curve=PSO(fhd,func_num,N,T,lb,ub,D);  %粒子群算法
[bestchrom,GA_trace]=ga(fhd,func_num,N,T,lb,ub,D); %遗传算法
ABC_trace = ABC(fhd,func_num,N,T,lb,ub,D);      %人工蜂群
[CSO_Best_score,CSO_Best_pos,cso_trace] = CSO(fhd,func_num,N,T,lb,ub,D);  %鸡群算法
[fMin,bestX,DBO_curve]=DBO(fhd,func_num,N,T,lb,ub,D);       %蜣螂优化
[BWO_Best_pos,BWO_Best_score,BWO_curve] = BWO(fhd,func_num,N,T,lb,ub,D);   %白鲸优化算法
%% 麻雀
%设置SSA算法的参数
Params.nVar=D;                           % 优化变量数目
Params.VarSize=[1 Params.nVar];          % Size of Decision Variables Matrix
Params.VarMin=lb;      % 下限值,分别是a,k
Params.VarMax=ub;        % 上限值
Params.MaxIter=T;       % 最大迭代数目
Params.nPop=N;        % 种群规模
[particle3, GlobalBest3,SD,GlobalWorst3,Predator,Joiner] =  SSAInitialization(fhd,func_num,Params,'SSA');  %初始化SSA参数
[GlobalBest,SSA_curve] =  SSA(fhd,func_num,GlobalBest3,GlobalWorst3,SD,Predator,Joiner,Params);  %采用SSA参数优化VMD的两个参数
%由于麻雀算法是将各个参数放进了一个结构体,这里作者不想再去折腾改了,因此麻雀算法单独设计。
%% 画图
CNT=50;
k=round(linspace(1,T,CNT)); %随机选50个点
% 注意:如果收敛曲线画出来的点很少,随机点很稀疏,说明点取少了,这时应增加取点的数量,100、200、300等,逐渐增加
% 相反,如果收敛曲线上的随机点非常密集,说明点取多了,此时要减少取点数量
iter=1:1:T;
semilogy(iter(k),ABC_trace(k),'m-x','linewidth',1);
hold on
semilogy(iter(k),GA_trace(k),'Color',[0.6350 0.0780 0.1840],'Marker','d','LineStyle','-','linewidth',1);
hold on
semilogy(iter(k),pso_curve(k),'r-x','linewidth',1);
hold on
semilogy(iter(k),SSA_curve(k),'Color',[0.1 0.3780 0.66],'Marker','+','LineStyle','-.','linewidth',1);
hold on
semilogy(iter(k),GWO_curve(k),'Color',[0.9 0.1 0.6],'Marker','*','LineStyle','-','linewidth',1);
hold on
semilogy(iter(k),cso_trace(k),'Color',[0.1 0.1 0.5],'Marker','p','LineStyle','--','linewidth',1);
hold on
semilogy(iter(k),DBO_curve(k),'Color',[0.6 0.5 0.9],'Marker','x','LineStyle','--','linewidth',1);
hold on
semilogy(iter(k),BWO_curve(k),'Color',[0.7 0.1 0.7],'Marker','>','LineStyle','--','linewidth',1);
hold on
semilogy(iter(k),DE_curve(k),'Color',[0.1 0.6 0.6],'Marker','o','LineStyle','-','linewidth',1);
hold on
semilogy(iter(k),OBLDE_curve(k),'g-x','linewidth',1);
grid on;
title(['函数收敛曲线',num2str(func_num)])
xlabel('Iterations');
ylabel('Objective function value');
box on
legend('ABC','GA','PSO','SSA','GWO','CSO','DBO','BWO','DE','OBLDE')

 粒子群算法:

% Particle Swarm Optimization
function cg_curve=PSO(fhd,func_num,N,Max_iteration,lb,ub,dim)
%PSO Infotmation
Vmax=6;
noP=N;
wMax=0.5;
wMin=0.2;
c1=1.1;
c2=1.1;

% Initializations
iter=Max_iteration;
vel=zeros(noP,dim);
pBestScore=zeros(noP);
pBest=zeros(noP,dim);
gBest=zeros(1,dim);
cg_curve=zeros(1,iter);

% Random initialization for agents.
pos=initialization(noP,dim,ub,lb); 

for i=1:noP
    pBestScore(i)=inf;
end

% Initialize gBestScore for a minimization problem
 gBestScore=inf;
     
    
for l=1:iter 
    
    % Return back the particles that go beyond the boundaries of the search
    % space
     Flag4ub=pos(i,:)>ub;
     Flag4lb=pos(i,:)<lb;
     pos(i,:)=(pos(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
    
    for i=1:size(pos,1)     
        %Calculate objective function for each particle
        fitness= feval(fhd, pos(i,:)',func_num);
    
        if(pBestScore(i)>fitness)
            pBestScore(i)=fitness;
            pBest(i,:)=pos(i,:);
        end
        if(gBestScore>fitness)
            gBestScore=fitness;
            gBest=pos(i,:);
        end
    end

    %Update the W of PSO
    w=wMax-l*((wMax-wMin)/iter);
    %Update the Velocity and Position of particles
    for i=1:size(pos,1)
        for j=1:size(pos,2)       
            vel(i,j)=w*vel(i,j)+c1*rand()*(pBest(i,j)-pos(i,j))+c2*rand()*(gBest(j)-pos(i,j));
            
            if(vel(i,j)>Vmax)
                vel(i,j)=Vmax;
            end
            if(vel(i,j)<-Vmax)
                vel(i,j)=-Vmax;
            end            
            pos(i,j)=pos(i,j)+vel(i,j);
        end
    end
    cg_curve(l)=gBestScore;
end

end

 GWO灰狼算法代码:


% Grey Wolf Optimizer
function [Alpha_score,Alpha_pos,Convergence_curve]=GWO(fhd,func_num,SearchAgents_no,Max_iter,lb,ub,dim)

% initialize alpha, beta, and delta_pos
Alpha_pos=zeros(1,dim);
Alpha_score=inf; %change this to -inf for maximization problems

Beta_pos=zeros(1,dim);
Beta_score=inf; %change this to -inf for maximization problems

Delta_pos=zeros(1,dim);
Delta_score=inf; %change this to -inf for maximization problems

%Initialize the positions of search agents
Positions=initialization(SearchAgents_no,dim,ub,lb);

Convergence_curve=zeros(1,Max_iter);

l=0;% Loop counter

% Main loop
while l<Max_iter
    for i=1:size(Positions,1)  
        
       % Return back the search agents that go beyond the boundaries of the search space
        Flag4ub=Positions(i,:)>ub;
        Flag4lb=Positions(i,:)<lb;
        Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;               
        
        % Calculate objective function for each search agent
        fitness=feval(fhd, Positions(i,:)',func_num);
    
        
        % Update Alpha, Beta, and Delta
        if fitness<Alpha_score 
            Alpha_score=fitness; % Update alpha
            Alpha_pos=Positions(i,:);
        end
        
        if fitness>Alpha_score && fitness<Beta_score 
            Beta_score=fitness; % Update beta
            Beta_pos=Positions(i,:);
        end
        
        if fitness>Alpha_score && fitness>Beta_score && fitness<Delta_score 
            Delta_score=fitness; % Update delta
            Delta_pos=Positions(i,:);
        end
    end
    
    
    a=2-l*((2)/Max_iter); % a decreases linearly fron 2 to 0
    
    % Update the Position of search agents including omegas
    for i=1:size(Positions,1)
        for j=1:size(Positions,2)     
                       
            r1=rand(); % r1 is a random number in [0,1]
            r2=rand(); % r2 is a random number in [0,1]
            
            A1=2*a*r1-a; % Equation (3.3)
            C1=2*r2; % Equation (3.4)
            
            D_alpha=abs(C1*Alpha_pos(j)-Positions(i,j)); % Equation (3.5)-part 1
            X1=Alpha_pos(j)-A1*D_alpha; % Equation (3.6)-part 1
                       
            r1=rand();
            r2=rand();
            
            A2=2*a*r1-a; % Equation (3.3)
            C2=2*r2; % Equation (3.4)
            
            D_beta=abs(C2*Beta_pos(j)-Positions(i,j)); % Equation (3.5)-part 2
            X2=Beta_pos(j)-A2*D_beta; % Equation (3.6)-part 2       
            
            r1=rand();
            r2=rand(); 
            
            A3=2*a*r1-a; % Equation (3.3)
            C3=2*r2; % Equation (3.4)
            
            D_delta=abs(C3*Delta_pos(j)-Positions(i,j)); % Equation (3.5)-part 3
            X3=Delta_pos(j)-A3*D_delta; % Equation (3.5)-part 3             
            
            Positions(i,j)=(X1+X2+X3)/3;% Equation (3.7)
            
        end
    end
    l=l+1;    
    Convergence_curve(l)=Alpha_score;
end



关键词:大比拼,优化算法,下方卡片任选其一回复。

欢迎大家评论区留言哦!文章来源地址https://www.toymoban.com/news/detail-508845.html

到了这里,关于智能算法终极大比拼,以CEC2017测试函数为例,十种智能算法直接打包带走,不含任何套路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mac环境下Alist+Aria2+Rclone打造网盘下载终极解决方案——以115网盘为例

    本文无意探究115网盘的好坏,也并非是要推崇特定产品,只是提供一套解决方案,其他网盘也可以使用。经历多轮环境的风云变换,115还是活了下来,说明115还是经受住了市场的考验。问题的关键在于115网盘的门槛另很多人望而却步,小众带来的问题便是相关的配套的生态不

    2024年02月04日
    浏览(43)
  • 【人工智能】大比拼:文心一言 VS ChatGPT —— 禅与计算机程序设计艺术亲自测评

    收到了百度“文心一言”的内测邀请,现在给大家亲身体验测评一下! 禅与计算机程序设计艺术先说结论: 文心一言表现基本符合预期。与ChatGPT有一定差距,应该在几个月左右。但是禅与计算机程序设计艺术,挺期待  ChatGLM-130B 版本的效果的。因为,ChatGLM-6B在本地测评的

    2024年02月12日
    浏览(38)
  • 图像分析技术大比拼:图像分类、图像识别、目标检测的优缺点分析与算法比较

          计算机视觉是人工智能领域的一个重要分支,它旨在构建能够理解和处理图像、视频等视觉信息的计算机系统。在计算机视觉领域中,图像分类、图像识别和目标检测是三个重要的任务。        一、图像分类       图像分类是计算机视觉领域最基础的任务之一,它

    2024年02月16日
    浏览(37)
  • Matlab之智能优化算法函数调用

    目录 1.句柄函数 2.遗传算法 3.粒子群算法 4.模拟退火 1.句柄函数         句柄函数即我们要求的目标函数,以下三种算法的调用仅是求解最小值,若要求目标函数的最大值,可在返回结果中加负号。 句柄函数图像:                          画图代码: 2.遗传算

    2024年02月10日
    浏览(29)
  • 【Python从入门到人工智能】详解 PyTorch数据读取机制 DataLoader & Dataset(以人民币-RMB二分类实战 为例讲解,含完整源代码+问题解决)| 附:文心一言测试

      我想此后只要能以工作赚得生活费,不受意外的气,又有一点自己玩玩的余暇,就可以算是万分幸福了。                                                              ———《两地书》   🎯作者主页: 追光者♂🔥          🌸个人简介:

    2024年02月11日
    浏览(39)
  • mysql 8.0 窗口函数 之 分布函数 与 sql server (2017以后支持) 分布函数 一样

    mysql 分布函数 percent_rank() :等级值 百分比 cume_dist() :累积分布值 percent_rank() 计算方式 (rank-1)/(rows-1), 其中 rank 的值为使用RANK()函数产生的序号,rows 的值为当前窗口的总记录数。

    2024年02月11日
    浏览(35)
  • 【深入探究人工智能】逻辑函数|线性回归算法|SVM

    🎉博客主页:小智_x0___0x_ 🎉欢迎关注:👍点赞🙌收藏✍️留言 🎉系列专栏:小智带你闲聊 🎉代码仓库:小智的代码仓库 机器学习算法是一种基于数据和经验的算法,通过对大量数据的学习和分析,自动发现数据中的模式、规律和关联,并利用这些模式和规律来进行预测

    2024年02月08日
    浏览(39)
  • 2017年408专业算法题

    因为要转换为中序表达式,因此使用中序遍历。在中序遍历的过程中,对于当前访问的非空结点p,则先输出\\\"(“,然后递归调用左子树,输出p的权值,递归调用右子树,输出“)”,如果p是根或者叶结点,则不需要输出“(”或”)\\\"。 408历年真题算法题解析

    2024年02月12日
    浏览(36)
  • C++之构造函数、析构函数、拷贝构造函数终极指南:玩转对象的诞生、生命周期与复制

    W...Y的主页 代码片段分享  前言: 在上篇内容里,我们初识了C++中的类与对象,了解了类的定义、类的实例化、 类的作用域等等,今天我们将继续深入了解类与对象的相关内容,学习构造函数、析构函数与拷贝构造函数,话不多说我们发车!!! 目录 类的6个默认成员函数

    2024年02月06日
    浏览(34)
  • 排序算法终极篇之手撕常见排序算法

       文章目录 引入 一、插入排序 1、1 插入排序的实现思想 1、2 插入排序的代码实现及特点分析  二、希尔排序 2、1 希尔排序的实现思想 2、2 希尔排序的代码实现及特点分析  三、选择排序 3、1 选择排序的实现思想 3、2 选择排序的代码实现及特点分析 四、堆排序 五、冒泡

    2023年04月16日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包