Un programme simple pour simuler la vie artificielle primitive en utilisant des règles simples d'attraction ou de répulsion entre des particules de type atome, produisant des modèles complexes et réalistes auto-organisés. En excluant les éléments de l'interface graphique, le code fait moins d'une page. Le didacticiel vidéo et la procédure pas à pas sont disponibles ci-dessous.
https://youtu.be/0Kx4Y9TVMGg
Cliquez ici pour une démo en direct (JavaScript) :
Vous n'avez pas besoin d'être précis avec les paramètres pour reproduire ces modèles. La meilleure façon d'obtenir des modèles intéressants est d'essayer d'abord des explorations de paramètres aléatoires. Une fois que vous avez trouvé un modèle intéressant, essayez de l'affiner progressivement. Pour éviter de rester bloqué à un maximum local, vous pouvez effectuer occasionnellement de gros sauts de paramètres. De cette façon, des modèles intéressants et différents continueront à apparaître.
Téléchargez ce dépôt. décompressez le fichier puis allez dans le dossier /particle_life/bin/ et cliquez sur particule_life.exe
Le code source est disponible en C++, JavaScript et Python. Regardez cette vidéo YouTube pour un didacticiel pas à pas : https://youtu.be/0Kx4Y9TVMGg
Si vous souhaitez contribuer au programme C++, l'algorithme de base est constitué des 100 premières lignes de code à l'adresse : "/particle_life/src/ofApp.cpp". Le reste sont des composants GUI et des contrôles de rendu fournis par la bibliothèque openFrameworks, une bibliothèque de rendu d'image open source et facile à utiliser.
Pour commencer, téléchargez ce référentiel puis téléchargez la bibliothèque openFrameworks à partir d'ici : https://openframeworks.cc/. Utilisez le projectGenerator d'openFramework et importez le dossier /particle_life/ dans le projet.
Vous pouvez également générer un nouveau projet openFramework et ajouter ofxGui. Une fois les fichiers du projet générés, remplacez le dossier /src/ par celui fourni ici.
Vous pouvez maintenant compiler le code C++ sur votre machine.
Consultez également le fichier particule_life.html pour une version plus optimisée - merci à ceux qui ont contribué.
< canvas id =" life " width =" 500 " height =" 500 " > </ canvas >
< script >
//Hunar Ahmad @ brainxyz
m = document . getElementById ( "life" ) . getContext ( "2d" ) ;
draw = ( x , y , c , s ) => {
m . fillStyle = c ;
m . fillRect ( x , y , s , s ) ;
} ;
atoms = [ ] ;
atom = ( x , y , c ) => {
return { x : x , y : y , vx : 0 , vy : 0 , color : c } ;
} ;
random = ( ) => {
return Math . random ( ) * 400 + 50 ;
} ;
create = ( number , color ) => {
group = [ ] ;
for ( let i = 0 ; i < number ; i ++ ) {
group . push ( atom ( random ( ) , random ( ) , color ) ) ;
atoms . push ( group [ i ] ) ;
}
return group ;
} ;
rule = ( atoms1 , atoms2 , g ) => {
for ( let i = 0 ; i < atoms1 . length ; i ++ ) {
fx = 0 ;
fy = 0 ;
for ( let j = 0 ; j < atoms2 . length ; j ++ ) {
a = atoms1 [ i ] ;
b = atoms2 [ j ] ;
dx = a . x - b . x ;
dy = a . y - b . y ;
d = Math . sqrt ( dx * dx + dy * dy ) ;
if ( d > 0 && d < 80 ) {
F = ( g * 1 ) / d ;
fx += F * dx ;
fy += F * dy ;
}
}
a . vx = ( a . vx + fx ) * 0.5 ;
a . vy = ( a . vy + fy ) * 0.5 ;
a . x += a . vx ;
a . y += a . vy ;
if ( a . x <= 0 || a . x >= 500 ) { a . vx *= - 1 ; }
if ( a . y <= 0 || a . y >= 500 ) { a . vy *= - 1 ; }
}
} ;
yellow = create ( 200 , "yellow" ) ;
red = create ( 200 , "red" ) ;
green = create ( 200 , "green" ) ;
update = ( ) => {
rule ( green , green , - 0.32 ) ;
rule ( green , red , - 0.17 ) ;
rule ( green , yellow , 0.34 ) ;
rule ( red , red , - 0.1 ) ;
rule ( red , green , - 0.34 ) ;
rule ( yellow , yellow , 0.15 ) ;
rule ( yellow , green , - 0.2 ) ;
m . clearRect ( 0 , 0 , 500 , 500 ) ;
draw ( 0 , 0 , "black" , 500 ) ;
for ( i = 0 ; i < atoms . length ; i ++ ) {
draw ( atoms [ i ] . x , atoms [ i ] . y , atoms [ i ] . color , 5 ) ;
}
requestAnimationFrame ( update ) ;
} ;
update ( ) ;
</ script >
Simulation de la vie des particules, Soupe Primordiale - Evolution, Jeu de la vie de Conway, Automates cellulaires, Modèles auto-organisés,
Ce projet a été inspiré par : Clusters de Jeffery Ventrella http://www.ventrella.com/Clusters/. Je n'ai pas accès au code de Ventrella mais je suppose que la principale différence de ce projet par rapport aux autres projets sur la vie des particules est que je n'ai pas implémenté la détection de collision, ce qui a permis de simuler des milliers de particules en temps réel. De plus, j'ai ajouté des commandes GUI pour modifier les paramètres en temps réel, permettant un réglage et une exploration faciles. J'ai ainsi pu découvrir que des modèles inédits émergeaient de modèles de relations extrêmement simples. Le code ici est probablement d'un ordre de grandeur plus simple que tous les autres codes de vie artificielle, car j'ai commencé ce code uniquement comme matériel pédagogique destiné aux non-programmeurs et au grand public pour prouver que la complexité peut naître de la simplicité.