首页 > 编程语言 >【智能算法】蝠鲼觅食优化算法(MRFO)原理及实现

【智能算法】蝠鲼觅食优化算法(MRFO)原理及实现

时间:2024-03-14 00:00:30浏览次数:26  
标签:MRFO rand xid dim cdot PopPos 算法 智能算法 Best

在这里插入图片描述

目录


1.背景

2017年,Zhao等人受到蝠鲼自然捕食行为启发,提出了蝠鲼觅食优化算法(Manta Ray Foraging Optimization,MRFO)。

2.算法原理

2.1算法思想

MRFO模拟了蝠鲼在海洋中的觅食过程,提出了三种捕食策略链式觅食-螺旋觅食-翻滚觅食

2.2算法过程

链式觅食
蝠鲼可以观察到浮游生物的位置并朝它游去,在一个位置上浮游生物的浓度越高,位置越好(适应度函数)。蝠鲼排成一列,形成觅食链,除了第一个个体外,其他个体不仅朝着食物游去,还朝着它前面的个体游去。在每次迭代中,每个个体都会根据迄今为止找到的最佳解决方案和它前面的解决方案进行更新。
在这里插入图片描述

x i d ( t + 1 ) = { x i d ( t ) + r ⋅ ( x b e s t d ( t ) − x i d ( t ) ) + α ⋅ ( x b e s t d ( t ) − x i d ( t ) ) i = 1 x i d ( t ) + r ⋅ ( x i − 1 d ( t ) − x i d ( t ) ) + α ⋅ ( x b e s t d ( t ) − x i d ( t ) ) i = 2 , … , N x_i^d(t+1)=\begin{cases}x_i^d(t)+r\cdot(x_{best}^d(t)-x_i^d(t))+\alpha\cdot(x_{best}^d(t)-x_i^d(t))&i=1\\x_i^d(t)+r\cdot(x_{i-1}^d(t)-x_i^d(t))+\alpha\cdot(x_{best}^d(t)-x_i^d(t))&i=2,\ldots,N\end{cases} xid​(t+1)={xid​(t)+r⋅(xbestd​(t)−xid​(t))+α⋅(xbestd​(t)−xid​(t))xid​(t)+r⋅(xi−1d​(t)−xid​(t))+α⋅(xbestd​(t)−xid​(t))​i=1i=2,…,N​
a a a为控制因子,表述为:
α = 2 ⋅ r ⋅ ∣ l o g ( r ) ∣ \alpha=2\cdot r\cdot\sqrt{|log(r)|} α=2⋅r⋅∣log(r)∣
螺旋觅食
当一群蝠鲼在深水中发现一片浮游生物时,它们会组成一条长长的觅食链,并以螺旋形式向食物游去。(类似于鲸鱼算法(WOA)捕食策略)
在这里插入图片描述

当 t / T > r a n d 时 t/T>rand时 t/T>rand时,此时进行全局探索:
x i d ( t + 1 ) = { x b e s t d + r ⋅ ( x b e s t d ( t ) − x i d ( t ) ) + β ⋅ ( x b e s t d ( t ) − x i d ( t ) ) i = 1 x b e s t d + r ⋅ ( x i − 1 d ( t ) − x i d ( t ) ) + β ⋅ ( x b e s t d ( t ) − x i d ( t ) ) i = 2 , … , N x_i^d(t+1)=\begin{cases}x_{best}^d+r\cdot(x_{best}^d(t)-x_i^d(t))+\beta\cdot(x_{best}^d(t)-x_i^d(t))&i=1\\x_{best}^d+r\cdot(x_{i-1}^d(t)-x_i^d(t))+\beta\cdot(x_{best}^d(t)-x_i^d(t))&i=2,\dots,N\end{cases} xid​(t+1)={xbestd​+r⋅(xbestd​(t)−xid​(t))+β⋅(xbestd​(t)−xid​(t))xbestd​+r⋅(xi−1d​(t)−xid​(t))+β⋅(xbestd​(t)−xid​(t))​i=1i=2,…,N​
当 t / T ≥ r a n d 时 t/T \ge rand时 t/T≥rand时,此时进行局部探索:
x i d ( t + 1 ) = { x r a n d d + r ⋅ ( x r a n d d − x i d ( t ) ) + β ⋅ ( x r a n d d − x i d ( t ) ) i = 1 x r a n d d + r ⋅ ( x i − 1 d ( t ) − x i d ( t ) ) + β ⋅ ( x r a n d d − x i d ( t ) ) i = 2 , … , N \left.x_{i}^{d}(t+1)=\left\{\begin{array}{ll}{{x_{rand}^{d}+r\cdot(x_{rand}^{d}-x_{i}^{d}(t))+\beta\cdot(x_{rand}^{d}-x_{i}^{d}(t))}}&{i=1}\\{{x_{rand}^{d}+r\cdot(x_{i-1}^{d}(t)-x_{i}^{d}(t))+\beta\cdot(x_{rand}^{d}-x_{i}^{d}(t))}}&{i=2,\ldots,N}\end{array}\right.\right. xid​(t+1)={xrandd​+r⋅(xrandd​−xid​(t))+β⋅(xrandd​−xid​(t))xrandd​+r⋅(xi−1d​(t)−xid​(t))+β⋅(xrandd​−xid​(t))​i=1i=2,…,N​
β \beta β为控制因子,表述为:
β = 2 e r 1 T − t + 1 T ⋅ sin ⁡ ( 2 π r 1 ) \beta=2e^{r_1\frac{T-t+1}T}\cdot\sin(2\pi r_1) β=2er1​TT−t+1​⋅sin(2πr1​)
翻滚觅食
在这种行为中,食物的位置被视为一个中心点。每个个体倾向于在中心点周围来回游动,并翻滚到一个新的位置。
在这里插入图片描述

x i d ( t + 1 ) = x i d ( t ) + S ⋅ ( r 2 ⋅ x b e s t d − r 3 ⋅ x i d ( t ) ) , i = 1 , … , N x_i^d(t+1)=x_i^d(t)+S\cdot(r_2\cdot x_{best}^d-r_3\cdot x_i^d(t)),i=1,\ldots,N xid​(t+1)=xid​(t)+S⋅(r2​⋅xbestd​−r3​⋅xid​(t)),i=1,…,N
伪代码
在这里插入图片描述

3.代码实现

% 蝠鲼觅食优化算法
function [Best_pos, Best_fitness, Iter_curve, History_pos, History_best] = MRFO(pop, maxIter,lb,ub,dim,fobj)
%input
%pop 种群数量
%dim 问题维数
%ub 变量上边界
%lb 变量下边界
%fobj 适应度函数
%maxIter 最大迭代次数
%output
%Best_pos 最优位置
%Best_fitness 最优适应度值
%Iter_curve 每代最优适应度值
%History_pos 每代种群位置
%History_best 每代最优个体位置
%% 初始化种群
PopPos = zeros(pop, dim);
for i = 1:dim
    PopPos(:,i) = lb(i) + (ub(i) - lb(i)) * rand(pop, 1);
end
%% 计算适应度
PopFit = zeros(1, pop);
for i=1:pop
     PopFit(i)=fobj(PopPos(i,:));
end
%% 记录
[MinFitness, MinIdx] = sort(PopFit);
Best_pos = PopPos(MinIdx(1),:);
Best_fitness = MinFitness(1);
%% 迭代
for It = 1:maxIter  
     Coef = It / maxIter;     
       if rand<0.5
          r1=rand;                         
          Beta=2*exp(r1*((maxIter-It+1)/maxIter))*(sin(2*pi*r1));    
          if  Coef > rand                                                      
              newPopPos(1,:)=Best_pos+rand(1,dim).*(Best_pos-PopPos(1,:))+Beta*(Best_pos-PopPos(1,:)); %Equation (4)
          else
              IndivRand=rand(1,dim).*(ub-lb)+lb;                                
              newPopPos(1,:)=IndivRand+rand(1,dim).*(IndivRand-PopPos(1,:))+Beta*(IndivRand-PopPos(1,:)); %Equation (7)         
          end              
       else 
            Alpha=2*rand(1,dim).*(-log(rand(1,dim))).^0.5;           
            newPopPos(1,:)=PopPos(1,:)+rand(1,dim).*(Best_pos-PopPos(1,:))+Alpha.*(Best_pos-PopPos(1,:)); %Equation (1)
       end
     
    for i=2:pop
        if rand<0.5
           r1=rand;                         
           Beta=2*exp(r1*((maxIter-It+1)/maxIter))*(sin(2*pi*r1));    
             if  Coef>rand                                                      
                 newPopPos(i,:)=Best_pos+rand(1,dim).*(PopPos(i-1,:)-PopPos(i,:))+Beta*(Best_pos-PopPos(i,:)); %Equation (4)
             else
                 IndivRand=rand(1,dim).*(ub-lb)+lb;                                
                 newPopPos(i,:)=IndivRand+rand(1,dim).*(PopPos(i-1,:)-PopPos(i,:))+Beta*(IndivRand-PopPos(i,:));  %Equation (7)       
             end              
        else
            Alpha=2*rand(1,dim).*(-log(rand(1,dim))).^0.5;           
            newPopPos(i,:)=PopPos(i,:)+rand(1,dim).*(PopPos(i-1,:)-PopPos(i,:))+Alpha.*(Best_pos-PopPos(i,:)); %Equation (1)
       end         
    end
         
           for i=1:pop
               % 边界检查
               H_ub=newPopPos(i,:)>ub;
               H_lb=newPopPos(i,:)<lb;
               newPopPos(i,:)=(newPopPos(i,:).*(~(H_ub+H_lb)))+ub.*H_ub+lb.*H_lb;  
               newPopFit(i)=fobj(newPopPos(i,:));    
              if newPopFit(i)<PopFit(i)
                 PopFit(i)=newPopFit(i);
                 PopPos(i,:)=newPopPos(i,:);
              end
           end
     
            S=2;
        for i=1:pop           
            newPopPos(i,:)=PopPos(i,:)+S*(rand*Best_pos-rand*PopPos(i,:)); %Equation (8)
        end
     
     for i=1:pop
        % 边界检查
        H_ub=newPopPos(i,:)>ub;
        H_lb=newPopPos(i,:)<lb;
        newPopPos(i,:)=(newPopPos(i,:).*(~(H_ub+H_lb)))+ub.*H_ub+lb.*H_lb;  
        newPopFit(i)=fobj(newPopPos(i,:));    
        if newPopFit(i)<PopFit(i)
            PopFit(i)=newPopFit(i);
            PopPos(i,:)=newPopPos(i,:);
         end
     end
     
     for i=1:pop
        if PopFit(i)<Best_fitness
           Best_fitness=PopFit(i);
           Best_pos=PopPos(i,:);            
        end
     end
 
  
     Iter_curve(It)=Best_fitness;
     History_pos{It} = PopPos;
     History_best{It} = Best_pos;
end
end

在这里插入图片描述

4.参考文献

[1] Zhao W, Zhang Z, Wang L. Manta ray foraging optimization: An effective bio-inspired optimizer for engineering applications[J]. Engineering Applications of Artificial Intelligence, 2020, 87: 103300.

标签:MRFO,rand,xid,dim,cdot,PopPos,算法,智能算法,Best
From: https://blog.csdn.net/Logic_9527/article/details/136676755

相关文章

  • 论文查重算法
    论文查重算法这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024/homework/13136这个作业的目标开发个人项目github:https://github.com/hhuang......
  • 汉诺塔的图解递归算法
    原文链接:https://www.cnblogs.com/dmego/p/5965835.html如下图所示,从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移到一个盘子且大盘子不能在小盘子上面,求移动的步骤和移动的次数 解:(1)n==1  ......
  • 基于SSM的协同过滤算法的电影推荐系统(有报告)。Javaee项目。ssm项目。
    演示视频:基于SSM的协同过滤算法的电影推荐系统(有报告)。Javaee项目。ssm项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringMvc+Mybatis+Vue+Layui+Elementui+Maven来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构的Web系统。报......
  • 一致性哈希算法及其在分布式系统中的应用
    摘要本文将会从实际应用场景出发,介绍一致性哈希算法(ConsistentHashing)及其在分布式系统中的应用。首先本文会描述一个在日常开发中经常会遇到的问题场景,借此介绍一致性哈希算法以及这个算法如何解决此问题;接下来会对这个算法进行相对详细的描述,并讨论一些如虚拟节点等与此算......
  • 利用规约算法实现求解数组元素最大值
    规约算法原理可参照上一篇关于规约算法求解数组和的博客,此处不再详细介绍,直接给出代码实现过程及注释。#include<stdio.h>#include<stdlib.h>#defineN1000//数组大小__global__voidfindMax(int*array,int*maxValue,int*maxIndex){__shared__ints_ma......
  • 在GPU上利用规约算法完成对数组元素累加的并行计算
    目录序言规约算法介绍GPU代码实现规约算法序言并行规约是一种适用于GPU平台的并行算法,主要提高求和、最值、均值、逻辑与和逻辑或等一类运算的并行度。若使用CPU计算,需要串行遍历所有元素得到上述运算的结果,但在GPU平台可以使用规约操作并行实现上述运算。规约算法介......
  • 反无人机电子护栏:原理、算法及简单实现
            随着无人机技术的快速发展,其在航拍、农业、物流等领域的应用日益广泛。然而,无人机的不规范使用也带来了安全隐患,如侵犯隐私、干扰航空秩序等。为了有效管理无人机,反无人机电子护栏技术应运而生。目录一、反无人机电子护栏基本原理二、使用的算法三、简单实......
  • Edu 12 --- Simple Subset -- 题解 (一个比较巧妙的思维算法题)
    SimpleSubset:题解:  思路解析:    题目要求任意两个数的和为质数,那我们最坏情况就是任意选择一个数,此时子集为最大。    如果子集中有两个奇数或者偶数,他们两个之和一定会被2整除,那么我们只能选择一奇一偶。    如果多个奇数都为1的话,他们两两......
  • 蓝桥杯算法训练VIP-数组查找及替换
    题目1634:蓝桥杯算法训练VIP-数组查找及替换时间限制:3s内存限制:192MB提交:1629解决:890题目描述给定某整数数组和某一整数b。要求删除数组中可以被b整除的所有元素,同时将该数组各元素按从小到大排序。如果数组元素数值在A到Z的ASCII之间,替换为对应字母。输......
  • 如何实现缓存与LRU算法以及惰性过期
    如何实现缓存与LRU算法以及惰性过期实现缓存概述与LRU算法详解缓存的基本概念与作用在计算机科学中,缓存是一种临时存储数据的技术,用于加速数据访问速度。通过将常用数据存储在高速缓存中,可以减少对慢速存储器(如磁盘或数据库)的访问次数,从而提高系统的性能和响应速度。缓存......