多目标进化算法(MOEAs)概述

2024-05-30 03:38

本文主要是介绍多目标进化算法(MOEAs)概述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文地址

对于大多数多目标优化问题,其各个目标往往是相互冲突的,因此不可能使得所有的目标同时达到最优,而是一组各个目标值所折衷的解集,称之为Pareto最优集。以下为一些基本定义(以最小化优化问题为例):

Definition 1: 多目标优化问题(multi-objective optimization problem(MOP)) 
F(x)=(f1(x),,fm(x))s.t.xΩ

Definition 2: Pareto支配(Pareto Dominance) 
x支配y,记为 x   y ,当且仅当 i{1,2,...,m} , fi(x)fi (y), 且 j{1,2,...,m} , s.t.  fj(x)<fj(y)

Definition 3: Pareto最优解(Pareto Optimal Solution) 
如果一个解 x  被称之为Pareto optimal solution, 当且仅当  x  不被其他的解支配。

Definition 4: Pareto 集(Pareto Set) 
一个MOP,对于一组给定的最优解集,如果这个集合中的解是相互非支配的,也即两两不是支配关系,那么则称这个解集为Pareto Set 。

Definition 5: Pareto 前沿(Pareto Front) 
Pareto Set 中每个解对应的目标值向量组成的集合称之为Pareto Front, 简称为PF

Definition 6:近似集(Approximation Set) 
一般来说,准确的Pareto Set是很难得到的,其近似集相比来说容易得到,因此一般我们只需用一定数量的Approximation Set 来表示PS 。

Definition 7: 近似前沿(Approximation Front) 
Approximation Set 中每个解对应的目标值向量组成的集合称之为Approximation Front 。

目前来说,由于多目标问题的复杂性,传统的数学方法不能取得较为理想的结果,而进化算法在多目标优化问题上得到了很广泛的应用,通过种群的不断进化迭代,进化算法能得到一个Approximation Set,那么我们如何来评价得到的Approximation Set的优劣呢,以下为两方面的评价标准。 
Definition 7:收敛性(Convergence) 
Approximation Front 与 PF 的贴近程度。

Definition 8: 分布性(Diversity) 
描述Approximation Front 在PF 的分布情况,包括分布范围和均匀性。

具体来说,常用的两个指标分别是IGD(Inverted Generational Distance) 和 HV(Hypervolume)。其中,IGD需要知道PF数据,且其具体计算为每个PF中的点到其最近的Approximation Front中的点的距离之和的均值。同时,需注意,这两种方法都能同时度量解的分布性和收敛性。

现在来讲讲主流的多目标进化算法。 
从进化算法的角度来讲,目前已有遗传算法(GA),粒子群算法(PSO),蚁群算法(ACO)等一系列算法用来解决多目标优化问题,但用的比较多的还是遗传算法,粒子群算法也有。 
从多目标问题本身来说,主要分类如下: 
- 基于Pareto支配关系 
- 基于分解的方法 
- 基于Indicator方法

先来介绍下基于遗传算法的多目标优化算法的一些基本参数: 
种群大小:每次迭代都需保证种群大小是一致的,且其大小应由初始化设定。 
交叉概率:用于衡量两个个体交叉的概率。 
突变率:交叉产生的解发生突变的概率。 
标准的遗传算法每次迭代都会将上一代的个体丢弃,虽然这符合自然规律,但对于遗传算法来说,这样效果不是特别好,因此,精英保留策略将上一代个体和当前个体混合竞争产生下一代,这种机制能较好的保留精英个体。 
基于Pareto支配关系 
最经典的方法是NSGA-II,该方法由Kalyanmoy Deb等人于2002年提出(A Fast and Elitist Multiobjective Genetic Algorithm: 
NSGA-II),该方法主要包括快速非支配排序,将每次交叉突变产生的解和前一代的解合并,然后利用非支配排序分层,其伪代码如下: 
这里写图片描述 
再就是把每层相加直到超过种群个体,再在最后一层基于拥挤距离来选择解,拥挤距离伪代码如下: 
这里写图片描述 
具体来说,NSGA-II使用快速非支配排序来保证收敛性,并且利用拥挤距离来保证分布性。特别说下,在迭代后期,大多数解都是非支配的,也即大多数解都在第一层。 
当然,随着NSGA-II的提出,很多基于此的算法如雨后春笋般大量涌现,特别是在处理高维多目标优化问题时这种想法得到很多的应用,如VaEA,RVEA,NSGA-III等。 
同时,SPEA2也是基于Pareto支配关系的一种较为流行的算法(SPEA2: Improving the Strength Pareto Evolutionary Algorithm),该算法使用一个外部保存集来保存较为优秀的解,同时,对每一个解,利用其支配的解的数量和基于KNN的邻近解的距离来给每一个解打分,得分越小的解更优。

基于分解的方法 
该方法第一次系统地被提出是在2007年由Qingfu Zhang等人提出(MOEA/D: A Multiobjective Evolutionary Algorithm Based on Decomposition),该方法将MOP分解为多个子问题,这样就可以优化每个子问题来求解一个MOP。一般而言,基于分解的方法首先需要得到一组均匀分布的参照向量来指导选择操作。在此,有必要说说产生参照向量的方法。目前对于低维多目标优化问题,常用方法为Das and Dennis于1998年提出的systematic approach(Normal-boundary intersection: A new method for generating the pareto surface in nonlinear multicriteria optimization problems). 
对于每个参照向量,其指导选择的过程需要比较解的优劣,这就需要用到一些标量函数来定量衡量一个解对于这个参照向量的适应度值。常用的标量函数包括: 
- Weighted Sum Approach 
- Tchebycheff Approach 
- penalty-based boundary intersection (PBI) approach

Weighted Sum Approach 
mingws(x|λ)=mi=1λifi(x)  
其中 λ 是参照向量,其运行机理如下图: 
这里写图片描述 
这里需要注意,标准的Weighted Sum Approach不能处理非凸问题,因为由上图可知,对于非凸问题,每个参照向量的垂线与其前沿不可能相切。对于这个问题,Rui Wang等人与2016年提出相对应的改进(Localized weighted sum method for many-objective optimization),主要是约束替换范围。

Tchebycheff Approach 
mingte(x|λ,z)=max{λi(fi(x)zi)}  
其中 λ 是参照向量,其运行机理如下图: 
这里写图片描述 
标准的Tchebycheff Approach得到的解不均匀,为此Yutao Qi等人于2014年提出一种解决方法(MOEA/D with Adaptive Weight Adjustment), λ=(1λ1mi=11λi,....,1λmmi=11λi) ,通过这个参照向量的转换即可得到分布均匀的解。

penalty-based boundary intersection (PBI) approach 
mingpbi(x|λ,z)=d1+θd2  
这里写图片描述 
其中 d1 d2 如上图所示。一般来说, θ=5 是比较常用的,Yuan Yuan等人提出的 θDEA 算法对 θ 的取值有较为详细的讨论(A New Dominance Relation-Based Evolutionary Algorithm for Many-Objective Optimization)。 
基于分解的进化方法框架如下: 
这里写图片描述

基于Indicator方法 
相比于IGD指标,Hypervolume更容易用来作为一个测度在种群进化过程中用来选择个体,因为IGD需要知道真实的Pareto Front数据,而这对于一个未知多目标优化问题是相当困难的。

至于具体的多目标进化算法后续将会详细介绍。

参考文献 
[1] K. Deb, A. Pratap, S. Agarwal, and T. Meyarivan, “A fast and elitist multiobjective genetic algorithm: NSGA-II,” IEEE Trans. Evol. Comput., vol. 6, no. 2, pp. 182–197, Apr. 2002 
[2] E. Zitzler, M. Laumanns, and L. Thiele, “SPEA2: Improving the strength Pareto evolutionary algorithm,” in Proc. Evol. Methods Design Optim. Control Appl. Ind. Prob., Athens, Greece, 2002, pp. 95–100. 
[3] Qingfu Zhang and Hui Li. Moea/d: A multiobjective evolutionary algorithm based on decomposition. IEEE Transactions on evolutionary computation, 11(6):712–731, 2007. 
[4] Yutao Qi, Xiaoliang Ma, Fang Liu, Licheng Jiao, Jianyong Sun, and Jianshe Wu. MOEA/D with adaptive weight adjustment. Evolutionary computation, 22(2):231–264, 2014. 
[5] Kalyanmoy Deb and Himanshu Jain. An evolutionary many objective optimization algorithm using reference- point-based nondominated sorting approach, part i: Solving problems with box constraints. IEEE Trans. Evolutionary Computation, 18(4):577–601, 2014. 
[6] Yuan Yuan, Hua Xu, Bo Wang, and Xin Yao. A new dominance relation-based evolutionary algorithm for many-objective optimization. IEEE Transactions on Evolutionary Computation, 20(1):16–37, 2016. 
[7] Indraneel Das and John E Dennis. Normal-boundary intersection: A new method for generating the pareto surface in nonlinear multicriteria optimization problems. SIAM Journal on Optimization, 8(3):631–657, 1998 
[8] 张作峰. 基于分解的多目标进化算法研究[D]. 湘潭大学, 2013.

这篇关于多目标进化算法(MOEAs)概述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

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

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

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

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

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

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

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

关于最长递增子序列问题概述

《关于最长递增子序列问题概述》本文详细介绍了最长递增子序列问题的定义及两种优化解法:贪心+二分查找和动态规划+状态压缩,贪心+二分查找时间复杂度为O(nlogn),通过维护一个有序的“尾巴”数组来高效... 一、最长递增子序列问题概述1. 问题定义给定一个整数序列,例如 nums = [10, 9, 2

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1