2024最新多目标优化算法:多目标指数分布优化器MOEDO(提供MATLAB代码)

本文主要是介绍2024最新多目标优化算法:多目标指数分布优化器MOEDO(提供MATLAB代码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、多目标指数分布优化器(MOEDO)

多目标指数分布优化算法(Multi-objective exponential distribution optimizer ,MOEDO)由Kalita, K等人于2024年提出,其采用增强的精英非主导分类和拥挤距离机制。MOEDO集成了信息反馈机制(IFM),旨在平衡勘探和开发,从而提高收敛性并克服局部最优。

1.在指数分布优化算法EDO的基础上引入多目标指数分布优化器(MOEDO)算法,结合非支配排序(NDS)和拥挤距离(CD)原理;

2.引入集成信息反馈机制(IFM),将多目标挑战分解为单目标子任务,提高算法效率;

3.利用IFM方法确保勘探和开发之间的平衡动态,促进改进的趋同和绕过局部最小值的能力。

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

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值越大,表示算法生成的解集的分布越均匀,解集的多样性和覆盖面积越好。

参考文献:

[1]Kalita, K., Ramesh, J.V.N., Cepova, L. et al. Multi-objective exponential distribution optimizer (MOEDO): a novel math-inspired multi-objective algorithm for global optimization and real-world engineering design problems. Sci Rep 14, 1816 (2024). Multi-objective exponential distribution optimizer (MOEDO): a novel math-inspired multi-objective algorithm for global optimization and real-world engineering design problems | Scientific Reports

二、部分MATLAB代码

MOEDO求解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-47
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] = MOEDO(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');

三、部分结果

四、完整MATLAB代码

2024最新多目标优化算法:多目标指数分布优化器MOEDO(提供MATLAB代码)

文件夹内包含该算法求解9个多目标测试函数(zdt1、zdt2 、zdt3、 zdt4、 zdt6 、Schaffer、 Kursawe 、Viennet2、 Viennet3)的完整MATLAB代码和4种评价指标(IGD、GD、HV、SP),及算法参考文献,代码点击main.m即可运行,包含注释。

这篇关于2024最新多目标优化算法:多目标指数分布优化器MOEDO(提供MATLAB代码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/791064

相关文章

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

java之Objects.nonNull用法代码解读

《java之Objects.nonNull用法代码解读》:本文主要介绍java之Objects.nonNull用法代码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Java之Objects.nonwww.chinasem.cnNull用法代码Objects.nonN

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使