一、多目标雾凇算法MORIME
多目标雾凇算法(Multi-objective rime optimization algorithm,MORIME)由]Pradeep Jangir等人于2024年提出,该算法基于雾凇优化算法(rime optimization algorithm)。多目标雾凇优化算法是一种启发式算法,被广泛应用于多个领域,如机器学习、优化问题和网络调度。它是基于自然界中的雾凇现象而命名的。雾凇是一种形成在天然物体表面的冰晶,像是一层白雾将物体包裹着,这种现象在自然界中非常普遍。雾凇优化算法的设计灵感来自于这种现象,通过寻找最优解的过程中,算法会像雾凇一样逐渐覆盖整个搜索空间,并且保留最优的决策。
多目标优化算法的评价指标主要用于衡量算法在解决多目标优化问题时的性能和效果。以下是几个常用的评价指标的介绍:
1. Inverted Generational Distance (IGD):IGD是一种衡量算法生成的解集与真实前沿之间距离的指标。它通过计算算法生成的解集中每个解与真实前沿之间的最小距离,并对所有解的距离进行平均来评估算法的性能。IGD值越小,表示算法生成的解集越接近真实前沿。
2. Generational Distance (GD):GD是一种衡量算法生成的解集与真实前沿之间距离的指标。与IGD类似,GD也是通过计算算法生成的解集中每个解与真实前沿之间的距离,并对所有解的距离进行平均来评估算法的性能。GD值越小,表示算法生成的解集越接近真实前沿。
3. Hypervolume (HV):HV是一种衡量算法生成的解集所占据的超体积大小的指标。它通过计算算法生成的解集与真实前沿之间的超体积来评估算法的性能。HV值越大,表示算法生成的解集所占据的超体积越大,即解集的多样性和覆盖面积越好。
4. Spacing (SP):SP是一种衡量算法生成的解集的分布均匀性的指标。它通过计算算法生成的解集中相邻解之间的距离来评估算法的性能。SP值越小,表示算法生成的解集的分布越均匀,解集的多样性和覆盖面积越好。
参考文献:
[1]Pradeep Jangir, Sundaram B. Pandya, Kanak Kalita, Jasgurpreet Singh Chohan, Laith Abualigah, Saurav Mallik11, Hong Qin. Multi-Objective RIME algorithm-based Techno-Economic analysis for security constraints load dispatch and power flow including uncertainties model of Hybrid Power Systems. Energy Reports.
[2]Su, Hang, et al. “RIME: A Physics-Based Optimization.” Neurocomputing, vol. 532, Elsevier BV, May 2023, pp. 183–214, doi:10.1016/j.neucom.2023.02.010.
二、部分MATLAB代码
MORIME求解9个多目标测试函数(zdt1、zdt2 、zdt3、 zdt4、 zdt6 、Schaffer、 Kursawe 、Viennet2、 Viennet3),其中Viennet2 与Viennet3的目标数为3,其余测试函数的目标数为2,并采用4种评价指标(IGD、GD、HV、SP)进行评价对比
close all;
clear ;
clc;
%%
% TestProblem测试问题说明:
%一共9个多目标测试函数1-9分别是: zdt1 zdt2 zdt3 zdt4 zdt6 Schaffer Kursawe Viennet2 Viennet3
%%
TestProblem=6;%1-9
MultiObj = GetFunInfo(TestProblem);
MultiObjFnc=MultiObj.name;%问题名
% Parameters
params.Np = 150; % Population size
params.Nr = 200; % Repository size
params.maxgen=100; % Maximum number of generations
numOfObj=MultiObj.numOfObj;%目标函数个数
D=MultiObj.nVar;%维度
[X,Obtained_Pareto] = MORIME(params,MultiObj);
if(isfield(MultiObj,'truePF'))%判断是否有参考的PF
True_Pareto=MultiObj.truePF;
%% Metric Value
% ResultData的值分别是IGD、GD、HV、Spacing (HV越大越好,其他指标越小越好)
ResultData=[IGD(Obtained_Pareto,True_Pareto),GD(Obtained_Pareto,True_Pareto),HV(Obtained_Pareto,True_Pareto),Spacing(Obtained_Pareto)];
else
%计算每个算法的Spacing,Spacing越小说明解集分布越均匀
ResultData=Spacing(Obtained_Pareto);%计算的Spacing
end
%%
disp('Repository fitness values are stored in Obtained_Pareto');
disp('Repository particles positions are store in X');