Automate cellulaire à 2 dimensions

Automate cellulaire à 2 dimensions

Messagede lafleche » Mer 8 Sep 2010 13:36

Bon maintenant que vous avez compris les automates cellulaires à une dimension (si c'est pas la cas "Jaques à dit retourne au sujet du forum correspondant"), on va ajouter une petite dimension au tableau, et vous allez voir que ce n'est pas plus compliqué.
On va donc considérer maintenant une grille, composée donc de cellules qui comme expliqué précédemment vont vivre et mourrir au fur et à mesure des itérations.
Pour détermine leur état à la prochaine itération, on ne va plus considérer que les cellules voisines de droite et de gauche, mais celles se trouvant tout autour de la cellule dont on détermine l'état, soit : au nord-est, au nord, au nord-ouest, à l'est, à l'ouest, au sud-est, au sud, au sud-ouest.
Mais au fait, vous avez sans doute déjà entendu parler d'un automate cellulaire à deux dimensions : le jeu de la vie !
Ben oui, le jeu de la vie, que l'on trouve sur moults machines, est en fait un automate cellulaire à 2 dimensions dont les règles sont les suivantes :
* Si la cellule est vivante et entourée par deux ou trois cellules vivantes, elle reste en vie à la génération suivante, sinon elle meurt.
* Si la cellule est morte et entourée par exactement trois cellules vivantes, elle naît à la génération suivante.
C'est tout ... facile non ?
Mine de rien, ces règles basiques vont donner lieu à un ballet quasi hypnotique où vous allez voir des formes assez étonnantes, d'ailleurs si vous exécutez le code suivant, et que vous le regardez s'exécuter jusqu'au bout (110 itérations), vous verrez apparaître ... un clown ! si si promis ...

Code: Tout sélectionner
' Automate cellulaire … deux dimensions
' Jerome Savidan 2009
'
' Dans le cadre de la valeur C du Cnam de Lille 2009-2010
'
' calcul du nombre de colonnes et lignes texte affichables
ncols%=@greatestpowerof2(320)
nlines%=@greatestpowerof2(200)
cols%=2^ncols%
lines%=2^nlines%
maxcol%=cols%-1
maxline%=lines%-1
'
' tableau des cellules de l'automate … g‚n‚rations n et n+1
DIM cells%(cols%*lines%),cellsnplusun%(cols%*lines%)
'
' pr‚paration du motif de d‚part
' centre
cells%((cols%*lines%)/2+cols%/2)=0
cellsnplusun%((cols%*lines%)/2+cols%/2)=0
' ouest
cells%((cols%*lines%)/2+cols%/2-1)=1
cellsnplusun%((cols%*lines%)/2+cols%/2-1)=1
' est
cells%((cols%*lines%)/2+cols%/2+1)=1
cellsnplusun%((cols%*lines%)/2+cols%/2+1)=1
' nord
cells%((cols%*lines%)/2-cols%/2)=1
cellsnplusun%((cols%*lines%)/2-cols%/2)=1
' nord ouest
cells%((cols%*lines%)/2-cols%/2-1)=1
cellsnplusun%((cols%*lines%)/2-cols%/2-1)=1
' nord est
cells%((cols%*lines%)/2-cols%/2+1)=1
cellsnplusun%((cols%*lines%)/2-cols%/2+1)=1
' sud
cells%((cols%*lines%)/2+3*cols%/2)=0
cellsnplusun%((cols%*lines%)/2+3*cols%/2)=0
' sud ouest
cells%((cols%*lines%)/2+3*cols%/2-1)=1
cellsnplusun%((cols%*lines%)/2+3*cols%/2-1)=1
' sud est
cells%((cols%*lines%)/2+3*cols%/2+1)=1
cellsnplusun%((cols%*lines%)/2+3*cols%/2+1)=1
'VOID INP(2)
'
' boucle principale
' l'automate va se d‚velopper sur 110 it‚rations
FOR r%=0 TO 110
  CLS
  ' effet graphique pour rendre l'esth‚tique plus agr‚able
  ' vst_effects(MOD(r%,5))
  ' on boucle sur toutes les cases de la grille
  FOR tx%=0 TO cols%*lines%-1
    x%=AND(tx%,maxcol%)
    y%=SHR(tx%,ncols%)
    cells%(tx%)=cellsnplusun%(tx%)
    ' vst_color(MOD(r%,15)+1)
    ' affichage de la cellule dans son etat actuel, 0 la cellulee est morte, pas d'affichage
    ' 1, la cellule est vivante on l'affiche
    IF cells%(tx%)=1
      PLOT x%,y%
    ENDIF
    ' n%=cells%(tx%)
    ' ouest
    n%=0
    IF x%>=1
      n%=n%+cells%(tx%-1)
    ENDIF
    ' est
    IF x%<(maxcol%)
      n%=n%+cellsnplusun%(tx%+1)
    ENDIF
    ' nord-ouest
    IF y%>=1 AND x%>=1
      n%=n%+cells%(tx%-cols%-1)
    ENDIF
    ' nord-est
    IF y%>=1 AND x%<(maxcol%)
      n%=n%+cells%(tx%-cols%+1)
    ENDIF
    ' nord
    IF y%>=1
      n%=n%+cells%(tx%-cols%)
    ENDIF
    ' sud-ouest
    IF y%<(maxline%) AND x%>=1
      n%=n%+cellsnplusun%(tx%+cols%-1)
    ENDIF
    ' sud-est
    IF y%<(maxline%) AND x%<(maxcol%)
      n%=n%+cellsnplusun%(tx%+cols%+1)
    ENDIF
    ' sud
    IF y%<(maxline%)
      n%=n%+cellsnplusun%(tx%+cols%)
    ENDIF
    ' IF MOD(n%,2)=1
    ' cellsnplusun%(tx%)=1
    ' ELSE
    ' cellsnplusun%(tx%)=0
    ' ENDIF
    IF n%=3
      cellsnplusun%(tx%)=1
    ELSE
      IF n%=2
        cellsnplusun%(tx%)=cells%(tx%)
      ELSE
        cellsnplusun%(tx%)=0
      ENDIF
    ENDIF
  NEXT tx%
  '  PAUSE 20
NEXT r%
SHOWM
VOID INP(2)
'
' procedures et fonctions
'
FUNCTION greatestpowerof2(n%)
  FOR i%=9 TO 1 STEP -1
    IF BTST(n%,i%)
      RETURN i%
    ENDIF
  NEXT i%
  RETURN 0
ENDFUNC
'


Vous êtes évidemment libres de changer le motif de départ, ou même de changer les règles d'évolutions. Il est par exemple possible de faire vivre ou mourrir la cellule en fonction du nombre, pair ou impair, de voisins immédiats qu'elle a dans son entourage, auquel cas vous verrez que le motif aura tendance à s'auto-répliquer dans le temps (en IA on parle de la propriété d'auto réplication des automates cellulaires).
Avatar de l’utilisateur
lafleche
 
Messages: 136
Inscription: Lun 25 Jan 2010 14:41
Localisation: Lille

Re: Automate cellulaire à 2 dimensions

Messagede lafleche » Ven 17 Sep 2010 09:53

Quelques images ST haute définition générées par un automate cellulaire à 2 dimensions, découverts dans le livre de Stephen Wolfram (grand spécialiste en la matière) dans son livre "a new kind of science".
Cette automate illustre parfaitement le principe de génération d'un comportement complèxe à partir d'une règle simplissime. C'est en gros un automate générateur de labyrinthe
Ces images sont générées seulement à partir d'une poignée de pixels, 7 en l'occurence.
Le résultat montré se produit au bout de 400 itérations de l'algorithme (ce qui n'est vraiment pas énorme).

Image

Image
Avatar de l’utilisateur
lafleche
 
Messages: 136
Inscription: Lun 25 Jan 2010 14:41
Localisation: Lille

Re: Automate cellulaire à 2 dimensions

Messagede jbfou » Ven 17 Sep 2010 19:49

:shock: DE LA VIE DANS LE GFA :shock:
IL faudrais absolument en tirer quelque chose de ce truc, il faudrais trouver une idee
ce qui est sur en ce moment il y a bien des codeur un peu savant fou qui doivent chercher justement sur l'AI avec des ordies tres puissant .
en toute l'ogique il y auras plus tard des machines avec une AI differente de la notre
le debut de lafin :lol:
jbfou
 
Messages: 80
Inscription: Lun 23 Fév 2009 20:47

Re: Automate cellulaire à 2 dimensions

Messagede lafleche » Sam 18 Sep 2010 08:40

Ben en fait, tout le thème du bouquin que je mentionne c'est d'expliquer qu'on peut obtenir des comportements très complexe avec des programmes très simples, et ce qui est beau c'est que ça ne demande justement pas beaucoup de puissance (la preuve).
En revanche il faut être juste un peu plus patient sur ST :)
Par contre ce qui est sympa, c'est qu'il (Wolfram) explique qu'on est sûrement passés à côté d'un truc en voulant absolument passer par des formules mathématiques pour des tâches complexes. Les automates cellulaires prouvent que non, d'ailleurs si tu complexifie les règles d'évolution, le comportement devient moins intéressant, bizarre non ?
Du coup, et c'est là que je veux en venir, il y a des applications possibles, et notamment pour approcher certains problèmes différemment.
J'en suis pas encore là du bouquin, mais il explique plus tard comment utiliser des auto ... on va dire des ACs ok ? ... pour, par exemple, faire des calculs.
Il montre un exemple d'un AC qui peut calculer les différentes puissances (puissance de 2, de 3 ...) d'un nombre.
Ce qui, du point de vue des vieilles bécanes, est plutôt intéressant quand on a pas de copro arithmétique sous la main (là je parle pas des puissances, mais d'autres fonctions mathématiques qu'il est sûrement possible de calculer différemment).
Maintenant d'un point de vue plus intéressant pour tout le monde : j'ai dans ma boite à outils de quoi générer un labyrinthe genre pour un jeu à la "nethack" (jeu que j'adoooore), de quoi générer un nombre aléatoire sur une longueur quasie inifinie, ou même de quoi faire des routines d'évitement d'obstacles.
Avatar de l’utilisateur
lafleche
 
Messages: 136
Inscription: Lun 25 Jan 2010 14:41
Localisation: Lille

Re: Automate cellulaire à 2 dimensions

Messagede jbfou » Lun 27 Sep 2010 18:04

salut
voila j'ai voulu le faire tournee avec steem
et la j'ai un ecrant tout blanc :cry:
que faire peut etre mauvaise config :?:
jbfou
 
Messages: 80
Inscription: Lun 23 Fév 2009 20:47

Re: Automate cellulaire à 2 dimensions

Messagede lafleche » Mar 28 Sep 2010 13:38

je viens de refaire le test avec Hatari ça fonctionne, bien que pour accélerer les choses je me mette à 32MHz.
Le seul truc que je vois c'est : es tu sur d'avoir la ligne void inp(2) du début de programme en commentaire ?
Sinon faut appuyer sur une touche, mais dans mon code c'est en commentaire
Avatar de l’utilisateur
lafleche
 
Messages: 136
Inscription: Lun 25 Jan 2010 14:41
Localisation: Lille

Re: Automate cellulaire à 2 dimensions

Messagede lafleche » Mar 28 Sep 2010 13:44

Je viens d'essayer avec Steem ça marche très bien aussi, juste à 8MHz c'est un peu lent et ça peut donner l'impression de ne rien faire pendant peut être une dizaine de secondes.
Donc un peu de patience, ou alors booste la vitesse de l'émulation dans le menu de config ;)
Avatar de l’utilisateur
lafleche
 
Messages: 136
Inscription: Lun 25 Jan 2010 14:41
Localisation: Lille


Retourner vers Intelligence Artificielle

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron