L’attaque des zombies

L’attaque des zombies

Je me souviens qu’en cours d’épidémiologie on avait toujours le droit à  des modèles chiant en compartiments avec leur lot d’équations différentielles et jamais le droit de s’amuser avec des modèles graphiques type automates cellulaires qui pourtant avaient l’air trop cool.

Du coup j’ai essayé sur R pour voir. Le code est surement pas optimal. C’est du trafic (je maitrise mal les matrices) mais du trafic qui fonctionne et surtout je ne voulais pas piquer un code déjà fait. Les règles ? Ils s’agit d’une attaque de zombie qui contaminent les individus adjacents. L’avantage des zombies c’est qu’ils me simplifient grandement la tâche parce qu’il n’y a pas de rémission possible. Alors voyons voir…

library(animation)

#Fonction sur les cells adjacentes
contamine <- function (x, k, where, proba.conta){
k.c <- k + where
k.c <- k.c[k.c <= length(x) & k.c > 0]
k.c <- k.c[which(x[k.c]==0)]
vec.c <- rbinom(length(k.c), 1, proba.conta)
x[k.c] <- vec.c
return (x)
}

#On initialise
grid.n = 10000
grid.ncol = 100
proba.conta = 0.2
x <- matrix(rbinom(grid.n, 1, 0.001), ncol=grid.ncol, byrow=T)

#On fait tourner et on sauve
ani.options(ani.height = 400, ani.width = 400, outdir = getwd(),
nmax = 100, interval = 0.30)
saveGIF(
{for(i in 1:100){
k <- which(x==1)
x <- contamine(x, k, where=1, proba.conta)
x <- contamine(x, k, where=-1, proba.conta)
x <- contamine(x, k, where=grid.ncol, proba.conta)
x <- contamine(x, k, where=-grid.ncol, proba.conta)
if(sum(x)==grid.n){image(x, col="black")}
else{image (x, col=c("white", "black"))}}
}, title="zombies")

Ce qui nous donne :

Facebooktwitter

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *