思想:
要对拥挤距离进行计算,则需要根据每个目标函数对种群中的所有个体按升序进行排序。第一个和最后一个个体的拥挤距离设为无穷大,第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://51itzy.com/kjqy/72385.html