generation.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. ## Fichier : generation.py
  2. # Auteur : Jovian Hersemeule
  3. # Contient des fonctions qui construisent la génération suivante.
  4. from random import randint
  5. from random import uniform
  6. class Generateur : # Jovian 15 mars 2017
  7. def __init__(self): # Jovian 15 mars 2017
  8. """
  9. Permet de créer un générateur avec les paramètres désirés.
  10. """
  11. def cross_random(self, chromA, chromB): # Jovian 15 mars 2017
  12. """
  13. Retourne un chromosome dont chaque gène
  14. est choisi aléatoirement chez A ou B.
  15. """
  16. def cross_mix(self, chromA, chromB): # Jovian 15 mars 2017
  17. """
  18. Retourne un chromosome dont chaque gène
  19. est la moyenne arithmétique des valeurs
  20. des chromosomes chez A et B.
  21. """
  22. def mutate_total(self, chromA, nb = 1, inf = -1, sup = +1): # Jovian 31 mai 2017
  23. """
  24. Remplace certains gènes du chromosome
  25. par un poids aléatoire.
  26. Arg nb : le nombre de gènes à muter.
  27. """
  28. n = len(chromA)
  29. for k in range(nb):
  30. gene = randint(0, n-1)
  31. new_value = uniform(inf, sup)
  32. chromA[gene] = new_value
  33. def mutate_diff(self, chromA, diff = 0.1, nb = 1, inf = -1, sup = +1): # Jovian 31 mai 2017
  34. """
  35. Modifie un certain nombre de gène par l'ajout
  36. d'une valeur aléatoire.
  37. Arg diff : la différence maximale ajoutée.
  38. Arg nb : le nombre de gènes à muter.
  39. """
  40. n = len(chromA)
  41. for k in range(nb):
  42. gene = randint(0, n-1)
  43. new_diff = uniform(-diff, diff)
  44. chromA[gene] += new_diff
  45. if chromA[gene] >= sup :
  46. chromA[gene] = sup
  47. elif chromA[gene] <= inf :
  48. chromA[gene] = inf