Guest User

Untitled

a guest
Jul 20th, 2018
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.82 KB | None | 0 0
  1. def genetic2(cost, cromsize=26, popsize=50, mutprob=0.01, maxiter=150):#els parametres es poden canviar o quan cridem o aqui
  2. # Generem la poblaciу inicial
  3. t1 = time.clock()
  4.  
  5. pop=initpop(popsize, cromsize)
  6. # Iterem fins al nombre de genei+1racions
  7. for cont in range(maxiter):
  8. # Avaluem la generacio i l'ordenem
  9. scores = [(cost(v),v) for v in pop]
  10. scores.sort(reverse=True)
  11. ranked=[v for (s,v) in scores]#la v de totes les tuples de scores
  12. # Afegim els dos millors cromosomes a la segьent generacнo
  13. newpop=[0]*popsize
  14. newpop[0],newpop[1]=ranked[0],ranked[1]
  15. # Seleccionem les parelles
  16.  
  17. for i in range(0,popsize,2):
  18. ind1=seleccio_std(ranked,cost,i)
  19. ranked[i],ranked[ind1]=ranked[ind1],ranked[i]
  20. ind2=seleccio_std(ranked,cost,i+1)
  21. ranked[i+1],ranked[ind2]=ranked[ind2],ranked[i+1]
  22. # Creuem les parelles i generem els fills
  23. new=[0]*popsize
  24. for i in range(0,popsize,2):
  25. new[i],new[i+1] = creuament(ranked[i],ranked[i+1])
  26. # Mutem
  27. mut=[0]*popsize
  28. for i in range(popsize):
  29. mut[i]=mutacio(new[i],mutprob)
  30. # Afegim els pares (excepte els dos millors) a la generaciу
  31. mut = mut + ranked[2:]
  32. # Seleccionem la resta d'individus per la segьent generaciу
  33. for i in range(2,popsize):
  34. newpop[i]=mut[seleccio_std(mut,cost,i)]
  35. pop=newpop
  36. t2 = time.clock()
  37.  
  38. print "f(x):", scores[0][0]
  39. vect=scores[0][1]
  40. rxx=vect[len(vect)/2:]
  41. ryy=vect[:len(vect)/2]
  42. print "x:", puntx2(rxx)
  43. print "y:", puntx2(ryy)
  44. print "\nHa trigat",'%0.3f ms'%((t2-t1)*1000)
  45. print contando
  46.  
  47. genetic2(cost2)
  48. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Add Comment
Please, Sign In to add comment