多目标优化算法:多目标广义正态分布优化(MOGNDO)

作品简介

一、多目标广义正态分布优化算法

多目标广义正态分布优化(Multi-Objective Generalized Normal Distribution Optimization,MOGNDO)是基于广义正态分布优化算法(DNDO),融入非支配排序和拥挤距离机制而得。


参考文献:

[1]Pandya SB, Visumathi J, Mahdal M, Mahanta TK, Jangir P. A Novel MOGNDO Algorithm for Security-Constrained Optimal Power Flow Problems. Electronics. 2022; 11(22):3825. https://doi.org/10.3390/electronics11223825

[2]Sundaram B. Pandya, Pradeep Jangir, Miroslav Mahdal, Kanak Kalita, Jasgurpreet Singh Chohan, Laith Abualigah,Optimizing brushless direct current motor design: An application of the multi-objective generalized normal distribution optimization,Heliyon,Volume 10, Issue 4,2024,https://doi.org/10.1016/j.heliyon.2024.e26369.

二、MOGNDO求解多目标函数

MOGNDO求解46个多目标测试函数(ZDT1、ZDT2、ZDT3、ZDT4、ZDT6、DTLZ1-DTLZ7、WFG1-WFG10、UF1-UF10、CF1-CF10、Kursawe、Poloni、Viennet2、Viennet3)以及1个工程应用(盘式制动器设计),并采用四种评价指标(IGD,GD,HV,SP)评价。

多目标优化算法的评价指标主要用于衡量算法在解决多目标优化问题时的性能和效果。以下是几个常用的评价指标的介绍:

1. Inverted Generational Distance (IGD):IGD是一种衡量算法生成的解集与真实前沿之间距离的指标。它通过计算算法生成的解集中每个解与真实前沿之间的最小距离,并对所有解的距离进行平均来评估算法的性能。IGD值越小,表示算法生成的解集越接近真实前沿。

2. Generational Distance (GD):GD是一种衡量算法生成的解集与真实前沿之间距离的指标。与IGD类似,GD也是通过计算算法生成的解集中每个解与真实前沿之间的距离,并对所有解的距离进行平均来评估算法的性能。GD值越小,表示算法生成的解集越接近真实前沿。

3. Hypervolume (HV):HV是一种衡量算法生成的解集所占据的超体积大小的指标。它通过计算算法生成的解集与真实前沿之间的超体积来评估算法的性能。HV值越大,表示算法生成的解集所占据的超体积越大,即解集的多样性和覆盖面积越好。

4. Spread (SP):SP是一种衡量算法生成的解集的分布均匀性的指标。它通过计算算法生成的解集中相邻解之间的距离来评估算法的性能。SP值越大,表示算法生成的解集的分布越均匀,解集的多样性和覆盖面积越好。

close all;
clear ;
clc;
%%
% TestProblem测试问题说明:
%一共46个多目标测试函数(1-46)+1个工程应用(47),详情如下:
%1-5:ZDT1、ZDT2、ZDT3、ZDT4、ZDT6
%6-12:DTLZ1-DTLZ7
%13-22:wfg1-wfg10
%23-32:uf1-uf10
%33-42:cf1-cf10
%43-46:Kursawe、Poloni、Viennet2、Viennet3
%47 盘式制动器设计 https://blog.csdn.net/weixin_46204734/article/details/124051747


%%
TestProblem=46;%1-47
MultiObj = GetFunInfo(TestProblem);
MultiObjFnc=MultiObj.name;%问题名
% Parameters
params.Np = 100;        %  种群大小
params.Nr = 100;        % 外部存档中最大数目,可适当调整大小,越大,最终获得的解数目越多  (特别注意:params.Nr 不得小于params.Np)
params.maxgen =100;    % 最大迭代次数


[Archive_X, Archive_F] = MOGNDO(params,MultiObj);
REP.pos_fit=Archive_F;
REP.pos=Archive_X;








%% 画结果图
figure
if(size(REP.pos_fit,2)==2)
    h_rep = plot(REP.pos_fit(:,1),REP.pos_fit(:,2),'ok'); hold on;
    if(isfield(MultiObj,'truePF'))
        h_pf = plot(MultiObj.truePF(:,1),MultiObj.truePF(:,2),'.r'); hold on;
        legend('MOGNDO','TruePF');
    else
        legend('MOGNDO');
    end
    
    grid on; xlabel('f1'); ylabel('f2');
end
if(size(REP.pos_fit,2)==3)
    h_rep = plot3(REP.pos_fit(:,1),REP.pos_fit(:,2),REP.pos_fit(:,3),'ok'); hold on;
    if(isfield(MultiObj,'truePF'))
        h_pf = plot3(MultiObj.truePF(:,1),MultiObj.truePF(:,2),MultiObj.truePF(:,3),'.r'); hold on;
        legend('MOGNDO','TruePF');
    else
        legend('MOGNDO');
    end
    grid on; xlabel('f1'); ylabel('f2'); zlabel('f3');
end
title(MultiObjFnc)


%% 求解结果 bestX  bestF
bestX=REP.pos;%POX
bestF=REP.pos_fit;%POF


% save([MultiObjFnc '-bestX.txt'],'bestX','-ascii')
% save([MultiObjFnc '-bestF.txt'],'bestF','-ascii')


%% 计算评价指标IGD、GD、HV、Spacing
Obtained_Pareto=REP.pos_fit;
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


% save([MultiObjFnc '-MetricValue.txt'],'ResultData','-ascii')%保存评价指标的值


%%
% Display info
disp('Repository fitness values are stored in bestF');
disp('Repository particles positions are store in bestX');




三、部分结果


四、完整MATLAB代码



创作时间: