Question 0 : Décrire votre intuition

Je pense que d’après ce modèle, la proportion d’individus ayant les yeux bleus devrait diminuer au fur et à mesure des générations. En effet, il faut forcément deux allèles bleus pour qu’un individu ait les yeux bleus.

Question 1 : Cas d’une petite population

# Génère le vecteur de P individus à partir de Pi=(BBi,MMi)
coupleToVector = function(P, Pi) {
  V = c(replicate(Pi[1], 'BB'), replicate(Pi[2], 'MM'), replicate(P - sum(Pi), 'BM'))
  returnValue(V)
}

# Génère le couple Pi=(BBi,MMi) à partir d'un vecteur d'individus
vectorToCouple = function(V) {
  Pi = c(0, 0)
  for (i in V) {
    if (i == 'BB') {
      Pi[1] = Pi[1] + 1
    } else if (i == 'MM') {
      Pi[2] = Pi[2] + 1
    }
  }
  returnValue(Pi)
}

# Génère une matrice représentant pour chaque ligne i la population Pi-1
generation = function(P, Imax, BB0, MM0, preservation) {
  P0 = c(BB0, MM0)
  Pi = P0
  resultat = matrix(Pi, ncol = 2) # Matrice où l'on va stocker les résultats
  
  realP = P
  if (preservation) {
    P = P-2
  }
  
  for (i in 1:Imax) {
    population = coupleToVector(realP, Pi) # On passe la population i-1 sous la forme d'un vecteur représentant les P individus
    newpopulation = c()
    for (j in 1:P) { # Génération des P individus de la population i
      population = sample(population) # On mélange la population
      parent = c(population[1], population[2]) # Et on prend les 2 premiers individus en tant que parents
      allele = c()
      for (k in 1:2) { # On détermine les allèles du fils
        if (parent[k] == 'BB') {
          allele[k] = 'B'
        } else if (parent[k] == 'MM') {
          allele[k] = 'M'
        } else {
          allele[k] = sample(c('B', 'M'), size = 1, prob = c(0.5, 0.5))
        }
      }
      newpopulation[j] = paste(allele, collapse = '') # Et on l'insère dans la population i
    }
    if (preservation) {
      newpopulation = c(newpopulation, 'BB', 'MM')
    }
    Pi = vectorToCouple(newpopulation) # On repasse à la forme (BBi, MMi)
    resultat = rbind(resultat, Pi, deparse.level = 0) # Et on insère dans la matrice
  }
  returnValue(resultat)
}

# Affiche dans des graphiques l'évolution de BBi/P et MMi/P
graphique = function(P, Imax, N, BB0, MM0, preservation = FALSE) {
  BBP = matrix(, nrow = 0, ncol = Imax+1)
  MMP = matrix(, nrow = 0, ncol = Imax+1)
  for (i in 1:N) { # Réalisation des N trajectoires
    donnees = generation(P, Imax, BB0, MM0, preservation) # Génération des données
    BBP = rbind(BBP, donnees[,1]/P, deparse.level = 0) # On ajoute dans la matrice BBP les BBi/P
    MMP = rbind(MMP, donnees[,2]/P, deparse.level = 0) # On ajoute dans la matrice MMP les MMi/P
  }
  # Affichage des graphiques
  par(mfrow = c(1, 2), oma = c(0,0,2,0))
  matplot(t(BBP), type="l", xlab="i", ylab="BBi/Pi", ylim=c(0, 1))
  matplot(t(MMP), type="l", xlab="i", ylab="MMi/Pi", ylim=c(0, 1))
  title(paste('P0 = (', BB0, ', ', MM0, ')'), outer = TRUE)
}

set.seed(80) # On fixe la valeur de la graine
graphique(20, 20, 10, 4, 12)

graphique(20, 20, 10, 12, 4)

graphique(20, 20, 10, 5, 5)

Pour chaque population P0 initiale, on observe l’évolution des rapports BBi/Pi et MMi/Pi, en faisant 10 simulations. On montre ces résultats avec 10 courbes.

On peut observer que sur une petite population, on a des résultats qui sont très variés, on ne peut donc pas tirer de conclusions. Cependant, on note que les rapports BBi/Pi et MMi/Pi ont tendance à rapidement s’approcher soit de 0%, soit de 100%, et ensuite y rester. Ce qui veut dire que sur une petite population, on pourrait voir une catégorie (les individus aux yeux bleux ou ceux aux yeux marrons) disparaitre rapidement.

Question 2 : Cas d’une grande population

graphique(2000, 100, 3, 400, 1200)

graphique(2000, 100, 3, 1200, 400)

graphique(2000, 100, 3, 500, 500)

Ici, on fait 3 simulations pour chaque population initiale P0 car c’est suffisant pour observer une tendance générale.

On voit que les rapports BBi/Pi et MMi/Pi restent plutôt stables au fur et à mesure des générations, quel que soit le rapport de départ.

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

graphique(20, 2000, 3, 4, 12, TRUE)

graphique(20, 2000, 3, 12, 4, TRUE)

graphique(20, 2000, 3, 5, 5, TRUE)