Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- tenv=15 #On définit ici la taille de l'environement
- pdt=0.1 # On definit sur cette ligne le pas de temps qu'il y aura entre chaque générations de cellules
- tmax=10 #On definit ici le nombre de boucle maximum
- tx_acc1=0.25 # r
- tx_acc2=0.5
- nmax=500 # K
- pdisp=0.05 # Taux de dispersion
- coop12=10 #-> Dépendance de l'espece 1 à l'espece 2
- coop21=10 # -> Dépendance de l'espece 2 à l'espece 1
- pop1=matrix(0,ncol = tenv+2,nrow = tenv+2) #On créer/initialise notre premiere espece de cellules
- pop2=matrix(0,ncol = tenv+2,nrow = tenv+2) #On init' la 2e espece
- #On ajoute 2 cases en plus de l'environment de départ pour créer des bordures
- pop1 #On renvoie a la console l'affichage de notre matrice pop1, équivalent d'un print() en python
- pop2 #Affichage de notre seconde matrice dans la console
- for(i in 2:(tenv+1)){ #on créer une boucle i
- for(j in 2:(tenv+1)){
- #on ecrit "in 2" pour eviter de remplir les bordures
- pop1[i,j]=rpois(n = 1,lambda = 1) #dans la boucle [i,j] définit par notre environement
- pop2[i,j]=rpois(n = 1,lambda = 1)
- } #fin boucle j
- } #fin boucle i
- pop1
- pop2
- #Représentation graphique :
- par(mfrow=c(1,1))
- vecteur_couleur=c("white","skyblue","steelblue1", "deepskyblue", "dodgerblue","darkblue")
- col1=rgb(5:0/5,1,1, maxColorValue = 1, alpha=1)
- col2=rgb(1,1,5:0/5, maxColorValue = 1, alpha=0.5)
- image(pop1, col=col1,
- breaks=c(-0.5,0.5,1.5,10.5,100.5,1000.5,10000.5),axe=F)
- image(pop2, col=col2,
- breaks=c(-0.5,0.5,1.5,10.5,100.5,1000.5,10000.5),add=TRUE)
- par(bg="lightgrey")
- title_pos <- par("usr")[3] + (par("usr")[4] - par("usr")[3]) * 1.05
- mtext("Simulation symbiose bactérienne", side = 3, line = 1, at = mean(par("usr")[1:2]), col = "black", font = 2)
- # Régulation des populations
- next_n <- function(N2,N1,r,K,dt,a){
- N_new2=N1+r*N1*(N2/(a+N2))*(1-(N1+N2)/K)*dt
- return(N_new2)
- }
- next_n(N1=5,r=0.25,K=500,dt=0.1,N2=6,a=10)
- next_n(N1=200,r=0.25,K=500,dt=0.1,N2=12,a=10)
- next_n(N1=495,r=0.25,K=500,dt=0.1,N2=24,a=10)
- # Liste des coordonnées relatives du voisinage
- coo_voisins <- data.frame(x=c(-1,-1,-1,0,0,+1,+1,+1),
- y=c(-1,0,+1,-1,+1,-1,0,+1))
- coo_voisins
- # Boucle tempo :
- for(t in seq(from=0,to=tmax,by=pdt)){
- # Survie
- pop_past1=pop1
- pop_past2=pop2
- for(i in 2:(tenv+1)){
- for(j in 2: (tenv+1)){
- N_new_moyen1=next_n(N1=pop_past1[i,j], N2=pop_past2[i,j], r=tx_acc1,
- K=nmax, dt=pdt, a=coop12) #On definit la taille moyenne de la population grâce à next_n
- 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)
- # ESPÈCE 2
- # Calculer la taille moyenne de la pop avec next_n()
- N_new_moyen2=next_n(N1=pop_past2[i,j], N2=pop_past1[i,j], r=tx_acc2,
- K=nmax, dt=pdt,a=coop21)
- pop2[i,j]=rpois(n=1, lambda=N_new_moyen2)
- }
- }
- # Dispersion spatiale
- pop_past1=pop1
- pop_past2=pop2
- for(i in 2:(tenv+1)){
- for(j in 2:(tenv+1)){
- # ESPÈCE 1
- # Tirage aléatoire du nombre d'individus qui dispersent
- nb_disp=rbinom(1, size=pop_past1[i,j], prob=pdisp*pdt)
- if(nb_disp!=0){
- # On tire aléatoirement le numéro du voisin qui reçoit un dispersant
- coo_disp=sample(x=1:8, size=nb_disp, replace=TRUE)
- for(k in coo_disp){
- pop1[i+coo_voisins[k,1],j+coo_voisins[k,2]]=pop_past1[i+coo_voisins[k,1],j+coo_voisins[k,2]]+1
- } #fin boucle k
- pop1[i,j]=pop_past1[i,j]-nb_disp
- } # fin if
- # ESPÈCE 2
- # Tirage aléatoire du nombre d'individus qui dispersent
- nb_disp=rbinom(1, size=pop_past2[i,j], prob=pdisp*pdt)
- if(nb_disp!=0){
- # On tire aléatoirement le numéro du voisin qui reçoit un dispersant
- 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
- for(k in coo_disp){
- 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
- }
- pop2[i,j]=pop_past2[i,j]-nb_disp #on retire la valeur du nombre de cellules ayant migré
- } # fin if
- }# fin boucle j
- }# fin boucle i
- pop1[1,]=0
- pop1[,1]=0
- pop1[tenv+2,]=0
- pop1[,tenv+2]=0
- pop2[1,]=0
- pop2[,1]=0
- pop2[tenv+2,]=0
- pop2[,tenv+2]=0
- image(pop1, col=col1,
- breaks=c(-0.5,0.5,1.5,10.5,
- 100.5,1000.5,10000.5),axe=F)
- image(pop2, col=col2,
- breaks=c(-0.5,0.5,1.5,10.5,
- 100.5,1000.5,10000.5), add=TRUE)
- par(bg="lightgrey")
- title_pos <- par("usr")[3] + (par("usr")[4] - par("usr")[3]) * 1.05
- mtext("Simulation symbiose bactérienne", side = 3, line = 1, at = mean(par("usr")[1:2]), col = "black", font = 2)
- # segments(par("usr")[1], title_pos, par("usr")[2], title_pos, col = "darkred", lwd = 4) #essai pour souligner le titre
- Sys.sleep(0.1)
- }# fin boucle temporelle
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement