我是靠谱客的博主 专一小虾米,最近开发中收集的这篇文章主要介绍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()) )

伪代码中的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


 

最后

以上就是专一小虾米为你收集整理的NSGA2算法中拥挤度计算代码的全部内容,希望文章能够帮你解决NSGA2算法中拥挤度计算代码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部