基于改进海洋捕食者算法求解单目标优化问题附matlab代码(NMPA)

news2024/11/10 11:17:58

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测 雷达通信  无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机  电力系统

⛄ 内容介绍

海洋捕食者算法(Marine Predators Algorithm,MPA)等人于2020年提出的一种新型元启动式优化算法。

⛄ 部分代码

%_________________________________________________________________________

%  Marine Predators Algorithm source code (Developed in MATLAB R2015a)

%

%  programming: Afshin Faramarzi & Seyedali Mirjalili

%

% paper:

%  A. Faramarzi, M. Heidarinejad, S. Mirjalili, A.H. Gandomi, 

%  Marine Predators Algorithm: A Nature-inspired Metaheuristic

%  Expert Systems with Applications

%  DOI: doi.org/10.1016/j.eswa.2020.113377

%  

%  E-mails: afaramar@hawk.iit.edu            (Afshin Faramarzi)

%           muh182@iit.edu                   (Mohammad Heidarinejad)

%           ali.mirjalili@laureate.edu.au    (Seyedali Mirjalili) 

%           gandomi@uts.edu.au               (Amir H Gandomi)

%_________________________________________________________________________

function [Top_predator_fit,Top_predator_pos,Convergence_curve,T]=MPA(SearchAgents_no,Max_iter,lb,ub,dim,fobj)

tic;

Top_predator_pos=zeros(1,dim);

Top_predator_fit=inf; 

Convergence_curve=zeros(1,Max_iter);

stepsize=zeros(SearchAgents_no,dim);

fitness=inf(SearchAgents_no,1);

Prey=initialization(SearchAgents_no,dim,ub,lb);

  

Xmin=repmat(ones(1,dim).*lb,SearchAgents_no,1);

Xmax=repmat(ones(1,dim).*ub,SearchAgents_no,1);

         

Iter=0;

FADs=0.2;

P=0.5;

while Iter<Max_iter    

     %------------------- Detecting top predator -----------------    

 for i=1:size(Prey,1)  

        

    Flag4ub=Prey(i,:)>ub;

    Flag4lb=Prey(i,:)<lb;    

    Prey(i,:)=(Prey(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;                    

        

    fitness(i,1)=fobj(Prey(i,:));

                     

     if fitness(i,1)<Top_predator_fit 

       Top_predator_fit=fitness(i,1); 

       Top_predator_pos=Prey(i,:);

     end          

 end

     

     %------------------- Marine Memory saving ------------------- 

    

 if Iter==0

   fit_old=fitness;    Prey_old=Prey;

 end

     

  Inx=(fit_old<fitness);

  Indx=repmat(Inx,1,dim);

  Prey=Indx.*Prey_old+~Indx.*Prey;

  fitness=Inx.*fit_old+~Inx.*fitness;

        

  fit_old=fitness;    Prey_old=Prey;

     %------------------------------------------------------------   

     

 Elite=repmat(Top_predator_pos,SearchAgents_no,1);  %(Eq. 10) 

 CF=(1-Iter/Max_iter)^(2*Iter/Max_iter);

                             

 RL=0.05*levy(SearchAgents_no,dim,1.5);   %Levy random number vector

 RB=randn(SearchAgents_no,dim);          %Brownian random number vector

           

  for i=1:size(Prey,1)

     for j=1:size(Prey,2)        

       R=rand();

          %------------------ Phase 1 (Eq.12) ------------------- 

       if Iter<Max_iter/3 

          stepsize(i,j)=RB(i,j)*(Elite(i,j)-RB(i,j)*Prey(i,j));                    

          Prey(i,j)=Prey(i,j)+P*R*stepsize(i,j); 

             

          %--------------- Phase 2 (Eqs. 13 & 14)----------------

       elseif Iter>Max_iter/3 && Iter<2*Max_iter/3 

          

         if i>size(Prey,1)/2

            stepsize(i,j)=RB(i,j)*(RB(i,j)*Elite(i,j)-Prey(i,j));

            Prey(i,j)=Elite(i,j)+P*CF*stepsize(i,j); 

         else

            stepsize(i,j)=RL(i,j)*(Elite(i,j)-RL(i,j)*Prey(i,j));                     

            Prey(i,j)=Prey(i,j)+P*R*stepsize(i,j);  

         end  

         

         %----------------- Phase 3 (Eq. 15)-------------------

       else 

           

           stepsize(i,j)=RL(i,j)*(RL(i,j)*Elite(i,j)-Prey(i,j)); 

           Prey(i,j)=Elite(i,j)+P*CF*stepsize(i,j);  

    

       end  

      end                                         

  end    

        

     %------------------ Detecting top predator ------------------        

  for i=1:size(Prey,1)  

        

    Flag4ub=Prey(i,:)>ub;  

    Flag4lb=Prey(i,:)<lb;  

    Prey(i,:)=(Prey(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;

  

    fitness(i,1)=fobj(Prey(i,:));

        

      if fitness(i,1)<Top_predator_fit 

         Top_predator_fit=fitness(i,1);

         Top_predator_pos=Prey(i,:);

      end     

  end

        

     %---------------------- Marine Memory saving ----------------

    

 if Iter==0

    fit_old=fitness;    Prey_old=Prey;

 end

     

    Inx=(fit_old<fitness);

    Indx=repmat(Inx,1,dim);

    Prey=Indx.*Prey_old+~Indx.*Prey;

    fitness=Inx.*fit_old+~Inx.*fitness;

        

    fit_old=fitness;    Prey_old=Prey;

     %---------- Eddy formation and FADs?effect (Eq 16) ----------- 

                             

  if rand()<FADs

     U=rand(SearchAgents_no,dim)<FADs;                                                                                              

     Prey=Prey+CF*((Xmin+rand(SearchAgents_no,dim).*(Xmax-Xmin)).*U);

  else

     r=rand();  Rs=size(Prey,1);

     stepsize=(FADs*(1-r)+r)*(Prey(randperm(Rs),:)-Prey(randperm(Rs),:));

     Prey=Prey+stepsize;

  end

                                                        

  Iter=Iter+1;  

  Convergence_curve(Iter)=Top_predator_fit; 

       

end

T=toc;

⛄ 运行结果

⛄ 参考文献

​[1]胡顺强,崔东文.基于海洋捕食者算法优化的长短期记忆记忆网络趋势预测[J].中国农村水利水电,2021(02):78-82+90.

⛄ Matlab代码关注

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VLAN网络支持ipv6的交换机和虚机配置

VLAN支持ipv6的交换机和虚机配置前言一、创建VLAN网络并配置交换机1.规划并在OpenStack上创建 VLAN网络2.在交换机上配置VLAN二、Ubuntu虚机配置1.创建虚机2.在OpenStack上查看port3.登录虚机配置网卡3.1登录虚机后&#xff0c;发现虚机没获取到openstack上对应port的ipv6地址。…

Qt编写跨平台视频监控系统(64通道占用7%CPU/支持win_linux_mac等)

一、前言 视频监控组件经历过数十年的迭代&#xff0c;从最初的只简单播放个rtsp视频流&#xff0c;到现在支持各种音频视频文件格式&#xff08;mp3、wav、mp4、asf、rm、rmvb、mkv等&#xff09;、支持各种视频流格式&#xff08;rtp、rtsp、rtmp、http等&#xff09;、支持…

10个JavaScript常见高级知识点

今天&#xff0c;给大家分享的是一篇干货知识《10个JavaScript常见高级知识点》&#xff0c;主要针对初级前端和想要面试找工作的同学&#xff0c;想要学好前端&#xff0c;除了要掌握JavaScript的基础知识外&#xff0c;还需要掌握一些高级的知识点。 学会了下面这些常见的高…

鼠标经过图片在边框内放大动效

鼠标没有经过&#xff1a; 鼠标经过的时候&#xff0c;看图&#xff0c;应该可以看出变化吧&#xff01;图有放大的效果。 样式&#xff1a;图片由一个盒子包着&#xff0c;盒子加上overflow:hidden的样式&#xff0c;即可以保证图片在边框内放大。 然后给图片加上动画效果就可…

JavaWeb开发之——数据库设计(20)

一 概述 数据库设计-简介数据库设计-多表关系实现数据库设计-案例 二 数据库设计-简介 2.1 软件的研发步骤 2.2 数据库设计概念 数据库设计就是根据业务系统的具体需求&#xff0c;结合我们所选用的DBMS(Database Management System-数据库管理系统)&#xff0c;为这个业务系…

运动哪种耳机好用,推荐五款适合运动的耳机分享

​经常佩戴耳机的小伙伴都知晓传统的蓝牙耳机相对于有线耳机来说比较方便&#xff0c;但也存在着耳道一直堵塞导致细菌的滋生等因素的存在&#xff0c;但在近些年火热的骨传导耳机却能够将这些问题一一化解&#xff0c;基本可以说是百利而无一害&#xff0c;所以今天我就给小伙…

第一章 计算机系统体系结构

1.1 什么是计算机体系结构 本章的第一个概念是计算机系统(computer system)。 计算机系统包括读取并执行程序的 中央处理单元(CPU&#xff0c; 保存程序和数据的存储器以及将芯片转换为实用系统的 其他子系统。 这些子系统会使CPU与显示器、打印机、Internet等外部设备之间的…

【优化求解】整数规划求解机票超售优化赔付问题【含Matlab源码 2182期】

⛄一、问题 A航空公司每天有6班航班从上海到北京&#xff0c;从上午10点到晚上8点&#xff0c;每两小时发一班航班。某天获知&#xff0c;前三班机每班可以容纳100名旅客&#xff0c;后三班机每班可以容纳150名旅客。如果某次航班超售&#xff0c;A航空公司可以把某预定了该次…

【JSP/Servlet】基于WEB的通讯录系统

巩固JSP/Servlet系统开发描述步骤系统功能描述一、创建一个登录页面二、模拟数据&#xff08;用数据库模拟用户名和密码还有用户的通讯录&#xff09;三、创建一个JDBC工具类四、判断在登录页面输入的用户名和密码是否正确五、利用cookie实现保存六、以表格形式显示出我的通讯录…

2022最新MySQL面试题-有详细完整的答案解析

MySQL专题面试题 MySQL中有哪些存储引擎&#xff1f; InnoDB存储引擎 InnoDB是MySQL的默认事务型引擎&#xff0c;也是最重要、使用最广泛的存储引擎。它被设计用来处理大量的短期(short-lived)事务&#xff0c;应该优先考虑InnoDB引擎。 MylSAM存储引擎 在MySQL 5.1及之前的…

操作简单的BI数据分析软件有哪些?实际体验如何?

使用者没有IT基础&#xff0c;不懂代码&#xff0c;又需要对大量复杂的数据进行深度分析&#xff1b;分析效率要高&#xff1b;报表要直观易理解&#xff1b;最好能让每个浏览者都自己动手做分析。现在市面上&#xff0c;能够满足这些要求的BI数据分析软件有哪些&#xff1f;实…

一文速通MybatisPlus

目录 Mybatis-plus简介 MP特性 框架的结构 MP快速入门 配置日志输出 主键生成策略 自动填充 方式一&#xff1a;数据库级别 方式二&#xff1a;代码控制级别(常用) 乐观锁和悲观锁 测试乐观锁单线程成功的例子 乐观锁多线程失败案例 查询操作 分页查询 删除操作 删除…

C++ 手动实现单向循环链表(课后作业版)

单向循环链表&#xff0c;并实现增删查改等功能 首先定义节点类&#xff0c;类成员包含当前节点的值&#xff0c; 指向下一个节点的指针 循环链表的尾节点指向头节点 节点定义&#xff1a; //node definition template <typename T> class Node { public:T value;Nod…

Vue的生命周期快速入门

图示 流程 new Vue()实例化一个vue实例&#xff0c;然后init初始化event 和 lifecycle&#xff0c; 其实这个过程中分别调用了3个初始化函数&#xff08;initLifecycle(), initEvents(), initRender()&#xff09;&#xff0c;分别初始化了生命周期&#xff0c;事件以及定义cr…

k8s 资源管理及查看命令

关注 迪答数据 公众号获取更多 技术/数据 干货文章 文章传送门&#xff1a;数据治理之指标体系管理 管理容器的计算资源 参考文档&#xff1a; Kubernetes Managing Compute Resources for Containers(opens new window)https://kubernetes.io/docs/concepts/configuration/m…

go slice 扩容机制

前言 go语言没有ArrayList这样的封装&#xff0c;但是官方原生提供slice&#xff0c;底层就是数组存储&#xff0c;并且能自动扩容&#xff0c;相较于ArrayList的默认10&#xff0c;扩容5&#xff0c;slice的逻辑是有区别的。slice默认容量0。 demo go版本号 huahuaMac-min…

第一章 数据库绪论

数据库绪论 数据管理的三个阶段 人工管理阶段 文件系统阶段 数据库系统阶段 基本术语 数据&#xff08;Data&#xff09; 计算机用来描述事物的记录&#xff08;文字&#xff0e;图形&#xff0e;图像&#xff0e;声音&#xff09;数据的形式本身并不能完全表达其内容&a…

Transformer Fusion for Indoor RGB-D Semantic Segmentation

如何聚合多尺度特征这是一个问题&#xff0c;现有的方法大多通过卷积来实现&#xff0c;而很少在特征融合的地方使用长距离依赖&#xff0c;因此对于大物体的分割就会有挑战。本文提出基于transformer的融合策略&#xff0c;来更好的建模上下文。 TransD-Fusion包含①&#xff…

SpringBoot SpringBoot 开发实用篇 6 监控 6.4 info 端点指标控制

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇6 监控6.4 info 端点指标控制6.4.1 问题引入6.4.2 info 端点指标控制…

CleanMyMac4.12最新版mac系统内存空间清理教程

CleanMyMac X可以优化Mac系统。mac系统用久了&#xff0c;用CleanMyMac清理一下效果还不错。可用来清理系统的缓存、日志、语言和垃圾文件&#xff0c;还能卸载应用程序。 Mac是不需要安装任何杀毒软件的&#xff0c;虽然不用杀毒&#xff0c;但是日常的清理还是有必要的&#…