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
- Ajouter une fonctionnalité permettant d’enregistrer et de charger les paramètres (afin que les gens puissent facilement partager des modèles intéressants)
- Ajouter la possibilité d’avoir davantage de types de particules (actuellement limité à quatre types de particules)
- 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.
- Comme alternative au point 3, le calcul des distances par paires est suffisamment parallélisable pour être exécuté sur GPU.
- 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).
- Ajouter une UI plus intuitive permettant un contrôle plus fin des paramètres.
- 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.
- 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
Avis Hacker News