Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # TA 4-7 : Modèle spatialisé, deux espèces en compétition avec inhibition
- #Paramètres < > {} [ ]
- taille_env=100 #taille de l'environnement
- conc_B.subtilis= 1
- conc_e.coli=10000
- t_max= 20
- pas_temps=0.1
- taux_accroisE.coli= 0.5
- taux_accroisB.subtilis= 0.5
- limitepop=500
- #E.coli sous forme d'une goutte et pas juste un pixel: rapprocher de la réalité
- centre_e.coli= zones
- taille_goutte_e.coli=5
- qttproduite=1
- distance_max <- 15 # Distance maximale du halo d'inhibition par rapport à la goutte d'E.coli
- #Zone de dépot goutes E.coli
- zones <- list(c(30,35), c(50,70), c(70,35))
- # Initialisation des matrices
- # Créer les matrices vides
- E_coli<- matrix(data=0, ncol=taille_env+2, nrow=taille_env+2)
- B_subtilis <- matrix (data=conc_B.subtilis, ncol=taille_env+2, nrow=taille_env+2)
- inhibitrice <- matrix (data=0, ncol=taille_env+2, nrow=taille_env+2)
- # Remplissage des zones de 5x5 pour E.coli
- for(zone in zones) {
- x0 <- zone[1]
- y0 <- zone[2]
- r <- 2 # Définir le rayon du cercle
- for(x in (x0-r):(x0+r)) {
- for(y in (y0-r):(y0+r)) {
- if((x - x0)^2 + (y - y0)^2 <= r^2) { # Vérifier si le point (x, y) est dans le cercle
- E_coli[x, y] = conc_e.coli
- }
- }
- }
- }
- E_coli
- par(mar=c(2,2,6,2))
- par(mfrow=c(1,1))
- #Créer le phénomène de compétition
- next_n <- function(N1,N2,r,K,dt){ #fonction tirée du TP2
- N1_new = N1+N1*r*(1-(N1+N2)/K)*dt
- return(N1_new)
- }
- coords_voisins <- data.frame(x=c(-1,-1,-1,0,0,+1,+1,+1),
- y=c(-1,0,+1,-1,+1,-1,0,+1))
- #Boucle tempo
- for (t in seq(0,tmax, by=pas_temps)){
- E_coli_past=E_coli
- B_subtilis_past=B_subtilis
- past_inhibitrice=inhibitrice
- for(i in 1: taille_env+1){
- for(j in 1: taille_env+1){
- # E.coli
- e_coli_moyen=next_n(E_coli_past[i,j], B_subtilis_past[i,j],taux_accroisE.coli,limitepop, pas_temps)
- #loi de poisson pour tirer autour de la moyenne
- E_coli[i,j]=rpois(1, e_coli_moyen)
- #B.subtilis
- b_subtilis_moyen=next_n(B_subtilis_past[i,j], E_coli_past[i,j],taux_accroisB.subtilis,limitepop, pas_temps)
- #propagation de la molécule inhibitrice
- B_subtilis[i,j]=rpois(1, b_subtilis_moyen)
- inhibitrice[i,j]=E_coli[i,j]*qttproduite
- }# fin boucle j
- }#fin boucle i
- for(i in 1:taille_env+1){
- for(j in 1:taille_env+1){
- if(past_inhibitrice[i,j]>0){
- # Vérifier la distance par rapport à chaque goutte de E.coli
- within_distance <- FALSE
- for(zone in zones) {
- centre_x <- zone[1]
- centre_y <- zone[2]
- distance <- sqrt((i - centre_x)^2 + (j - centre_y)^2)
- if(distance <= distance_max){
- within_distance <- TRUE
- break
- }
- }
- # Mettre à jour les inhibitrices seulement si elles sont dans la distance maximale
- if(within_distance){
- inhibitrice[i+1,j]=past_inhibitrice[i+1,j]*1/5+past_inhibitrice[i,j]
- inhibitrice[i-1,j]=past_inhibitrice[i-1,j]*1/5+past_inhibitrice[i,j]
- inhibitrice[i,j+1]=past_inhibitrice[i,j+1]*1/5+past_inhibitrice[i,j]
- inhibitrice[i,j-1]=past_inhibitrice[i,j-1]*1/5+past_inhibitrice[i,j]
- inhibitrice[i+1,j+1]=past_inhibitrice[i+1,j+1]*1/5+past_inhibitrice[i,j]
- inhibitrice[i-1,j-1]=past_inhibitrice[i-1,j-1]*1/5+past_inhibitrice[i,j]
- inhibitrice[i+1,j-1]=past_inhibitrice[i+1,j-1]*1/5+past_inhibitrice[i,j]
- inhibitrice[i-1,j+1]=past_inhibitrice[i-1,j+1]*1/5+past_inhibitrice[i,j]
- inhibitrice[i,j]=past_inhibitrice[i,j]*1/5
- }
- }
- }
- }
- E_coli[1,]=0
- E_coli[,1]=0
- E_coli[taille_env+2,]=0
- E_coli[,taille_env+2]=0
- B_subtilis[1,]=0
- B_subtilis[,1]=0
- B_subtilis[taille_env+2,]=0
- B_subtilis[,taille_env+2]=0
- Sys.sleep(0.05)
- vecteur_couleur=c("white","lightgrey",
- "salmon","tomato",
- "red","darkred")
- col1=rgb(5:0/5,1,1, maxColorValue = 1, alpha=0.6)
- col2=rgb(1,1,5:0/5, maxColorValue = 1, alpha=0.6)
- col3=rgb(1,5:0/5,1, maxColorValue = 1, alpha=0.6)
- image(E_coli, col=col1,
- breaks=c(-0.5,0.5,1.5,10.5,100.5,1000.5,10000.5),axe=F)
- image(B_subtilis, col=col2,
- breaks=c(-0.5,0.5,1.5,10.5,100.5,1000.5,10000.5), add=TRUE,axe=F)
- image(inhibitrice, col=col3,
- breaks=c(-0.5,0.5,1.5,10.5,100.5,1000.5,10000.5), add=TRUE,axe=F)
- 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",
- "\nt =", t)) #\n permet de faire un retour à la ligne
- } #fin boucle tempo
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement