Question 0 : Intuition

A mon sens, au fil des générations, la proportion de personnes avec les yeux bleus va diminuer progressivement et que quelque soit la configuration initiale, les individus aux yeux marrons vont prendre le pas sur ceux aux yeux bleus.

Question 1 : Cas d’une petite population

Configuration du seed

#seed
set.seed(42)

Initialisation de la population initiale P0

#Expression de la population P0 sous la forme d'un vecteur de valeurs : 
# 0 -> 2 allèles bleus
# 1 -> 1 allèle bleu et un marron
# 2 -> 2 allèles marron
init_p0=function(BB0,MM0,P,preserve){
  P0 = c()
  P0[1:BB0]=0
  P0[(BB0+MM0+1):P]=1
  P0[(BB0+1):(BB0+MM0)]=2 
  
  # si on veut préserver, on remplace le premier par 2 allèles bleus et le 2ème par 2 allèles marrons
  if(preserve){
    P0[1]=0 
    P0[2]=2
  }
  return(P0)
}

Fonction de choix d’un allèle bleu ou marron

# choix_allele = fonction qui choisir un allèle entre bleu et marron
#sortie : 0 -> allèle bleu choisi 
#         2 -> allèle marron choisi
choix_allele = function(){
  return(ifelse(runif(1)<0.5,0,2))
}

Fonction de génération d’un individu enfant à partir de deux individus parents

# genere_enfant = fonction qui donne l'enfant a partir des parents x1 et x2
# entree : x1 => parent 1
#          x2 => parent 2
# sortie: s = somme des valeurs des deux allèles(mère et père)
genere_enfant = function(x1,x2){
  s = 0
  #Si Xi = 0 alors l'individu a 2 allèles bleus => pas besoin d'aléatoire pour choisir un allèle
  #Si Xi = 2 alors l'individu a 2 allèles marrons => pas besoin d'aléatoire pour choisir un allèle
  #Si Xi = 1 alors l'individu a 1 allèle bleu et 1 marron => Choisir l'un des deux aléatoirement
  if(x1 == 1){
    s = s+choix_allele()
  }else{
    s = s + x1
  }
  if(x2 == 1){
    s = s+choix_allele()
  }else{
    s = s + x2
  }
  s = s / 2
  return(s)
}

Fonctions d’affichage

#affiche les 10 courbes de couleurs(1 pour chaque réalisation), représentant l'évolution au cours des 20 générations du rapport BBi/P
affichage_courbes_bbi=function(bb,mm,BBi,Imax,N){
  xrange = seq(1,Imax,1)

  plot(xrange, BBi[[1]]*100, type="l", xlab=" ième génération",
    ylab="Proportion d'individus aux yeux bleus(%)",ylim = c(0,100)) 

  colors = rainbow(N)


  # ajout des courbes dans le plot
  for (i in 2:N) { 
    lines(xrange, BBi[[i]]*100, type="l", lwd=1.5, col=colors[i]) 
  } 

  # ajout titre et sous-titre
  title("Evolution de la proportion du nombre d'individus aux yeux bleus sur 20 générations",sub=paste("Configuration P0 : ",bb,mm,collapse = ","))
  
  
}

#affichage_courbes_mmi affiche les 10 courbes de couleurs(1 pour chaque réalisation), représentant l'évolution au cours des 20 générations du rapport MMi/P
affichage_courbes_mmi=function(bb,mm,MMi,Imax,N){
  xrange = seq(1,Imax,1)

  plot(xrange, MMi[[1]]*100, type="l", xlab=" ième génération",
    ylab="Proportion d'individus aux yeux marrons(%)",ylim = c(0,100)) 

  colors = rainbow(N)

  # ajout lignes
  for (i in 2:N) { 
    lines(xrange, MMi[[i]]*100, type="l", lwd=1.5, col=colors[i]) 
  } 

  # ajout titre et sous-titre
  title("Evolution de la proportion du nombre d'individus aux yeux marrons sur 20 générations",sub=paste("Configuration P0 : ",bb,mm,collapse = ","))
}

Fonction principale de simulation

simulation=function(bb,mm,P0,Imax,P,N,preserve){
    #population[i][j] = j eme personne de la ieme population
  population = list()
  population[[1]] = P0
  
  #vecteur temporaire qui stocke les enfants
  vect = c()
  
  #BBi = vecteur contenant les valeurs BBi/P pour chacune des 10 réalisations
  BBi = list()
  #MMi = vecteur contenant les valeurs MMi/P pour chacune des 10 réalisations
  MMi = list()
  #initialisation des vecteurs
  for(i in 1:10){
    BBi[i] = 1
    MMi[i] = 1
  }
  
  #realisation = vecteur contenant pour chaque realisation, population[Imax]
  realisation = list()
  
  #Pour chaque realisation (jusqu'à N)
  for(i in 1:N){
    for(j in 1:Imax){
      # Pour chaque population (jusqu'à Imax)
      for(k in 1:P){
        #X = une variable aléatoire représentant le tirage de deux individus dans P.
        X = sample(size = 2, x = population[[j]] , replace = T)
        vect[k]=genere_enfant(X[1],X[2])  
      }
      if(preserve){
        vect[k-1]=0
        vect[k]=2
      }
      population[[j+1]] = vect
      BBi[[i]][j] = sum(population[[j]]==0)/P # proportion d'yeux bleus dans la jème population de la ième réalisation
      MMi[[i]][j] = 1 - BBi[[i]][j] # proportion d'yeux marrons dans la jème population de la ième réalisation
    }
    #sauvegarde des populations générées pour chaque réalisation
    realisation[[i]] = population
  }
  affichage_courbes_bbi(bb,mm,BBi,Imax,N)
  affichage_courbes_mmi(bb,mm,MMi,Imax,N)
  
}

Résultats des différentes configurations de départ

#Configuration 1 P0=(BBi,MMi)=(4,12)
simulation(4,12,init_p0(4,12,20,0),20,20,10,0)

Le premier des deux graphiques présentés ci-dessus montre 10 simulations de l’évolution de la proportion d’individus avec les yeux bleus sur 20 générations. Le second représente 10 simulations de l’évolution de la proportion d’individus avec les yeux marrons sur 20 générations. Dans cette configuration, on peut voir que la proportion d’individus aux yeux bleus est et reste globalement faible(- de 20%) au fil des générations. De facto, la proportion d’individus aux yeux marrons est élevé (+ 80%) quelque soit la génération.

#Configuration 2 P0=(BBi,MMi)=(12,4)
simulation(12,4,init_p0(12,4,20,0),20,20,10,0)

Dans cette configuration, (BB = 12 et MM = 4) on remarque que dans la majorité des réalisations, la proportion d’individus aux yeux bleus baisse au fil des générations (7 réalisations sur 10 font baisser cette proportion). A contrario, la proportion d’individus aux yeux marrons augmente progressivement (6 simulations sur 10 terminent à + de 60%)

#Configuration 3 P0=(BBi,MMi)=(5,5)
simulation(5,5,init_p0(5,5,20,0),20,20,10,0)

Dans cette configuration(BB=5 et MM=5), aucune tendance ne se dégage réellement de ces deux graphiques même si on peut dire que la proportion d’individus aux yeux bleus augmente légèrement en moyenne au fil des générations alors que la proportion d’individus aux yeux marrons à tendence à baisser.

Pour conclure, il semblerait que dans le cas d’une petite population, la configuration de départ, c’est-à-dire la constitution de la population initiale, influe sur l’évolution du nombre d’individus aux yeux bleus et aux yeux marrons. Au regard des configurations 1 et 3 où la proportion d’individus aux yeux marrons est élevé, on aurait pu penser que le nombre d’individus aux yeux bleus allait inévitablement baisser au fil des générations. Or il n’en est rien : En effet, dans la configuration 1, certes la proportion d’individus aux yeux bleus est faible mais elle semble évoluer entre 10 et 20%. Dans la configuration 3, il semblerait même que ce rapport augmente globalement. Je pense cependant que le fait que la population soit petite et que le nombre de générations soit faible, ne permet pas de donner de conclusions sur le comportement de ce système.

Question 2 : Cas d’une grande population

#Configuration 1 P0=(BBi,MMi)=(400,1200)
simulation(400,1200,init_p0(400,1200,2000,0),100,2000,10,0)

Sur les graphiques ci-dessus, on peut distinguer plusieurs choses : Tout d’abord, la proportion d’individus aux yeux bleus varie en moyenne autour de 10 %. On remarque une chute rapide de ce rapport dès les premières générations (chute de 20% à 10%). De même au niveau de la proportion d’individus aux yeux marrons, on observe une hausse rapide de 80% à 90% puis cela varie très peu autour de 90% au fil des générations. Enfin, on observe que plus on avance dans les générations plus les courbes “s’écartent” entre elles, comme si elles s’éloignaient de plus en plus d’une valeur moyenne.

#Configuration 2 P0=(BBi,MMi)=(1200,400)
simulation(1200,400,init_p0(1200,400,2000,0),100,2000,10,0)

Cette configuration fait converger les proportions yeux bleus/ marrons vers 50% ce qui confirme au résultat observé dans le cas de la petite population. Encore une fois, on observe que plus on avance dans les générations plus les courbes “s’écartent” de cette valeur qui semble être 50%.

#Configuration 3 P0=(BBi,MMi)=(500,500)
simulation(500,500,init_p0(500,500,2000,0),100,2000,10,0)

Sur cette simulation, on observe que la proportion d’individus aux yeux bleus tourne autour de 25 % et donc 75 % pour les individus aux yeux marrons. Comme pour les configurations précédentes, on peut remarquer que les différentes courbes évoluent autour d’une même valeur mais s’en éloigne de plus en plus au fil des générations.

La configuration de ce système est plus “précise” que la précédente dans la mesure où l’on peut clairement maintenant observer une évolution sur le long terme, avec un grand nombre de personnes. Les résultats sont donc “affinés”, on peut dégager des tendances et des conclusions sur le comportement de ces simulations : Premièrement on observe une relative stabilité dans l’évolution des courbes pour les deux rapports. Chaque graphique montre qu’aucune couleur ne prend l’ascendant sur l’autre. Les courbes semblent tout d’abord converger vers une valeur X puis varient très légèrement autour de cette valeur. Dans tout les scénarios, les courbes s’éloignent de plus en plus de cette valeur au fil des générations, bien que si on trace une courbe de tendance, celle ci semble constante.

Question 3 : Cas d’une population avec préservation

#Configuration 1 P0=(BBi,MMi)=(4,12)
simulation(4,12,init_p0(4,12,20,1),2000,18,10,1)

#Configuration 2 P0=(BBi,MMi)=(12,4)
simulation(12,4,init_p0(12,4,20,1),2000,18,10,1)

#Configuration 3 P0=(BBi,MMi)=(5,5)
simulation(5,5,init_p0(5,5,20,1),2000,18,10,1)

Le fait de rajouter un individu aux allèles bleus et un individu aux allèles marrons et d’augmenter Imax à 2000 modifie radicalement la dynamique du système de la question 1. En effet, on peut dire que le système n’est pas vraiment stable, on ne peut dégager aucune tendance, quel que soit la configuration initiale. Aucune zone n’est plus attractrice qu’une autre.

Conclusion

Les résultats de cette étude ne sont pas conformes à ce que j’avais imaginé au départ. En effet, bien qu’en apparence la probabilité de génerer un enfant aux yeux bleus soit plus faible qu’un enfant aux yeux marrons, dans aucune situation(sauf préservation) les individus aux yeux bleus n’ont disparus des populations. Dans aucune situation les individus aux yeux marrons n’ont “pris le pas” sur les individus aux yeux bleus ce qui est contraire à ce que j’avais imaginé. On peut imaginer partir sur un cas avec une grande population mais avec un Imax faible. Pour modifier le modèle, on pourrait se “calquer” sur la réalité : Tout d’abord, lorsqu’on choisit deux individus il faudrait vérifier qu’ils soient bien différents ce qui n’est pas le cas dans ce modèle(pas de remise entre deux tirages => On ne peut pas concevoir un enfant avec soi-même). Ensuite, on pourrait définir au hasard pour chaque individu s’il est de sexe masculin ou feminin et d’empêcher la création d’un enfant à partir de deux parents de même sexe. Enfin il faudrait, comme c’est le cas dans la réalité que le nombre de personnes dans la génération i ne soit pas forcément le même que dans la génération i+1.