Le jeu de la vie

La vidéo du jour traite des automates cellulaires, et en particulier de l’intriguant « jeu de la vie ».

Pour ceux que ça intéresse, je vais mettre le code en partage sur GitHub (si j’y arrive). Il est loin d’être parfait, et d’ailleurs je vous encourage à écrire le votre ! Mais vous y trouverez peut être quelques astuces intéressantes sur comment lire les fichiers RLE (qui encodent de façon compacte les situations de départ), ou bien génerer des vidéos à partir d’images MatPlotLib en Python.

Edit du 09/12 : le code est dispo sur GitHub

Golly

Si vous regardez l’historique des découvertes au sujet du jeu de la vie, vous noterez peut être une certaine recrudescence ces dernières années. Cela est notamment dû à l’utilisation d’un nouveau code de simulation ultra rapide nommé Golly. C’est celui qui a été notamment utilisé dans la séquence du « jeu de la vie simulé dans un jeu de la vie ».

Pour en savoir plus sur Golly, vous pouvez lire cet article de l’excellent JP Delahaye

Machine de Turing

Je suis passé assez vite sur la question de la machine de Turing en jeu de la vie, mais parce que je ne voulais pas m’embarquer dans des questions qui m’auraient fait diverger de l’objectif initial. Mais on trouve plein de petites vidéos illustratives, par exemple

ou encore concernant les portes logiques

Ou bien cette très belle horloge en jeu de la vie (merci Samuel !)

45 réflexions sur “Le jeu de la vie

    • Je vais avouer un truc. Je m’en suis rendu compte après le tournage au moment de faire les animations, j’ai laissé la voix et le texte dire « règle 50 » mais bien sûr j’ai rentré 190 dans ma simulation en me disant « personne le verra ».
      Bien joué 🙂

  1. Totalement bluffé par la découverte du jeu de la vie !
    L’envie de faire un petite simulation me démange ! C’est allucinant…

  2. Salut ! je suis tombé amoureux littéralement du jeu de la vie !!! mais tu as dit dans ta vidéo que tu mettrai dans la description un lien pour télécharger la version python que tu as faite or, elle n’y est pas.
    En tout cas super vidéo comme d’habitude !

  3. Merci pour cette stimulante vidéo. J’ai une question un peu farfelue….

    J’ai toujours fait le parallèle entre le jeu de la vie, et les intuitions du Taoisme

    « Le Tao engendre Un.
    Un engendre Deux.
    Deux engendre Trois.
    Trois engendre tous les êtres du monde.
    … » Lao-Tseu

    Pour m’amuser, j’essaie ce soir de retranscrire en règle du jeu de la vie les principes fondateurs du Taoisme. En résumé
    – tout provient du Tao, le plein/vide origine de la vie (du mouvement)
    – ce qui est yin devient yang (0 va vers 1)
    – ce qui est yang devient yin (1 va vers 0)

    la source du mouvement n’est pas visible et observable (« le Tao qu’on tente de saisir n’est pas le Tao lui-même »), on ne peut que le contempler. Dis de facon plus moderne, le « réel est voilée » https://www.babelio.com/livres/dEspagnat-A-la-recherche-du-reel–Le-regard-dun-physicien/853861

    Mais quand on l’observe, c’est à dire quand on observe ses conséquences, la forme des traces qu’il laisse dans la nature suit un mouvement en spirale
    https://www.science-et-vie.com/le-magazine/il-y-a-100-ans-d-arcy-thompson-revelait-le-sens-des-formes-naturelles-9201

    Et c’est là ou je calle, pour retranscrire la spirale par des règles du jeu de la vie. J’obtiens des règles un peu trop compliqué pour un automate cellulaire
    – point depart
    – bouger vers la droite de Fibonacci(1)
    – bouger vers le haut de Fib(2)
    -bouger vers la gauche de Fib(3)
    -bouger vers le bas Fib(4)
    -etc

    Sans parler de la règle implicite, que tout est relié au Tao, donc tout bouge en même temps (comment gérer les conflits).

    Auriez-vous une idée pour retranscrire des mouvements complexes (comme un mouvement suivant une suite de Fibonacci), en automate cellulaire ?

    Même si cela vous parait farfelue, c’est plus un exercice de l’esprit, je suis preneur de vos idées.

    • Bravo !
      Excellente initiation à l’ouverture des boîtes de Pandore et à la stimulation de la saine curiosité scientifique !
      Je vous encourage à continuer

  4. Superbe ! Merci pour la découverte.
    A se demander si l’univers ne s’est pas crée et n’évolue pas de cette manière. Ce qui voudrait dire qu’en quelque sorte, malgré son chaos apparent, il est déterminé, ce qui rejoindrait d’autres théories.

  5. Excellent
    Si on fait varier les règles , on devait en trouver des bizarreries
    J’ai regardé durant des décennies toutes les émissions scientifiques possibles et imaginables , on en apprend 10 fois plus ici en temps réel .
    J’attend la suite 🙂

  6. Bonjour David,
    Le mot « simple » n’a rien de péjoratif alors que celui de « simpliste », que vous utilisez au départ de votre démo, l’est totalement. Mais vous ne l’utilisez pas par la suite.
    Les mots en « iste » sont des tenants et aboutissants du paroxysme correspondant au mot en « isme » ; les mots en « isme » sont généralement des paroxysmes
    Nous avons développé une civilisation des mots en « isme » et c’est ce qui fait que nous abusons tout : la Nature et les états de nature (métaphysique humain) qui selon J. J. Rousseau n’a peut-être pas existé, qui n’existe plus et n’existera jamais, mais dont il est utile d’avoir une idée (pour distinguer en l’homme ce qui vient de sa nature de ce qui vient de la société). Je ne partage pas (…) car pour moi, inné ou acquit, l’humain devient un tout indissociable. Je termine par … pour avoir une idée la plus juste possible en termes d’entendement… de bonne intelligence et non de malgnité !
    Ainsi l’individualisme c’est l’individualité portée à son paroxysme : l’individu qui se regarde le nombril ! Le libéralisme, c’est la liberté portée à son paroxysme, ceci sans des contraintes inhérentes pourtant indépassables, et qui font avancer les choses en termes d’entendement, autant que la liberté. Bien sûr qu’il faut être libre, ceci, à tout point de vue mais pas poussé au libéralisme !
    Le rationalisme… la rationalité portée à son paroxysme et plus réellement rationalité !
    Le capitalisme… usage paroxysmique du capital, moyen utile et nécessaire à l’économie, mais auquel l’économie est réduite par un simplisme rationaliste qui relève d’une inaptitude intellectuelle qui n’a d’égale qu’une bêtise manifeste en l’occurrence. Je ne suis pas contre le capital, moyen utile et nécessaire à l’économie, mais contre le capitalisme usage paroxysmique du capital !
    Votre point de vue m’intéresse.
    Merci pour ce que vous êtes et faites
    Jean-Yves IZEL dit « ecometa ».

  7. Salut, ou en est tu avec GitHub ?
    Si tu as réussi à mettre ton code en ligne, pourrais-tu mettre un lien dans le billet ?
    PS : merci pour la qualité de tes vidéos, c’est franchement génial !

  8. Voilà le genre de vidéos que j’adore. Je n’aurai jamais découvert le jeu de la vie sans ce blog.
    Merci pour cette découverte étonnante.

  9. C’est bluffant vraiment 🙂 d’arriver à ces résultats avec des règles aussi simple !!… C’est la qu’on se rend compte qu’avec des règles à peine plus compliquées sans doute on doit arriver à .. nous !! 😀

    merci David pour ces informations passionnantes 😉

  10. Superbe vidéo, et très bien expliquée!
    Je suis moi aussi tombé là-dedans il y a quelques années et j’en avais fait une application sur Android.
    Elle est téléchargeable gratuitement sur le Play Store à cette adresse https://goo.gl/SgSA18 (shameless plug…)
    On peut y voir pleins de patterns comme ceux évoqués dans la vidéo, et on peut facilement modifier les règles de survie/naissance des cellules.
    Elle sera plus pratique pour ceux qui ne maîtrisent pas encore le python 😉

  11. Super vidéo, merci , vraiment !

    Ca m’a donné envie d’en parler à mon neveu de 12 ans, qui s’intéresse furieusement aux sciences, et commence à s’intéresser à la programmation.

    Alors, comme forcément, « python + numpy et compagnie » c’est pas forcément facile d’approche pour des tout-débutants, j’ai préparé pour lui une version plus simple, plus didactique et en français. Evidemment, elle est beaucoup, beaucoup moins complète :-).

    Ca utilise « processing » (un langage pratique pour ce genre de programme, et pratique pour apprendre); et on peut jouer avec en ligne, sans rien devoir installer du tout.

    Donc, si certains sont intéressés pour essayer d’initier leur enfants (voir eux-mêmes 🙂 , c’est par ici :

    http://studio.sketchpad.cc/sp/pad/view/fVhzgcOJ9d/latest

  12. et qu’est-ce que ça donne si on met le jeu de la vie sur un thor, sur un cylindre ; une sphère ça doit être trop compliqué? ça parait passionnant; y-a-t-il des choses simples à lire sur les interprétations dans les autres domaines, des résultats concrets ? merci

  13. Désolé d’être le boulet de service mais quand je tape :
    python GameOfLife.py –rlefile_path ./rle/104p177.rle
    j’ai en retour

    ValueError: could not broadcast input array from shape (46,46) into shape (0,0)

    Ai-je loupé qqch ? Version GameOfLife.py du 11/12/2017 21h55
    Merci

  14. Le livre de Stéphan Hawkings m à émane sur votre vidéo
    Déroutante
    Surtout pour quelqu’un un qui n à pas de base physique ni mathématique, qui a ete un acteur de la santé et qui est fasciné par l organisation complexe du corps humain
    Bravo pour votre vidéo
    J en veux plus et encore plus simple
    Dolb

  15. Bonjour,

    Dans mes années d’étudiant (toute fin des 90) je m’étais intéressé à un truc complètement fascinant dans le domaine de l’émergence, qui était plus ou moins inspiré du jeu de la vie: le projet Tierra de Tom Ray. Je ne sais pas s’il y a eu des développement ultérieurement – j’ai prix d’autres chemins dans ma vie après mes études – mais sans doute pas vu que la page web du projet n’a plus été mise à jour depuis bien longtemps: http://life.ou.edu/tierra/

    En gros ils avaient développé une machine virtuelle interprétant un code inventé très proche de l’assembleur (mais beaucoup plus simple). Le « jeu » se déroulait dans une zone mémoire constituée d’une suite de cellule (en gros, une cellule = un octet), chaque cellule contenant soit une donnée, soit une instruction du langage. Les instructions étaient hyper basique: du genre copier le contenue d’une cellule dans une autre, supprimer le contenu d’une cellule, etc…

    La simulation consistait à lancer l’interpréteur qui scannait les cellules une par une: elle ne faisait rien sur une cellule contenant une donnée, et exécutait le code sur une cellule contenant une instruction. Arrivée au bout, il revenait au début pour une nouvelle génération, et ainsi de suite.

    Les membres du projet avaient alors développé des programmes (un programme = une suite de cellule contenant données et instructions dans son langage proto-assembleur inventé) dont deux fonctions importantes était la reproduction (se recopier soi-même dans un autre endroit de la zone de mémoire) et le déplacement (se recopier puis effacer la copie originelle). Ils en avaient créé plusieurs, utilisant des techniques de reproduction et déplacement distinctes, et parfois d’autres fonctions (réparation, détection d’intrusion, etc…). Puis ils les « lâchaient » et les laissaient évoluer de génération en génération…

    Enfin, ils avaient développé des notions de mutation génétiques: des modification aléatoires des contenus des zones mémoires. Parfois ces modifications « tuaient » les programmes sur lesquels ça tombait – en les empêchant de se reproduire par exemple par l’effacement d’une instruction vitale, mais d’autres fois les effets pouvaient mener à des évolutions et changements de comportements.

    Bref ils avaient peu à peu développé tout un écosystème autour de ce concept. Il y a même eu un jeu qui s’est répandu en parallèle pendant quelques temps, où des concurrents développaient chacun un programme « tueurs » lâché dans la zone mémoire à un endroit aléatoire, le but étant de trouver et « tuer » l’autre programme en effaçant son code ainsi que toutes ses copies.

    Un des effets les plus fascinant observés dans le projet est l’émergence d’une forme de parasitisme à travers l’évolution: des programmes évoluaient en se mettant à utiliser le code d’autres programmes pour survivre eux-même ! Voir leur site pour les détails http://life.ou.edu/tierra/ . C’était tellement fascinant que c’est ce qui, notamment, a inspiré l’auteur de SF Dans Simons pour imaginer son TechnoCentre et son Gritche dans les « Cantos d’Hypérion » (il y fait même référence dans le volume Endymion)

    Si vous pouviez un jour faire un billet et une vidéo sur ce sujet j’en serais ravi 🙂

    En tout cas merci pour ce petit coup de nostalgie envers mes passions de jeunesse: ado je me suis beaucoup amusé à coder des jeux de la vie dans ce bon vieux langage Pascal 🙂

  16. Bonjour David.

    Surprise, en regardant une vidéo sur le reversible computing, un commentaire sur https://news.ycombinator.com/item?id=16007128 mentionne que parmi les automates cellulaires élémentaires, le 150 est réversible !

    Il n’est pas surprenant que la règle 150 soit donc moins chaotique que d’autres.
    Même le résultat à partir d’une cellule ressemble à un enchaînement de tuyaux !
    http://mathworld.wolfram.com/Rule150.html
    c’est l’une des 8 règles additives (ce qui module 2 revient à XOR)

    Les autres mentionnées dans la vidéo:
    http://mathworld.wolfram.com/Rule254.html
    http://mathworld.wolfram.com/Rule250.html
    http://mathworld.wolfram.com/Rule190.html (pas 50)
    http://mathworld.wolfram.com/Rule126.html
    http://mathworld.wolfram.com/Rule30.html
    http://mathworld.wolfram.com/Rule110.html

    Merci en tout cas !

    Je vote toujours pour avoir une vidéo de cosmologie, en particulier le « principe holographique ».

    Mais déjà une sur la thermodynamique (la chaleur, le rayonnement du corps noir (déjà mentionné), le second principe) serait plus accessible et permettrait de citer le lien avec le calcul réversible (reversible computing).

  17. Les automates cellulaires ont permis également de créer les premières simulations de gaz sur réseau (lattice gas) qui laissaient présager de leur capacité à illustrer des phénomènes fluides assez réalistes. Ensuite, la méthode de mécanique des fluides numérique ‘Lattice Boltzmann Method’ permet de recréer avec ces méthodes des écoulements incompressibles très réalistes non pas en résolvant les équations de Navier-Stokes comme c’est l’usage, mais plutôt en utilisant les propriétés des fluides selon Boltzmann. Cela donne des résultats très similaires en partant d’équations/hypothèses très différentes au départ. Partant d’un état donné, les états ultérieurs sont déterminés par des considérations d’advection et de collision, avec une petite pointe de hasard artificiel.
    Lattice Gas :

    Lattice Boltzmann en mécanique des fluides :

  18. Bonjour
    J’ai une erreur quand je lance le code python

    File « C:\Users\jean-marc\Desktop\python\GameOfLife_utils.py », line 381, in readpattern
    C[posX:(posX+B.shape[0]),posY:(posY+B.shape[1])] = np.copy(B)
    ValueError: could not broadcast input array from shape (5,1) into shape (0,0)

    Voici la commande exacte que j’ai lancée:
    C:\Users\jean-marc\Desktop\python>py GameOfLife.py –rlefile_path « rle\\five.rle »
    –ffmpeg_path « ..\\Telechargements\\ffmpeg\\bin »

    Apparemment le nom du fichier rle est correctement capturé.
    Je ne savais pas trop ce qu’il fallait mettre comme option pour le –ffmpeg_path, un lien vers ffmpeg.exe ou vers le répertoire contenant ffmpeg.exe, j’ai essayé les 2 ça ne change pas l’erreur

  19. -suite-

    Quand le fichier d’initialisation rle a une ligne qui commence par p, le code s’exécute normalement et j’obtiens bien une video mp4 dans le répertoire \output. C’est le cas avec example1.rle, blinker.rle.
    Sinon ça ne marche pas

    File « C:\Users\jean-marc\Desktop\python\GameOfLife_utils.py », line 381, in readpattern
    C[posX:(posX+B.shape[0]),posY:(posY+B.shape[1])] = np.copy(B)
    ValueError: could not broadcast input array from shape (5,1) into shape (0,0)

    et effectivement quand on regarde le code de la fonction readRLE_new, il y a une extraction de paramètres sur les lignes commençant par p. En l’absence de cette ligne les paramètres prennent une valeur par défaut, par exemple Cshape=(0,0)
    Ensuite dans la fonction readPattern on crée une matrice C à coeff nuls de taille Cshape, donc 0, et on cherche à insérer dans cette matrice une matrice de taille non nulle (B) ce qui provoque le message d’erreur sus cité.

    Y a t-il quelqu’un d’autre qui a testé ce programme ?

  20. Bonjour, super vidéo
    avez-vous connaissance si :
    – il y a des expériences significatives avec des conditions périodiques aux frontières (au bout à droite, on repasse à gauche, idem en haut et en bas)
    – existe-t-il des façons « simples » de coder le jeu de la vie pour des géométries non planes, mais courbées… genre sur une sphère avec un découpage latitude/longitude
    – ce jeu repose sur un modèle de substrat infini (c’est intéressant, mais on peut aussi voir autre chose)… on ne présage rien pour la possibilité de reproduction de la disponibilité d’un autre élément nutritif par exemple… existe-t-il des simulations un peu plus compliquées qui simuleraient une évolution de bestioles qui évolueraient sur un pattern évolutif (dans le temps) de nourriture, un modèle herbivore / végétation (dont la quantité évolue avec la photosynthèse)… pour tout dire, cela reviendrait à créer deux jeux de la vie couplés… avec des règles et des potards à ajuster
    – au final, et si on couple tout ça ? on arriverait à compléter les modèles « temporels » qui permettent de « prédire » que l’avenir est sombre pour notre espèce (les modèles des collapsologues) voire, avant ça, de reproduire les cycles temporels proies/prédateurs qui ne sont finalement représenter que par des équations « macroscopiques » (sens identique à la thermodynamique macroscopique)… vous traitez du problème d’ailleurs avec la vidéo sur le chaos…

    Merci pour le brainstorming !

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s