Loading
La première version ne produisait que deux choses : des amas singuliers et de la poussière en expansion. Une zone de répulsion a tout changé.
Lancer la simulation
0101 / 09La première version de Particle Life était morte de deux manières différentes.
Lorsque deux couleurs s'attiraient, elles accéléraient l'une vers l'autre jusqu'à occuper presque le même point. Un millier de particules devenait une poignée de singularités lumineuses : intenses visuellement, inutiles physiquement. Lorsque la matrice imposait une répulsion, elles se dispersaient jusqu'à former une poussière uniforme. Pas de membranes, pas de chaînes, pas de bras en rotation, rien qui puisse persister assez longtemps pour devenir intéressant.
Chaque matrice ne faisait que varier entre effondrement et dispersion.
Ce n'était pas un problème de réglage. Réduire la force, augmenter le frottement ou choisir des valeurs plus douces ne changeait que la vitesse d'arrivée du même échec. La forme de la force était fausse. Je demandais à l'attraction de créer à la fois le rapprochement et la séparation, alors qu'elle ne sait produire que le premier.
Le projet a commencé à fonctionner lorsque les particules ont appris à garder leurs distances.
L'idée décisive : Une structure stable exige deux instructions opposées : rapproche-toi lorsque tu es assez loin, mais éloigne-toi lorsque tu deviens trop proche.
Ce laboratoire utilise l’équation et les plages du moteur. f est normalisé ; un voisin contribue Δv = f × 80 × 1/60 avant friction.
Particle Life commence avec des objets trop simples pour mériter le mot agent.
Chaque particule possède une position, une vitesse et l'un des cinq types colorés. Elle n'a ni mémoire, ni objectif, ni capteur, ni modèle du monde. À chaque étape de physique, elle observe uniquement ses voisines et pose deux questions : quel est leur type, et à quelle distance se trouvent-elles ?
La première réponse sélectionne une valeur dans une matrice d'interaction 5×5. La seconde traverse une courbe de force. Ensemble, elles décident si la particule accélère vers sa voisine ou s'en éloigne.
C'est tout le vocabulaire comportemental : vingt-cinq relations directionnelles, une loi de distance, répétées dans des milliers de rencontres locales soixante fois par seconde simulée.
Mon but n'était pas d'animer quelque chose qui semblait vivant. Une animation m'aurait permis de dessiner le résultat souhaité. Je voulais définir une physique locale puis perdre le contrôle du résultat global — créer les conditions dans lesquelles une structure pourrait apparaître sans être placée dans le code.
J'ai développé la distinction générale dans Émergence et complexité. Particle Life en est l'expérience concrète : si la règle est vraiment simple, on doit pouvoir la toucher, la modifier et regarder sa conséquence se propager.
La première force était la plus forte exactement là où elle aurait dû être la plus prudente.
Imaginez deux particules qui s'attirent. Si leur force reste attractive jusqu'à une distance nulle, chaque étape les rapproche. Elles gagnent une vitesse dirigée vers l'intérieur et se dirigent vers la singularité numérique du même point. Le frottement peut ralentir l'effondrement, mais il ne crée aucune distance à laquelle la paire aurait une raison de s'arrêter.
Inversez le signe. Une paire répulsive s'éloigne jusqu'à sortir du rayon d'interaction. La force devient alors nulle et les particules restent séparées. À l'échelle de deux mille particules, le résultat est inévitable :
| Relation | Résultat local | Résultat global |
|---|---|---|
| Attraction jusqu'à zéro | Les paires s'effondrent | Amas singuliers denses |
| Répulsion dans le rayon | Les paires se séparent | Poussière uniforme |
Il manquait un équilibre : une distance où l'instruction change de signe.
Le moteur livré normalise la distance avec t = d / R, où d est la distance entre deux particules et R le rayon maximal d'interaction. Il divise ce rayon en deux zones actives.
0 ≤ t < β répulsion universelle
β ≤ t < 1 attraction ou répulsion de la matrice
t ≥ 1 aucune forceLa zone proche ignore les couleurs et la matrice : toutes les paires s'y repoussent. Dans la zone centrale, la matrice 5×5 prend le contrôle. Au-delà de R, la paire n'interagit plus.
La valeur de la matrice ne contrôle que la zone centrale. La répulsion à courte portée est universelle : l'attraction peut donc se stabiliser sans s'effondrer.
Dans le moteur, la force scalaire suit cette fonction :
const t = distance / interactionRadius;
const force = t < beta
? t / beta - 1
: matrix[myType][theirType] *
(1 - Math.abs(2 * t - 1 - beta) / (1 - beta));La première branche monte de -1 à distance nulle jusqu'à 0 en β. Elle est toujours répulsive. La seconde est un puits triangulaire : nul aux deux extrémités, maximal au milieu et signé par la matrice.
Les valeurs par défaut sont R = 100 px et β = 0.3. La frontière se trouve donc à :
β × R = 0.3 × 100 px = 30 pxPour une paire attractive, la zone centrale tire vers l'intérieur tandis que la zone proche pousse vers l'extérieur. Le changement se produit à 30 pixels : c'est là que la paire se stabilise. Les tests ne vérifient pas seulement l'équation ; ils simulent une vraie paire et mesurent sa séparation finale. Avec les paramètres réglés, le résultat est de 30,00 pixels dans la tolérance du test.
Une paire répulsive est poussée vers l'extérieur dans les deux zones jusqu'à approcher R. Au-delà de 100 pixels, elle ne ressent plus rien. La même courbe permet donc proximité stable et séparation nette sans cas particulier.
Deux particules séparées par une distance stable ne sont pas vivantes. Mais elles introduisent ce que la première version ne pouvait jamais produire : un espace vide persistant.
Cet espace donne une forme intérieure à un amas. Une chaîne acquiert une longueur de maillon. Une membrane résiste à la compression. Plusieurs couleurs peuvent occuper des régions voisines au lieu de s'effondrer sur une coordonnée unique. Dès que le système préserve la distance, la matrice peut organiser cette distance.
Les formes globales ne sont pas des modèles cachés :
Galaxy ne dessine de bras rotatifs ;Chaque particule additionne des forces locales, actualise sa vitesse et réapparaît de l'autre côté du monde. « Galaxy », « Cells » et « Soup » sont des noms donnés après coup à des matrices, pas des routines d'animation.
C'est ici que le mot émergence devient précis. La règle contient une distance de paire préférée. Elle ne contient pas une boucle de poursuite rotative à cinq couleurs. Cette boucle n'apparaît que lorsque de nombreuses relations directionnelles agissent ensemble dans l'espace et le temps.
Il est tentant de traiter forceScale, le frottement, R et β comme quatre curseurs indépendants. Le moteur m'a appris le contraire.
Le frottement s'applique à chaque étape fixe. Avec la force initiale, il plafonnait les vitesses terminales sous la plage d'acceptation, quelle que soit la matrice. Il a fallu mesurer le système, explorer la grille de paramètres autorisée et régler la courbe comme un ensemble.
Les valeurs finales ne sont pas des constantes sacrées de la nature. Elles définissent un point de fonctionnement mesuré pour cette échelle, ce nombre de particules, ce pas de temps et ce langage visuel. Changez le pas de temps ou le modèle de frottement, et les mêmes nombres ne signifient plus la même chose.
Particle Life produit un mouvement qui semble vivant. Cela ne prouve pas que ses particules sont vivantes.
Elles ne se reproduisent pas, ne consomment pas d'énergie, ne s'adaptent pas et ne préservent aucune information entre générations. Qualifier un amas rotatif d'organisme remplacerait une question intéressante par une métaphore facile.
La simulation montre quelque chose de plus étroit : des comportements que nous décrivons spontanément avec un vocabulaire biologique peuvent naître de particules qui ne possèdent aucune propriété biologique. Une poursuite peut apparaître sans désir. Une cohésion sans loyauté. Une frontière sans constructeur.
Connu, mesuré, inconnu : La loi de force est connue. L'espacement et les métriques sont mesurés. Le lien entre l'impression visuelle de vie et une réalité scientifique plus profonde reste ouvert.
Ouvrez la simulation Particle Life et choisissez Galaxy.
Ne changez rien pendant quinze secondes. Regardez l'espacement s'établir avant que les grands bras deviennent lisibles. Mettez ensuite en pause et rapprochez exactement une cellule positive de la matrice de zéro. Relancez pendant quinze secondes.
Ne demandez pas seulement si le résultat reste beau. Demandez-vous : une couleur a-t-elle cessé de rejoindre les structures ? Le nombre d'amas a-t-il changé ? Le mouvement s'est-il stabilisé ? La modification a-t-elle affecté tout le monde ou une seule relation ?
Dans la partie 2, la matrice cessera d'être un mur de vingt-cinq curseurs pour devenir un langage lisible — un langage où une couleur peut poursuivre pendant qu'une autre fuit.
Plus à lire
La matrice n'est ni une palette ni un panneau de commande. C'est un langage directionnel pour l'attraction, la répulsion, la poursuite et la structure.
Temps fixe, graines déterministes, monde toroïdal et hachage spatial : ce qui permet à deux mille particules de rester une expérience.
Le rendu n'est pas décoratif. Il rend lisibles distance, mouvement, relations et défaillances sans modifier la physique.