Advertisement
Black_Albatros

Version refaite

Feb 13th, 2025
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 5.07 KB | None | 0 0
  1. tenv=15 #On définit ici la taille de l'environement
  2. pdt=0.1 # On definit sur cette ligne le pas de temps qu'il y aura entre chaque générations de cellules
  3. tmax=10 #On definit ici le nombre de boucle maximum
  4. tx_acc1=0.25 # r
  5. tx_acc2=0.5
  6. nmax=500 # K
  7. pdisp=0.05 # Taux de dispersion
  8. coop12=10  #-> Dépendance de l'espece 1 à l'espece 2
  9. coop21=10  # -> Dépendance de l'espece 2 à l'espece 1
  10.  
  11.  
  12. pop1=matrix(0,ncol = tenv+2,nrow = tenv+2) #On créer/initialise notre premiere espece de cellules
  13. pop2=matrix(0,ncol = tenv+2,nrow = tenv+2) #On init' la 2e espece
  14. #On ajoute 2 cases en plus de l'environment de départ pour créer des bordures
  15. pop1 #On renvoie a la console l'affichage de notre matrice pop1, équivalent d'un print() en python
  16. pop2 #Affichage de notre seconde matrice dans la console
  17.  
  18.  
  19. for(i in 2:(tenv+1)){  #on créer une boucle i
  20.   for(j in 2:(tenv+1)){
  21. #on ecrit "in 2" pour eviter de remplir les bordures
  22.     pop1[i,j]=rpois(n = 1,lambda = 1) #dans la boucle [i,j] définit par notre environement
  23.     pop2[i,j]=rpois(n = 1,lambda = 1)
  24.   } #fin boucle j
  25. } #fin boucle i
  26. pop1
  27. pop2
  28.  
  29. #Représentation graphique :
  30. par(mfrow=c(1,1))
  31. vecteur_couleur=c("white","skyblue","steelblue1", "deepskyblue", "dodgerblue","darkblue")
  32. col1=rgb(5:0/5,1,1, maxColorValue = 1, alpha=1)
  33. col2=rgb(1,1,5:0/5, maxColorValue = 1, alpha=0.5)
  34. image(pop1, col=col1,
  35.       breaks=c(-0.5,0.5,1.5,10.5,100.5,1000.5,10000.5),axe=F)
  36. image(pop2, col=col2,
  37.       breaks=c(-0.5,0.5,1.5,10.5,100.5,1000.5,10000.5),add=TRUE)
  38. par(bg="lightgrey")
  39. title_pos <- par("usr")[3] + (par("usr")[4] - par("usr")[3]) * 1.05
  40. mtext("Simulation symbiose bactérienne", side = 3, line = 1, at = mean(par("usr")[1:2]), col = "black", font = 2)
  41. # Régulation des populations
  42. next_n <- function(N2,N1,r,K,dt,a){
  43.   N_new2=N1+r*N1*(N2/(a+N2))*(1-(N1+N2)/K)*dt
  44.   return(N_new2)
  45. }
  46. next_n(N1=5,r=0.25,K=500,dt=0.1,N2=6,a=10)
  47. next_n(N1=200,r=0.25,K=500,dt=0.1,N2=12,a=10)
  48. next_n(N1=495,r=0.25,K=500,dt=0.1,N2=24,a=10)
  49.  
  50.  
  51. # Liste des coordonnées relatives du voisinage
  52. coo_voisins <- data.frame(x=c(-1,-1,-1,0,0,+1,+1,+1),
  53.                              y=c(-1,0,+1,-1,+1,-1,0,+1))
  54. coo_voisins
  55.  
  56.  
  57. # Boucle tempo :
  58. for(t in seq(from=0,to=tmax,by=pdt)){
  59.  
  60.   # Survie
  61.   pop_past1=pop1
  62.   pop_past2=pop2
  63.  
  64.   for(i in 2:(tenv+1)){
  65.     for(j in 2: (tenv+1)){
  66.      
  67.       N_new_moyen1=next_n(N1=pop_past1[i,j], N2=pop_past2[i,j], r=tx_acc1,
  68.                           K=nmax, dt=pdt, a=coop12) #On definit la taille moyenne de la population grâce à next_n
  69.       pop1[i,j]=rpois(n=1, lambda=N_new_moyen1)# On réalise un tirage aléatoire autour de cette moyenne (avec une loi de Poisson)
  70.      
  71.      
  72.       # ESPÈCE 2
  73.       # Calculer la taille moyenne de la pop avec next_n()
  74.       N_new_moyen2=next_n(N1=pop_past2[i,j], N2=pop_past1[i,j], r=tx_acc2,
  75.                           K=nmax, dt=pdt,a=coop21)
  76.       pop2[i,j]=rpois(n=1, lambda=N_new_moyen2)
  77.     }
  78.   }
  79.   # Dispersion spatiale
  80.   pop_past1=pop1
  81.   pop_past2=pop2
  82.   for(i in 2:(tenv+1)){
  83.     for(j in 2:(tenv+1)){
  84.       # ESPÈCE 1
  85.       # Tirage aléatoire du nombre d'individus qui dispersent
  86.       nb_disp=rbinom(1, size=pop_past1[i,j], prob=pdisp*pdt)
  87.      
  88.       if(nb_disp!=0){
  89.         # On tire aléatoirement le numéro du voisin qui reçoit un dispersant
  90.         coo_disp=sample(x=1:8, size=nb_disp, replace=TRUE)
  91.        
  92.         for(k in coo_disp){
  93.           pop1[i+coo_voisins[k,1],j+coo_voisins[k,2]]=pop_past1[i+coo_voisins[k,1],j+coo_voisins[k,2]]+1
  94.         } #fin boucle k
  95.         pop1[i,j]=pop_past1[i,j]-nb_disp
  96.       } # fin if
  97.      
  98.       # ESPÈCE 2
  99.       # Tirage aléatoire du nombre d'individus qui dispersent
  100.       nb_disp=rbinom(1, size=pop_past2[i,j], prob=pdisp*pdt)
  101.      
  102.       if(nb_disp!=0){
  103.         # On tire aléatoirement le numéro du voisin qui reçoit un dispersant
  104.         coo_disp=sample(x=1:8, size=nb_disp, replace=TRUE) #on choisit de faire migrer 1 à 8 celle=ules dans les coordonnés voisins
  105.        
  106.         for(k in coo_disp){
  107.           pop2[i+coo_voisins[k,1],j+coo_voisins[k,2]]=pop_past2[i+coo_voisins[k,1],j+coo_voisins[k,2]]+1 #On augmente de 1 la taille de la case dans laquelle se disperse la pop
  108.         }
  109.         pop2[i,j]=pop_past2[i,j]-nb_disp #on retire la valeur du nombre de cellules ayant migré
  110.       } # fin if
  111.      
  112.     }# fin boucle j
  113.   }# fin boucle i
  114.  
  115.   pop1[1,]=0
  116.   pop1[,1]=0
  117.   pop1[tenv+2,]=0
  118.   pop1[,tenv+2]=0
  119.   pop2[1,]=0
  120.   pop2[,1]=0
  121.   pop2[tenv+2,]=0
  122.   pop2[,tenv+2]=0
  123.  
  124.   image(pop1, col=col1,
  125.         breaks=c(-0.5,0.5,1.5,10.5,
  126.                  100.5,1000.5,10000.5),axe=F)
  127.   image(pop2, col=col2,
  128.         breaks=c(-0.5,0.5,1.5,10.5,
  129.                  100.5,1000.5,10000.5), add=TRUE)
  130.   par(bg="lightgrey")
  131.   title_pos <- par("usr")[3] + (par("usr")[4] - par("usr")[3]) * 1.05
  132.   mtext("Simulation symbiose bactérienne", side = 3, line = 1, at = mean(par("usr")[1:2]), col = "black", font = 2)
  133.   # segments(par("usr")[1], title_pos, par("usr")[2], title_pos, col = "darkred", lwd = 4) #essai pour souligner le titre
  134.  
  135.   Sys.sleep(0.1)
  136. }# fin boucle temporelle
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement