NSGA2算法中拥挤度计算代码[通俗易懂]

NSGA2算法中拥挤度计算代码[通俗易懂]思想:    要对拥挤距离进行计算,则需要根据每个目标函数对种群中的所有个体按升序进行排序。第一个和最后一个个体的拥挤距离设为无穷大,第i个个体的拥挤距离则设为第i+1和第i个体的所有目标函数值之差的和。具体方法如下面伪代码:defcrowding_distance_assignment(I)nLen=len(I)#I中的个体数量…

大家好,又见面了,我是你们的朋友全栈君。

思想:

        要对拥挤距离进行计算,则需要根据每个目标函数对种群中的所有个体按升序进行排序。第一个和最后一个个体的拥挤距离设为无穷大,第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()) )

伪代码中的objFun( i )是对个体i求其目标函数值。Max(objFun())为目标函数objFun()的最大值,Min(objFun())为目标函数objFun的最小值。其复杂度为O(MNlogN)。

 

NSGA2算法的主体循环部分:

(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,并循环,直至满足结束条件。

步骤5伪代码:

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144551.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • kali更新源(源、软件更新,附kali源)

    kali更新源(源、软件更新,附kali源)很多系统安装好以后都需要进行更新源,或者软件需要更新,小编在这里进行一次更新源和软件的记录,还请路过大牛指出不足。1、在/etc/apt下有文件sources.list文件,将下方提供的源粘贴一个即可#命令vi/etc/apt/sources.list输入i进行编辑,把文章下方附有的kali源粘贴一个即可2、执行命令更新源#命令apt-getupdate3、更…

    2022年5月8日
    78
  • 三本毕业北京打工考研北大计算机,知乎刘洋:三本到北大软微到牛津博士,最后在哈工深当老师。…

    三本毕业北京打工考研北大计算机,知乎刘洋:三本到北大软微到牛津博士,最后在哈工深当老师。…(转发侵删)背景:当年在某三本独立学院,考研一志愿报了北大信科,没过复试线,校内调剂至北大软件工程参加复试复试时第一个问题是让简单介绍一下自己和本科学校,我刚说到学校名字就被考官打断了:“你的本科学校叫AA大学BB学院,那它到底是AA大学的一个下属学院呢,还是个跟AA大学没啥关系的独立学院呢?”我回答说:“是个独立学院,三本。”于是全场寂静,空气凝结。当时的直觉就是,这伙哥们儿肯定在想:“你一个…

    2022年9月21日
    3
  • HOG特征提取_模式识别图像处理算法有哪些

    HOG特征提取_模式识别图像处理算法有哪些图像处理之特征提取:HOG特征简单梳理HOG方向梯度直方图,这里分解为方向梯度与直方图。一、方向梯度梯度:在向量微积分中,标量场的梯度是一个向量场。标量场中某一点上的梯度指向标量场增长最快的方向,梯度的长度是这个最大的变化率。更严格的说,从欧几里得空间Rn到R的函数的梯度是在Rn某一点最佳的线性近似。在这个…

    2025年7月17日
    3
  • HTML 空格转义符的用法

    HTML 空格转义符的用法记录一下,空格的转义字符分为如下几种:1.&nbsp;&160#;不断行的空白(1个字符宽度)2.&ensp;&8194#;半个空白(1个字符宽度)3.&a

    2022年8月6日
    5
  • deepcopy和copy_python中copy和deepcopy的区别

    deepcopy和copy_python中copy和deepcopy的区别Python深浅复制一般对象的复制复杂对象的复制  最近遇到了有关Python中的copy与deepcopy问题,之前再Java里面好像也遇到了深浅复制的问题,但是Python中的深浅复制还不是很熟,就简单了解了一下它们2个的差别,可以供大家参考,不对的地方欢迎大家批评指正。一般对象的复制  针对Python中简单对象的复制,copy和deepcopy…

    2022年10月2日
    2
  • Vue 插槽(slot)详细介绍(对比版本变化,避免踩坑)

    Vue 插槽(slot)详细介绍(对比版本变化,避免踩坑)Vue中的插槽(slot)在项目中用的也是比较多的,今天就来介绍一下插槽的基本使用以及Vue版本更新之后的插槽用法变化。感谢大家支持,该版本为优化版,文章重新排版,优化阅读体验。

    2025年8月8日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号