NSGA-II资料合集

2023-05-16

关于NSGA-II的一些资料

NSGA-II中文翻译

MATLAB代码

NSGA-II的解释

简介

关于演化计算

生物系统中,进化被认为是一种成功的自适应方法,具有很好的健壮性。

基本思想:达尔文进化论是一种稳健的搜索和优化机制。大多数生物体是通过自然选择和有性生殖进行进化。自然选择决定了群体中哪些个体能够生存和繁殖,有性生殖保证了后代基因中的混合和重组。自然选择的原则是适者生存,优胜劣汰。

演化计算正是一类借鉴生物界自然选择和自然遗传机制而发展起来的通用问题求解方法。

基本方法:

演化计算采用简单的编码技术来表示各种复杂的结构,进而进行简单的遗传操作和优胜劣汰的自然选择来指导学习和确定搜索方向。

演化计算采用种群的方式组织搜索,使得它可以同时搜索解空间的多个区域,从而特别适合大规模并行。

演化计算不仅能获得较高的效率而且具有简单、易于操作和通用性。目前,演化算法已经广泛在计算机科学、工程技术、管理科学和社会科学等众多领域得到了越来越广泛的应用。

NSGA-II简介

NSGA2主要是对NSGA算法的改进。NSGA是N. Srinivas 和 K. Deb在1995年发表的一篇名为《Multiobjective function optimization using nondominated sorting genetic algorithms》的论文中提出的。该算法在快速找到Pareto前沿和保持种群多样性方面都有很好的效果,不过在这么多年的应用中也出现了如下的一些问题:

  1. 非支配排序的时间复杂的很大,为O(MN3)。其中M为目标函数的数量,N为种群规模。
  2. 不支持精英策略。精英策略在保持好的个体及加速向Pareto前沿收敛方面都有很好的表现。
  3. 需要自己指定共享参数。该参数将对种群的多样性产生很大的影响。

NSGA2算法的策略

快速的非支配排序

在NSGA进行非支配排序时,规模为N的种群中的每个个体都要针对M个目标函数和种群中的N-1个个体进行比较,复杂度为O(MN),因此种群中的N个个体都比较结束的复杂度为O(MN2),即每进行一次Pareto分级的时间复杂度为O(MN2)。在最坏的情况下,每个Pareto级别都只含有一个个体,那么需要进行N次分级所需要的时间复杂度则会上升为O(MN3)。鉴于此,论文中提出了一种快速非支配排序法,该方法的时间复杂度为O(MN2)。

该算法需要保存两个量:

  • 支配个数np。该量是在可行解空间中可以支配个体p的所以个体的数量。

  • 被支配个体集合SP。该量是可行解空间中所有被个体p支配的个体组成的集合。

非支配排序算法的伪代码如下:

def fast_nondominated_sort( P ):
    F = [ ]
    for p in P:
        Sp = [ ]
         np = 0
         for q in P:
             if p > q:                #如果p支配q,把q添加到Sp列表中
                 Sp.append( q )
             else if p < q:        #如果p被q支配,则把np加1
                 np += 1

        if np == 0:
            p_rank = 1        #如果该个体的np为0,则该个体为Pareto第一级
      F1.append( p )
    F.append( F1 )
    i = 0
    while F[i]:
        Q = [ ]
        for p in F[i]:
            for q in Sp:        #对所有在Sp集合中的个体进行排序
                nq -= 1
                if nq == 0:     #如果该个体的支配个数为0,则该个体是非支配个体
                    q_rank = i+2    #该个体Pareto级别为当前最高级别加1。此时i初始值为0,所以要加2
                    Q.append( q )
        F.append( Q )
        i += 1

在上面伪代码中,第一部分循环为二重循环,时间复杂度为O(N2),第二部分循环中,我们可以假设共有x个级别,而每个级别中最多有(N-N/x)各个体,每个个体的支配集合中也最多有(N- N/x)各个体。由此可得出循环次数为x*(N-N/x)*(N-N/x)=((x-1)2/x2)N2M,即时间复杂度为O(MN2)。

种群中个体多样性的保留

原始的NSGA算法中使用共享函数的方法来维持物种的多样性,这种方法包含一个共享参数,该参数为所求解问题中所期望的共享范围。在该范围内,两个个体共享彼此的适应度。但是该方法有两个难点:

  • 共享函数方法在保持多样性的性能很大程度上依赖于所选择的共享参数值。

  • 种群中的每个个体都要与其余的个体相比较,因此该方法的全局复杂度为O(N2)。

在NSGA2中使用了排挤算法和精英策略来代替共享函数算法。而要实现这两种方法,首先我们需要定义两个操作:密度估算和排挤算子。

关于密度估算

要对拥挤距离进行计算,则需要根据每个目标函数对种群中的所有个体按升序进行排序。第一个和最后一个个体的拥挤距离设为无穷大,第i个个体的拥挤距离则设为第i+1和第i个体的所有目标函数值之差的和。具体方法如下面伪代码:

def crowding_distance_assignment( I )
        nLen = len( I )        #I中的个体数量
    for i in I:
                i.distance = 0    #初始化所有个体的拥挤距离
    for objFun in M:        #M为所有目标函数的列表
                I = sort( I, objFun )    #按照目标函数objFun进行升序排序
                I[0] = I[ len[I]-1 ] = ∞    #对第一个和最后一个个体的距离设为无穷大
                for i in xrange( 1, len(I) - 2 ):
                        I[i].distance = I[i].distance + ( objFun( I[i+1] ) - objFun( I[i-1] ) )/(Max(objFun()) - Min(objFun()) )

主体循环部分

(1).随机初始化开始种群P0。并对P0进行非支配排序,初始化每个个体的rank值。

(2). t = 0

(3).通过二进制锦标赛法从Pt选择个体,并进行交叉和变异操作,产生新一代种群Qt。

(4) 计算新种群的obj值,

(5).通过合并Pt 和 Qt 产生出组合种群Rt = Pt UQt 。

(6).对Rt进行非支配排序,并通过排挤和精英保留策略选出N个个体,组成新一代种群Pt+1。

(7).跳转到步骤3,并循环,直至满足结束条件。

伪代码如下

while condition:
    Rt = Pt + Qt
    F = fast_nondominate_sort( Rt )
    Pt+1 = [ ]
    i = 0
    while len(Pt+1) + len( F[i] ) < N:
        crowding_distance_assignment( F[i] )
        Pt+1 += F[i]
        i += 1
    Pt+1 += F[i][0:N-len(Pt+1)]
    Qt+1 = make_new_generation( Pt+1 )
    t = t+1

NSAG2算法的整体复杂度

(1).非支配排序,最差复杂度为O(M(2N)2)。

(2).拥挤距离估算赋值,最差复杂度为O(M(2N)log(2N))。

(3).拥挤操作排序,最差复杂度为O(2Nlog(2N))。

更多内容访问 omegaxyz.com
网站所有代码采用Apache 2.0授权
网站文章采用知识共享许可协议BY-NC-SA4.0授权
© 2020 • OmegaXYZ-版权所有 转载请注明出处

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

NSGA-II资料合集 的相关文章

  • 【Algorithm】单向链表模拟实现vector功能

    span class token function cmake minimum required span span class token punctuation span VERSION span class token number
  • ARCH INSTALL

    Arch Linux Install With UEFI Boot gdisk dev sdxy boot always uses less than 1G uses EF00 EFI System home uses 8302 mnt u
  • SQL Server 表注释&列注释

    添加表注释 表加注释 EXEC sys sp addextendedproperty 64 name 61 N 39 MS Description 39 64 value 61 N 39 注释内容 39 64 level0type 61 N
  • 在ubuntu14.04上安装或升级git

    git version git version 1 9 1 可以使用下面命令升级git xff08 如果不是root用户 xff0c 需在命令前加sudo xff09 xff1a add apt repository ppa git cor
  • C#串口数据处理--环形缓冲区-FIFO

    一 FIFO环形缓冲区初始化 static int MAX BUFFER LEN 61 1024 定义缓冲区大小 FIFO receiveBufferManager 61 new FIFO MAX BUFFER LEN 二 串口接收事件中添
  • IDEA 解决jar冲突问题

    在实际的 Maven 项目开发中 xff0c 由于项目引入的依赖过多 xff0c 遇到 jar 冲突算是一个很常见的问题了 如何使用 IntelliJ IDEA 解决 jar 包冲突的问题 xff01 简单粗暴 xff0c 直接上示例 xf
  • Ubuntu 18.04下安装Google Chrome

    Ubuntu 18 04下安装Google Chrome 进入Chrome官网下载地址 xff1a https www google cn intl zh CN chrome 点击 下载Chrome xff0c 进入下载页面 xff1a 如
  • css获取网页内所有标签的内容

    选择所有标签内的内容 包括script和style xff1a span class token punctuation span span class token punctuation span text 选择除script和style
  • Ubuntu 22.04 dektop 开启root并自动登录桌面

    1 设置root密码 span class token function sudo span span class token function passwd span root 2 解锁root span class token func
  • linux服务器之间的数据拷贝

    方法一 xff1a scp xff08 secure copy xff09 安全拷贝 xff08 1 xff09 scp定义 xff1a scp可以实现服务器与服务器之间的数据拷贝 xff08 from server1 to server2
  • Ubuntu桌面美化方法记录

    Ubuntu 20 04 1 LTS 桌面系统主题 xff0c 图标美化记录 Ubuntu使用的是Gnome Desktop xff0c 可以在 Gnome Look 寻找需要的主题 xff0c 图标 xff0c 插件等来丰富桌面系统 本文
  • spring mvc配置类简介及放静态资源释放

    配置文件ApplicationContext xml 基于spring的项目资源都是通过DispatcherServlet作为拦截器 xff0c DispatcherServlet是前置控制器 xff0c 配置在web xml文件中的 拦截
  • 【PVI-DSO】Leveraging Planar Regularities for Direct Sparse Visual-Inertial Odometry

    PVI DSO xff1a PVI DSO Leveraging Planar Regularities for Direct Sparse Visual Inertial Odometry 翻译 利用平面正则性进行直接稀疏视觉惯性里程计
  • SpringMvc源码分析--配置文件解析

    我们简单分析一下springmvc配置解析过程 xff0c 我个人认为理解这个过程对于后续学习是有帮助的 xff0c 毕竟配置文件是入口 一 认识springmvc xml配置文件 下面这个是springmvc中的配置 xff0c 与spr
  • SystemUI锁屏界面

    SystemUI 启动的时候启动各个SERVICE 这些Service不是四大组件的service 这个SERVICE继承SystemUI 实现了start 和onBootComplete方法 其中StatusBar加载了SystemUI几
  • Fastboot刷机

    Fastboot xff0c BootLoader xff0c Recovery详解 首先 xff0c 智能手机就是一台小电脑 xff0c 如果你恰好用的是linux系统 xff0c 那可以说两者在系统层面没有区别 因为android就是l
  • build 打包报错:Execution failed for task ‘,Run with --stacktrace option to get the stack trace.

    背景 xff1a 隔了很久的项目 xff0c 再次打开打包时报错 xff1a FAILURE Build completed with 2 failures 1 Task failed with an exception What went
  • oe_runmake failed

    记录在使用Petalinux编译uboot和linux内核的时候遇到的一个问题 xff0c 自己找了很久才找到解法 xff0c 贴出来给后来的兄弟们排排坑 问题 xff1a ERROR span class token operator s

随机推荐