Python - list index out of range - genetic algorithm -


i'm having problems code , know problem simple can't figure out how solve it, i'll appreciate if tell me i'm doing wrong:

            import random             math import *             def create_population(dim,pn):                 t = log(factorial(dim**2),2)                 b = int(t+1)                 d = ""                 indarray = []                 bits_array=[]                 #print("bits usados: ",b)                 x in range(pn):                     y in range(b) :                         if random.randint(0,400000) %2:                             d = "1"+d                         else:                             d="0"+d                          num=int(d,2)%factorial(dim**2)                     bits_array.append(d)                     indarray.append(num)                      #print("\n index #",len(indarray),": ",num)                     d=""                 return indarray,dim,bits_array,b              def i2ms(index,b):                 squares=[]                 a=init_a(b)                 i=0                 t=b                 b = (b**2)-1                 in range(len(index)):                     s=""                     cont = 1                     while(index[i]>0):                         c = factorial(b)                         ind =(index[i]/c)                         s = s+str(a[int(ind)])+" "                         del a[(int(ind))]                         index[i] = index[i]%c                         b-=1                         cont +=1                     in range(len(a)):                         s = s+str(a[i])+" "                     squares.append(s)                     = init_a(t)                     b = t                     b = (b**2)-1                     s=""                 return squares             def init_a(b):                 a=[]                 in range(b**2):                     a.append(i+1)                 return             def score(squares):                 scores=[]                 print("\n")                 in range(len(squares)):                     r = squares[i]                     r = r.split(' ')                     n = int(sqrt(len(r)))                     nd = r                     goal = n * (n * n + 1) / 2;                     nd.reverse()                     m = [[nd.pop() in range(n)] j in range(n)]                     #print ("cubo #",i+1,": \n")                     #for in range(n):                         #print(m[i],'\n')                     min_sum,max_sum= 0,0                     minn = 1                     maxx = n * n                     in range (n):                         min_sum += minn                         minn += 1                         max_sum += maxx                         maxx += 1                     min_b,max_b = abs(goal - min_sum), abs(goal - max_sum)                     if min_sum < max_sum:                          final_b = max_sum                     else:                         final_b = min_sum                     total_cases = 2 * n + 2                     bias = total_cases * final_b                     fitness = bias                     #print ("max score: ",fitness)                     in range(n):                         s =0                         j in range(n):                             s +=int(m[i][j])                         fitness -= abs(goal-s)                     j in range(n):                         s=0                         in range(n):                             s += int(m[i][j])                         fitness -= abs(goal-s)                     s = 0                      if n%2 == 1:                         in range(n):                             s+= int(m[i][i])                         fitness -= abs(goal-s)                         m.reverse()                         s = 0                         in range(n):                             s+= int(m[i][i])                         fitness -= abs(goal-s)                      #print("actual score: ",fitness,"\n")                     scores.append(int(fitness))                 #print("goal",goal)                 return scores,bias              def breed(popul,score,breed_size,b):#popul= la poblacion , score : sus notas ind, breed_size, tamaƱo de poblacion que esco             #escogeremos, b numero de bites;             #calculamos las medidas de la poblacion "mergear"                 print(popul)                 print(score)                 maxx = max(score)                 #acomodamos los cubos(en binario) con su respectivo score                 breed_pop=[]                 new_pop=[]                 y in range(breed_size):                     z in score:                         if score[z] == maxx:                             breed_pop.append(popul[z])                             del score[z]                             del popul[z]                         maxx= max(score)                         print(breed_pop)                   if breed_pop>breed_size:                     breed_pop.pop()                     print(breed_pop)                 ##sorted(pop_dict.values())             if __name__ == '__main__':                 #dar dimensiones y determinar la poblacion inicial                 print("dimensiones?")                 n = input()                 print("poblacion?")                 pn = input()                 print("breed size?")                 p= int(input())                 ##g = input()                 #pasar los datos de dim y pob por el metodo de create_population, devuelve una lista con los index del cubo y su dimensiones                 ind,b,bits_a,bitsn= create_population(int(n),int(pn))                 #convertimos cada uno de esos indices un cubo magico con i2ms, devuelve un array de cubos magicos                 squares = i2ms(ind,b)                 '''print("\n")                 in range(len(squares)):                     print("cubo #",i+1,": " , squares[i])                     #pasamos cada cubo por score, nos dara el puntaje de cada cubo, devuelve una lista con los scores y el puntaje maximo                 '''                 scores,perfect = score(squares)                 breed(bits_a,scores,p,bitsn)                 '''for y in range(len(scores)):                     print(scores[y],"/",perfect)             ''' 

i'm using dimension = 3, population =10, , breed_size=4 keep getting:

if score[z] ==max indexerror: list index out of range

edit: traceback(most recent call last): file "squaresolver.py",line 156 in breed(bits:a,scores,p,bitsn) file "squaresolver.py", line 125, in breed if score[z] == maxx: indexerror: list index out of range

you don't need "score[z]" when "for z in score", z not index, value of score list.

you can do

if z == maxx 

Comments

Popular posts from this blog

amazon web services - S3 Pre-signed POST validate file type? -

c# - Check Keyboard Input Winforms -