0
点赞
收藏
分享

微信扫一扫

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


一、获取代码方式

获取代码方式1:

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

获取代码方式2:

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

备注:

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

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

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

1 链式觅食

蝠鲼通过观察浮游生物的位置并游向它们,当某位置浮游生物的密度越高,蝠鲼就越会接近来觅食.链式觅食是蝠鲼群头尾相连排列成一条有序的觅食链,除了最前面的个体外,其他个体不仅朝着最优位置前进,还会随着它前面的个体前进,也就是前面个体遗漏的浮游生物还会被其后的个体所觅食.那么在每次迭代中,每个个体都会被目前的最优位置以及其前的位置所更新,其更新方式可由下式来表示.

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

2 旋风式觅食

当蝠鲼群发现在深水处有高密度的浮游生物时,它们会彼此头尾相连形成一条呈空间螺旋状的觅食链游向食物,浮游生物会被产生的漩涡拉到中心,刚好进入了蝠鲼群张开的大嘴,并且每个个体还会随着前面的个体移动.若所有个体都以食物作为参考位置来执行搜索,其更新方式可由下式来表示.

【优化算法】蝠鲼觅食优化算法(MRFO)【含Matlab源码 1435期】_随机数_02

其中:β为权重因子;T为最大迭代次数;r1为[0,1]内的随机数.

每个个体在寻找到达新位置的最好方法是在整个搜索空间中以一个新的随机位置作为参考,该机制主要侧重于探索,使MRFO能够进行广泛的全局搜索,其可由下式来表示.

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

3 筋斗式觅食

当蝠鲼群发现食物源时,它们会做一系列的翻筋斗,在浮游生物周边盘旋,将其拉向蝠鲼群.它们翻筋斗是周期性的随机运动,在这种情况下,食物的位置被视为枢纽,每个个体倾向于围绕枢轴游荡并翻腾到新的位置,即在位于当前位置及其对称位置之间的搜索域当中可以移动到新的任何位置,这个搜索域也就是筋斗范围.因此它们总是围绕着最优位置来更新位置,其可由下式来表示.

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

其中: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)]);

四、运行结果

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

五、matlab版本及参考文献

1 matlab版本

2014a

2 参考文献

[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.

[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.

[3] 凤盛强.基于蝠鲼觅食优化算法的配电网故障区间定位[J].兰州文理学院学报(自然科学版). 2021,35(01)



举报

相关推荐

0 条评论