Accueil Foire Aux Questions Trouver d'autres membres Rechercher Utilisez le vBpad pour stocker des notes personnelles Ici, vous pouvez voir les sujets auxquels vous avez souscris, vos messages privés; et modifier vos informations personnelles et préférences. Statistiques du forum Enregistrez vous gratuitement ! Se déconnecter  
Forum OXMO Forum OXMO > Section Généraliste > Discussion Libre > [SCIENCE] Les Automates Cellulaires


Aller au Forum:
Notez ce sujet :

  Sujet précédent   Sujet suivant
Auteur
Sujet Poster un nouveau sujet    Poster une réponse
 Zakath  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Guru

Déconnecté

Niveau : 5
N° de Membre : 7213

Ancienneté : 97%
Participation : 12%
Inscription: 15 Dec 2002
Localisation: Copenhague
Messages: 9866
Sujets Lancés : 426

Post [SCIENCE] Les Automates Cellulaires

Je sais qu'Oxmo est surtout un forum technique, mais je me suis dit que le sujet vous intéresserait peut-être.

Il s'agit en effet d'informatique théorique, et accessoirement de mon futur thème de recherche. Comme je passe pas mal de temps dessus, je me suis dit que ça pourrait être rigolo de vous exposer ça, histoire de faire un peu partager ce sujet passionant et aussi de voir si je suis capable de bien vulgariser la chose.

En très bref, les automates cellulaires sont surtout connus par l'intermédiaire du Jeu de la Vie de John Conway. On peut les voir comme un modèle de calcul (à la manière des machines de Turing, pour ceux qui connaissent) ou simplement comme des choses qui font des jolis dessins.

L'idée est la suivante : on se donne un grille (infinie ou juste torique) de dimension d et un ensemble d'états Q = {q1, q2,... qn}. Chaque élément de la grille est une "cellule" qui peut se trouver dans un des états de Q. A chaque instant t, on applique un jeu de règles pour déterminer le nouvel état de chaque cellule. Ces règles dépendent de l'état des voisins de la cellule considérée.

Le jeu de la vie, par exemple, utilise une grille torique de dimension 2 (donc un plan) et deux états. Le voisinage considéré est celui des 8 cases voisines. Si une cellule dans l'état 1 a deux ou trois voisins dans l'état 1, elle reste dans cet état, sinon elle passe à l'état 0. Si elle est dans l'état 0 et a exactement 3 voisins, elle passe dans l'état 1, sinon reste dans l'état 0.
Il y a de nombreuses pages sur le jeu de la vie, en voici une en français.

Un autre exemple, plus intéressant, est celui de l'automate 110 (selon la numérotation de Wolfram). Cette fois en dimension1, donc une ligne, ce qui permet de placer son évolution temporelle sur le diagramme. On a toujours 2 états, 0 et 1, et le voisinage est simplement : {cellule à ma gauche, moi-même, cellule à ma droite}. Si on écrit 110 en binaire et qu'on trie lexicographiquement les voisinages, cela nous donne le jeu de règles, soit :
000 -> 0
001 -> 1
010 -> 1
011 -> 1
100 -> 0
101 -> 1
110 -> 1
111 -> 0

Ce qui est proprement surprenant, c'est qu'on arrive à générer des comportement extrêmement complexes avec ces règles aussi simples et des conditions initiales qui le sont tout autant.
Un exemple d'évolution de 110 :

et


Il a été démontré très récemment que 110 était intrinsèquement universel, ce qui veut dire qu'il peut simuler n'importe quel autre automate cellulaire unidimensionnel.


Selon les intérêts soulevés, je peux développer beaucoup sur les différents détails ou clarifier tout ce qui n'est pas clair dans la courtissime présentation ci-dessus (mais dites-moi si vous ne comprenez pas, et ce que vous ne comprenez pas !). Un jeu de transparents est également à l'étude.


__________________

Allez jeter un œil à mon portfolio !


Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 103 Jours, 6 Heures, 14 Minutes, 38 Secondes en ligne

Old Post 30-01-2005 14:41
Cliquez ici pour voir le profil de Zakath Cliquez ici pour lui envoyer un message privé  Visiter la Page Perso de Zakath! Trouver plus de messages de Zakath Ajouter Zakath à votre liste d'amis Editer/Effacer le Message Citer le message dans la réponse
 fleming  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Super Moderateur

Déconnecté

Niveau : 5
N° de Membre : 7849

Ancienneté : 97%
Participation : 23%
Inscription: 06 Jan 2003
Localisation: Augustoritum
Messages: 19502
Sujets Lancés : 319

Moi j'ai à peu près compris et j'ai trouvé ça intéressant...


... mais c'est peut-être parce que mon mémoire de maîtrise de maths avait pour sujet les codes lexicographiques et les graphes de Lenstra en petites dimensions.



j'avais même avec ma binôme démontré un théorème à l'époque, mon plus haut fait d'armes (et je serais bien incapable de m'y remettre maintenant 8 ans plus tard), la preuve, je l'ai retrouvé par hasard il y a quelques semaines, j'ai voulu jeter un coup d'oeil... et j'ai rien compris !


__________________

Les tôles ondulées mais les vaches aussi.


Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 95 Jours, 0 Heure, 24 Minutes, 20 Secondes en ligne

Old Post 30-01-2005 19:53
Cliquez ici pour voir le profil de fleming Cliquez ici pour lui envoyer un message privé  Trouver plus de messages de fleming Ajouter fleming à votre liste d'amis Editer/Effacer le Message Citer le message dans la réponse
 KissTheFuture  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Guru

Déconnecté

Niveau : 5
N° de Membre : 6223

Ancienneté : 97%
Participation : 14%
Inscription: 17 Nov 2002
Localisation: Ailleurs
Age: 107
Messages: 11276
Sujets Lancés : 108

moi je cherchais un thread pour m'aider à m'endormir et je dois te remerci........


__________________


Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 31 Jours, 4 Heures, 22 Minutes, 25 Secondes en ligne

Old Post 30-01-2005 21:59
Cliquez ici pour voir le profil de KissTheFuture Cliquez ici pour lui envoyer un message privé  Trouver plus de messages de KissTheFuture Ajouter KissTheFuture à votre liste d'amis Editer/Effacer le Message Citer le message dans la réponse
 shakes808080  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Guru

Déconnecté

Niveau : 5
N° de Membre : 517

Ancienneté : 100%
Participation : 11%
Inscription: 08 Mar 2002
Localisation:
Messages: 8978
Sujets Lancés : 354

Très intéressant... maintenant, faudrait montrer ce que ça donne concrètement par exemple : on a tous des PC capables de faire des simulations de ce genre, il faudrait juste un petit programme .


__________________
Racket logiciel


Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 45 Jours, 5 Heures, 55 Minutes, 7 Secondes en ligne

Old Post 31-01-2005 10:10
Cliquez ici pour voir le profil de shakes808080 Cliquez ici pour lui envoyer un message privé  Trouver plus de messages de shakes808080 Ajouter shakes808080 à votre liste d'amis Editer/Effacer le Message Citer le message dans la réponse
 Alexiel  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Maitre

Déconnecté

Niveau : 4
N° de Membre : 1788

Ancienneté : 100%
Participation : 6%
Inscription: 21 May 2002
Localisation: steack haché......
Age: 45
Messages: 4920
Sujets Lancés : 67

tu dois pas être mauvais en vulgarisation puisque j'ai presque tout compris!! Sauf quelques termes, mais j'ai compris le but général...


__________________


Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 21 Jours, 15 Heures, 7 Minutes, 36 Secondes en ligne

Old Post 31-01-2005 11:06
Cliquez ici pour voir le profil de Alexiel Cliquez ici pour lui envoyer un message privé  Trouver plus de messages de Alexiel Ajouter Alexiel à votre liste d'amis Editer/Effacer le Message Citer le message dans la réponse
 Zakath  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Guru

Déconnecté

Niveau : 5
N° de Membre : 7213

Ancienneté : 97%
Participation : 12%
Inscription: 15 Dec 2002
Localisation: Copenhague
Messages: 9866
Sujets Lancés : 426

Citation:
Message écrit par shakes808080, le 31-01-2005 à 10:10
Très intéressant... maintenant, faudrait montrer ce que ça donne concrètement par exemple : on a tous des PC capables de faire des simulations de ce genre, il faudrait juste un petit programme .


Oui, ce n'est vraiment pas difficile, surtout pour les unidimensionnels.
Si tu veux, je peux te passer mes sources C (avec le Makefile qui va bien) pour gcc sous Linux (il te faut la SDL pour le graphisme) qui font ces zolis dessins.


Edit: voila la chose, recopie dans les fichiers qui vont bien puis fais un make. Il te faut gcc et SDL. Il y a deux règles, 54 et 110, renomme celle de ton choix en rules.c puis recompile. Le lancement se fait avec

code:
./cells largeur etapes random seed




Makefile:
code:
CC = gcc CFLAGS = -Wall SRC = rules.c graph.c sim.c PROG = cells INC = -I /usr/include/SDL INCLIBS = -lSDL all: $(PROG) $(PROG): $(CC) $(CFLAGS) $(INC) $(SRC) -o $@ $(INCLIBS) clean: rm cells



sim.c :
code:
/* you must rename the rules files you intend to use in rules.c/rules.h */ #include <stdio.h> #include <stdlib.h> #include <SDL.h> #include "rules.h" #include "graph.h" int* conf; int size; int voisin[VECTS]; void compute (void) { int i, j, k; int valide; int* tmp; tmp = calloc (size, sizeof(int)); for (i = 0; i < size; i++) { valide = 1; for (j = 0; j < VECTS; j++) { k = i + vects[j][0]; if (k >= 0 && k < size) voisin[j] = conf[k]; else { valide = 0; break; } } if (valide) tmp[i] = delta(voisin); else /* On choisit de remplir les bords extérieurs avec des 0 */ tmp[i] = 0; } free (conf); conf = tmp; return; } int main (int argc, char* argv[]) { int i; SDL_Surface* screen; int steps, is_random, seed; if (argc != 5) { printf ("Bad number of arguments. Expected 4 and received %d\n", argc-1); exit (0); } if (DIM != 1) { fprintf (stderr, "As for now, only unidimensionnal automata are supported, sorry\n"); exit (0); } screen = SDL_Initialisation(); size = atoi(argv[1]); steps = atoi(argv[2]); is_random = atoi(argv[3]); seed = atoi(argv[4]); srand(seed); conf = calloc (size, sizeof(int)); if (is_random) { for (i = 0; i < size; i++) { conf[i] = rand()%STATES; } } else { for (i = 0; i < size; i++) { if (i == size/2) conf[i] = 1; else conf[i] = 0; } } for (i = 0; i < steps && i < HEIGHT/2; i++) { compute(); paint_line (conf, i, size, screen); } getc(stdin); free (conf); return 0; }



graph.c :
code:
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <SDL.h> #include "graph.h" int color_r[2] = {0xff, 0x00}; int color_g[2] = {0xff, 0x00}; int color_b[2] = {0xff, 0x00}; SDL_Surface* SDL_Initialisation (void) { SDL_Surface *screen; SDL_Init(SDL_INIT_VIDEO); atexit(SDL_Quit); screen = SDL_SetVideoMode(WIDTH, HEIGHT, 8, SDL_SWSURFACE); return (screen); } void putpixel(SDL_Surface *surface, int x, int y, Uint32 pixel) { int bpp = surface->format->BytesPerPixel; /* Here p is the address to the pixel we want to set */ Uint8 *p = (Uint8 *)surface->ixels + y * surface->itch + x * bpp; switch(bpp) { case 1: *p = pixel; break; case 2: *(Uint16 *)p = pixel; break; case 3: if(SDL_BYTEORDER == SDL_BIG_ENDIAN) { p[0] = (pixel >> 16) & 0xff; p[1] = (pixel >> 8) & 0xff; p[2] = pixel & 0xff; } else { p[0] = pixel & 0xff; p[1] = (pixel >> 8) & 0xff; p[2] = (pixel >> 16) & 0xff; } break; case 4: *(Uint32 *)p = pixel; break; } } void paint_pixel (SDL_Surface* screen, int y, int x, int r, int g, int b) { Uint32 yellow; yellow = SDL_MapRGB(screen->format, r, g, b); if ( SDL_MUSTLOCK(screen) ) { if ( SDL_LockSurface(screen) < 0 ) { fprintf(stderr, "Can't lock screen: %s\n", SDL_GetError()); return; } } putpixel(screen, x, y, yellow); if ( SDL_MUSTLOCK(screen) ) { SDL_UnlockSurface(screen); } return; } void paint_line (int* bin, int line, int size, SDL_Surface* screen) { int i, r, g, b; int col; for (col = 0; col < WIDTH/2 && col < size; col++) { i = bin[col]; r = color_r[i]; g = color_g[i]; b = color_b[i]; paint_pixel (screen, 2*line, 2*col, r, g, b); paint_pixel (screen, 2*line+1, 2*col, r, g, b); paint_pixel (screen, 2*line, 2*col+1, r, g, b); paint_pixel (screen, 2*line+1, 2*col+1, r, g, b); } SDL_UpdateRect(screen, 0, 2*line, WIDTH, 2); return; }



graph.h :
code:
#include <SDL.h> #define WIDTH 1024 #define HEIGHT 768 SDL_Surface* SDL_Initialisation (void); void paint_line (int*, int, int, SDL_Surface*);



rules.h :
code:
/* dimension de l'automate */ #define DIM 1 /* Nombre d'états */ #define STATES 2 /* Nombre de vecteurs de voisinage */ #define VECTS 3 int vects[VECTS][DIM]; int delta (int*);



r54.c :
code:
/* Rule 54 */ #include "sample.h" int vects[VECTS][DIM] = {{-1}, {0}, {1}}; int delta (int* v) { if (v[1] == 0) { if (v[0] == 0 && v[2] == 0) return 0; else return 1; } if (v[0] == 0 && v[2] == 0) return 1; return 0; }



r1110.c :
code:
/* Rule 110 */ #include "sample.h" int vects[VECTS][DIM] = {{-1}, {0}, {1}}; int delta (int* v) { if (v[0] == 1) { if (v[1] == v[2]) return 0; else return 1; } else { if (v[1] == 0 && v[2] == 0) return 0; } return 1; }


__________________

Allez jeter un œil à mon portfolio !

Edité par Zakath le 31-01-2005 à 22:40

Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 103 Jours, 6 Heures, 14 Minutes, 38 Secondes en ligne

Old Post 31-01-2005 16:35
Cliquez ici pour voir le profil de Zakath Cliquez ici pour lui envoyer un message privé  Visiter la Page Perso de Zakath! Trouver plus de messages de Zakath Ajouter Zakath à votre liste d'amis Editer/Effacer le Message Citer le message dans la réponse
 Alexiel  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Maitre

Déconnecté

Niveau : 4
N° de Membre : 1788

Ancienneté : 100%
Participation : 6%
Inscription: 21 May 2002
Localisation: steack haché......
Age: 45
Messages: 4920
Sujets Lancés : 67

Bon...... là, je suis larguée........


__________________


Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 21 Jours, 15 Heures, 7 Minutes, 36 Secondes en ligne

Old Post 01-02-2005 00:20
Cliquez ici pour voir le profil de Alexiel Cliquez ici pour lui envoyer un message privé  Trouver plus de messages de Alexiel Ajouter Alexiel à votre liste d'amis Editer/Effacer le Message Citer le message dans la réponse
 Pateretou[2]  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Maitre

Déconnecté

Niveau : 4
N° de Membre : 1666

Ancienneté : 100%
Participation : 5%
Inscription: 16 May 2002
Localisation: Nepal et bientot Tibet
Messages: 3991
Sujets Lancés : 184

Bah heu je suis pas sur que tout le monde puisse compiler sous linux la ...


__________________
Hi! I'm a .signature virus! Copy me into your ~/.signature, please!


Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 7 Jours, 22 Heures, 23 Minutes, 59 Secondes en ligne

Old Post 01-02-2005 01:40
Cliquez ici pour voir le profil de Pateretou[2] Cliquez ici pour lui envoyer un message privé  Trouver plus de messages de Pateretou[2] Ajouter Pateretou[2] à votre liste d'amis Editer/Effacer le Message Citer le message dans la réponse
 Pateretou[2]  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Maitre

Déconnecté

Niveau : 4
N° de Membre : 1666

Ancienneté : 100%
Participation : 5%
Inscription: 16 May 2002
Localisation: Nepal et bientot Tibet
Messages: 3991
Sujets Lancés : 184

blou blou, il gere pas les <> vbulletin, il cherche des balises la
bloublou y a un include sample.h qui est foireux


__________________
Hi! I'm a .signature virus! Copy me into your ~/.signature, please!


Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 7 Jours, 22 Heures, 23 Minutes, 59 Secondes en ligne

Old Post 01-02-2005 01:45
Cliquez ici pour voir le profil de Pateretou[2] Cliquez ici pour lui envoyer un message privé  Trouver plus de messages de Pateretou[2] Ajouter Pateretou[2] à votre liste d'amis Editer/Effacer le Message Citer le message dans la réponse
 Pateretou[2]  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Maitre

Déconnecté

Niveau : 4
N° de Membre : 1666

Ancienneté : 100%
Participation : 5%
Inscription: 16 May 2002
Localisation: Nepal et bientot Tibet
Messages: 3991
Sujets Lancés : 184

Allez hop, j'ai "adapté" sous windows, mais j'ai eu la flemme de faire un truc graphique pour changer les options et tout et tout(et oh, z'avez vu l'heure j'ai une femme qui m'attend au lit moi!)

Donc les sources sont la (VC7) :
http://www.crapules.com/~pateretou/zakath/zak.rar
et l'executable (pour ceux qui veulent pas s'embeter a recompiler tout ca tout ca) :
http://www.crapules.com/~pateretou/zakath/zak_exe.rar

Pour l'executer, il faut ouvrir une fenetre ms-dos et taper un truc du genre :

code:
C:\Documents and Settings\pateretou\My Documents\Visual Studio Projects\zak\Debug>zak.exe 500 500 400 4000


pour quitter, un ctrl-C dans la fenetre ms-dos

J'ai pas eu le temps de m'y pencher mais j'ai pas reussi a trouver de "jolies trucs".
Heu c'est tout ?
oui je crois, si tu as des choses a rajouter zak, moi je t'avoue que j'ai pas trop le tps la mais ca a l'air interessant je checkerais ca a l'occas

Ah vi, j'ai compilé avec le rul110 mais libre a vous de remplacer le contenu de rules.cpp par le contenur de rul54.c de zakath au dessus!

Bonne nuit


__________________
Hi! I'm a .signature virus! Copy me into your ~/.signature, please!


Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 7 Jours, 22 Heures, 23 Minutes, 59 Secondes en ligne

Old Post 01-02-2005 01:52
Cliquez ici pour voir le profil de Pateretou[2] Cliquez ici pour lui envoyer un message privé  Trouver plus de messages de Pateretou[2] Ajouter Pateretou[2] à votre liste d'amis Editer/Effacer le Message Citer le message dans la réponse
 Zakath  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Guru

Déconnecté

Niveau : 5
N° de Membre : 7213

Ancienneté : 97%
Participation : 12%
Inscription: 15 Dec 2002
Localisation: Copenhague
Messages: 9866
Sujets Lancés : 426

Erf oui, IL ne faut pas lire #include "sample.h" mais #include "rules.h", désolé.
Merci beaucoup d'avoir converti pour windows, je n'ai aucune idée de comment ça marche...

Si tu ne veux pas commencer avec un truc aléatoire, il faut lui donner un 0 en 3ème option. Je ne sais pas ce que tu appelles de "jolis trucs", mais ce qu'il y a à voir, ce sont des structures (d'après Ollinger, des particules) qui se déplacent sur un fond régulier et qui vont aller s'entrechoquer pour fusionner et potentiellement donner d'autres structures. C'est grâce à ça qu'on peut simuler une machine de Turing (moyennant un codage ignoble, mais bon).

Dès que j'ai un peu de temps dans la semaine, je pense rajouter la possibilité de continuer à regarder ce qui se passe "plus bas" (enfin plus haut, parce que les diagrammes espace-temps vont de bas en haut, dans l'école française).


__________________

Allez jeter un œil à mon portfolio !


Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 103 Jours, 6 Heures, 14 Minutes, 38 Secondes en ligne

Old Post 01-02-2005 07:09
Cliquez ici pour voir le profil de Zakath Cliquez ici pour lui envoyer un message privé  Visiter la Page Perso de Zakath! Trouver plus de messages de Zakath Ajouter Zakath à votre liste d'amis Editer/Effacer le Message Citer le message dans la réponse
 Pateretou[2]  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Maitre

Déconnecté

Niveau : 4
N° de Membre : 1666

Ancienneté : 100%
Participation : 5%
Inscription: 16 May 2002
Localisation: Nepal et bientot Tibet
Messages: 3991
Sujets Lancés : 184

zak : oui je parlais de "jolies structures"
Pour le portage, c'est du copiez collez et de l'include de lib sdl la ou il faut dans VC, c'est tout et ca va pas chercher plus loin ... (et qq modif au code : tu definis deux fois la meme global)


__________________
Hi! I'm a .signature virus! Copy me into your ~/.signature, please!


Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 7 Jours, 22 Heures, 23 Minutes, 59 Secondes en ligne

Old Post 01-02-2005 11:16
Cliquez ici pour voir le profil de Pateretou[2] Cliquez ici pour lui envoyer un message privé  Trouver plus de messages de Pateretou[2] Ajouter Pateretou[2] à votre liste d'amis Editer/Effacer le Message Citer le message dans la réponse
Il est actuellement 19:52 (GMT) Poster un nouveau sujet    Poster une réponse   
  Sujet précédent   Sujet suivant
Forum OXMO > Section Généraliste > Discussion Libre > [SCIENCE] Les Automates Cellulaires

Aller au Forum:
Notez ce sujet :


 Réponse Rapide
Titre: (Optionnel)
Message:

Convertir automatiquement les URLs Montrer la Signature
Afficher une version imprimable | Envoyer cette page par email | S'inscrire à ce sujet | Télécharger ce sujet
Règles du forum :
Créer de nouveaux sujets
Répondre aux messages
Attacher des fichiers
Editer vos messages
: not autorisé
: not autorisé
: not autorisé
: not autorisé
Le Code HTML est OFF
Le Code vB est ON
Les Smileys sont ONs
Le code [IMG] est ON
 
< Contactez-nous - Forum OXMO>

Uptime du serveur SQL : 2 jour(s) 19 heure(s) et 28 minute(s)
Page générée en 0.027197 secondes en exécutant 40 requêtes SQL.
Apache - Compression GZIP : Activée.