Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def genetic2(cost, cromsize=26, popsize=50, mutprob=0.01, maxiter=150):#els parametres es poden canviar o quan cridem o aqui
- # Generem la poblaciу inicial
- t1 = time.clock()
- pop=initpop(popsize, cromsize)
- # Iterem fins al nombre de genei+1racions
- for cont in range(maxiter):
- # Avaluem la generacio i l'ordenem
- scores = [(cost(v),v) for v in pop]
- scores.sort(reverse=True)
- ranked=[v for (s,v) in scores]#la v de totes les tuples de scores
- # Afegim els dos millors cromosomes a la segьent generacнo
- newpop=[0]*popsize
- newpop[0],newpop[1]=ranked[0],ranked[1]
- # Seleccionem les parelles
- for i in range(0,popsize,2):
- ind1=seleccio_std(ranked,cost,i)
- ranked[i],ranked[ind1]=ranked[ind1],ranked[i]
- ind2=seleccio_std(ranked,cost,i+1)
- ranked[i+1],ranked[ind2]=ranked[ind2],ranked[i+1]
- # Creuem les parelles i generem els fills
- new=[0]*popsize
- for i in range(0,popsize,2):
- new[i],new[i+1] = creuament(ranked[i],ranked[i+1])
- # Mutem
- mut=[0]*popsize
- for i in range(popsize):
- mut[i]=mutacio(new[i],mutprob)
- # Afegim els pares (excepte els dos millors) a la generaciу
- mut = mut + ranked[2:]
- # Seleccionem la resta d'individus per la segьent generaciу
- for i in range(2,popsize):
- newpop[i]=mut[seleccio_std(mut,cost,i)]
- pop=newpop
- t2 = time.clock()
- print "f(x):", scores[0][0]
- vect=scores[0][1]
- rxx=vect[len(vect)/2:]
- ryy=vect[:len(vect)/2]
- print "x:", puntx2(rxx)
- print "y:", puntx2(ryy)
- print "\nHa trigat",'%0.3f ms'%((t2-t1)*1000)
- print contando
- genetic2(cost2)
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Add Comment
Please, Sign In to add comment