Advertisement
Black_Albatros

SAE 4.1 TA3-1 Lyon1

Feb 19th, 2025 (edited)
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 4.82 KB | Source Code | 0 0
  1. #SAE 4.01 TA 1-3 Script à faire vérifier | ZERILLO/ERARD/AMIOT
  2.  
  3.  
  4. #Paramètres
  5. tenv=50 # la taille de l'environnement
  6. pdt=0.05 #  pas de temps qu'il y aura entre chaque générations de cellules
  7. tmax=100 # nombre de boucle maximum
  8. prob_pop1=0.5 # probabilité d'obtenir la pop 1
  9. prob_pop2=0.5 # probabilité d'obtenir la pop 2
  10. prob_rien=0.5 #probabilité d'avoir aucune cellule
  11. # -> Dépendance de l'espèce 2 à l'espèce 1
  12.  
  13. #Création de l'environnement de base
  14. pop1<-matrix(0,ncol = tenv+2,nrow = tenv+2) #E1= première espèce
  15. pop2<-matrix(0,ncol = tenv+2,nrow = tenv+2) #E2= 2e espèce
  16. #Créer les bordures avec le +2
  17.  
  18.  
  19. #Remplissage de l'environnement de manière aléatoire avec les deux espèces
  20. for(i in 2:(tenv+1)){  # on crée une boucle i
  21.   for(j in 2:(tenv+1)){  # on crée une boucle j et on les parcourt pour remplir toutes les cases
  22.     pop1[i,j]=sample(c(0,1),size=1,replace=FALSE, prob=c(prob_rien,prob_pop1))
  23.     pop2[i,j]=sample(c(0,1),size=1,replace=FALSE, prob=c(prob_rien,prob_pop2))
  24.   }#Fin j environement
  25. }#Fin i environement
  26.  
  27.  
  28. pop1#On renvoie à la console l'affichage de notre matrice pop1, équivalent d'un print() en python
  29. pop2#Affichage de notre seconde matrice dans la console
  30.  
  31.  
  32. #Représentation graphique :
  33. par(mar=c(0,0,0,0)) #Permet de zommer sur l'image produite dans "Plots"
  34. par(mfrow=c(1,1)) # fonction qui permet de superposer ou non les matrices, si on avait ecrit par(mfrow=c(1,2)) nous aurions eut 2 matrices cote à cote
  35. col2=rgb(5:0/5,1,1, maxColorValue = 1, alpha=0.7) # création d'un vecteur couleur à partir de la fonction rgb, rgb pour red green blue
  36. #image(pop1, col=c("white","blue"), breaks=c(-0.5,0.5,1.5),axe=F) #Permet de représenter la matrice pop1 dans la fenetre plots avec différents parametre selectionnés
  37. #image(pop2, col=col2,breaks=c(-0.5,0.5,1.5,10.5,100.5,1000.5,10000.5),axe=F, add=TRUE) #Permet de représenter la matrice pop2, add=True permet la superpositions des rendus l'un sur l'autre
  38. ##L'ajout de axe=F (false) aux 2 ligne précedentes (36 et 37) anticipe l'explication qui suit en retirant les axes du rendu graphique, c'est purement esthétique.
  39. ##On pourrait ajouter un titre directement sur le rendu image en remplaçant "par(mar=c(0,0,0,0))" par:
  40. #title_pos <- par("usr")[3] + (par("usr")[4] - par("usr")[3]) * 1.05
  41. #mtext("Simulation interaction bactérienne", side = 3, line = 1, at = mean(par("usr")[1:2]), col = "black", font = 2)
  42. ## Les 2 lignes précedentes permettent de paramétrer un titre centré au dessus du graphique
  43. ##On peut également définir le fond en gris afin d'améliorer la lisibilité avec :
  44. #par(bg="grey")
  45.  
  46.  
  47. #Voisines -> Cette fonction vas nous permettre de calculer le nombre de voisins que possede chaque cellule de coordonnée [i j] dans une zone en 3*3 avec pour centre la cellule cible
  48. Voisines<-function(mat,i,j){
  49.   CmbVoisines=mat[i-1,j-1]+mat[i-1,j]+mat[i-1,j+1]+mat[i,j-1]+mat[i,j+1]+mat[i+1,j-1]+mat[i+1,j]+mat[i+1,j+1]
  50.   return(CmbVoisines)
  51. }#Fermeture de la fonction
  52.  
  53.  
  54. #Représentation de la boucle temporelle
  55. for(t in 0:tmax){
  56.   if(pop1[i,j]==1 & pop2[i,j]==1){ # vérifie que si les deux plateau sont vivant sur la même cellule
  57.     tirage=sample(x=c(1,0),size = 1, replace = FALSE, prob=c(0.75,0.25)) # fais un tirage aléatoire entre 1 et 0 avec la probabilité de tiré 1 qui est égale à Présence_dominante( par defaut égale à 1)
  58.     pop1[i,j]=tirage # attribue à la cellule en i,j de plateau 1 la valeur issu du tirage
  59.     pop2[i,j]=1-tirage # attribue à la cellule en i,j de plateau 2 l'autre valeur issu du tirage
  60.   }#Fin if
  61.   copieavant1=pop1#pour toujours se référer au niveau du nombre de voisines à la même image
  62.   copieavant2=pop2
  63.   for(i in 2:(tenv+1)){  # on crée une boucle i
  64.     for(j in 2:(tenv+1)){  # on crée une boucle j et on les parcourt pour remplir toutes les cases
  65.       VoisinesE1=Voisines(pop1,i,j)
  66.       VoisinesE2=Voisines(pop2,i,j)
  67.       VoisinesE1E2=Voisines(pop2,i,j)+Voisines(pop1,i,j)
  68.       if(pop1[i,j]==1 & VoisinesE1E2>=2 & VoisinesE1E2<=4 & VoisinesE2<=1){ #toutes les conditions d'application pour viabilité
  69.         pop1[i,j]=1
  70.       } else{
  71.         pop1[i,j]=0 #sinon mort
  72.       }#Fin elif
  73.       if(pop2[i,j]==1 & VoisinesE1E2>=2 & VoisinesE1E2<=4 & VoisinesE1<=1){
  74.         pop2[i,j]=1
  75.       } else{
  76.         pop2[i,j]=0
  77.       }#Fin elif
  78.       if(pop1[i,j]==0 & VoisinesE2<=1 & VoisinesE1==3){
  79.         pop1[i,j]=1
  80.       }#Fin if
  81.       if(pop2[i,j]==0 & VoisinesE1<=1 & VoisinesE2==3){
  82.         pop2[i,j]=1
  83.       }#Fin if
  84.     }#Fin boucle j boucle tempo
  85.   }#Fin boucle iboucle tempo
  86.   Sys.sleep(0.05) #définit la vitesse à laquelle s'excecute le programme
  87.   image(pop1,col=c("gold","blue"),  axe=F) # pour afficher à chaque temps l'image associée
  88.   image(pop2,col=col2,axe=F,add=TRUE) # pour afficher à chaque temps l'image associée
  89. }#Fin de la boucle temporelle
  90.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement