鱼C论坛

 找回密码
 立即注册
查看: 3215|回复: 1

NSGA2算法的Python实现

[复制链接]
发表于 2017-5-6 20:41:16 | 显示全部楼层 |阅读模式
100鱼币
毕业论文要用python实现NSGA2算法,自己实在能力有限(本人只是业余学习一下python),求大神帮助,希望能给出详细代码并注释!最好有一个实例检验一下算法的正确性

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-6 21:37:49 | 显示全部楼层
百度第一篇这个不就是已经很接近python的伪码了吗?虽然我也看不懂。
  1. def fast_nondominated_sort( P ):

  2. F = [ ]

  3. for p in P:

  4. Sp = [ ]

  5. np = 0

  6. for q in P:

  7. if p > q: #如果p支配q,把q添加到Sp列表中

  8. Sp.append( q )

  9. else if p < q: #如果p被q支配,则把np加1

  10. np += 1

  11. if np == 0:

  12. p_rank = 1 #如果该个体的np为0,则该个体为Pareto第一级

  13. F1.append( p )

  14. F.append( F1 )

  15. i = 0

  16. while F[i]:

  17. Q = [ ]

  18. for p in F[i]:

  19. for q in Sp: #对所有在Sp集合中的个体进行排序

  20. nq -= 1

  21. if nq == 0: #如果该个体的支配个数为0,则该个体是非支配个体

  22. q_rank = i+2 #该个体Pareto级别为当前最高级别加1。此时i初始值为0,所以要加2

  23. Q.append( q )

  24. F.append( Q )

  25. i += 1
复制代码

  1. def crowding_distance_assignment( I )

  2. nLen = len( I ) #I中的个体数量

  3. for i in I:

  4. i.distance = 0 #初始化所有个体的拥挤距离

  5. for objFun in M: #M为所有目标函数的列表

  6. I = sort( I, objFun ) #按照目标函数objFun进行升序排序

  7. I[0] = I[ len[I]-1 ] = ∞ #对第一个和最后一个个体的距离设为无穷大

  8. for i in xrange( 1, len(I) - 2 ):

  9. I[i].distance = I[i].distance + ( objFun( I[i+1] ) - objFun( I[i-1] ) )/(Max(objFun()) - Min(objFun()) )
复制代码

  1. while condition:

  2. Rt = Pt + Qt

  3. F = fast_nondominate_sort( Rt )

  4. Pt+1 = [ ]

  5. i = 0

  6. while len(Pt+1) + len( F[i] ) < N:

  7. crowding_distance_assignment( F[i] )

  8. Pt+1 += F[i]

  9. i += 1

  10. Pt+1 += F[i][0:N-len(Pt+1)]

  11. Qt+1 = make_new_generation( Pt+1 )

  12. t = t+1
复制代码

评分

参与人数 1鱼币 +5 收起 理由
大甲鱼D + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 22:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表