首页 > 行业资讯 > 【智能优化算法-蝠鲼优化算法】基于蝠鲼优化算法求解多目标优化问题附matlab代码

【智能优化算法-蝠鲼优化算法】基于蝠鲼优化算法求解多目标优化问题附matlab代码

时间:2022-10-15 来源: 浏览:

【智能优化算法-蝠鲼优化算法】基于蝠鲼优化算法求解多目标优化问题附matlab代码

天天Matlab 天天Matlab
天天Matlab

TT_Matlab

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,完整matlab代码或者程序定制加qq1575304183。

收录于合集 #智能优化算法及应用 612个

1 内容介绍

蝠鲼觅食优化器 (MRFO) 已显示出处理单目标现实世界问题的良好能力,这使其在解决多目标问题中的应用成为一个有趣的方向。因此,本文研究了 MRFO 优化器,以开发一种新的算法来处理多目标工程设计问题。为了实现这一目标,采用精英概念,通过将外部存档集成到标准 MRFO 中来保存 Pareto 解决方案集。该档案也被认为是一个存储库,根据其密度程度从中选择搜索代理以控制蝠鲼种群的收敛性和多样性。我们的算法的效率首先通过对十个测试函数的广泛实验进行验证,在几乎所有情况下,结果在收敛性和多样性方面都非常令人满意。然后,将其应用于四个多目标工程问题,并在解决具有多目标的现实世界问题方面显示出良好的前景。

2 仿真代码

%___________________________________________________________________% % MOMRFO: Multi-Objective Manta Ray Foraging Optimizer for % % Handling engineering design problems % % % % Main paper: % % % % A. Got, D. Zouache, A. Moussaoui, MOMRFO: Multi-Objective % % Manta Ray Foraging Optimizer for handling engineering design % % problems, Knowledge Based-Systems, in press, % % in press, DOI: https: //doi .org/ 10.1016 /j.knosys. 2021.107880 % % format short; global pop_size ub lb M D R %% Select the test functions fun= ’ZDT1’ ; mo_Xrange; nVar=D; %% Parameter settings pop_size= 100 ; % Population size MaxIt= 2000 ; % Maximum Number of Iterations Ar_size= 100 ; % The maximum size of archive alpha= 0 . 1 ; % Grid Inflation Parameter nGrid= 30 ; % Number of Grids per each Dimension beta= 4 ; % Leader Selection Pressure Parameter gamma= 2 ; % Extra (to be deleted) archive Member Selection Pressure %% The number of independent runs Nbrun= 1 ; %% START THE EXECUTION OF THE ALGORITHM for ru= 1 :Nbrun %% Initialize the population of Manta Rays MantaRay=CreateEmptyMantaRay(pop_size); for i= 1 :pop_size for j= 1 :nVar MantaRay(i).Position( 1 ,j)=unifrnd(lb(j),ub(j), 1 ); end MantaRay(i).Cost=mo_test_function(MantaRay(i).Position,fun); %% fitness function MantaRay(i).Best.Position=MantaRay(i).Position; MantaRay(i).Best.Cost=MantaRay(i).Cost; end %% Prepare the archive for the first iteration MantaRay=DetermineDomination(MantaRay); Archive=GetNonDominatedMantaRay(MantaRay); Archive_costs=GetCosts(Archive); G=CreateHypercubes(Archive_costs,nGrid,alpha); for i= 1 :numel(Archive) [Archive(i).GridIndex Archive(i).GridSubIndex]=GetGridIndex(Archive(i),G); end costs=GetCosts(MantaRay); Archive_costs=GetCosts(Archive); %% The main loop of MOMRFO algorithm for t= 1 :MaxIt Coef=t/MaxIt; Leader=SelectLeader(Archive,beta); % Select Gbesr if rand < 0 . 5 r1= rand ; Beta2= 2 * exp (r1*((MaxIt-t+ 1 )/MaxIt))*( sin ( 2 *pi*r1)); if Coef> rand MantaRay( 1 ).Position=Leader.Position+ rand ( 1 ,D).*(Leader.Position-MantaRay( 1 ).Position)+Beta2*(Leader.Position-MantaRay( 1 ).Position); %Equation ( 4 ) else IndivRand= rand ( 1 ,D).*(ub-lb)+lb; MantaRay( 1 ).Position=IndivRand+ rand ( 1 ,D).*(IndivRand-MantaRay( 1 ).Position)+Beta2*(IndivRand-MantaRay( 1 ).Position); %Equation ( 7 ) end else Alpha2= 2 * rand ( 1 ,D).*(- log ( rand ( 1 ,D))).^ 0 . 5 ; MantaRay( 1 ).Position=MantaRay( 1 ).Position+ rand ( 1 ,D).*(Leader.Position-MantaRay( 1 ).Position)+Alpha2.*(Leader.Position-MantaRay( 1 ).Position); %Equation ( 1 ) end for i= 2 :pop_size Leader=SelectLeader(Archive,beta); %% Select Gbest if rand < 0 . 5 r1= rand ; Beta2= 2 * exp (r1*((MaxIt-t+ 1 )/MaxIt))*( sin ( 2 *pi*r1)); if Coef> rand MantaRay(i).Position=Leader.Position+ rand ( 1 ,D).*(MantaRay(i- 1 ).Position-MantaRay(i- 1 ).Position)+Beta2*(Leader.Position-MantaRay(i).Position); %Equation ( 4 ) else IndivRand= rand ( 1 ,D).*(ub-lb)+lb; MantaRay(i).Position=IndivRand+ rand ( 1 ,D).*(MantaRay(i- 1 ).Position-MantaRay(i).Position)+Beta2*(IndivRand-MantaRay(i).Position); %Equation ( 7 ) end else Alpha2= 2 * rand ( 1 ,D).*(- log ( rand ( 1 ,D))).^ 0 . 5 ; MantaRay(i).Position=MantaRay(i).Position+ rand ( 1 ,D).*(MantaRay(i- 1 ).Position-MantaRay(i).Position)+Alpha2.*(Leader.Position-MantaRay(i).Position); %Equation ( 1 ) end end %% Adjust boundaries if necessary for i= 1 :pop_size MantaRay(i).Position=min(max(MantaRay(i).Position,lb),ub); end S= 2 ; for i= 1 :pop_size Leader=SelectLeader(Archive,beta); %% Select Gbest MantaRay(i).Position=MantaRay(i).Position+S*( rand *Leader.Position- rand *MantaRay(i).Position); %Equation ( 8 ) MantaRay(i).Position=min(max(MantaRay(i).Position,lb),ub); MantaRay(i).Cost=mo_test_function(MantaRay(i).Position,fun); end %% ubdate the archive MantaRay=DetermineDomination(MantaRay); Archive=[Archive;MantaRay]; Archive=DetermineDomination(Archive); Archive=GetNonDominatedMantaRay(Archive); for i= 1 :numel(Archive) [Archive(i).GridIndex Archive(i).GridSubIndex]=GetGridIndex(Archive(i),G); end %% Remove EXTRA-solutions from the high crowded hybercubes in the archive if numel(Archive)>Ar_size EXTRA=numel(Archive)-Ar_size; Archive=DeleteFromRep(Archive,EXTRA,gamma); end Archive_costs=GetCosts(Archive); G=CreateHypercubes(Archive_costs,nGrid,alpha); costs=GetCosts(MantaRay); Archive_costs=GetCosts(Archive); %% Front represent the final Pareto front Front=Archive_costs ’; disp([’ Iteration ’ num2str(t) ’ Probleme test ’ fun ’ Run ’ num2str(ru) ’ : Number of Pareto Solutions = ’ num2str(numel(Front(:,1)))]); pause(0:0.1); figure(1); plot(Front(:,1),Front(:,2),’ * ’) end end filename=strcat(’ MOMRFO _ ’,fun); save(filename); disp(’ END OF EXECUTION, THANKS! ’);

3 运行结果

4 参考文献

[1] Ag A ,  Dz A ,  Am B . MOMRFO: Multi-objective Manta ray foraging optimizer for handling engineering design problems.  2021.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

版权:如无特殊注明,文章转载自网络,侵权请联系cnmhg168#163.com删除!文件均为网友上传,仅供研究和学习使用,务必24小时内删除。
相关推荐