(图片来源于参考资料截图)
海洋捕食者算法(Marine Predators Algorithm, MPA)是Afshin Faramarzi等人于2020年提出的一种新型元启发式优化算法。该算法是受海洋生物中捕食者和猎物的行为启发,在该算法中,捕食者和猎物均被视为搜索个体,捕食者会搜索猎物.同时猎物会寻找食物,主要以下特点和规则:
1)海洋捕食者对猎物丰富区域采取莱维飞行(Levy)策略,而对捕食者丰富区域采用布朗运动;
2) 捕食者在不同阶段,即捕食者与猎物游速不同时,会采用的觅食策略是不同的;
3)涡流形成或鱼类聚集效应(FADs)效应会改变捕食者觅食行为;
4)捕食者具有良好记忆提醒同类及记住成功觅食区域。
一、MAP的实现流程
根据以上特点,MPA的主要算法流程可以分为以下几步:
1)初始化种群。初始化种群可以通过随机初始或者通过混沌映射的方式来进行种群初始。这里采用随机初始的方式。
2)构建精英矩阵(Elite matrix)和猎物矩阵(Prey matrix),以及完成记忆存储;
3)MPA优化过程,可分为三阶段:
a) 在迭代前期,捕食者速度比猎物速度快,MPA采取勘探策略,其数学模型描述为:
b) 在迭代中期,捕食者速度与猎物速度相同,此时MPA勘探和开发策略并重,猎物采用Levy飞行策略,而捕食者负责勘探,采用布朗运动策略,其数学模型描述为:
c) 在迭代后期,捕食者速度比猎物速度慢,MPA采用开发策略,捕食者采用levy飞行策略,其数学模型描述为:
4)完成记忆存储和精英矩阵更新
5)添加FADs效应。这一部可以避免局部最优停滞,其数学模型描述为:
以上就是整个算法的实现过程,完整源代码Afshin Faramarzi已在File Exchange和GitHub中进行分享,这里就不再占用篇幅。
二、MAP的应用场景
(图片来源于参考资料截图)
为了验证MPA的效率,作者采用MPA针对29个优化测试函数、CEC-BC-2017的测试题等进行测试,取得不错的效果。作者通过与其他常用的优化算法进行对比发现,MPA的优化效率明显优于GA、PSO、GSA、CS、SSA和CMA-ES的算法,与SHADE和LSHADE-cnEpSin旗鼓相当。
在MPA的源程序文件夹中,包含如下几个关键文件:
MPA.m —— 海洋捕食者算法核心代码
levy.m —— levy策略
initialization.m —— 初始化
Get_Functions_details.m —— 测试函数
func_plot.m —— 绘图
main.m —— 测试用主函数
以下为测试用主函数:
代码语言:javascript复制clear;clc;close all;
format long
SearchAgents_no = 25; % Number of search agents
Function_name = 'F23'; % name of functions in Get_Functions_details.m
Max_iteration = 500; % Maximum number of iterations
[lb,ub,dim,fobj] = Get_Functions_details(Function_name);
[Best_score,Best_pos,Convergence_curve]=MPA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj);
% function topology
figure('Position',[500 400 700 290])
subplot(1,2,1);
func_plot(Function_name);
title('Function Topology')
xlabel('x_1');
ylabel('x_2');
zlabel([Function_name,'( x_1 , x_2 )'])
% Convergence curve
subplot(1,2,2);
semilogy(Convergence_curve,'Color','r')
title('Objective space')
xlabel('Iteration');
ylabel('Best score obtained so far');
display(['The best solution obtained by MPA is : ', num2str(Best_pos,10)]);
display(['The best optimal value of the objective function found by MPA is : ', num2str(Best_score,10)]);
disp(sprintf('--------------------------------------'));
可根据自己需要在Get_Functions_details.m函数定义自己的函数,也可以单独定义一个待求函数文件。
如有需要海洋捕食者算法MPA完整代码的伙伴可以通过参考资料链接下载,或在公众号中回复“QQ”加入matlab编程爱好者②群获取,在群文件matlab爱好者公众号数据及程序文件夹下的海洋捕食者算法MPA。
加群时,务必准确填写入群邀请码,否则一律拒加!
参考资料:
[1] Faramarzi A, et al. Marine Predators Algorithm: A nature-inspired metaheuristic. Expert Systems with Applications, 2020.
DOI: doi.org/10.1016/j.eswa.2020.113377
[2] github.com/afshinfaramarzi