SCI一区鮣鱼优化算法,原理详解,MATLAB代码免费获取

鮣鱼优化算法(Remora optimization algorithm,ROA)是一种受自然启发的群智能优化算法。该算法的灵感来自于海洋中的鮣鱼--通过寄生和随机寄主更换的思想,建立了一个基于寄生的框架。在ROA中,鮣鱼最初做了一个全球性的运动,探索阶段,并将这一阶段命名为“自由旅行”。这个阶段包括一个“大全局”运动,对应于旗鱼身上的移除吸附,并更新旗鱼的位置以进行远距离位置更新。此外,还有一个“小全球”运动,这是一个尝试在“实验攻击”中更新鮣鱼本身。同时,尝试的结果作为是否更换寄主的重要依据。在勘探阶段,鮣鱼执行部分更新。在这个阶段,鮣鱼逐渐向目标收敛。这个阶段被命名为“进食”。鮣鱼的取食方式有两种,即跟随大型宿主进食或以宿主身上的寄生虫为食。

该成果于2021年发表在知名一区SCI期刊“Expert Systems with Applications”上。被引次数高达232次

3da19226e5dab1442f4771d2c08209db.png

鮣鱼如下图。鮣鱼有一个非常长的身体,头部是平的,并逐渐成为圆柱形向后。在顶部,有吸盘变形的第一背鳍。它的鳍从吸盘中心向两侧分裂,形成约21-28个鳍瓣。鮣鱼以其在鲸鱼或其他海洋动物或远洋船体上游泳的能力而闻名。这样的习惯不仅省力,而且不受敌人的侵扰。鮣鱼主要以其他鱼类或无脊椎动物为食。当它到达饵料丰富的海域时,就会离开宿主,摄取食物,然后吸附到新的宿主身上,继续转移到另一个海域。但在某些情况下,就像清洁工一样,它也有可能吃到载体外的残骸食物或外寄生虫。

26a279f2add72fbdc1aff59f975587e4.png

1、算法原理

(1)种群初始化:

在所提出的鮣鱼算法中,假设候选解为λ a,其在搜索空间中的位置R为问题的变量。在一维、二维、三维或超维空间中游动时,它们的位置矢量会发生相应的变化。当前位置是Ri =(Ri1,Ri2,Rid,Rid),其中i表示Rsa的数量,d表示Rsa在搜索空间中的维度。同理,RBest =(R* 1,R* 2,R* d,R* d)代表生物习性中的食物(目标),也代表算法中的最优解。在算法中,每个候选解都应该有一个相应的适应度函数。这里,它可以表示为f(Ri)= f(Ri1,Ri2,Rid,Rid)。f是计算适应度函数值的相应规则。f(RBest)= f(R* 1,R* 2,R* d,R* d)保存对应于最佳位置的最佳适应值。值得注意的是,搜索因子是找到解决方案的主要因素,并且它分散在搜索空间中。其他海洋生物或船只只是帮助鮣鱼进行位置更新的工具,它有自己的位置更新方式。有了这些工具,鮣鱼可以找到该地区的最佳位置。实际上,确定最佳位置有两种模式,主要根据是否主动选择不同的模式。

在本文提出的ROA算法中,假设候选解是鮣鱼,其在搜索空间中的位置R为问题的变量。当鮣鱼在一维、二维、三维或超维空间中游动时,它们的位置向量会发生相应的变化。当前位置为Ri = (Ri1, Ri2,⋯,Rid),其中i表示鮣鱼的个数,d表示鮣鱼在搜索空间中的维度。同样,RBest = (R* 1, R* 2,⋯,R* d)表示生物习惯中的食物(目标),也表示算法中的最优解。在算法中,每个候选解都应该有对应的适应度函数。这里可以表示为f(Ri) = f(Ri1, Ri2,⋯,Rid)。F为计算适应度函数值的相应规则。f(RBest) = f(R * 1, R* 2,⋯,R* d)保存最佳迁移位置对应的最佳适应度值。值得注意的是,鮣鱼是寻找解决方案的主要因素,并且它分散在搜索空间中。其他海洋生物或船舶只是在位置更新方面协助搬运的工具,它有自己的更新位置的方法。

(2)探索阶段

当鮣鱼附着在剑鱼身上时,它的位置可以被认为是同时更新的。基于该算法的精英思想,对其位置更新公式进行改进,得到如下公式:

其中t表示当前迭代次数,t表示最大迭代次数。rand是一个随机位置。精英们选择了鮣鱼的历史最佳位置来领导更新。同时,加入了随机选取的模组,保证了对搜索空间的探索。鮣鱼对不同寄主的选择主要取决于它是否吃过猎物,即当前获得的适应度函数值是否优于上一代。实际上,当前适应度函数值是通过“经验攻击”获得的。

为了确定是否有必要更换寄主,需要在寄主周围不断地迈出一小步,类似于经验的积累。将以上思路建模后,公式如下:

其中Rpre代表上一代的位置,可以看作是一种经验。Ratt表示试探性的一步。当鮣鱼采取这种积极的步骤时,可以被视为一种“小全球”运动,因此,它被称为“全球性”运动。该机制在兼顾可预测性的同时有效地跳出局部最优,并得到了更广泛的发展。在这一步之后,还需要一个判断的步骤,在这之后,鮣鱼随机选择是否更换寄主。算法中这一步的判断可以表示为当前解f(Rt i)和尝试解f(Ratt)的适应度函数值之间的比较。以求解最小值问题为例,其公式如下:

然后,鮣鱼选择不同的进料方法进行局部优化,这将在下一节中进行说明。

(3)开发阶段(Exploitation)

在原有WOA算法的基础上,推导出了附着在鲸体上的触角的位置更新公式。公式如下所示:

在更大的解空间中,当鮣鱼在鲸鱼上时,它们的位置可以被视为相同。其中D是猎人与猎物之间的距离(当前最优解),α是[- 1,1]中的随机数,a在[- 2,- 1]之间线性下降。

寄主取食是开发过程中的进一步细分。在这个阶段,解空间可以简化为主机的位置空间。在宿主身上或周围移动可以被认为是小步骤,可以用数学模型表示为:

这里用A表示一个小的移动步长,这个移动步长与寄主和移除体的体积空间有关。为了区分宿主和移除物在溶液空间中的位置,本文使用移除因子C来缩小移除物的位置。假设寄主的体积为1,则鮣鱼的体积约为寄主体积的一小部分。下图为c = 0.1条件下的“宿主摄食”模型。

6d0a2eedfece31f8b78ba8cecb992a84.png

由于寄主的卷是随机的,所以使用B来模拟随机的寄主卷空间。在鮣鱼取食宿主的过程中,可以看到搜索空间逐渐减小。为便于理解,ROA流程图如下图所示。

3c317d51f567bb298460e0a49ce2b68c.png

ROA优化算法的伪代码如下

5938e6237b88358f1786c72f3590cbc6.png

2、结果展示

b644f9a06552bcecd1d98a6fc32775cb.png

71087ff42040854a36856c0f0f7b6f40.png

b77bc50456da4b551daf8818f7c89e32.png

3a9d024be2d7cf4cd5e60c40e4a7937c.png

3、MATLAB核心代码

%% 淘个代码 %%
% 微信公众号搜索:淘个代码,获取更多代码
% 鮣鱼优化算法(ROA)
unction [Score,BestRemora,Convergence]=ROA(Search_Agents,Max_iterations,...
    Lowerbound,Upperbound,dimensions,objective)
tic;       
BestRemora=zeros(1,dimensions);
Score=inf; 
Remora=init(Search_Agents,dimensions,Upperbound,Lowerbound); % Generate initial remora population
Prevgen{1}=Remora; 
Convergence=zeros(1,Max_iterations);
t=0;
while t<Max_iterations  
%% Memory of previous generation
    if t<=1
        PreviousRemora = Prevgen{1};
    else
        PreviousRemora = Prevgen{t-1};
    end
% Boundary check
    for i=1:size(Remora,1)
        Flag4Upperbound=Remora(i,:)>Upperbound;
        Flag4Lowerbound=Remora(i,:)<Lowerbound;
Remora(i,:)=(Remora(i,:).*(~(Flag4Upperbound+Flag4Lowerbound)))+Upperbound.*Flag4Upperbound+Lowerbound.*Flag4Lowerbound;
        fitness=objective(Remora(i,:));
 % Evaluate fitness function of search agents   
  if fitness<Score 
            Score=fitness; 
            BestRemora=Remora(i,:);
        end
    end
  % Make a experience attempt through equation (2)
    for j=1:size(Remora,1)
        RemoraAtt = Remora(j,:)+(Remora(j,:)-PreviousRemora(j,:))*randn;   %Equation(2)
  % Calculate the fitness function value of the attempted solution (fitnessAtt)
        fitnessAtt=objective(RemoraAtt);
  % Calculate the fitness function value of the current solution (fitnessI)
        fitnessI=objective(Remora(j,:));
  % Check if the current fitness (fitnessI) is better than the attempted fitness(fitnessAtt)
  % if No, Perform host feeding by equation (9)
        if fitnessI>fitnessAtt
            V = 2*(1-t/Max_iterations);                       % Equation (12)
            B = 2*V*rand-V;                                   % Equation (11)
            C = 0.1;
            A = B*(Remora(j,:)-C*BestRemora);                 % Equation (10)
            Remora(j,:)= Remora(j,:)+A;                       % Equation (9)
  % If yes perform host conversion using equation (1) and (5)       
        elseif randi([0 1],1)==0
            a=-(1+t/Max_iterations);                           % Equation (7)
            alpha = rand*(a-1)+1;                             % Equation (6)
            D = abs(BestRemora-Remora(j,:));                   % Equation (8)
            Remora(j,:) = D*exp(alpha)*cos(2*pi*a)+Remora(j,:);      % Equation (5)
        else 
            m=randperm(size(Remora,1));
Remora(j,:)=BestRemora-((rand*(BestRemora+Remora(m(1),:))/2)-Remora(m(1),:));   % Equation (1)
        end
    end
  t=t+1 ;
  fprintf('Iteration : %d, best score : %d\n',t,Score)
  Prevgen{t+1}=Remora; 
  Convergence(t)=Score;
    end   
end

参考文献

[1]Jia H, Peng X, Lang C. Remora optimization algorithm[J]. Expert Systems with Applications, 2021, 185: 115665.

完整代码获取

后台回复关键词:

TGDM834

  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天吃饺子

不想刀我的可以选择爱我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值