Probat et Simulation

Antoine BLANC
Question 0 - Intuition

Je pense que pour une grande population, la population d’arrivé va être différent en fonction de la population de départ. Si la population comporte beaucoup plus de personnes aux yeux marron que de personne aux yeux bleu, la population final auras plus d’œil marron que bleu. Inversement si la population de départ comporte plus de personnes aux yeux bleu.

Pour une petite population, les yeux marrons prendront le dessus sur les yeux bleu car la probabilité d’avoir des yeux marron est plus importante et les variation sur 20 personnes peuvent être rapide.

Si on garde à chaque génération une personne qui a les yeux bleu et une autre les yeux marron, on aura un équilibre entre les yeux bleu et marron.

Code de la simulation
#Initialisation de variable
#MM représente les ceux allèles maron, MB représent une allèle maron et une bleu, BB représente les deux allèles bleu
MM=0; MB=1; BB=2;
#M représente un allèle maron, B représente un allèle bleu
M=0; B=1;
#Cette fonction permet de simuler évolution des yex au fil des âges
simuler = function(){
  
  set.seed(11);
  s = c() #s est un tableau de population a la ieme génération
  
  #lMM et lBB représente les pourcentages des yeux des I les générations et des N testes
  lMM=matrix(nrow=N, ncol=I+1)
  lBB=matrix(nrow=N, ncol=I+1)
  
  #permet de faire N testes
  for(i in 1:N){
    #populationde départ
    population = c(rep(MM,nbMM), rep(MB,nbP-nbBB),rep(BB,nbBB))
    
    s = fonc1(population)
    #Calcul du poucentage d'oeil maron
    for(k in 1:I){lMM[i,k+1] = s[k]/nbP*100}
    
  }
  #Rempli la matrice d'oeil bleu
  for(j in 1:N){
    lMM[j,1]=(nbP-nbBB)/nbP*100
  }
  
  lBB = construirlBB(lMM, lBB)
  
  afficherC(lMM,"brown","Pourcentage d'oeil maron", "Yeux maron")
  afficherC(lBB, "blue", "Pourcentage d'oeil bleu", "Yeux bleu")

}

#Rempli la matrice d'oeil bleu
construirlBB= function(lMM, lBB){
  for(i in 1:N){
    for(j in 0:I+1){lBB[i,j]=(100-lMM[i,j])}
  }
  
  return(lBB)
}

#Affiche les courbes des yeux
afficherC = function(l, color, couleurY, couleur){
  xrange = seq(0,I,1)
    plot(xrange, l[1,], type="l", xlab="génération", ylab=couleurY , ylim = c(0,100), main=couleur)
    for(k in 1:N){
      lines(xrange, l[k,], type="l", lwd=1.5, col=color)
    }
}

#Crée la prochaine génération
fonc1 = function(population){

  generations = c()
  
  
  for(i in 1:I){
    nbBleu=0
    nbMar=0
    
    #Choix des parents
    tabPapa = sample(population, size = nbP,replace= TRUE, prob = NULL)
    tabMaman = sample(population, size = nbP,replace= TRUE, prob = NULL)
    
    #Prochaine générarion
    population = choisirAllele(tabPapa,tabMaman)
    
    #Pour la question 3
    if(QUESTION3){
      population[1]=MM
      population[2]=BB
    }
    
    #Cacul le nombre d'oeil maron
    for(j in 1:nbP){
      if(population[j] != BB ){nbMar= nbMar+1}
    }
    generations[i]=nbMar
    
  }
  
  return (generations)
}

#Crée la prochaine génération en fonction des allèles du père et de la mère
choisirAllele = function(tabPapa, tabMaman){
  newPop = c(1:nbP)
  #Pour totue la population
  for(i in 1:nbP){
    #Choisie l'allèle du père
    if(tabPapa[i]==MM){alleleP=M}
    else if(tabPapa[i]==BB){ alleleP=B}
    else{
      var = runif(1,0,1)
      if(var<0.5){alleleP = M}
      else{alleleP = B}
    }
    
    #Choisie l'allèle de la mère
    if(tabMaman[i]==MM){alleleM=M}
    else if(tabMaman[i]==BB){ alleleM=B}
    else{
      var = runif(1,0,1)
      if(var < 0.5){alleleM = M}
      else{alleleM = B}
    }
    
    #Crée le fils en fonction de l'allèle du père et de la mère
    if(alleleP + alleleM == 0 ){newPop[i]=MM;}
    else if(alleleP + alleleM == 1){newPop[i]=MB}
    else{newPop[i]=BB}
    
  }
  
  return (newPop)
}
Question 1
QUESTION3 = FALSE

#Initialisation de la population et des testes à faire
nbP=20;
I=20;
N=10;

#Test pour nombre de MM=12 et nombre de BB=4
nbMM=12; nbBB=4;
simuler()