Automates Cellulaires : Jeu de la Vie
November 13, 2010
Laurent Orseau <laurent orseau@agroparistech fr>
Antoine Cornuéjols <antoine@lri fr>
1 Introduction
Le grand public se fait souvent une idée bien réductrice des ordinateurs. Il ne s’agit pas
uniquement de machines permettant de jouer, faire ses comptes et écrire des emails.
C’est beaucoup plus que cela. L’informatique est reliée à la physique et aux mathéma-
tiques à un niveau fondamental.
La Nature et la Vie étaient elles-mêmes reliées à ces deux sciences à un niveau
fondamental (elles se basent uniquement sur des processsus physiques, qui sont sujets
à des lois physico-mathématiques), les liens existants entre Nature, Vie et Informatique
sont beaucoup plus forts qu’on ne pourrait le penser a priori.
Certains scientifiques estiment même sérieusement que le monde physique n’est
qu’un gigantesque ordinateur. Pour reprendre une métaphore cinématographique, en
quelques sortes, "nous sommes tous dans la matrice", à la différence près qu’il n’y a
pas nécessairement un autre monde en dehors de la matrice.
Il ne s’agirait cependant pas d’un ordinateur strictement identique à ceux que nous
connaissont. Nous allons voir un modèle d’ordinateur particulier, appelé Automate
Cellulaire, qui serait plus proche de ces considérations.
1.1 Automates Cellulaires
Un Automate Cellulaire (AC) est un monde virtuel composé de "cellules", qui possè-
dent un état (représenté généralement par un seul et unique nombre) et qui ne peuvent
"communiquer" qu’avec leurs cellules directement voisines. Cette communication se
concrétise par un changement d’état : chaque cellule change d’état en fonction de l’état
de ses voisines.
1
Cette modélisation est très similaire au monde physique, où toutes les lois sont
locales, et les actions à grande échelle sont dues à une multitude de modification locales
des états.
John Von Neumann (1903-1957), un mathématicien de génie, a démontré très tôt
que ce type de modèle était capable de supporter la vie. Néanmoins, son modèle est
beaucoup trop complexe pour ce cours, aussi nous allons nous intéresser à des AC plus
simples.
Les AC les plus courant possèdent 2 dimensions spatiales, comme ceux que nous
allons voir, mais ils peuvent en avoir un nombre quelconque (comme 1 ou 3).
Le triangle de Sierpinski est un AC de dimension 1, et son évolution au fil du temps
donne (en 2 dimensions donc) :
Voici des coquillages sur lesquels on voit ce même triangle (déformé par du bruit) :
Il n’y a en fait rien d’étonnant à cela, car le processus de pigmentation de la coquille
est très similaire (voire identique) à un automate cellulaire simple. Le processus de
création de la coquille est lui aussi un AC, mais en 3 dimensions et plus complexe.
2
2 Le Jeu de la Vie
Un type d’AC très particulier a été inventé par John H. Conway (1937-), qu’il a nommé
"Le Jeu de la Vie", non pas parce qu’il est capable de simuler des cellules vivantes et
les processus génétiques qui en découlent, mais parce que les interactions cellulaires
qui en découlent deviennent très vite extrêmement complexes malgré la simplicité (la
trivialité !) des règles locales de communication. A tel point que lorsqu’on examine le
système de plus près, on peut se poser légitimement la question de la vie dans un tel
système.
Le jeu se présente ainsi. Chaque cellule a 8 voisins directs, et possède 2 états
possibles : elle est soit vivante soit morte (représentés par 1 et 0).
À chaque instant, l’état de la cellule est modifiée selon les règles suivantes :
Si une cellule vivante a moins de 2 voisins, elle meurt (de solitude).
Si une cellule vivante et a plus de 3 voisins, elle meurt (de surpopulation).
Si une cellule vide (morte) a exactement 3 voisins, elle naît (par reproduction).
Si une cellule vivante ou vide a exactement 2 voisins, elle reste dans le même
état.
2.1 Affichage graphique
Commençons par créer l’affichage graphique. La procédure est très similaire à celle
des Termites. Il nous faut une fenêtre graphique à laquelle est associée une matrice de
cases.
Ouvrez le fichier . Créez-y un monde en grille :
Il y a plus de paramètres que la dernière fois. Les deux premiers paramètres sont le
nombre de cases en x et y. Les deux suivants sont la largeur graphique des cases en x et
y. Les deux derniers sont l’espace entre les cases. Vous pouvez bien entendu modifier
ces valeurs à votre convenance.
Créez ensuite une imagette correspondant à une case vivante :
Créez la fonction d’affichage de la matrice :
Et enfin dites au monde d’utiliser cette fonction pour l’affichage :
Récupérez la matrice sous-jacente au monde :
Mettez-y une cellule vivante :
(Vous pouvez toujours utiliser aussi .)
Et affichez le tout :
3
Question 1
Ecrivez une fonction qui initialise la matrice avec des valeurs aléatoires, soit 0
(cellule morte) soit 1 (cellule vivante). Ceci est très similaire au TP précédent. Et
visualisez le résultat à l’écran.
Question 2
Ecrivez une fonction :
qui renvoie si la cellule à la ligne et à la colonne est vivante, sinon.
2.2 Respectons les règles
Lorsqu’on programme un AC, on est confronté à un choix concernant les bornes du
monde : soit le monde est un "plan infini" soit il est borné. On choisit souvent la
dernière solution, où le monde est défini torique (comme dans les Termites).
Le problème survient alors de savoir comment gérer la fonction de communication
entre cellules aux bords de la matrice, car il faut faire un traitement particulier pour
éviter d’utiliser des valeurs erronées (hors de la matrice).
Question 3
Ecrivez une fonction (ou si vous utilisez
) :
qui peut prendre en entrée des valeurs de et qui dépassent les tailles de la
matrice. Par exemple, si le nombre de lignes de la matrice est 100,
est équivalent à .
Rappel : vous pouvez utiliser et pour connaitre le
nombre de lignes et de colonnes de la matrice.
Note : vous pouvez utiliser la fonction qui renvoie la partie entière de la
division euclidienne. Néanmoins, il est possible de s’en passer.
Question 4
Ecrivez une fonction :
qui retourne le nombre de voisins vivants de la cellule à la ligne et à la colonne
.
4
Question 5
Ecrivez une fonction :
qui prend en paramètre un numéro de ligne et de colonne et qui retourne le nouvel état
de la cellule correspondante.
2.3 Double-buffer
Il n’est pas possible de mettre à jour la matrice directement, car on modifierait certaines
valeurs pour les voisins qui n’ont pas encore été mis à jour.
Pour éviter ce problème, on utilise la technique du double-buffer (le buffer est une
zone mémoire "tampon", de sauvegarde) qui consiste à avoir 2 matrices de mêmes
tailles, au lieu d’une seule. Les nouvelles valeurs des états des cellules de la matrice 1
sont mémorisés dans la matrice 2, puis on recopie le contenu de la matrice 2 dans la
matrice 1.
Question 6
Créez une matrice possédant les mêmes dimension que en
utilisant la fonction :
Question 7
Ecrivez une fonction :
qui recopie le contenu de la matrice dans la matrice .
Question 8
Ecrivez une fonction :
qui fait la mise-à-jour des états de toutes les cellules de la matrice dans la matrice
passées en argument.
Vous pouvez utiliser des fonctions intermédiaires si nécessaire.
5
1 / 8 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !