鱼C论坛

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

NSGA2算法的Python实现

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

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

使用道具 举报

发表于 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

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-8 00:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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