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

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Html文件名乱码

    Html文件名乱码问题现象解决办法:修改配置文件的值并发:客户机文件名字符集ZHS16CGB231280

    2022年10月21日
  • 什么是内连接、外连接?MySQL支持哪些外连接?_oracle内连接和外连接的区别

    什么是内连接、外连接?MySQL支持哪些外连接?_oracle内连接和外连接的区别图片与最后一部分来自:https://blog.csdn.net/plg17/article/details/78758593已有如下表rollcall数据表course数据表内链接innerjoin语句:select表1查询的字段,表2查询的字段from表1innerjoin表2on条件;如:mysql>selecta.*,b.*from…

  • element-plus 一个vue3.xUI框架 (element-ui的3.x 版初体验)

    element-plus 一个vue3.xUI框架 (element-ui的3.x 版初体验)突然发现已经半年没更新的element-ui更新了更新了什么还不清楚,但是告知了基于vue3.x版本的element-plus已经出来了。先来上手体验一下首先安装一个最新的@vue-cli,搭建一个vue3.x的项目,脚手架创建流程已经很简洁了,这里就不多说了。建好之后,直接开始安装吧npmielement-plus为了方便,直接采取全部引入的方式src/plugins/element.tsimportElementPlusfrom’element-plus’impor

  • 虚拟opc服务器软件,几个OPC服务器开发工具比较

    虚拟opc服务器软件,几个OPC服务器开发工具比较1、WTOPCsvr.dll2、我2004年获得WTOPCsvr.dll的代码,这个代码是我学习VC++的启蒙,也是我学习OPC服务器开发的最重要的资料。用VB开发OPC服务器的话,可以说是首选,简单调用WTOPCsvr.dll的API就可以开发服务器。我到现在还是很钟爱这份代码。完全用MFC的方式,通过嵌套类实现COM组件的接口,代码比较清晰。2、Iconics2.11和FactorySoft…

  • oracle r修改表名,oracle中修改表名「建议收藏」

    oracle r修改表名,oracle中修改表名「建议收藏」<<>>answer1:ALTERTABLEold_table_nameRENAMETOnew_table_name;(大写为系统命令)answer2:SQL>selecttnamefromtab;TNAME——————————TESTSQL>renametesttotemp;Tablere…

  • zencart 模板设计「建议收藏」

    zencart 模板设计「建议收藏」ZenCart的模板设计比较复杂,需要一定的时间来熟悉。一旦你了解了它的结构,就会慢慢习惯了。首先要阅读常见问答部分的:如何添加、制作新模板。ZenCart的设计没有什么特别,与以前设计HTML页面是一样的。只是整个页面分成了好几个部分,并加入了PHP代码。通常,页面分为页眉(header),页脚(footer),边框(sideboxes)。所以设计页面的时候,要记住ZenCart是如

发表回复

您的电子邮箱地址不会被公开。

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