Bonjour à tous, ici Jonathan.
aujourd'hui je vous montre un exemple
de la facon de construire votre propre basique automate cellulaire.
que je nommerai ECA dans cet exemple
et sur NetLogo.
Cette exercice va surtout nous demander de
laisser murir un ECA asynchrone
Ce qui se déroule assez naturellement, comme vous le verrez
car NetLogo, par défaut, aime appeler des agents de maniere aléatoire.
Allons y donc
comme vous voyez sur cette unité
l'ECA est à une dimension
stimulé ligne par ligne
une ligne à la fois
la première étape est une stimulation sur la ligne supérieure
la deuxième étape se joue sur la deuxième ligne
la troisième itération sur la troisième ligne
et ainsi de suite.
Il nous incombe donc de régler les coordonnées
de maniere a faciliter cette logique.
Regardez la, je regle l'origine en haut
de facon a ce que la premiere ligne ait une coordonnée de 0
et compte a rebours moins un, moins deux, moins trois
et ainsi de suite a partir de la.
Comme le point de départ se situe sur le coin superieur gauche
la coordonnée px sera elle comptée en ordre croissant
de zero a un, deux, trois, quatre.....
ce qui sera pratique si vous decidez plus tard
d'étendre la largeur des lignes.
Voici maintenant la grande question
Vous allez demander :
quelles sont les principales caractéristiques du modele ECA
Ils sont composés de cellules bien sur
qui sont représentées sur NetLogo par des carrés dans l'ECA.
Les propriétés principales de ces carrés/cellules
sont leur état actuel, représenté par zéro ou un
et la configuration de leur environnement,
utilisée pour determiner l'état de la cellule suivante.
Une autre caractéristique importante du modele en sont ses regles
qui, comme vous le savez
sont une liste qui décrit a la cellule
quel environnement produit quel état.
Comme nous l'avons vu dans les classes de Wolfram
des regles différentes engendrent des comportement radicalement différents.
Sur une longue échelle
alors qu'une cellule peut avoir son propre état
et connaitre des environnement différents,
les regles ne sont pas spécifiques a la cellule
mais plutot au modele en son entier.
je le considere comme une variable globale.
Nous n'allons pas non plus oublier les reglages Setup and Go, obligatoires
pour que le modele se déroule en douceur.
Je le fais donc de suite
Pour le Setup, il est recommandé d'écrire d'abord
"clear-all"
car nous aurons besoin de changer les réglages de ces modeles
et répliquer les résultats de facon indépendante.
sans interférences des jeux précédents.
De meme que je regle ce modele
en reinitialisant les tic tac de comptage
car cela va etre utile pour garder la trace
et savoir a quelle étape en est on.
Enfin, on veut que les carrés se placent par eux memes
dans une configuration initiale aléatoire.
Je vais donc demander aux carrés
Même ceux avec un qualificatif spécifique
Les carrés avec pycor eagl a zero, pour commencer,
car, comme vous le savez,
nous voulons les cellules sur la ligne supérieure , au debut.
Maintenant il semble que les carres soient
placés de maniere aléatoire.
Souvenez vous que cahque cellule peut se trouver dans l'un de ces deux états : zéro ou un
donc pour atteindre cette objectif
nous avons besoin d'une variable choisie de maniere aléatoire
avec une chance identique de renvoyer
un état zéro ou un aux cellules.
Je vais nommer celle la "tirage"
parce que j'aime l'analogie avec le tirage de cartes
meme si la nommer n'a aucune importance dans ce cas.
Alors, laissons la variable temporaire, "tirage", flotter aléatoirement entre zéro et un
et désigner n'importe quelle valeur située entre zéro et un
que l'ordinateur peut concevoir.
Donc pour ce "tirage" aléatoire,
Nous pourrons dire que si un nombre choisi entre zéro et un
est inférieur a 0,5, c'est a dire 50% de chance,
alors cela induit un "état" zéro
mais vous voulez aussi une condition "else"
donc si la variable "tirage" se révele etre supérieure a 0,5
ce qui arrive les autres 50% de fois
alors l'"état" est définie par 1.
N'oubliez pas que "état" est une variable stockée dans le carré
qui n'est pas visible par l'utilisateur humain.
Nous allons le définir
garce a une procedure fonctionelle nommée ChangeCouleur
qui est assez directe.
Donc, pour changer la couleur
il sera pratique d'utiliser une autreligne de code "ifelse".
si l'état de la cellule est égal a zéro,
on a une couleur
sinon, si c'est un état différent,
c'est a dire un
on a une autre couleur
pour distinguer les cellules les unes des autres.
Maintenant c'est bien sur histoire de gout
pour définir les couleurs utilisées.
Je vais donc dire que les cellules blanches sont les zéros
c'est a dire, regler pcolor sur blanc si l'état du carré est zéro.
Inversement, si l'état est un, alors colorons le en vert.
Je prefere utiliser ces couleurs legeres
surtout parce que cela aide a différencier les les rangées de cellules faites
de celles, plus foncées, qui ne sont pas achevées.
Ainsi nous achevons la procedure et vrifions que rien ne soit encore cassé.
Je vais mettre quelques boutons en place juste pour tester le modele
et verifier que l'on soit sur la bonne voie
On a la touche Setup pour lancer la procedure de reglages
et une touche Go
La touche Go ne devrait encore rien declencher
mais on en aura finalement besoin ici.
Maintenant on regle le modele
Voyons, nous avons maintenant une moitié de cellules et une autre moitié de cellules vertes dans la ligne de départ
reflétant nos 50% de chances que les cellules deviennent blanches
et 50% de cellules vertes
en mode aléatoire
Les conditions initiales sont reréglées de cette maniere a chaque fois,
et, comme vous le voyez,
de maniere completement aléatoire
Mais, en moyenne vous aurez en gros
50% de blanches et 50% de vertes
Go, pour l'instant, ne déclenche rien
car je n'y ai encore rien mis.
Autre chose,
nous voulons que les cellules interagissent et repondent aux autres cellules autour
et changent selon les regles spécifiées
par la configuration de leur environnement
N'est ce pas ?
Je n'ai pas encore définiquelles sont ces regles.
Donc pour pouvoir le mettre en action,
je vais initialiser un modele des maintenant
avec un des mes ensembles de regles favorites.
C'est une de ces regles avec des propriétés intéréssantes
entrainant un comportement chaotique bien qu'ordonné
en une structure complexe.
Avec cet ensemble de regles
joué de maniere temporaire
nous allons définir la touche Go
Ou les regles de comportement sont mises en jeu.
Rappelez vous que ces regles ordonnent les changements
affectants les cellules suivant la configuration de leur environement immédiat
et demande a chaque cellule de detecter l'état
de leur deux voisins proches
ainsi que leur propre état.
en se référant a la configuration de depart
nous verrons chaque cellule se mettre a jour
et enregistrer la configuration du voisinage.
C'est a dire les trois états que sont la cellule de gauche,
celle de droite et son propre état.
Comme le voisinage est défini par une
combinaison d'états de cellules,
vous allez créer une liste
qui est un autre vecteur.
Dans ce vecteur vous allez inclure comme premiere entrée
l'état binaire de la cellule de gauche.
Pour cela un peu de vocabulaire NetLogo pour vous.
"Patch-at" renvoie au carre cellulaire
dans une position relative a la cellule actuelle l'appelant.
Le premier nombre est la distance x
a droite ou a gauche.
Le second nombre est la distance y
vers le haut ou le bas.
Donc patch-at- 1 0
renvoie a la cellule a gauche de la cellule actuelle.
Maintenant ajoutez l'état de la cellule actuelle
en appelant cette procédure
qui est juste "state" par défaut
et enfin l'état de la cellule droite
patch-at 1 0
parce que nous regardons maintenant vers la droite.
Avec cela nous avons un bloc de commande cohérent,
que je termine ainsi.
Houlaa, c'est mauvais,
Donc, pour récapituler,
Chaque cellule regarde a sa droite et a sa gauche
et en elle meme
les états actuels
se remettant a jour a chaque étape.
Les cellules ne font que stocker de l'information a chaque étape
ne faisant rien avec
si ce n'est changer d'état
Alors que le comportement appernt du modele n'a pas encore changé
comme vous pouvez le voir quand je clique ces touches,
on a visiblement encore quelques données nécessaires
pour que le modele marche correctement.
Par exemple on ne peut pas voir l'apparence
de l'état de la cellule
sans une fonction ChangeColor
Mais encore plus fondamental
le modele manque encore d'une application des regles
alors qu'il devrait diriger le comportement des cellules.