Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #SAE 4.01 TA 1-3 Script à faire vérifier | ZERILLO/ERARD/AMIOT
- #Paramètres
- tenv=50 # la taille de l'environnement
- pdt=0.05 # pas de temps qu'il y aura entre chaque générations de cellules
- tmax=100 # nombre de boucle maximum
- prob_pop1=0.5 # probabilité d'obtenir la pop 1
- prob_pop2=0.5 # probabilité d'obtenir la pop 2
- prob_rien=0.5 #probabilité d'avoir aucune cellule
- # -> Dépendance de l'espèce 2 à l'espèce 1
- #Création de l'environnement de base
- pop1<-matrix(0,ncol = tenv+2,nrow = tenv+2) #E1= première espèce
- pop2<-matrix(0,ncol = tenv+2,nrow = tenv+2) #E2= 2e espèce
- #Créer les bordures avec le +2
- #Remplissage de l'environnement de manière aléatoire avec les deux espèces
- for(i in 2:(tenv+1)){ # on crée une boucle i
- for(j in 2:(tenv+1)){ # on crée une boucle j et on les parcourt pour remplir toutes les cases
- pop1[i,j]=sample(c(0,1),size=1,replace=FALSE, prob=c(prob_rien,prob_pop1))
- pop2[i,j]=sample(c(0,1),size=1,replace=FALSE, prob=c(prob_rien,prob_pop2))
- }#Fin j environement
- }#Fin i environement
- pop1#On renvoie à la console l'affichage de notre matrice pop1, équivalent d'un print() en python
- pop2#Affichage de notre seconde matrice dans la console
- #Représentation graphique :
- par(mar=c(0,0,0,0)) #Permet de zommer sur l'image produite dans "Plots"
- 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
- 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
- #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
- #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
- ##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.
- ##On pourrait ajouter un titre directement sur le rendu image en remplaçant "par(mar=c(0,0,0,0))" par:
- #title_pos <- par("usr")[3] + (par("usr")[4] - par("usr")[3]) * 1.05
- #mtext("Simulation interaction bactérienne", side = 3, line = 1, at = mean(par("usr")[1:2]), col = "black", font = 2)
- ## Les 2 lignes précedentes permettent de paramétrer un titre centré au dessus du graphique
- ##On peut également définir le fond en gris afin d'améliorer la lisibilité avec :
- #par(bg="grey")
- #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
- Voisines<-function(mat,i,j){
- 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]
- return(CmbVoisines)
- }#Fermeture de la fonction
- #Représentation de la boucle temporelle
- for(t in 0:tmax){
- if(pop1[i,j]==1 & pop2[i,j]==1){ # vérifie que si les deux plateau sont vivant sur la même cellule
- 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)
- pop1[i,j]=tirage # attribue à la cellule en i,j de plateau 1 la valeur issu du tirage
- pop2[i,j]=1-tirage # attribue à la cellule en i,j de plateau 2 l'autre valeur issu du tirage
- }#Fin if
- copieavant1=pop1#pour toujours se référer au niveau du nombre de voisines à la même image
- copieavant2=pop2
- for(i in 2:(tenv+1)){ # on crée une boucle i
- for(j in 2:(tenv+1)){ # on crée une boucle j et on les parcourt pour remplir toutes les cases
- VoisinesE1=Voisines(pop1,i,j)
- VoisinesE2=Voisines(pop2,i,j)
- VoisinesE1E2=Voisines(pop2,i,j)+Voisines(pop1,i,j)
- if(pop1[i,j]==1 & VoisinesE1E2>=2 & VoisinesE1E2<=4 & VoisinesE2<=1){ #toutes les conditions d'application pour viabilité
- pop1[i,j]=1
- } else{
- pop1[i,j]=0 #sinon mort
- }#Fin elif
- if(pop2[i,j]==1 & VoisinesE1E2>=2 & VoisinesE1E2<=4 & VoisinesE1<=1){
- pop2[i,j]=1
- } else{
- pop2[i,j]=0
- }#Fin elif
- if(pop1[i,j]==0 & VoisinesE2<=1 & VoisinesE1==3){
- pop1[i,j]=1
- }#Fin if
- if(pop2[i,j]==0 & VoisinesE1<=1 & VoisinesE2==3){
- pop2[i,j]=1
- }#Fin if
- }#Fin boucle j boucle tempo
- }#Fin boucle iboucle tempo
- Sys.sleep(0.05) #définit la vitesse à laquelle s'excecute le programme
- image(pop1,col=c("gold","blue"), axe=F) # pour afficher à chaque temps l'image associée
- image(pop2,col=col2,axe=F,add=TRUE) # pour afficher à chaque temps l'image associée
- }#Fin de la boucle temporelle
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement