你好,我试图解决这个问题,但我做不到 这是我的代码:
import random
Cromosomas=[[random.randint(1, 1010) for i in range(3)] for j in range(800)]
Z=[]
Fitness=[]
P=[]
C=[]
Padres=[]
def funcOb(Arreglo):
return 0.2*Arreglo[0]**2+0.08*Arreglo[1]**2+0.18*Arreglo[2]**2+0.1*(Arreglo[0]*Arreglo[1])+0.04*(Arreglo[0]*Arreglo[2])+0.06*(Arreglo[1]*Arreglo[2])-0.14*Arreglo[0]-0.11*Arreglo[1]-0.1*Arreglo[2]+120+abs(Arreglo[0]+Arreglo[1]+Arreglo[2]-1000)-10
for i in range(0,800):
Z.append(funcOb(Cromosomas[i]))
for i in range(0,800):
Fitness.append(1/(1+Z[i]))
total=sum(Fitness)
for i in range(0,800):
P.append(Fitness[i]/total);
A=0
for i in P:
A=A+i
C.append(A)
R=[random.random()for i in range(800)]
for i in range(0,800):
for j in range(0,800):
if R[i]<=C[j]:
Cromosomas[i]=Cromosomas[j]
break
def mutar(Arreglo1,Arreglo2):
b=random.randint(0, 2)
if Arreglo1[b]<=Arreglo2[b]:
Arreglo2[b]=Arreglo1[b]
return Arreglo2
if Arreglo1[b]>=Arreglo2[b]:
Arreglo1[b]=Arreglo2[b]
return Arreglo1
for i in range(0,800):
r=random.random()
if r<(0.3):
n=Cromosomas[i]
if n not in Padres:
Padres.append(n)
r=0
for i in range(0,len(Padres)-1):
if len(Padres)==1:
Cromosomas[i]=[Padres[i][0],Padres[i][1],Padres[i][2]]
else:
lista=mutar(Padres[i],Padres[i+1])
Cromosomas[i]=[lista[0],lista[1],lista[2]]
for i in range(0,480):
Cromosomas[Cromosomas==random.randint(1, 2400)]=random.randint(1, 800)
for m in range(0,800):
print(funcOb(Cromosomas[m]))
错误:
Traceback (most recent call last):
File "main.py", line 59, in <module>
print(funcOb(Cromosomas[m]))
File "main.py", line 10, in funcOb
return 0.2*Arreglo[0]**2+0.08*Arreglo[1]**2+0.18*Arreglo[2]
**2+0.1*(Arreglo[0]*Arreglo[1])+0.04*(Arreglo[0]*Arreglo[2])+0.
06*(Arreglo[1]*Arreglo[2])-0.14*Arreglo[0]-0.11*Arreglo[1]-0.1*
Arreglo[2]+120+abs(Arreglo[0]+Arreglo[1]+Arreglo[2]-1000)-10
TypeError: 'int' object has no attribute '__getitem__'
当我尝试运行代码的最后一个函数时,会发生此错误,我不知道为什么我在最后调用的函数已经是我已经使用过的函数,并且它不会给我带来问题,如果我尝试其他方法,例如定义另一个函数,也会出现相同的错误。 谢谢你的帮助
目前没有回答
相关问题 更多 >
编程相关推荐