

LA DERIVE GENETIQUE
HASARD ET EVOLUTION
FREIN OU MOTEUR DE L'EVOLUTION ?

--Programme--
Dans le cadre du TPE, nous avons créé un programme capable de faire diverses simulations avec différents paramètres.
La programmation s'est effectuée dans le language de programmation PYTHON.
Tout d'abord il faut définir ce qu'est un individu :
[ [ (ALLELE 1 , ALLELE 2) , (ALLELE 1 , ALLELE 2) ], age ]
ici, l'individu est défini par deux gènes (ALLELE 1 , ALLELE 2) , ce nombre est modifiable
avec le paramètre G, ici G=2
Il a un age de 0 qui est un age en génerations
Au début du code on définit un nombre A, correspondant au nombre d'alleles possibles +1
Si A = 2, il y a donc 3 alleles possibles 0, 1 et 2
Le programme prend donc aléatoirement une valeur entre 0 et A pour définir chaque allele de chaque gène
la plutart du temps, on définit un individu comme un seul gène ayant deux versions différentes, c'est a dire que
A = 1
G = 1
Et donc voici un individu :
Mais on peut essayer :
A = 1
G = 2
Ce qui nous donne :
La population initiale est une succetion d'individus créés avec des gènes aléatoires, par la suite les populations seront les descendants des populations antérieures, et donc on pourra observer la variation des gènes, a travers les génerations
Voici une population de trois individus :
Une fonction sélectionnera aléatoirement des individus
dans la population pour faire des couples, une autre
fonction choisit aléatoirement une allèle sur les deux
pour chaque individu et une autre fonction les fusionne
pour créer la géneration suivante
Au début, nous avions choisi d'observer la taille de la population a travers les géneration sans s'occuper de la repartition des allèles dans la population
On a la possibilité d'ajouter de la sélection naturelle dans le
programme, le parametre existe mais il est mis a 0 car ce
n'est pas ce que nous voulons observer.(Variations aleatoires)
Puis nous avons décidé d'observer les allèles présentes dans
populations, mais le fait que la taille de la population ne
soit pas fixée était un problème :
Ici on peut voir que seules quelques alleles ont disparu, ces premieres simulations utilisaient la sélection naturelle ainsi qu'un grand nombre d'allèles, puis nous avons enlevé la sélection naturelle, pour rendre le processus plus aléatoire et nous avons baissé les allèles a 2 (A = 1) et les gènes a 1 (G = 1)
Ensuite on a fixé la taille de la population en faisant en sorte que la fonction qui s'occupe d'éliminer les individus
les tue instentanément apres leur reproduction. Nous avons donc obtenu des résultats comme cela :
On peut ici observer :
1) La courbe de fréquence de l'allèle A
2) La courbe de fréquence d l'allèle a
3) La fixation de l'allèle A a la géneration 280
Aussi A = 1
G = 1
Taille de population = 60
FONCTIONS IMPORTANTES
La fonction qui s'occupe de tuer :
Ligne par ligne :
81) On définit la fonction
82) On crée une liste des "individus à supprimer" de la population
83) Si l'age de la personne les supérieur ou égal à l'age maximal (paramètre modifiable, mis a 1 pour fixer la taille de la population), alors :
84) On ajoute l'individu a la liste "individus à supprimer"
85) Sinon :
86)Sélection naturelle
90) Pour chaque individu dans la liste "individus à supprimer", on le supprime de la population
La fonction qui fait des couple dans la population :
Ligne par ligne :
93) On définit la fonction
94) On crée une liste qui contiendra les couples d'individus
95) On crée une liste "indices" qui contient tout les individus dont l'age est superieur ou égal a age_min_rep(age minimal de reproduction)
96) Pendant que la taille de "indices" est supérieur à 1 :
97) On choisit un nombre au hasard entre 0 et la taille de indices -1 et on l'appelle "i1"
98) On prend l'individu qui correspond au nombre "i1" dans la liste "indices" et le le stocke temporairement dans "temp"
(Pour mieux comprendre, disons que liste=[1 ,8 ,3, 4], alors liste[0] = 1, c'est a dire le nombre qui est a la place 0 (la premiere) est 1, et donc liste[1] = 8
Dans la population on prend l'individu a la place "i1" dans la liste "indices"
99) On supprime indices[i1]
100) La meme chose avec "i2"
101) On ajoute a la liste "out" indices[i1] et indices[i2]
102) On supprime indices[i2]
103) On renvoie la liste "out"
La fonction qui crée des gamètes :
Ligne par ligne :
42) On définit la fonction
43) On crée une liste "out" vide
44) Pour chaque gène:
45) On ajoute à "out" une des allèles aléatoirement
46) on renvoie la liste "out"
Utilisation :
Il faut lancer le logiciel pyzo (PYZO\pyzo.exe)(1), une fois dans le logiciel on fait FILE(2)>OPEN(3) (Ou Ctrl + O)
Puis on sélectionne le programme (Derivegenetique.py) qui se trouve dans le fichier THOMAS KIENTZ CLEMENT
Une fois lançé il suffit de faire RUN>EXECUTE FILE (ou CTRL + E) pour executer le programme et faire apparaître le menu
Libre a vous maintenant d'essayer les fonctionalités du menu, par exemple :
Le 4) est utilisable seulement si A = 1
Si vous voulez annuler la fixation de la taille de population (pour observer les graphs des menus 1) 2) et 3)), il faut changer :
Faucheuse (Parametre qui équilibre la fonction qui tue) de -100 à 21
A de 1 à 20 (Pour plus de lisibilité)
Portée de 2 à 1
age_mort de 2 Ã 5 pour permettre aux individus de survivre apres reproducction
Pour la sélection naturelle :
Faucheuse de 21 Ã 31
dp(sélectivité de l'environnement) 0 à 1
On peut donc observer des graphiques comme ceux ci :
Pour mieux l'observer, on peut passer en echelle logarithmique :
k

















