一、五种多目标算法及六种评价指标简介
-
NSGA-III:
NSGA-III是Deb在2013年提出的,用于解决高维多目标优化问题。它采用参考点基于的非支配排序方法,并引入了种群的自适应标准化和关联操作,以提高算法在高维问题上的性能和多样性 。 -
多目标蝗虫优化算法(MOGOA):
多目标蝗虫优化算法(MOGOA)是一种模拟蝗虫群体行为的元启发式算法,它通过模拟蝗虫的迁移和觅食行为来解决多目标优化问题。MOGOA将这些行为转化为搜索策略,以在多维目标空间中寻找最优解集。该算法在多目标优化中使用Pareto支配关系来评估解的优劣,并采用非支配排序和拥挤度计算来维持解的多样性和分布。 -
SPEA2:
SPEA2(Strength Pareto Evolutionary Algorithm 2)是SPEA的改进版本,它在保持Pareto解的同时,引入了适应度共享和档案策略来提高种群多样性。SPEA2通过考虑个体间的相似性来避免种群早熟收敛 。 -
MODA:
多目标蜻蜓算法(MODA)是一种模拟自然界蜻蜓行为的元启发式优化算法,专门设计来解决具有多个冲突目标的优化问题。这种算法通过模拟蜻蜓的觅食、领地防御和飞行行为,将其转化为搜索策略,并利用Pareto支配关系来处理多个目标,从而找到一组Pareto最优解。 -
多目标蜉蝣算法(MOMA):
多目标蜉蝣算法(MOMA)是一种受蜉蝣生命周期短、活动迅速特性启发的优化算法。它结合了群体智能和进化算法的主要优点,通过模拟蜉蝣的飞行行为和交配过程来进行优化搜索。MOMA算法在多目标优化问题中展现出较快的搜索速度和良好的全局搜索能力
在多目标优化中,评价指标用于衡量算法性能,特别是它们在逼近Pareto最优前沿和保持解的多样性方面的表现。以下是一些常用的多目标评价指标的介绍:
-
Inverse Generational Distance (IGD):
IGD是一种衡量算法生成的非支配解集与真实Pareto前沿之间距离的指标。它计算了每个真实Pareto前沿的点到最近非支配解的距离的总和,并取平均值。IGD值越小,表示算法生成的解集与真实Pareto前沿越接近。 -
Generational Distance (GD):
GD是IGD的一个变体,它计算了每个非支配解到真实Pareto前沿最近点的距离的总和,并取平均值。GD值越小,表示算法生成的解集在Pareto前沿上分布得越好。 -
Hypervolume (HV):
HV指标衡量的是算法生成的非支配解集所覆盖的区域大小。通常,这个区域是在目标函数的最小值和最大值之间定义的。HV值越大,表示算法生成的解集在目标函数空间中覆盖的范围越广。 -
Coverage:
Coverage指标衡量一个算法生成的Pareto前沿覆盖另一个算法生成的Pareto前沿的比例。如果算法A的Coverage指标高于算法B,那么意味着算法A生成的Pareto前沿在某种程度上包含了算法B生成的Pareto前沿。 -
Spread:
Spread指标衡量算法生成的非支配解集在Pareto前沿上的分散程度。高的Spread值意味着解集在前沿上分布得更均匀,没有聚集在某个区域。 -
Spacing:
Spacing是衡量算法生成的非支配解集中各个解之间平均距离的指标。Spacing值越小,表示解集内部的解越密集,多样性越高。
IGD和GD可以评估算法的逼近能力,而HV、Spread和Spacing可以评估算法的多样性保持能力。Coverage则可以用来比较不同算法生成的Pareto前沿的覆盖范围。
二、部分MATLAB代码
五种多目标算法(NSGA3、SPEA2、MOMA、MODA、MOGOA)在46个多目标测试函数(ZDT1、ZDT2、ZDT3、ZDT4、ZDT6、DTLZ1-DTLZ7、WFG1-WFG10、UF1-UF10、CF1-CF10、Kursawe、Poloni、Viennet2、Viennet3)以及1个工程应用(盘式制动器设计)上实验,并采IGD、GD、HV、Coverage、Spread、Spacing六种评价指标进行评价。
close all;
clear ;
clc;
addpath('./metric/')%添加算法路径
%%
% TestProblem测试问题说明:
%一共46个多目标测试函数,详情如下:
%1-5:ZDT1、ZDT2、ZDT3、ZDT4、ZDT6
%6-12:DZDT1-DZDT7
%13-22:wfg1-wfg10
%23-32:uf1-uf10
%33-42:cf1-cf10
%43-46:Kursawe、Poloni、Viennet2、Viennet3
%47 盘式制动器设计 温泽宇,谢珺,谢刚,续欣莹.基于新型拥挤度距离的多目标麻雀搜索算法[J].计算机工程与应用,2021,57(22):102-109.
%%
TestProblem=36;%测试函数1-47
MultiObj = GetFunInfo(TestProblem);
MultiObjFnc=MultiObj.name;%问题名
% Parameters
params.Np = 100; % Population size 种群大小
params.Nr = 100; % Repository size 外部存档
params.maxgen=50; % Maximum number of generations 最大迭代次数
numOfObj=MultiObj.numOfObj;%目标函数个数
%% 算法求解,分别得到paretoPOS和paretoPOF
三、部分结果
(1)Viennet2
(2)ZDT2
四、完整MATLAB代码
见下方名片