【调度算法】NSGA III(1)

简介: 【调度算法】NSGA III

写在前面:NSGA III算法在数学上比NSGA II算法要复杂得多,尤其是在参考点那里,我也不是看得很明白,所以这篇文章只是尝试梳理下NSGA III的整体改进思路和优势,不对函数、公式、代码之类的细节做过多分析。如有错误,恳请指出!

算法简介

NSGA-III(Non-dominated Sorting Genetic Algorithm III)算法是NSGA-II的改进版,是多目标优化领域中的重要算法之一。该算法在选择机制上进行了创新,通过引入广泛分布的参考点来维持种群的多样性,其关键优势在于其能够有效地平衡多样性和收敛性,以找到Pareto前沿上的高质量解。

NSGA-III的主体框架与NSGA II基本一致,其主要步骤如下:

  1. 初始化种群
  • 随机生成一个初始种群,其中包含多个个体(解)。
  • 每个个体通常由一组决策变量表示。
  1. 非支配排序
  • 对初始种群中的个体进行非支配排序。
  • 将个体分为不同的等级,其中第一级包含Pareto前沿上的非支配解,第二级包含被第一级支配的解,以此类推。
  • 计算每个解的拥挤度,以度量其在前沿中的密度。
  1. 选择操作
  • 选择一部分解用于创建下一代种群。
  • 选择前几个非支配级别中的所有解,以确保高质量的解被保留。
  • 对于同一等级的解,根据它们的拥挤度选择一部分以维持多样性。
  • 选择的解将进入下一代种群。
  1. 交叉和变异
  • 使用交叉和变异操作生成下一代解。
  • 通过交叉操作,两个父代解可以产生一个或多个子代解。
  • 通过变异操作,对个体的决策变量进行微小的随机变化。
  1. 更新种群
  • 将新生成的解与上一代种群合并,形成新的2N种群。
  • 如果种群大小超过所需大小,可以使用选择策略来选择最适合的解。
  1. 迭代
  • 检查终止条件是否满足。通常,可以设置最大迭代次数或其他收敛标准作为终止条件。
  • 如果终止条件未满足,返回步骤2,继续进行下一代进化。
  • 如果满足终止条件,输出结果。返回找到的Pareto前沿上的高质量解集合作为算法的输出。

NSGA-III的关键特点是它的能力维护多样性和寻找Pareto前沿上的高质量解。它通过非支配排序、环境选择和多样性维护策略来实现这些目标,使其在多目标优化问题中非常有效。

多目标问题

为什么会有NSGA III算法?

NSGA III算法是从NSGA II算法改进改进过来的,其出现的原因自然是,NSGA II在求解一些问题的时候仍然存在局限性。两种算法各有其适应的问题特点,在原论文中,NSGA III算法的提出主要是期望求解Many-objective问题

Multi-objective和Many-objective

原文:

Loosely,many-objective problems are defined as problems having four or more objectives.Two and three-objective prob lems fall into a different class as the resulting Pareto-optimal front,in most cases,in its totality can be comprehensively visualized using graphical means.Although a strict upper bound on the number of objectives for a many-objective optimization problem is not so clear,except a few occasions [15],most practitioners are interested in a maximum of 10 to 15 objectives.

简单来说,当一个多目标优化问题包含4个或更多的目标函数时,人们会倾向于将其视为 “Many-objective” 问题。这是因为在目标函数数量增加时,问题的复杂性显著增加,解决方案的多样性变得更加关键,同时性能评估也更加具有挑战性。

即:

  • Multi-objective→2-3个目标函数;
  • Many-objective→4个及以上(通常为10-15个)目标函数,

NSGA II→NSGA III

上一篇NSGA II一样,这里直接梳理NSGA III相对于NSGA II的改进点。

由于NSGA III是在NSGA II的基础上,为求解Many-objective问题进行改进的,而Many-objective相对Multi-objective的一个显著特点就是,所谓量变引起质变,Many-objective的解空间相比Multi-objective要大得多,解的分布也显得比较稀疏,这就导致算法在对最优解进行搜索时,算法在某个解分布密度较大的地方,很容易陷入局部最优解。因此,NSGA III的改进主要针对于如何保留解的多样性,避免算法陷入局部最优,而保留解的多样性以及跳出局部最优的关键就在于遗传算法的选择操作

为突出NSGA III的具体改进,根据原文献,可将其选择操作进一步细化成以下几个流程:

将种群划分为非支配性级别——确定超平面上的参考点——种群个体的自适应归一化——关联操作——小生境保留操作——生成子代种群的遗传操作

下面将根据这一流程介绍NSGA III在NSGA II的基础上进行的几点改进。

1. 多层级分层排序

NSGA-III引入了多层级分层排序,这是其最显著的改进。在NSGA-III中,种群被分为多个分层级别,每个级别包含不同密度的解决方案。这种分层排序使算法能够更好地维护Pareto前沿上的均匀分布解。

这个在上边的选择流程中没有明确的体现,但是我认为,NSGA III算法的精髓,就是解的层级分配和排序

回想一下NSGA II算法的非支配排序,它是直接将父代和子代种群拼接成2N的新种群之后,再对这个2N种群进行排序。而NSGA III为了应对Many-objective问题的解在高维解空间上分布的稀疏性问题,不是直接对2N种群进行非支配排序,而是对种群中的个体(解)进行分层后,对每层进行非支配排序。实际上,NSGA III在解的搜索阶段,就已经通过类似统计学中分层采样的思想,对解进行了分层

广为人知的参考点法,在我看来,是实现多层级分层排序的一个手段。

参考点具体是如何引入的呢?我看不懂公式,所以只能结合图和文字一点点来猜。

简单说就是,NSGA-III通过某种方法,从解空间中选择规定数量的、均匀分布的、能够覆盖整个目标空间的、自适应调整的参考点。这些参考点就相当于在解空间中打下的标记,告诉后续的解搜索算法,这里还有一块被标记的区域需要搜索,不要漏掉了。

一个个参考点以及参考点周围聚拢过来的候选解,慢慢地形成了解的不同层级(当然,可以将具有相似特征的参考点附近的解视为同一层级)。

多层级分层排序流程:

  1. 选择参考点:NSGA-III选择一组参考点(reference points),这些点位于目标空间中,用于衡量解在目标空间中的优越性。通常,参考点是均匀分布的,以覆盖整个目标空间。
  2. 分层级别的分配:接下来,将解分配到不同的层级级别。解的分配基于它们与参考点的比较,具体来说,是解与最接近的参考点之间的距离。每个解被分配到最接近的参考点所对应的层级级别。
  3. 级级别的排序:在每个层级级别内,使用非支配排序(non-dominated sorting)将解排序。这是为了确定解的非支配性,即解是否在该层级内不被其他解所支配。
  4. 选择解:从每个层级级别中选择一定数量的解,以形成新一代的种群。通常,选择的策略可能包括非支配排序和拥挤度(crowding distance)的考虑,以确保选择均匀分布在每个层级内。

通过这种方式,NSGA-III能够确保解在Pareto前沿上的分布均匀,并且可以更好地逼近Pareto前沿。参考点的选择和解的分配是多层级分层排序的核心概念,使算法能够有效地处理多目标优化问题,维护均匀分布的解,提高性能。

2. 种群个体的自适应归一化

NSGA-III算法中的自适应归一化是对每个个体的目标函数值进行的归一化。这是为了将不同目标之间的值进行比较,并确定个体在多目标优化中的相对优越性。自适应归一化通常通过与参考点之间的距离来实现,这些参考点通常均匀分布在目标空间中。

具体来说,对于每个个体,NSGA-III计算它与每个参考点之间的距离。然后,通过将个体到最近参考点的距离作为归一化值,确定个体在目标空间中的优越性。这有助于选择具有不同优越性的个体,并维持解在Pareto前沿上的均匀分布。

自适应归一化是NSGA-III算法的一个关键概念,它有助于确定解的相对优越性,以支持多目标优化的解选择过程。这种归一化考虑了不同目标之间的权重和距离,以便更好地维持解的多样性和均匀分布。

3. 关联操作

在NSGA-III中,关联操作是用于将种群中的每个个体与参考点相关联的过程,以确定每个个体在多目标优化中的相对优越性。

关联操作流程如下:

  1. 种群个体归一化:对于每个目标函数值,将其进行归一化,以将所有目标值映射到[0, 1]的范围内。这是为了确保不同目标之间的值具有可比性。
  2. 计算与参考点的距离:对于每个个体,计算其与每个参考点之间的距离。通常使用欧氏距离或其他距离度量来计算。
  3. 确定关联:将每个个体与最近的参考点关联。即,每个个体被认为与最近的参考点相关联,这将决定其在多目标空间中的位置。
  4. 确定层级级别:基于关联的结果,将解分配到不同的层级级别。这有助于确保解的分布在多目标空间中均匀,以支持多样性和均匀性。

可以将NSGA-III中的关联操作视为一种类似于聚类的过程,将种群中的个体分组成多个类别,其中每个类别由最接近的参考点来定义。每个参考点代表不同的类别或群集,而个体与最接近的参考点相关联,意味着它们被归入相应的类别

通过这个关联操作,NSGA-III能够确定每个个体在多目标空间中的相对位置,这将在后续的选择过程中用于选择解以构建下一代的种群。这个过程有助于维护多样性并更好地逼近Pareto前沿。

4. 小生境保留操作

在NSGA-III中,关联操作将每个个体与最近的参考点相关联。每个参考点及其周围关联的个体构成了一个聚类类别,这个聚类类别可以被视为一个小生境。每个小生境中的个体与同一个参考点具有相似的目标函数值,因此它们在目标空间中相对接近。在选择操作中,通常会从不同的小生境中选择个体,以确保选择的解具有广泛的多样性,从而更好地逼近Pareto前沿。小生境保留操作是NSGA-III算法维持多样性的关键机制之一。

小生境操作是在已经划分好各种小生境的基础上实现的,其目的是根据每个小生境的大小来选择个体以填充各自的小生境,从而维持多样性。在NSGA-III中,每个小生境(聚类类别,包括与参考点相关联的个体)都有一个预定的大小或容量,小生境的大小是由与参考点相关联的个体数量来决定的。在小生境操作中,目标是确保每个小生境内有足够的个体,以维持多样性和均匀分布

因此,操作的目标是填充每个小生境,使其包含所需数量的个体。这些个体可以是从其他小生境中选择的,以确保每个小生境内的个体数量达到所需的大小。在填充小生境时,通常会选择与参考点关联度最高的个体,以确保它们在多目标空间中相对接近。

这个过程将重复进行,直到每个小生境都包含所需数量的个体。通过这种方式,NSGA-III确保了不同小生境内的个体数量均衡,并维持了多样性,以支持更好的多目标优化搜索。

小生境操作流程:

  1. 计算小生境的大小:首先,确定每个小生境(关联的参考点和相关个体组成的聚类类别)的大小。小生境大小通常由与参考点相关联的个体数量(p_j)来决定。
  2. 选择小生境:从已经划分好的小生境中,确定具有最小小生境计数的小生境集合 J。这些小生境将用于进行小生境操作。
  3. 小生境操作
  • 对于每个选定的小生境 j,执行以下操作:
  • 如果小生境 j 为空(p_j = 0),则需要从其他小生境(F_j)中选择一个与参考点 j 相关联的个体,通常是选择与参考线垂直距离最短的个体,并将其添加到小生境中(P+ 集合)。然后,增加小生境 j 的计数 p_j。
  • 如果小生境 j 不为空(p_j > 0),则需要从小生境 j 中随机选择一个与参考点 j 相关联的个体,并将其添加到小生境中(P+1 集合)。然后,增加小生境 j 的计数 p_j。
  1. 重复操作:上述小生境操作将在每个选定的小生境上重复,以确保小生境的填充。这个过程通常会重复 K 次,以确保 P+ 集合中的所有空位置都被填充。

5. 无参数特性

与NSGA-Ⅱ一样,NSGA-Ⅲ算法除了通常的遗传参数如种群规模、终止参数、交叉和变异概率及其相关参数外,不需要设置任何新的参数。参考点的数量H 不是一个算法参数,因为这完全由用户来决定。种群规模N 取决于H ,因为N≈H。参考点的位置同样取决于用户对所获得的解中的偏好信息。

【调度算法】NSGA III(2)https://developer.aliyun.com/article/1541024

目录
相关文章
|
1天前
|
存储 算法 前端开发
深入理解操作系统:进程调度与优先级队列算法
【9月更文挑战第25天】在操作系统的复杂世界中,进程调度是维持系统稳定运行的核心机制之一。本文将深入探讨进程调度的基本概念,分析不同的进程调度算法,并着重介绍优先级队列算法的原理和实现。通过简洁明了的语言,我们将一起探索如何优化进程调度,提高操作系统的效率和响应速度。无论你是计算机科学的初学者还是希望深化理解的专业人士,这篇文章都将为你提供有价值的见解。
|
2天前
|
机器学习/深度学习 算法 物联网
探究操作系统的心脏:调度算法的演变与优化
本文旨在深入探讨操作系统中核心组件——调度算法的发展脉络与优化策略。通过分析从单任务到多任务、实时系统的演进过程,揭示调度算法如何作为系统性能瓶颈的解决关键,以及在云计算和物联网新兴领域中的应用前景。不同于传统摘要,本文将注重于概念阐释与实例分析相结合,为读者提供直观且全面的理解视角。
|
15天前
|
算法 人机交互 调度
进程调度算法_轮转调度算法_优先级调度算法_多级反馈队列调度算法
轮转调度算法(RR)是一种常用且简单的调度方法,通过给每个进程分配一小段CPU运行时间来轮流执行。进程切换发生在当前进程完成或时间片用尽时。优先级调度算法则根据进程的紧迫性赋予不同优先级,高优先级进程优先执行,并分为抢占式和非抢占式。多队列调度算法通过设置多个具有不同优先级的就绪队列,采用多级反馈队列优先调度机制,以满足不同类型用户的需求,从而优化整体调度性能。
31 15
|
4天前
|
算法 调度 UED
深入理解操作系统的调度算法
【9月更文挑战第22天】本文通过深入浅出的方式,介绍了操作系统中的核心概念——调度算法。文章首先解释了调度算法的基本定义和重要性,然后详细分析了先来先服务(FCFS)、短作业优先(SJF)以及时间片轮转(RR)三种常见的调度算法。每种算法都配有简单的代码示例,帮助读者更好地理解其工作原理。最后,文章探讨了这些调度算法在现代操作系统中的应用及其优缺点,旨在为读者提供对操作系统调度机制的全面认识。
|
15天前
|
算法 调度
作业调度算法_先来先服务算法_短作业优先算法_高响应比优先算法
本文介绍了作业调度算法,包括先来先服务(FCFS)、短进程优先(SJF)和高响应比优先(HRRN)算法。通过分析进程的到达时间和所需CPU服务时间,计算进程的开始时间、完成时间、平均周转时间和平均带权周转时间,以评估不同算法的性能。FCFS适合长作业,SJF适合短作业,而HRRN则综合了两者的优点。
44 12
|
17天前
|
算法 调度 UED
深入理解操作系统之进程调度算法
【9月更文挑战第9天】在操作系统的心脏跳动中,进程调度扮演着关键角色,就如同指挥家控制交响乐的节奏。本文将通过浅显易懂的语言和生动的比喻,带领读者走进进程调度的世界,探索不同调度算法背后的哲学与实践,以及它们如何影响系统的性能和用户体验。从最简单的先来先服务到复杂的多级队列和反馈循环,我们将一同见证操作系统如何在众多任务中做出选择,确保系统的高效与公平。
|
10天前
|
算法 Linux 调度
探索现代操作系统的心脏:调度算法的演变与挑战
本文旨在深入探讨现代操作系统中至关重要的组成部分——进程调度算法。通过回顾其发展历程,分析当前主流技术,并展望未来趋势,揭示调度算法如何影响系统性能和用户体验。不同于常规摘要,本文将注重于技术的深度解析和背后的设计哲学,为专业开发者提供全面的视角。
22 0
|
10天前
|
人工智能 算法 物联网
探究操作系统的心脏:调度算法的进化与影响
本文深入探讨了操作系统中核心组件—调度算法的发展历程,重点分析了先来先服务、短作业优先、时间片轮转、优先级调度及多级反馈队列等经典调度算法。通过对比各算法的性能特点,如公平性、响应速度和系统吞吐量,阐述了它们在不同应用场景下的适用性和局限性。同时,文章展望了未来调度算法可能的改进方向,包括人工智能驱动的自学习调度策略、云计算环境下的分布式调度优化,以及物联网设备资源限制下的轻量级调度方案。此外,还强调了实时系统对高可靠性和严格时序保证的需求,以及在多核处理器普及背景下,线程级并行化对调度机制提出的新挑战。本文旨在为操作系统设计者、性能优化工程师及计算机科学领域的研究者和学生提供一个全面而深入的
25 0
|
1月前
|
DataWorks 算法 调度
B端算法实践问题之配置脚本以支持blink批处理作业的调度如何解决
B端算法实践问题之配置脚本以支持blink批处理作业的调度如何解决
27 1
|
27天前
|
存储 算法 调度
深入理解操作系统:进程调度的算法与实现
【8月更文挑战第31天】在操作系统的核心,进程调度扮演着关键角色,它决定了哪个进程将获得CPU的使用权。本文不仅剖析了进程调度的重要性和基本概念,还通过实际代码示例,展示了如何实现一个简单的调度算法。我们将从理论到实践,一步步构建起对进程调度的理解,让读者能够把握操作系统中这一复杂而精妙的部分。