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
Post a Comment