Advertisement
Black_Albatros

SAE 4.1 TA 4-7 Lyon1

Feb 19th, 2025 (edited)
1,228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 4.67 KB | Source Code | 0 0
  1. # TA 4-7 : Modèle spatialisé, deux espèces en compétition avec inhibition
  2.  
  3. #Paramètres < > {} [ ]
  4. taille_env=100 #taille de l'environnement
  5. conc_B.subtilis= 1
  6. conc_e.coli=10000
  7. t_max= 20
  8. pas_temps=0.1
  9. taux_accroisE.coli= 0.5
  10. taux_accroisB.subtilis= 0.5
  11. limitepop=500
  12. #E.coli sous forme d'une goutte et pas juste un pixel: rapprocher de la réalité
  13. centre_e.coli= zones
  14. taille_goutte_e.coli=5
  15. qttproduite=1
  16. distance_max <- 15  # Distance maximale du halo d'inhibition par rapport à la goutte d'E.coli
  17.  
  18. #Zone de dépot goutes E.coli
  19. zones <- list(c(30,35), c(50,70), c(70,35))
  20.  
  21.  
  22. # Initialisation des matrices
  23. # Créer les matrices vides
  24. E_coli<- matrix(data=0, ncol=taille_env+2, nrow=taille_env+2)
  25. B_subtilis <-  matrix (data=conc_B.subtilis, ncol=taille_env+2, nrow=taille_env+2)
  26. inhibitrice <-  matrix (data=0, ncol=taille_env+2, nrow=taille_env+2)
  27.  
  28. # Remplissage des zones de 5x5 pour E.coli
  29. for(zone in zones) {
  30.   x0 <- zone[1]
  31.   y0 <- zone[2]
  32.   r <- 2  # Définir le rayon du cercle
  33.   for(x in (x0-r):(x0+r)) {
  34.     for(y in (y0-r):(y0+r)) {
  35.       if((x - x0)^2 + (y - y0)^2 <= r^2) {  # Vérifier si le point (x, y) est dans le cercle
  36.         E_coli[x, y] = conc_e.coli
  37.       }
  38.     }
  39.   }
  40. }
  41. E_coli
  42.  
  43.  
  44. par(mar=c(2,2,6,2))
  45. par(mfrow=c(1,1))
  46.  
  47. #Créer le phénomène de compétition
  48.  
  49. next_n <- function(N1,N2,r,K,dt){ #fonction tirée du TP2
  50.   N1_new = N1+N1*r*(1-(N1+N2)/K)*dt
  51.   return(N1_new)
  52. }
  53. coords_voisins <- data.frame(x=c(-1,-1,-1,0,0,+1,+1,+1),
  54.                              y=c(-1,0,+1,-1,+1,-1,0,+1))
  55.  
  56.  
  57. #Boucle tempo
  58. for (t in seq(0,tmax, by=pas_temps)){
  59.   E_coli_past=E_coli
  60.   B_subtilis_past=B_subtilis
  61.   past_inhibitrice=inhibitrice
  62.   for(i in 1: taille_env+1){
  63.     for(j in 1: taille_env+1){
  64.       # E.coli
  65.       e_coli_moyen=next_n(E_coli_past[i,j], B_subtilis_past[i,j],taux_accroisE.coli,limitepop, pas_temps)
  66.       #loi de poisson pour tirer autour de la moyenne
  67.       E_coli[i,j]=rpois(1, e_coli_moyen)
  68.       #B.subtilis
  69.       b_subtilis_moyen=next_n(B_subtilis_past[i,j], E_coli_past[i,j],taux_accroisB.subtilis,limitepop, pas_temps)
  70.       #propagation de la molécule inhibitrice
  71.       B_subtilis[i,j]=rpois(1, b_subtilis_moyen)
  72.       inhibitrice[i,j]=E_coli[i,j]*qttproduite
  73.      
  74.      
  75.     }# fin boucle j
  76.   }#fin boucle i
  77.   for(i in 1:taille_env+1){
  78.     for(j in 1:taille_env+1){
  79.       if(past_inhibitrice[i,j]>0){
  80.         # Vérifier la distance par rapport à chaque goutte de E.coli
  81.         within_distance <- FALSE
  82.         for(zone in zones) {
  83.           centre_x <- zone[1]
  84.           centre_y <- zone[2]
  85.           distance <- sqrt((i - centre_x)^2 + (j - centre_y)^2)
  86.           if(distance <= distance_max){
  87.             within_distance <- TRUE
  88.             break
  89.           }
  90.         }
  91.        
  92.         # Mettre à jour les inhibitrices seulement si elles sont dans la distance maximale
  93.         if(within_distance){
  94.           inhibitrice[i+1,j]=past_inhibitrice[i+1,j]*1/5+past_inhibitrice[i,j]
  95.           inhibitrice[i-1,j]=past_inhibitrice[i-1,j]*1/5+past_inhibitrice[i,j]
  96.           inhibitrice[i,j+1]=past_inhibitrice[i,j+1]*1/5+past_inhibitrice[i,j]
  97.           inhibitrice[i,j-1]=past_inhibitrice[i,j-1]*1/5+past_inhibitrice[i,j]
  98.          
  99.           inhibitrice[i+1,j+1]=past_inhibitrice[i+1,j+1]*1/5+past_inhibitrice[i,j]
  100.           inhibitrice[i-1,j-1]=past_inhibitrice[i-1,j-1]*1/5+past_inhibitrice[i,j]
  101.           inhibitrice[i+1,j-1]=past_inhibitrice[i+1,j-1]*1/5+past_inhibitrice[i,j]
  102.           inhibitrice[i-1,j+1]=past_inhibitrice[i-1,j+1]*1/5+past_inhibitrice[i,j]
  103.          
  104.           inhibitrice[i,j]=past_inhibitrice[i,j]*1/5
  105.         }
  106.       }
  107.     }
  108.   }
  109.  
  110.   E_coli[1,]=0
  111.   E_coli[,1]=0
  112.   E_coli[taille_env+2,]=0
  113.   E_coli[,taille_env+2]=0
  114.   B_subtilis[1,]=0
  115.   B_subtilis[,1]=0
  116.   B_subtilis[taille_env+2,]=0
  117.   B_subtilis[,taille_env+2]=0
  118.  
  119.   Sys.sleep(0.05)
  120.  
  121.   vecteur_couleur=c("white","lightgrey",
  122.                     "salmon","tomato",
  123.                     "red","darkred")
  124.   col1=rgb(5:0/5,1,1, maxColorValue = 1, alpha=0.6)
  125.   col2=rgb(1,1,5:0/5, maxColorValue = 1, alpha=0.6)
  126.   col3=rgb(1,5:0/5,1, maxColorValue = 1, alpha=0.6)
  127.  
  128.   image(E_coli, col=col1,
  129.         breaks=c(-0.5,0.5,1.5,10.5,100.5,1000.5,10000.5),axe=F)
  130.   image(B_subtilis, col=col2,
  131.         breaks=c(-0.5,0.5,1.5,10.5,100.5,1000.5,10000.5), add=TRUE,axe=F)
  132.   image(inhibitrice, col=col3,
  133.         breaks=c(-0.5,0.5,1.5,10.5,100.5,1000.5,10000.5), add=TRUE,axe=F)
  134.  
  135.   title(main=paste("Representation de l'evolution matricielle de l'interaction de  \ncompétition entre 2 especes B.subtilis et E.coli \nau cours du temps",
  136.                    "\nt =", t)) #\n permet de faire un retour à la ligne    
  137.  
  138. } #fin boucle tempo
  139.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement