Question 0 :

i) Dans le cas d'une population réduite on remarquera poura probablement remarquer la disparition d'un allèle aussi bien que sa prolifération. Ce phénomène est connu sous le nom de dérive génétique et est plus prononcé dans les populations réduites.

ii) Dans le cas d'une population importante,  l'évolution de la répartition des allèles dépendra de la population de départ.

iii) Le fait de préserver les allèles en ne tirant au hasard que P-2 individu permettra de rendre la répartition plus stable.
# 0 correspond a BB
# 2 correspond a MM
# 1 correspond a MB (ou BM)

une_generation<-function(population,P){
  
  population_suivante= vector("numeric")
  
  for(r in 1:P){
    # Tirage du premier parent
    num_p1 = floor(runif(min=1,max=(P+1),1))
    p1 = population[num_p1]
    num_p2=num_p1
    # Tirage du second parent (on s'assure qu'ils soient differents)
    while(num_p2==num_p1){
      num_p2 = floor(runif(min=1,max=(P+1),1))
    }
    p2 = population[num_p2]
    
    # On en déduit le fils si les deux parents sont BB ou MM
    if((p1==p2) && (p1!=1)){
      population_suivante = c(population_suivante,p1)
    }
    # On tire au sort les allèles du fils si les deux parent sont BM avec:
    # 0.25 la probabilité que l'enfant soit BB
    # 0.25 la probabilité que l'enfant soit MM
    # 0.5 la probabilité que l'enfant soit BM
    if ((p1==p2) && (p1==1)){
      tirage=floor(runif(min=1,max=5,1))
      if(tirage==1){
        population_suivante = c(population_suivante,0)
      }
      if(tirage==4){
        population_suivante = c(population_suivante,2)
      }
      if((tirage==2)||(tirage==3)){
        population_suivante = c(population_suivante,1)
      }
    }
    # Dans le cas ou l'un des parent est BB et l'autre MM
    # L'enfant est automatiquement BM
    if( ((p1==2)&&(p2==0)) || ((p1==0)&&(p2==2)) ){
      population_suivante = c(population_suivante,1)
    }        
    # Dans le cas ou l'un des parent est BB et l'autre BM
    # 0.5 est la probabilité que l'enfant soit BM
    # 0.5 est la probabilité que l'enfoit soit BB
    if( ((p1==1)&&(p2==0)) || ((p2==1)&&(p1==0))){
      if(runif(1)>0.5)
      {
        population_suivante = c(population_suivante,0)
      }
      else
      {
        population_suivante = c(population_suivante,1)
      }
    }
    # Dans le cas ou l'un des parent est MM et l'autre BM
    # 0.5 est la probabilité que l'enfant soit BM
    # 0.5 est la probabilité que l'enfoit soit MM
    if( ((p1==1)&&(p2==2)) || ((p2==1)&&(p1==2))){
      if(runif(1)>0.5)
      {
        population_suivante = c(population_suivante,2)
      }
      else
      {
        population_suivante = c(population_suivante,1)
      }
    }
  }
  return(population_suivante)
}

compter_mm<-function(population,P){
  mm=0
  for(x in 1:P){
    if (population[x]==2) {
      mm=mm+1
    }
  }
  return(mm)
}
compter_bb<-function(population,P){
  bb=0
  for(x in 1:P){
    if (population[x]==0) {
      bb=bb+1
    }
  }
  return(bb)
}


generation<-function(imax,Nbb,Nmm,P,N){
  
  set.seed(6)
  # On remplit la population
  g=c(rep(0,Nbb),rep(1,(P-Nbb-Nmm)),rep(2,Nmm))
  
  plot(c(1,imax), c(0,1), type="n", xlab="Générations",ylab="Proportion" )
  
  for(w in 1:N){
    mm=compter_mm(g,P)/P
    bb=compter_bb(g,P)/P
    
    for(i in 1:imax-1){
      g=une_generation(g,P)
      mm=c(mm,compter_mm(g,P)/P)
      bb=c(bb,compter_bb(g,P)/P)
      
    }
    lines(bb,type="l",col="blue")
    lines(mm,type="l",col="red")
    
  }
}

Question 1 :

Pour P0=(4,12), P0=(12,4) et P0=(5,5) on observe que dans le cas d’une petite population, la tendeance est à la disparition d’un allèle comme on l’a deviné.

Question 2 :

Pour le cas de grandes populations, nous obtenons des résultats stables quel que soient les quantités de départs ce qui est différent du premier et different des resultat attendu.