NSGA算法

news2024/11/26 6:21:12

先给自己叠甲,记录自己的学习过程,如有内容错误欢迎指正!!!

1. NSGA算法简介(Nondominated Sorting Genetic Algorithm)

根据标题,NSGA算法分为两个要点,Nondominated Sorting(非支配排序)Genetic Algorithm(遗传算法)遗传算法讲解文章

因此本文主要介绍非支配排序算法本身的内容,对遗传算法仅作简要提及。

1.1 基本概念

要明白非支配的含义,自然要知道支配(dominated)的含义。
支配的含义
从字面意思上看来看,A “能力” 大于
B
A就能够支配B
在多目标优化问题中,涉及到多个目标。
如果一个解在所有目标上都不比另一个解差,并且在至少一个目标上更好,那么这个解被称为支配另一个解。
具体来说,假设有两个解 A A A B B B,如果对于所有的目标函数 F ( X ) F(X) F(X)都有 F ( A ) ≤ F ( B ) F(A)≤F(B) F(A)F(B),并且至少存在一个目标函数 f i f_i fi使得 f i ( A ) < f i ( B ) f_i(A)<f_i(B) fi(A)<fi(B),那么我们就说解A支配解B

俗话来讲,就是“我哪哪都与你一样,但有一项能力比你强,我就能支配你。(当然,方方面面比你强,当然也能支配你)
下面用一个草图简单表述这个意思。
草图描述支配关系

该问题是 m i n F ( X ) , 即最小化优化问题。目标函数 F 内有两个子函数 f 1 和 f 2 。 该问题是min F(X),即最小化优化问题。目标函数F内有两个子函数f_1和f_2。 该问题是minF(X),即最小化优化问题。目标函数F内有两个子函数f1f2
对于A和B而言, F ( A ) ≤ F ( B ) , 且 f 1 ( A ) < f 1 ( B ) ; f 2 ( A ) < f 2 ( B ) F(A)≤F(B),且f_1(A)<f_1(B);f_2(A)<f_2(B) F(A)F(B),f1(A)<f1(B);f2(A)<f2(B)
满足 当解 A 在所有目标上都不比解 B 差,并且在至少一个目标上优于解 B 。 当解A在所有目标上都不比解B差,并且在至少一个目标上优于解B。 当解A在所有目标上都不比解B差,并且在至少一个目标上优于解B
所以说,解A 支配 解B。

对于A和C而言, F ( A ) ≤ F ( C ) , 且 f 1 ( A ) < f 1 ( C ) ; f 2 ( A ) = f 2 ( C ) F(A)≤F(C),且f_1(A)<f_1(C);f_2(A)=f_2(C) F(A)F(C),f1(A)<f1(C);f2(A)=f2(C)
满足 当解 A 在所有目标上都不比解 C 差,并且在至少一个目标上优于解 C 。 当解A在所有目标上都不比解C差,并且在至少一个目标上优于解C。 当解A在所有目标上都不比解C差,并且在至少一个目标上优于解C
所以说,解A 支配 解C。

注意!!!

解A 支配 解B时,解A称之为支配解(Dominating Solution),那解B呢? 非支配解?

千万注意!!!解B 不是 非支配解,解B称之为被支配解(Dominated Solution)

那何为非支配解(Non-dominating Solution)???
非支配解是指在解集合中没有任何其他解可以支配它的解。
解集合中有A、B和C三个解。B和C都不能支配A。
此时解A成为非支配解

当然,现实中的多目标优化问题不会只有三个解,往往有许多解。
我们还以两个优化目标举例,如下图。
在这里插入图片描述
求解 m i n G ( X ) , 在目标约束下,所有的解如上图所示。 求解 min G(X),在目标约束下,所有的解如上图所示。 求解minG(X),在目标约束下,所有的解如上图所示。
可以发现,红色的点无法被继续优化。当 g 1 g_1 g1减小时, g 2 g_2 g2就会增大;当 g 2 g_2 g2减小时, g 1 g_1 g1就会增大。
这些红色点所代表的解即为非支配解(它也称为帕累托解(Pareto Solution)
这些非支配解组成的集合称之为 帕累托最优集 ,这些解在目标空间中形成了 帕累托前沿(上图里面的黑色实线)。
帕累托前沿(Pareto Front) 是多目标优化问题中的一个关键概念,它是 帕累托最优解集(Pareto Optimal Set) 在目标空间中的表示。帕累托前沿是目标空间中所有帕累托解的集合,它展示了不同目标之间的最佳权衡。

注意!!!
帕累托解和非支配解的定义是基于解之间的比较,因此它们都是相对于问题中的解集合而言的。帕累托前沿是针对目标空间的。

总结来说,非支配解和帕累托解在多目标优化中是等价的概念,它们都描述了在多个目标之间达到最佳权衡的解。在实际应用中,寻找帕累托最优解通常意味着寻找非支配解,因为这些解代表了在多个相互冲突的目标之间无法进一步改进的解决方案。

1.2 非支配排序

NSGA与传统的遗传算法的主要区别在于:该算法在选择“基因”执行之前根据解之间的支配关系进行了分层。其选择“基因”、交叉“基因”和变异“基因”与传统的遗传算法没有区别。

假如每代保留10个解,但本代的帕累托最优集中有50个解。使用基于拥挤策略的虚拟适应度值进行调整,并确定每个种群的虚拟适应度值,然后根据虚拟适应度值的大小,确定优先选择进行处理的种群。
这里与传统遗传算法的适应度原理类似。遗传算法中以个体适应度的大小来判定各个个体的优劣程度,从而决定其遗传机会的大小。

考虑一个规模大小为N的种群,通过非支配排序算法可以对该种群进行分层,具体的步骤如下:
非支配排序
通过上述步骤得到的非支配个体集是种群的第一级非支配层;然后,忽略这些标记的非支配个体,再遵循步骤(1)一(4),就会得到第二级非支配;依此类推,直到整个种群被分级。
分级完成
在对种群进行非支配排序的过程中,需要给每一个非支配层指定一个虚拟适应度值。级数越大,虚拟适应度值越小(Rank 2 的虚拟适应度小);反之,虚拟适应度值越大(Rank 1 的虚拟适应度大)。这样可以保证在选择操作中等级较低的非支配个体有更多的机会被选择进入下一代,使得算法以最快的速度收敛于最优区域(也就是说,让当前的帕累托最优集内的解参与遗传迭代)。另一方面,为了得到分布均匀的Pareto最优解集,就要保证当前非支配层上的个体具有多样性。(解所处的空间位置不能太拥挤,要保留一定的间距)
在这里插入图片描述
C点更能够代表B、E两点之间的信息,而不会去选择D点。

不断完成迭代,能够求出多目标优化问题的帕累托集。
在这里插入图片描述
当然不一定能够求出全局最优解,但对于现实问题,以一个较快的运算速度求出非常接近全局最优解的解集,能够满足实际需要,即完成了优化的目标。
参考:
从NSGA到 NSGA II,
我翔哥的文章
数之道37】多目标优化求解策略与遗传算法NSGA-II<最优化系列第3集>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1554382.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基本数据类型

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 数据类型是一种用于描述数据存储格式的结构。 PL/SQL 和其他编程语言一样也有多种数据类型&#xff0c;PL/SQL 语言中的常用数据类型和 Oracle 数据库中内置的数据类型基本…

基于JSP的母婴用品网站

背景 随着时代的飞速进步&#xff0c;计算机技术已经广泛而深刻地渗透到社会的各个层面。人们生活质量的持续提升&#xff0c;以及对母婴产品需求的日益增长&#xff0c;都推动了母婴用品网站开发的必要性和紧迫性。这类网站依托计算机技术&#xff0c;通过对相关产品信息的有…

简易挛生分拣系统设计

1 工效组合展示 2 方案规划设计 3 数字挛生建模 基础建模、动画设计、模型导出 4 软件体系架构 5 Web交互设计 5.1 页面架构 5.2 初始构造 5.3 模型运用 5.4 WS通信 5.5 运行展现 6 服务支撑编码 6.1 整体调度 6.2 WS服务 6.3 C/S通信 7 系统级调试完善

PyTorch深度学习快速入门(小土堆)

文章目录 16. 神经网络的基本骨架17.卷积操作18.卷积层 16. 神经网络的基本骨架 forward: import torch from torch import nnclass Tudui(nn.Module):def __init__(self):super().__init__()def forward(self,input):outputinput1return output#创建Tudui的实例对象 tuduiTu…

【详细讲解MNN介绍,安装和编译】

&#x1f308;个人主页:程序员不想敲代码啊&#x1f308; &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家&#x1f3c6; &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提…

基于Arduino IDE 野火ESP8266模块 定时器 的开发

一、delay函数实现定时 如果不需要精确到微秒级别的控制&#xff0c;可以使用Arduino的内置函数 millis()和delay() 来创建简单的定时器。millis()函数返回Arduino板启动后的毫秒数&#xff0c;而delay()函数会暂停程序的执行一段时间。 示例代码如下&#xff1a; delay()函数…

HarmonyOS实战开发-如何构建多种样式弹窗

介绍 本篇Codelab将介绍如何使用弹窗功能&#xff0c;实现四种类型弹窗。分别是&#xff1a;警告弹窗、自定义弹窗、日期滑动选择器弹窗、文本滑动选择器弹窗。需要完成以下功能&#xff1a; 点击左上角返回按钮展示警告弹窗。点击出生日期展示日期滑动选择器弹窗。点击性别展…

electron+VUE Browserwindow与webview通信

仅做记录 前言&#xff1a; electronVUEVITE框架&#xff0c;用的是VUE3.0 主进程定义&#xff1a;用于接收webview发送的消息 ipcMain.on(MyWebviewMessage, (event, message) > {logger.info(收到webmsg message)//转发给渲染进程}) porelaod/webPreload.js定义 cons…

Qt+OpenGL入门教程(二)——OpenGL渲染管线

渲染管线是图形学不可或缺的&#xff0c;在学习它之前&#xff0c;我们先了解一下什么是管线&#xff1f; 管线/流水线 当我们谈到管线时&#xff0c;我们指的是一个由多个阶段组成的过程&#xff0c;每个阶段都完成任务的一部分。在现实世界中&#xff0c;流水线的概念在许多…

vue实现文字一个字一个字的显示(开箱即用)

图示&#xff1a; 核心代码 Vue.prototype.$showHtml function (str, haveCallback null) {let timeFlag let abcStr for (let i 0; i < str.length; i) {(function (i) {timeFlag setTimeout(function () {abcStr str[i]haveCallback(abcStr)if ((i 1) str.length…

C# NumericUpDown 控件正整数输入控制

用到了控件的 KeyPress 和 KeyUp事件。 KeyPress 中控制输入“点、空格&#xff0c;负号”&#xff1b; KeyUp 中防止删空&#xff0c;以及防止输入超过最大值或最小值 。 private void nudStart_KeyPress(object sender, KeyPressEventArgs e){numericUpDownKeyPress(sender…

把组合损失中的权重设置为可学习参数

目前的需求是&#xff1a;有一个模型&#xff0c;准备使用组合损失&#xff0c;其中有2个或者多个损失函数。准备对其进行加权并线性叠加。但想让这些权重进行自我学习&#xff0c;更新迭代成最优加权组合。 目录 1、构建组合损失类 2、调用组合损失类 3、为其构建优化器 …

HiRoPE、MoDiTalker、RecDiffusion、DreamSalon、InterDreamer、BAMM

本文首发于公众号&#xff1a;机器感知 HiRoPE、MoDiTalker、RecDiffusion、DreamSalon、InterDreamer、BAMM Lift3D: Zero-Shot Lifting of Any 2D Vision Model to 3D In recent years, there has been an explosion of 2D vision models for numerous tasks such as seman…

利用lidar生成深度图

前言 目前&#xff0c;深度图像的获取方法有&#xff1a;激光雷达深度成像法、计算机立体视觉成像、坐标测量机法、莫尔条纹法、结构光法等。针对深度图像的研究重点主要集中在以下几个方面&#xff1a;深度图像的分割技术&#xff0c;深度图像的边缘检测技术&#xff0c;基于…

HarmonyOS实战开发-实现自定义弹窗

介绍 本篇Codelab基于ArkTS的声明式开发范式实现了三种不同的弹窗&#xff0c;第一种直接使用公共组件&#xff0c;后两种使用CustomDialogController实现自定义弹窗&#xff0c;效果如图所示 相关概念 AlertDialog&#xff1a;警告弹窗&#xff0c;可设置文本内容和响应回调…

网络七层模型:理解网络通信的架构(〇)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【QT入门】 QListWidget各种常见用法详解之列表模式

往期回顾 【QT入门】 Qt代码创建布局之setLayout使用-CSDN博客 【QT入门】 Qt代码创建布局之多重布局变换与布局删除技巧-CSDN博客 【QT入门】 QTabWidget各种常见用法详解-CSDN博客 【QT入门】 QListWidget各种常见用法详解之列表模式 QListWidget有列表和图标两种显示模式&a…

数据结构刷题篇 之 【力扣二叉树基础OJ】详细讲解(含每道题链接及递归图解)

有没有一起拼用银行卡的&#xff0c;取钱的时候我用&#xff0c;存钱的时候你用 1、相同的树 难度等级&#xff1a;⭐ 直达链接&#xff1a;相同的树 2、单值二叉树 难度等级&#xff1a;⭐ 直达链接&#xff1a;单值二叉树 3、对称二叉树 难度等级&#xff1a;⭐⭐ 直达…

Delphi模式编程

文章目录 Delphi模式编程涉及以下几个关键方面&#xff1a;**设计模式的应用****Delphi特性的利用****实际开发中的实践** Delphi模式编程的实例 Delphi模式编程是指在使用Delphi这一集成开发环境&#xff08;IDE&#xff09;和Object Pascal语言进行软件开发时&#xff0c;采用…

vivado 器件编程

生成器件镜像后 &#xff0c; 下一步是将其下载到目标器件。 Vivado IDE 具有内置原生的系统内器件编程功能用于执行此操作。 Vivado Design Suite 和 Vivado Lab Edition 都包含相应的功能 &#xff0c; 支持您连接到包含 1 个或多个 FPGA 或 ACAP 的硬 件&#xff0c; 以…