|
发表于 2017-5-6 21:37:49
|
显示全部楼层
百度第一篇这个不就是已经很接近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
复制代码 |
评分
-
查看全部评分
|