多目标优化_学习笔记(二)NSGA-II

2023-05-16

前言

本篇博客出于学习交流目的,主要是用来记录自己学习多目标优化中遇到的问题和心路历程,方便之后回顾。过程中可能引用其他大牛的博客,文末会给出相应链接,侵删!

REMARK:本人纯小白一枚,0基础,如有理解错误还望大家能够指出,相互交流。也是第一次以博客的形式记录,文笔烂到自己都看不下去,哈哈哈


笔记(二)中记录在学习NSGA-II中的笔记

正文

NSGA-II作为多目标优化算法的经典算法之一,于2000年Srinivas 和 Deb 提出,相比较第一代非支配排序遗传算法NSGA而言具有以下改进:

  1. 提出了快速非支配排序概念,将第一代算法的计算复杂度 O ( M N 3 ) O(MN^{3}) O(MN3)降为 O ( M N 2 ) O(MN^{2}) O(MN2)
  2. 添加精英机制,使得父代种群与子代种群共同竞争生成新种群,保证已经获得的最优解不丢失,有利于算法收敛性。(传统精英机制,构建一个外部种群用于保存从始至终的非支配解);
  3. 采用拥挤度度量算子,克服NSGA中认为指定共享参数的缺陷;

遗传算法回顾

NSGA-II属于遗传算法的变形,在正式理解算法之前,先对遗传算法进行简单的回顾,遗传算法含以下五步:
a.种群初始化
b.个体评价(计算适应度函数)
c.选择运算(Selection),常用选择运算有轮盘赌选择法、随机遍历抽样法、锦标赛选择法;

简单介绍锦标赛机制(本算法用到的选择运算),在父代种群中随机选择 n n n个个体,选择其中最优的个体放入子代种群,重复此步骤,每次都选择最优的个体直子代种群大小达到种群要求大小。

d.交叉运算(Crossover),单点交叉,洗牌交叉等
e.变异运算(Mutation)


NSGA-II算法主要由三个部分组成,下文中将详细说明。
A、快速非支配方法
B、拥挤比较算子
C、主程序

具体算法

A、快速非支配方法

> > > >>> >>> 传统排序方法:计算复杂度 O ( M N 3 ) O(MN^{3}) O(MN3) M M M为目标个数, N N N为种群大小。计算 F 1 \mathcal{F}_{1} F1(第一Pareto前沿)时,每个解需要和剩余 N − 1 N-1 N1个解分别比较 M M M次,所以计算复杂度为 O ( M N 2 ) O(MN^{2}) O(MN2),而对于最坏的情况,即每个解占一个前沿,每个前沿中只有一个解的时候,计算复杂度为 O ( M N 3 ) O(MN^{3}) O(MN3)

> > > >>> >>>快速非支配方法:计算复杂度 O ( M N 2 ) O(MN^{2}) O(MN2)
先介绍两个变量: n p {n}_{p} np表示为解 p p p被几个解所支配,是一个数值; S p {S}_{p} Sp表示解 p p p支配哪些解,是一个解集合。借用博客中的图例可以很好的理解,这里真心表示感谢。
快速非支配
如上图所示,对 c c c解而言,被 a , b a,b ab两个解支配,我们计算 n c {n}_{c} nc为2;同理,解 b b b支配三个解,我们得到 S b = { c , d , e } {S}_{b}=\left \{ c,d,e \right \} Sb={c,d,e}

算法具体流程如下图所示
这里写图片描述

首先,遍历解集合中的所有解,并分别计算这些解对应的 n {n} n值和 S {S} S集合,对于 n = 0 {n}=0 n=0的解,表示该解为非支配解,划入 F 1 \mathcal{F}_{1} F1;接着,访问当前 F r a n k \mathcal{F}_{rank} Frank中每个Pareto最优解对应 S {S} S集合中的解,当解被访问则 n {n} n值减一,每完整遍历一次前沿面的序号rank增大1,其中若有解对应 n {n} n值为0,则保存至下一前沿面 F r a n k + 1 \mathcal{F}_{rank+1} Frank+1中;重复上一步骤,直到所有解都划分到对应的前沿面中,得到$\mathcal{F}{1}\prec {F}{2} \prec \cdots $。

第一步中同传统排序算法,计算复杂度为 O ( M N 2 ) O(MN^{2}) O(MN2),第二步中,每个解最多被 N − 1 N-1 N1个解支配,所以计算复杂度为 O ( N 2 ) O(N^{2}) O(N2),综合而言,快速非支配方法将传统方法的计算复杂度从 O ( M N 3 ) O(MN^{3}) O(MN3)降低为 O ( M N 2 ) O(MN^{2}) O(MN2)

B、拥挤比较算子

为了弥补需人为设置共享函数的缺陷,作者提出了拥挤比较算子,保证了统一前沿的解多样性。

> > > >>> >>>密度估计:对同一个前沿面的解集合按各个目标分量大小排序,计算每个解在该分量下的两侧点的距离差值,而后进行累加各个分量上的距离作为拥挤系数,具体算法流程如下图所示
这里写图片描述
其中, l l l表示当前最优前沿面中解集合 I \mathcal{I} I的大小。 I [ i ] d i s t a n c e \mathcal{I}\left [ i \right ]_{distance} I[i]distance用于累加计算拥挤系数,对于每个解 i i i的每个目标分量 m m m 计算该分量上排序后一个 i + 1 i+1 i+1与前一个点 i − 1 i-1 i1相对差值作为分量上的拥挤度量, f m m a x , f m m i n f{_{m}^{max}},f{_{m}^{min}} fmmaxfmmin分别表示目标分量 m m m上的最大取值和最小取值。
这里写图片描述
在图中我们可以看出,对于解 i i i计算得到的拥挤系数可以理解为是图中虚线所围成矩形的一半(对于两目标优化),位于头尾两端的解我们定义为无穷大。拥挤系数越大,越容易在遗传算法选择阶段被选择增强了同一前沿面的多样性。

C、主程序
掌握以上两部分算法后,从主程序了解整体算法思路,主要在选择策略部分区别于传统遗传算法。

> > > >>> >>>种群初始化
随机创建父代种群 P 0 {P}_{0} P0,为父代种群利用快速非支配排序算法计算出非支配等级,并利用二进制锦标赛机制重组以及变异算子生成大小为 N N N的子代种群。

> > > >>> >>>子代个体选择
下面是原文给出的新父代个体选择过程的计算复杂度和过程图例
这里写图片描述
对于每个父代种群 P t {P}_{t} Pt,我们将其生成的子代种群 Q t {Q}_{t} Qt与之合并为合并种群 R t {R}_{t} Rt,接着对新种群 R t {R}_{t} Rt利用快速非支配排序算法算法计算得到 R t {R}_{t} Rt中解得前沿排序,我们按照 ≺ \prec 次序将 R t {R}_{t} Rt中的个体选择至新父代 P t + 1 {P}_{t+1} Pt+1中。具体选择如下:
对于已经排好序的个体,按前沿面顺序整体加入 P t + 1 {P}_{t+1} Pt+1中,也就是 F 1 \mathcal{F}_{1} F1最先加入,然后是 F 2 \mathcal{F}_{2} F2,以此类推; F i \mathcal{F}_{i} Fi在加入之前得做一个判断,加入 F i \mathcal{F}_{i} Fi整个前沿面个体后,是否 P t + 1 {P}_{t+1} Pt+1总数量超过 N N N,如果是,则对 F i \mathcal{F}_{i} Fi中的个体计算拥挤度量,选择最优的个体加入,使得新父代 P t + 1 {P}_{t+1} Pt+1总数量为 N N N

总结

原始论文中给出了详细的实验结果和对比实验

在大多数问题中,实数编码NSGA-II相比其他任何算法,能够找到更好的扩展解——原文

有兴趣的可以查看原文,提供一个[原文中文版翻译链接](https://wenku.baidu.com/view/61daf00d0508763230121235.html


最后,再次对前人学者们表示感谢,通过他们的博客与文章使我更好的理解了许多问题,本篇笔记主要参考多目标优化系列(一)NSGA-Ⅱ

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多目标优化_学习笔记(二)NSGA-II 的相关文章

随机推荐

  • 内核与驱动_08_键盘驱动原理及代码

    文章目录 技术原理Windows中从击键到内核流程 键盘硬件原理键盘过滤的框架搭建应用设备扩展键盘过滤模块的动态卸载键盘过滤的请求处理通常的处理 PNP的处理读的处理读完成的处理从请求中打印出按键信息从缓冲区中获得KEYBOARD INPU
  • LCD 12864B V2.0的使用

    内置ST7920控制器和中文字库的LCD12864的使用 前言 大家好 xff0c 我是小灬贱 今天我给大家带来LCD12864的使用方法以及我的一些经验 文章里面如有不妥之处或者表达不清晰的地方还请各位多多指教 可以在文下评论或者私信我
  • Unity:内存管理、GC优化

    目录 一 GC简介 1 堆内存分配和回收机制 2 垃圾回收时的操作 3 何时会触发垃圾回收 xff1f 4 GC操作带来的问题 二 GC优化 1 降低GC影响的方法 2 减少内存垃圾的数量 3 造成不必要的堆内存分配的因素 1 字符串 2
  • C# 常用的文件IO操作

    目录 一 IO流 1 文件夹操作 Directory类 2 文件操作 File类 3 路径操作 Path类 4 读取文件 StreamReader类 5 写入文件 StreamWriter类 二 动态链接库kernel32 1 写入文件 2
  • OutLine源码解析 -- 为什么要尽量避免使用OutLine

    相信很多人在刚入职Unity的时候都被告诫过尽量避免使用OutLine xff0c 只知道它很费性能 xff0c 但是很多人并不知道它为什么很费性能 今天通过源码来探索一下 首先看一下OutLine cs里的源码 public overri
  • Lua高级应用

    一 lua数据结构及内存占用分析 1 基础数据结构 lua的基本数据表示是type 43 union 的方式 xff0c 根据不同类型映射到union的不同结构上面 xff0c 统一的表示结构lua TValue xff1a typedef
  • VirtualBox虚拟机安装CentOS7.6后无法ssh远程连接虚拟机

    问题如题所述 安装完 xff0c 一般都是使用ip addr查看虚拟机IP后通过远程工具来尝试连接 虚拟机IP 然后会发现通过此IP无法连接 解决办法 xff1a 修改VirtualBox的网络配置 1 查看VirtualBox对应网卡的I
  • UGUI实现text渐变色(通过自定义富文本标记实现)

    之前分享过一个通过添加组件实现渐变色的文章 xff0c 但是通过组件实现有一个弊端 xff0c 他只能设置整个文本渐变 xff0c 不能只设置一段文字渐变 今天分享一个通过正则匹配自定义的富文本标记来实现渐变色的方法 xff0c 这样的好处
  • 如何实现自定义绘制Winform的TreeView并且实现多选

    自定义绘制背景 xff0c 节点字体 xff0c 树节点后面加按钮 xff0c 自定义展开节点样式 效果如下 xff1a 同时选中节点5和节点6下的Tree 先设置TreeView的DrawMode 61 System Windows Fo
  • RSTP协议原理与配置整——STP的不足

    STP协议虽然能够解决环路问题 xff0c 但是由于网络拓扑收敛较慢 xff0c 影响了用户通信质量 xff0c 而且如果网络中的拓扑结构频繁变化 xff0c 网络也会随之频繁失去连通性 xff0c 从而导致用户通信频繁中断 xff0c 这
  • 双重加锁单例模式剖析

    话不多说 xff0c 首先上代码 xff01 xff01 xff01 span class token keyword public span span class token keyword class span span class t
  • Mybatis plus 批量插入MetaObjectHandler无法生效问题

    目录 1 溯源 2 孽缘 3 发现 4 尝试 5 结果 6 吐槽 1 溯源 3年前当时Mybatis plus还没有那么火爆的时候 xff0c 当时在创业公司是遇到了 Mybatis plus xff0c 因为baseMapper也没有集成
  • springKafka 重试解决分布式事务

    目录 1 背景 1 1 名词解释 1 2 业务场景 1 3 kafka消息的优点和缺点 1 4 kafka客户端重试框架 2 使用 2 1 引入pom依赖 2 2 定义重试消息 xff0c 死信队列 2 3 业务执行异常处理 3 代码分析
  • 库存系统通用模型

    1 库存模型设计 一般通用库存模块包括 名称备注 基础数据模块 仓库 xff0c 物料 xff0c 等基础信息入库单据单据出库单据单据出入库流水记录 xff0c 锁帐等报表查询的一些信息库存核心库存数量 2 库存模型 3 模型详细介绍 这个
  • 【Linux命令学习4】查询文件内容的五个命令:☆cat、☆more、less、head、tail

    以root 用户家目录下的anaconda ks cfg文件做演示 以下命令都是在 root 64 localhost root超级用户家目录下运行 值得知道的翻页命令 按键功能enter 回车键 向下一行space 空格 向下一页b向上一
  • 关于windows无法启动VMware USB Arbitration Service 错误2 问题解决

    关于windows无法启动VMware USB Arbitration Service 错误2 问题解决 控制面板 gt 卸载程序 gt 右击VMware Workstation gt 更改 gt 下一步 gt 修复 等待修复完成重启即可
  • 场景识别论文阅读感想(初步)

    近日阅读了一篇cvpr上2016年关于场景识别的论文 xff0c 写了如下感想 The Cityscapes Dataset for Semantic Urban Scene Understanding 阅读感想 1 概述 对于城市道路的环
  • 一款能生成NC文件(雕刻路径文件)的 inkscape ,想必很多人都找不到能用的

    xfeff xfeff 点击链接加入群聊 雕刻机技术营 xff1a https jq qq com wv 61 1027 amp k 61 5c6j991 下载链接 https pan baidu com s 1IQ9A6CmcgVxxKL
  • 多目标优化_学习笔记(一)

    前言 本篇博客出于学习交流目的 xff0c 主要是用来记录自己学习多目标优化中遇到的问题和心路历程 xff0c 方便之后回顾 过程中可能引用其他大牛的博客 xff0c 文末会给出相应链接 xff0c 侵删 xff01 REMARK xff1
  • 多目标优化_学习笔记(二)NSGA-II

    前言 本篇博客出于学习交流目的 xff0c 主要是用来记录自己学习多目标优化中遇到的问题和心路历程 xff0c 方便之后回顾 过程中可能引用其他大牛的博客 xff0c 文末会给出相应链接 xff0c 侵删 xff01 REMARK xff1