【智能优化算法-蝠鲼优化算法】基于蝠鲼优化算法求解多目标优化问题附matlab代码
【智能优化算法-蝠鲼优化算法】基于蝠鲼优化算法求解多目标优化问题附matlab代码
TT_Matlab
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,完整matlab代码或者程序定制加qq1575304183。
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代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。
-
2023年血糖新标准公布,不是3.9-6.1,快来看看你的血糖正常吗? 2023-02-07
-
2023年各省最新电价一览!8省中午执行谷段电价! 2023-01-03
-
GB 55009-2021《燃气工程项目规范》(含条文说明),2022年1月1日起实施 2021-11-07
-
PPT导出高分辨率图片的四种方法 2022-09-22
-
2023年最新!国家电网27家省级电力公司负责人大盘点 2023-03-14
-
全国消防救援总队主官及简历(2023.2) 2023-02-10
-
盘点 l 中国石油大庆油田现任领导班子 2023-02-28
-
我们的前辈!历届全国工程勘察设计大师完整名单! 2022-11-18
-
关于某送变电公司“4·22”人身死亡事故的快报 2022-04-26
