1 points par GN⁺ 2023-12-30 | 1 commentaires | Partager sur WhatsApp

Simulation de vie particulaire

  • Un programme simple qui simule une forme primitive de vie artificielle à l’aide de règles simples d’attraction et de répulsion entre des particules semblables à des atomes.
  • En dehors des éléments de GUI, le code tient sur moins d’une page.
  • Une vidéo tutorielle et des explications sont disponibles ci-dessous.

En savoir plus (tutoriel vidéo YouTube)

  • Lien vers un tutoriel vidéo YouTube.

Démo en ligne (version JavaScript)

  • Liens vers des démos 2D et 3D en direct.

Interface (version C++)

Exemples de résultats

Quelques motifs intéressants que vous pouvez reproduire

  • Il n’est pas nécessaire de faire correspondre exactement les paramètres pour reproduire ces motifs.
  • La meilleure façon d’obtenir des motifs intéressants est de commencer par explorer des paramètres aléatoires.
  • Une fois un motif intéressant trouvé, essayez ensuite de l’affiner progressivement.
  • Il est possible de faire de grands sauts de paramètres de temps en temps afin d’éviter de rester bloqué sur un maximum local.

Mode d’emploi

  • Téléchargez ce dépôt, décompressez-le, allez dans le dossier /particle_life/bin/, puis cliquez sur particle_life.exe.

Code

  • Le code source est disponible en C++, JavaScript et Python.
  • Lien vers un tutoriel vidéo YouTube.
  • Si vous souhaitez contribuer au programme C++, l’algorithme principal se trouve dans les 100 premières lignes de "/particle_life/src/ofApp.cpp".
  • Le reste correspond aux composants de GUI et aux contrôles de rendu fournis par la bibliothèque openFrameworks.
  • Pour commencer, téléchargez ce dépôt ainsi que la bibliothèque openFrameworks, puis utilisez le projectGenerator d’openFrameworks pour importer le dossier /particle_life/ dans votre projet.
  • Vous pouvez aussi créer un nouveau projet openFrameworks, ajouter ofxGui, puis remplacer les fichiers de projet générés par le dossier /src/ fourni ici.
  • Vous pouvez maintenant compiler le code C++.

Autres ports

  • Une liste de versions portées dans différents langages est fournie, notamment Godot, Rust, Go-1, Go-2, Go-3, Python, Lua, QB64-PE, WebGL, Java, C# Winforms, FreeBasic, etc.

Exemple de code JavaScript

  • Vous pouvez consulter un exemple de code JavaScript ainsi que sa version optimisée, le fichier particle_life.html.

Sujets liés

  • Explications sur la simulation de vie particulaire, la soupe primitive - évolution, le Jeu de la vie de Conway, les automates cellulaires, les motifs d’auto-organisation, etc.
  • Ce projet s’inspire de Clusters de Jeffery Ventrella et a pu simuler en temps réel des milliers de particules en n’implémentant pas la détection de collision.
  • En ajoutant des contrôles GUI pour permettre un réglage fin et une exploration en temps réel des paramètres, des motifs jamais vus dans un modèle relationnel pourtant très simple ont pu émerger.
  • Ce code a commencé comme support pédagogique et s’adresse aux non-programmeurs et au grand public pour montrer que la complexité peut émerger de la simplicité.

Liste de tâches

  1. Ajouter une fonctionnalité permettant d’enregistrer et de charger les paramètres (afin que les gens puissent facilement partager des modèles intéressants)
  2. Ajouter la possibilité d’avoir davantage de types de particules (actuellement limité à quatre types de particules)
  3. Le principal goulot d’étranglement actuel est la boucle for imbriquée qui calcule les distances par paires entre toutes les particules, ce qui donne une complexité quadratique.
  4. Comme alternative au point 3, le calcul des distances par paires est suffisamment parallélisable pour être exécuté sur GPU.
  5. Ajouter la possibilité de redimensionner la taille de l’écran et améliorer les vérifications de limites (des particules se déplaçant rapidement peuvent sortir de l’écran).
  6. Ajouter une UI plus intuitive permettant un contrôle plus fin des paramètres.
  7. Ajouter un bouton aléatoire, ou mieux, une méta-règle simple qui fait varier continuellement les règles initiales afin que les motifs continuent d’évoluer au lieu de rester bloqués sur un maximum local.
  8. Une meilleure méthode consisterait à utiliser un algorithme évolutionnaire pour sélectionner et optimiser les paramètres, mais cela nécessiterait d’écrire une fonction d’aptitude. À ce stade, on ne sait pas encore ce que serait une fonction d’aptitude dans le cadre de ce programme.

Avis de GN⁺

  • Ce projet a une grande valeur pour montrer visuellement comment des phénomènes complexes du vivant peuvent émerger à partir de règles simples.
  • Il peut constituer une ressource d’introduction intéressante pour les ingénieurs logiciels débutants qui s’intéressent à la programmation et à la recherche sur la vie artificielle.
  • Comme il existe des versions portées dans de nombreux langages, cela peut aussi aider à élargir sa compréhension de différents langages de programmation.

1 commentaires

 
GN⁺ 2023-12-30
Avis Hacker News
  • Mon premier projet de code à l’école, c’était le Jeu de la vie de Conway. Comme le noir et blanc était ennuyeux, j’ai introduit des « gènes » RGB et ajouté des mutations en combinant les couleurs des parents. C’est amusant de voir des « factions » prendre le contrôle du plateau.
  • Le résultat le plus intéressant a été de voir se former pendant un moment de gros amas instables et des amas stables, puis le système se figer dans cet état. Avant cela, j’ai observé, comme prévu, des objets qui se rencontrent et fusionnent.
  • J’ai créé quelque chose de similaire récemment, mais cette version gère tout avec des shaders WebGL et conserve l’état de la simulation dans des textures/uniforms. Elle peut simuler et afficher davantage de particules, mais comme elle utilise certaines extensions WebGL non prises en charge, elle risque de ne pas fonctionner sur tous les appareils.
  • C’est une version plus complexe que le Jeu de la vie de John Conway, et il est surprenant de voir à quel point des formes proches du vivant apparaissent facilement à petite échelle, alors que les paramètres de notre univers semblent rendre la formation de la vie difficile.
  • Liens associés :
  • Mélanger des « gènes » colorés au Jeu de la vie de Conway, c’est un peu comme coder avec une palette arc-en-ciel, et les amas donnent l’impression de jouer leur propre petit drame avant de simplement se reposer. La simulation fait émerger de beaux mouvements et de belles formes, comme un mini film de super-héros avec des formes à la place des personnages.
  • J’ai commencé une expérience 3D appelée « Altphy », mais c’est trop complexe pour du temps réel et cela ne fonctionne pas comme prévu. Je partage ça parce qu’une partie du code ou des idées pourrait peut-être évoluer un jour.
  • J’ai essayé de faire quelque chose de similaire dans Godot 4 avec des compute shaders. Si cela vous intéresse, je recommande d’y jeter un œil.
  • Je regarde la version 3D en JS, et c’est peut-être mon truc préféré depuis le Jeu de la vie de Conway original ou l’écran de veille Primordial Life des années 90. Je suggère d’envisager l’ajout du support des shaders. J’aimerais voir tourner en plein écran une version lente et « plus blob ». Ça transformera peut-être un Mac en radiateur, mais à ce stade c’est presque un bonus.
  • C’est vraiment très réussi, mais c’est dommage que je ne puisse pas le faire tourner sur une TV accrochée au mur. J’avais pris « Particle Life » pour une marque de t-shirts destinée aux physiciens, et je m’attendais à des slogans du genre : « Après vous avoir entendu parler, j’ai le sentiment qu’il est justifié d’ignorer tout ce que vous dites, car vous n’êtes qu’une vibration malchanceuse dans un champ quantique. »