Article épinglé

jeudi 16 juillet 2020

Python, biolo et modélisation de la biodiversité

Principe 

Sur une proposition d'une enseignante de biologie
Sur la planète Nestlé habite une population formée de 20 individus : les Smarties. Ces individus diffèrent des Hommes puisqu’ils possèdent dans leur noyau cellulaire un seul chromosome en un unique exemplaire.
Il existe 4 couleurs (caractère héréditaire) de Smarties différents : violet, orange, rouge et jaune. Ceci est dû au gène de la couleur qui existe sous différentes versions : l’allèle violet, l’allèle orange, l’allèle rouge et l’allèle jaune.
Il existe donc, comme dans toute population, une biodiversité génétique (individus génétiquement différents). Un Smarties se reproduit seul et transmet ainsi sa couleur à sa descendance. Lorsque la période de reproduction est passée, les Smarties adultes meurent.

A partir de la règle du jeu ci-dessous, déterminer l’évolution de la fréquence de chaque allèle au cours des 10 premières générations.
Remarque : le jeu s’arrête à la 10ème génération ou quand une couleur représente 100 % de la population.

  • Étape n°1 : Dans la boite fournie, constituer la population de départ : 5 Smarties violets, 5 Smarties orange, 5 Smarties rouges et 5 Smarties jaunes.
  • Étape n°2 : C’est la période de reproduction ! Dans la boîte représentant la population de départ, on prélève les yeux fermés 5 Smarties qui représentent les géniteurs (c'est-à-dire les Smarties qui vont se reproduire seul).
  • Étape n°3 : Pour chaque géniteur, on lance un dé qui modélise le nombre de descendants (entre 1 et 6) à qui il transmet son caractère couleur. On place ensuite un nombre correspondant de Smarties de la même couleur que son géniteur dans une nouvelle boîte.
  • Étape n°4 : C’est la fin de la période de reproduction. Les Smarties adultes meurent (on enlève les Smarties géniteurs) et les descendants forment la « 1ère génération ».

Étapes suivantes : On recommence comme à l’étape n°2 en tirant au sort 5 Smarties dans la population «1ère génération ». Arrivé à l’étape n°4, on obtient ainsi une « 2ème génération ». Et ainsi de suite pour obtenir les générations 3, 4, 5, etc.

Script

# Modele 1
from random import *

# mise en place smarties
couleur = ["violet", "orange", "rouge", "jaune"]
nombre = [5,5,5,5]

# N représente le nombre de générations, vous pouvez modifier la valeur de N en dessous
N=20

for g in range(N):
    print("gen n°",g,couleur[0],"=",nombre[0],couleur[1],"=",nombre[1],couleur[2],"=",nombre[2],couleur[3],"=",nombre[3])
    smarties = []
    for i in range (4):
        for n in range(nombre[i]):
            smarties.append(couleur[i])       

    # tirage generation suivante
    # tirage geniteurs
    geniteurs = sample(smarties, 5)

    # tirage descendance par géniteurs
    nbre_descendants = []
    for i in range (len(geniteurs)):
        nbre_descendants.append(randint(1, 6))

    # creation generation suivante
    smarties = []
    for i in range (len(geniteurs)):
        for n in range(nbre_descendants[i]):
            smarties.append(geniteurs[i])       

    nombre=[]
    for i in range (4):
       nombre.append(smarties.count(couleur[i]))

Exemples de simulation

Simu 1
>>> %Run 'TP smarties 2.py'
gen n° 0 violet = 5 orange = 5 rouge = 5 jaune = 5
gen n° 1 violet = 4 orange = 3 rouge = 1 jaune = 1
gen n° 2 violet = 11 orange = 8 rouge = 0 jaune = 0
gen n° 3 violet = 11 orange = 12 rouge = 0 jaune = 0
gen n° 4 violet = 16 orange = 1 rouge = 0 jaune = 0
gen n° 5 violet = 16 orange = 0 rouge = 0 jaune = 0
gen n° 6 violet = 20 orange = 0 rouge = 0 jaune = 0
gen n° 7 violet = 17 orange = 0 rouge = 0 jaune = 0
gen n° 8 violet = 21 orange = 0 rouge = 0 jaune = 0
gen n° 9 violet = 18 orange = 0 rouge = 0 jaune = 0
gen n° 10 violet = 17 orange = 0 rouge = 0 jaune = 0
gen n° 11 violet = 18 orange = 0 rouge = 0 jaune = 0
gen n° 12 violet = 20 orange = 0 rouge = 0 jaune = 0
gen n° 13 violet = 15 orange = 0 rouge = 0 jaune = 0
gen n° 14 violet = 13 orange = 0 rouge = 0 jaune = 0
gen n° 15 violet = 16 orange = 0 rouge = 0 jaune = 0
gen n° 16 violet = 16 orange = 0 rouge = 0 jaune = 0
gen n° 17 violet = 17 orange = 0 rouge = 0 jaune = 0
gen n° 18 violet = 10 orange = 0 rouge = 0 jaune = 0
gen n° 19 violet = 17 orange = 0 rouge = 0 jaune = 0

Simu 2
>>> %Run 'TP smarties 2.py'
gen n° 19 violet = 0 orange = 11 rouge = 0 jaune = 0

Simu 3
>>> %Run 'TP smarties 2.py'
gen n° 19 violet = 0 orange = 17 rouge = 0 jaune = 0

Simu 4
>>> %Run 'TP smarties 2.py'
gen n° 19 violet = 16 orange = 0 rouge = 0 jaune = 0

Simu 5
>>> %Run 'TP smarties 2.py'
gen n° 19 violet = 0 orange = 14 rouge = 0 jaune = 0

Aucun commentaire:

Enregistrer un commentaire

Tout commentaire nous engage ;)