【优化算法】蝠鲼觅食优化算法(MRFO)【含Matlab源码 1435期】

举报
海神之光 发表于 2022/05/29 00:15:31 2022/05/29
【摘要】 一、获取代码方式 获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。 获取代码方式2: 完整代码已上传我的资源:【优化算法】蝠鲼觅食优化(MRFO)【含Matlab源...

一、获取代码方式

获取代码方式1:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

获取代码方式2:
完整代码已上传我的资源:【优化算法】蝠鲼觅食优化(MRFO)【含Matlab源码 1435期】

备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);

二、蝠鲼觅食优化算法简介

蝠鲼是已知最大的海洋生物之一,每天会吃大量的海洋浮游生物,虽然浮游生物并不是均匀分布或定期集中在某些特定地区,但是蝠鲼在群体觅食中总可以找到丰富的浮游生物,那是因为它们进化出了一套智能觅食策略,将此策略转换为数学模型就可得到MRFO算法,此觅食策略包括3种:链式觅食、旋风式觅食和筋斗式觅食.

1 链式觅食
蝠鲼通过观察浮游生物的位置并游向它们,当某位置浮游生物的密度越高,蝠鲼就越会接近来觅食.链式觅食是蝠鲼群头尾相连排列成一条有序的觅食链,除了最前面的个体外,其他个体不仅朝着最优位置前进,还会随着它前面的个体前进,也就是前面个体遗漏的浮游生物还会被其后的个体所觅食.那么在每次迭代中,每个个体都会被目前的最优位置以及其前的位置所更新,其更新方式可由下式来表示.
在这里插入图片描述
2 旋风式觅食
当蝠鲼群发现在深水处有高密度的浮游生物时,它们会彼此头尾相连形成一条呈空间螺旋状的觅食链游向食物,浮游生物会被产生的漩涡拉到中心,刚好进入了蝠鲼群张开的大嘴,并且每个个体还会随着前面的个体移动.若所有个体都以食物作为参考位置来执行搜索,其更新方式可由下式来表示.
在这里插入图片描述
其中:β为权重因子;T为最大迭代次数;r1为[0,1]内的随机数.
每个个体在寻找到达新位置的最好方法是在整个搜索空间中以一个新的随机位置作为参考,该机制主要侧重于探索,使MRFO能够进行广泛的全局搜索,其可由下式来表示.
在这里插入图片描述
3 筋斗式觅食
当蝠鲼群发现食物源时,它们会做一系列的翻筋斗,在浮游生物周边盘旋,将其拉向蝠鲼群.它们翻筋斗是周期性的随机运动,在这种情况下,食物的位置被视为枢纽,每个个体倾向于围绕枢轴游荡并翻腾到新的位置,即在位于当前位置及其对称位置之间的搜索域当中可以移动到新的任何位置,这个搜索域也就是筋斗范围.因此它们总是围绕着最优位置来更新位置,其可由下式来表示.
在这里插入图片描述
其中:S是决定筋斗范围的筋斗因子,本文取S=2;r2与r3为[0,1]内的随机数.
MRFO算法的具体实现步骤如下.
(1)初始化参数.初始化空间维数,种群规模,最大迭代次数.
(2)初始化种群.用初始种群适应度值得出最优适应度个体.
(3)判断while循环是否达到最大迭代次数,若是,则转到(9),否则就到下一步.
(4)在[0,1]中生成一个随机数,对比该数是否小于0.5,若是,到下一步;否则用(1)和(2)生成新个体并得出适应度值.
(5)在[0,1]中生成一个随机数,判断该数是否小于t/T,如果是,转到下一步;否则用(3)和(4)生成新个体并得出适应度值.
(6)用(5)和(6)生成新个体并计算适应度值.
(7)对比新个体的值是否小于原个体的值,如果是,用新个体代替原个体;否则,保留原个体.对比新个体的值是否小于全局个体的值,如果是,则用新个体代替原全局最优;否则,保留原全局最优.
(8)用(7)生成新个体并计算其值.同7)评价新一代种群的个体适应度.
(9)输出最优适应度值和最优个体.

三、部分源代码

%--------------------------------------------------------------------------
% MRFO code v1.0.
 
% -------------------------------------------------------------------------

clc;
clear;
 
MaxIteration=1000; 
PopSize=50;
 FunIndex=5;
[BestX,BestF,HisBestF]=MRFO(FunIndex,MaxIteration,PopSize);


display(['F_index=', num2str(FunIndex)]);
display(['The best fitness is: ', num2str(BestF)]);
Optimal(FunIndex)=BestF;

%display(['The best solution is: ', num2str(BestX)]);
 if BestF>=0
     semilogy(HisBestF,'r','LineWidth',2);
 else
     plot(HisBestF,'r','LineWidth',2);
 end
 xlabel('Iterations');
 ylabel('Fitness');
 title(['F',num2str(FunIndex)]);










  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

四、运行结果

在这里插入图片描述

五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3] 凤盛强.基于蝠鲼觅食优化算法的配电网故障区间定位[J].兰州文理学院学报(自然科学版). 2021,35(01)

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/120917613

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。