百度第一篇这个不就是已经很接近python的伪码了吗?虽然我也看不懂。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
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()) )
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
|