def evolve():
global pop,fvals
for g in xrange(0,gmax):
for i in xrange(0,NP):
while 1:
r1=random.randint(0,NP-1)
if r1!=i:
break
while 1:
r2=random.randint(0,NP-1)
if r2!=r1 and r2!=i:
break
while 1:
r3=random.randint(0,NP-1)
if r3!=r2 and r3!=r1 and r3!=i:
break
U=[]
V=[]
for j in xrange(0,dim):
U.insert(j,(pop[r3])[j] + F*((pop[r1])[j]-(pop[r2])[j]))
jrand = floor(int(rand1()*dim))
for j in xrange(0,dim):
if rand1()<=cr or j==jrand:
U.insert(j,(pop[r3])[j] + F*((pop[r1])[j]-(pop[r2])[j]))
else:
U.insert(j,(pop[i])[j])
V.insert(i,U)
fvals2.insert(i,fun(U))
x=open("x.out","w")
for i in xrange(NP):
for j in xrange(dim):
print i
print j
x.write(str((V[i])[j]) + '\t')
x.write(str(fvals2[i]))
x.write('\n')
执行此代码块时显示错误:
x.write(str((V[i])[j]) + '\t')
IndexError: list index out of range
我已采取gmax=5
,dim=2
和NP=5
。
答案 0 :(得分:0)
您在每个V
循环中将[]
设置为for n in xrange(0,NP)
,丢失之前的任何值。这意味着,当您编写文件时,V
只包含一个值(最多),这就是您在尝试阅读{{{{{{{{{{{{{{{{{{{{{{{{ 1}}中的值。您可能希望在该循环之外初始化xrange(NP)
。
您还错过了V
上的一些缩进,但我猜测将这些代码放入您的帖子时发生了这种情况,或者它可能无法运行得足够远写入文件时的IndexError。
除此之外,请考虑以下事项:
if rand1()<=cr or j==rand
行或在x.close()
内完成所有写入操作块。您还要在with open('x.out','w') as x:
的每个循环上覆盖该文件,因此您可能也希望将其移到该循环之外。