【智能优化算法】卷尾猴搜索算法(Capuchin search algorithm,CapSA)

【智能优化算法】卷尾猴搜索算法(Capuchin search algorithm,CapSA)是期刊“NEURAL COMPUTING & APPLICATIONS”(IF 6.0)的2021年智能优化算法

01.引言

【智能优化算法】卷尾猴搜索算法(Capuchin search algorithm,CapSA)用于解决约束和全局优化问题。CapSA的主要灵感来自卷尾猴的动态行为。该算法的基本优化特征是通过模拟卷尾猴在森林中寻找食物来源时在树木和河岸上徘徊和觅食的社会行为来设计的。卷尾猴在觅食过程中的一些常见行为是在这个算法中实现的,包括跳跃、摇摆和攀爬。跳跃是卷尾猴从一棵树跳到另一棵树的有效机制。卷尾猴的另一种觅食机制是摇摆和攀爬,它允许卷尾猴在树木、树枝和树枝的末端上移动一小段距离。这些运动机制最终导致全局优化问题的可行解。该算法在23个著名的基准函数上进行了基准测试,并解决了一些具有挑战性和计算成本高的工程问题。我们进行了一项广泛的比较研究,以证明CapSA在优化精度和统计检验分析方面优于几种突出的元启发式算法。总体结果表明,与竞争的元启发式方法相比,CapSA提供了更精确的解,具有更高的收敛速度。

02.优化算法的流程

03.论文中算法对比图

04.部分代码

function [fitCapSA,CapPos,cg_curve]=CapSA(noP,maxite,LB,UB,dim,fobj)
 
warning off; format long;
%%%%* 1
% if size(UB,2)==1
%     UB=ones(1,dim)*UB;
%     LB=ones(1,dim)*LB;
% end
 
% if size(UB,1)==1
%     UB=ones(dim,1)*UB;
%     LB=ones(dim,1)*LB;
% end
% % % CapSA main program
% f1 =  figure (1);
% set(gcf,'color','w');
% hold on
% xlabel('Iteration','interpreter','latex','FontName','Times','fontsize',10)
% ylabel('Fit value','interpreter','latex','FontName','Times','fontsize',10); 
% grid;
%  
cg_curve=zeros(1,maxite);
%% % CapSA initialization
%Initialize the Pos of Caps in the space
CapPos=initialization(noP,dim,UB,LB);
v=0.1*CapPos;% initial velocity
v0=zeros(noP,dim); 
CapFit=zeros(noP,1);
% Calculate the Fit of initialCaps
    for i=1:noP
        CapFit(i,1)=fobj(CapPos(i,:));
    end
 
% Initial Fit of the random Pos
Fit = CapFit;
[fitCapSA,index]=min(CapFit);
CapBestPos = CapPos; % Best Pos initialization
Pos= CapPos; 
gFoodPos = CapPos(index,:); % initial global Pos 
%% % CapSA Parameters
bf=0.70;%Balance factor
cr=11.0;  %Modulus of elasticity
g=9.81;
% CapSA velocity updates
a1=1.250; a2=1.5;   
beta=[2 11 2];
wmax=0.8;
wmin=0.1;
 
%% % CapSA Main loop
  
for t = 1 : maxite
    % Life time convergence
        tau = beta(1) * exp(-beta(2) * t/maxite)^beta(3);
        w   = wmax-(wmax-wmin)*(t/maxite); 
        fol=ceil((noP-1).*rand(noP,1))'; %  
        % CapSA velocity update
for i=1:noP 
    for j=1:dim
        v(i,j)=  w* v(i,j) + ...
                           a1*(CapBestPos(i,j)- CapPos(i,j))*rand + ...
                           a2*(gFoodPos(j)  - CapPos(i,j))*rand;      
    end
end
     
% CapSA Pos update
for i=1:noP
   if i<noP/2
          if (rand()>=0.1)
               r=rand;
              if r<=0.15
                 CapPos(i,:) =  gFoodPos +    bf*((v(i,:).^2)*sin(2*rand()*1.5))/g;  % Jumping (Projection)
              elseif   r>0.15 && r<=0.30  
                  CapPos(i,:) =  gFoodPos +   cr*bf*((v(i,:).^2)*sin(2*rand()*1.5))/g;  % Jumping (Land)  
              elseif   r>0.30 && r<=0.9      
                  CapPos(i,:) =    CapPos(i,:) +  v(i,:); % Movement on the ground    
              elseif  r>0.9 && r<=0.95 
                 CapPos(i,:) =      gFoodPos   +  bf*sin(rand()*1.5);   % Swing % Local search  
              elseif   r>0.95 
                CapPos(i,:) =       gFoodPos   +  bf*(v(i,:)- v0(i,:));    % Climbing   % Local search
              end
          else
               CapPos(i,:) =           tau*(LB  + rand *(UB- LB));   
      end
    
% Let the followers follow the leaders (update their Pos)
elseif i>=noP/2 && i<=noP 
            
           eps=((rand()+2*rand())-(3*rand()))/(1+rand()); 
     
           Pos(i,:)=gFoodPos+2*(CapBestPos(fol(i),:)-CapPos(i,:))*eps +...
                                 2*(CapPos(i,:)-CapBestPos(i,:))*eps;      
 
          CapPos(i,:)=(Pos(i,:)+ CapPos(i-1,:))/(2); 
    
   end
end 
v0 = v;   
 
for i=1:noP % relocation (Update, exploration)
        u=UB-CapPos(i,:)<0;
        l=LB-CapPos(i,:)>0;
     
         CapPos(i,:)= LB.*l+UB.*u+CapPos(i,:).*~xor(u,l);
    
         CapFit(i,1)=fobj (CapPos(i,:)) ;
         
            if CapFit(i,1)<Fit(i)
                CapBestPos(i,:)=CapPos(i,:);
                Fit(i)=CapFit(i,1);
                
            end 
end
%% Evaluate the new Pos
[fmin,index]=min(Fit); % finding out the best Pos  
% Updating gPos and best Fit
if fmin < fitCapSA
    gFoodPos = CapBestPos(index,:); % Update the global best Pos
    fitCapSA = fmin;
end
% %     % Display the iterative results
% 
%          disp(['Iteration# ', num2str(t) , '  Fit= ' , num2str(fitCapSA)]);
% %    
   % Obtain the convergence curve
     cg_curve(t)=fitCapSA;
     
%  if t>2
%      set(0, 'CurrentFigure', f1)
% 
%         line([t-1 t], [cg_curve(t-1) cg_curve(t)],'Color','b'); 
%         xlabel('Iteration');
%         ylabel('Best score obtained so far');
%         drawnow 
%  end
%   
   
end
fitCapSA =fobj(gFoodPos);
end

04.本代码效果图

获取代码请关注MATLAB科研小白的个人公众号(即文章下方二维码),并回复智能优化算法本公众号致力于解决找代码难,写代码怵。各位有什么急需的代码,欢迎后台留言~不定时更新科研技巧类推文,可以一起探讨科研,写作,文献,代码等诸多学术问题,我们一起进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/611478.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JVM】垃圾回收机制(Garbage Collection)

目录 一、什么是垃圾回收&#xff1f; 二、为什么要有垃圾回收机制&#xff08;GC&#xff09;&#xff1f; 三、垃圾回收主要回收的内存区域 四、死亡对象的判断算法 a&#xff09;引用计数算法 b&#xff09;可达性分析算法 五、垃圾回收算法 a&#xff09;标记-清除…

OSPF虚链路

原理概述 通常情况下&#xff0c;一个OSPF网络的每个非骨干区域都必须与骨干区域通过ABR路由器直接连接&#xff0c;非骨干区域之间的通信都需要通过骨干区域进行中转。但在现实中&#xff0c;可能会因为各种条件限制&#xff0c;导致非骨干区域和骨干区域无法直接连接&#x…

Redis缓存雪崩,击穿,穿透问题

缓存雪崩、击穿、穿透、发生的背景 ​ 作者最近在写一个社区论坛项目&#xff0c;初始设想将论坛里用户发布的帖子内容存到数据库中&#xff0c;当用户访问论坛里的帖子时&#xff0c;帖子信息都从数据库中查。众所周知数据库的帖子数据是存在磁盘中的&#xff0c;而磁盘读写数…

串口初始化自己独立的见解--第九天

1.SM0,SM1 我们一般用 8位UART&#xff0c;波特率可变 &#xff08;方式1的工作方式&#xff09; SCON &#xff1a;SM2 一般不用&#xff0c;SM0 0 ,SM1 1 PCON : 有两位 我们不动它&#xff0c;不加速&#xff0c;初始值 TMOD&#xff1a;8位自动重装定时器&#xff0…

ADS基础教程11 - TouchStone文件的导出及导入

目录 一、 T o u c h S t o n e 介绍 \color{#4285f4}{ \mathbf{ 一、TouchStone介绍}} 一、TouchStone介绍 二、文件导出、导入方式 \color{#4285f4}{ \mathbf{ 二、文件导出、导入方式}} 二、文件导出、导入方式1.原理图操作1&#xff09;原理图中导出2.原理图中导入 3.DDW中…

Python图形复刻——绘制母亲节花束

各位小伙伴&#xff0c;好久不见&#xff0c;今天学习用Python绘制花束。 有一种爱&#xff0c;不求回报&#xff0c;有一种情&#xff0c;无私奉献&#xff0c;这就是母爱。祝天下妈妈节日快乐&#xff0c;幸福永远&#xff01; 图形展示&#xff1a; 代码展示&#xff1a; …

详解分布式锁

知识点&#xff1a; 单体锁存在的问题&#xff1a; 单体锁&#xff0c;即单体应用中的锁&#xff0c;通过加单体锁&#xff08;synchronized或RentranLock&#xff09;可以保证单个实例并发安全 单体锁是JVM层面的锁&#xff0c;只能保证单个实例上的并发访问安全 如果将单…

消除试卷手写笔迹的软件免费的有哪些?这几款都不错

消除试卷手写笔迹的软件免费的有哪些&#xff1f;在数字化学习的浪潮中&#xff0c;学生们越来越频繁地利用电子设备来完成学习任务。然而&#xff0c;当纸质试卷需要被数字化并再次利用时&#xff0c;如何高效地消除手写笔迹便成为了一个有待解决的问题。那么&#xff0c;今天…

【Linux】简易进度条的实现

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; Linux &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解Linux中进度条的实现的相关内容。 如果看到最后您觉得这篇文章写得…

coherence protocal基础

一致性整体抽象 coherence protocol是通过保证如下的两点invariants&#xff0c;来实现一致性的&#xff1b; SWMR invariant, 对于任何一个地址&#xff0c;任何时刻&#xff0c;都只会有一个core写&#xff0c;可能会有多个core读&#xff1b;Data-value invariant&#xf…

每天五分钟深度学习:数学中的极值

本文重点 在数学领域中,极值是一个极其重要的概念,它不仅在纯数学理论研究中占据核心地位,而且在工程、物理、经济等实际应用领域也发挥着不可替代的作用。极值问题涉及函数的最大值和最小值,是微积分学中的一个基本问题。本文旨在详细介绍数学中的极值概念、性质、求解方…

Python查询PostgreSQL数据库

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; Python与PostgreSQL的连接 需要了解如何在Python中连接到PostgreSQL数据库。这通常涉及到使用一个库&#xff0c;如psycopg2&#xff0c;它是Python中用于PostgreSQL的最流行的适配器。安装psycopg2非常简单&#x…

202466读书笔记|《一天一首古诗词》——借问梅花何处落,风吹一夜满关山

202466读书笔记|《一天一首古诗词》——借问梅花何处落&#xff0c;风吹一夜满关山 上册下册 《一天一首古诗词》作者李锡琴&#xff0c;蛮早前加入书架的已购买书籍&#xff0c;这次刚好有点时间&#xff0c;利用起来读完。 赏析没有细看&#xff0c;只读了诗词部分&#xff0…

Cocos creator实现《战机长空》关卡本地存储功能

Cocos creator实现《战机长空》关卡本地存储功能 Cocos creator在开放小游戏过程中&#xff0c;经常会出现设置关卡&#xff0c;这里记录一下关卡数据本地存储功能。 一、关卡设置数据 假如我们有关卡数据如下&#xff0c; let settings [ { level: 1, // 第1关 score: 0,…

uniapp的app端推送功能,不使用unipush

1&#xff1a;推送功能使用htmlPlus实现&#xff1a;地址HTML5 API Reference (html5plus.org) 效果图&#xff1a; 代码实现&#xff1a; <template><view class"content"><view class"text-area"><button click"createMsg&q…

Spring框架学习笔记(一):Spring基本介绍(包含IOC容器底层结构)

1 官方资料 1.1 官网 https://spring.io/ 1.2 进入 Spring5 下拉 projects, 进入 Spring Framework 进入 Spring5 的 github 1.3 在maven项目中导入依赖 <dependencies><!--加入spring开发的基本包--><dependency><groupId>org.springframework<…

SpringBoot集成微信支付V3版本流程(商户平台篇)

一、前言 微信支付账号类型分为商户平台和合作伙伴平台&#xff0c;今天主要是梳理商品平台微信支付流程。 商品平台文档地址&#xff0c;(在接入前建议仔细阅读这份文档&#xff0c;会少走很多弯路!!!) 小程序下单 - 小程序支付 | 微信支付商户文档中心 二、接入流程 以下…

qml 和 c++类的数据交互

1、 新建一个需要交互的C++类 1)添加QObject头文件 2)添加自QObject的继承 3)添加Q_OBJECT宏 4)使用Q_PROPERTY,定义两个交互的属性,并设置读写的方法和变更属性的信号。 5)添加方法、槽函数和变量 2、在main.cpp中添加实例化对象的QML上下文 1)添加需要QML交互的…

多个.C文件被编译为一个可执行文件的详细过程

多个.C文件被编译为一个可执行文件的详细过程 文章目录 多个.C文件被编译为一个可执行文件的详细过程前言一、一个.C文件的编译过程二、多个.C文件的链接过程1.文件信息2.链接过程3.makefile 总结 前言 C语言经典的 “hello world ” 程序从编写、编译到运行&#xff0c;看到屏…

html实现网页插入音频

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文主要介绍html中 如何插入音乐和视频 视频插入 标签:<video></video> 兼容格式:mp4,因为别的浏览器都有不兼容的格式&#xff0c;唯一对mp4全都兼容。所以尽量使用mp4格式。 属性: 属性属性值…