Aller au contenu principal
sports_esports Lab Canvas 2D Multi-agents Comportement émergent Grille spatiale O(n)

Boids — la nuée émergente de Reynolds en Canvas 2D

Un système multi-agents en Canvas 2D : quelques centaines de boids appliquent localement les trois règles de Craig Reynolds (séparation, alignement, cohésion) à leur seul voisinage, et le banc émerge tout seul. Voisinage requêté via une grille spatiale pour rester en O(n), bords toriques, souris qui attire ou repousse la nuée. Zéro dépendance.

Souris : attire la nuée · maintenez le bouton pour la repousser Espace : mettre en pause / reprendre

Une nuée sans chef d'orchestre

Ce que vous voyez à l'écran n'est piloté par personne. Aucun boid ne connaît la forme du banc, aucune ligne de code ne dessine de trajectoire d'ensemble. Chaque agent ne perçoit que ses proches voisins et réagit à eux, image après image. La nuée — ce mouvement fluide et cohérent — n'est écrite nulle part : elle émerge de règles purement locales. C'est le modèle des boids de Craig Reynolds (1986), et c'est un excellent condensé de ce qu'est un système multi-agents.

Trois règles, appliquées au voisinage

Chaque boid n'obéit qu'à trois pilotages, calculés à partir des seuls agents situés dans son rayon de perception : la séparation (s'écarter des voisins trop proches pour éviter la collision), l'alignement (adopter le cap moyen du voisinage) et la cohésion (se diriger vers le centre de gravité local du groupe). Je pondère ces trois forces, je les additionne, puis je borne l'accélération et la vitesse résultantes. Rien de plus. Toute la richesse du comportement tient dans le dosage de ces trois poussées.

Du local au global : l'émergence

L'intérêt de la démonstration est là : à partir de règles individuelles triviales naît un comportement collectif que personne n'a spécifié. Les boids forment des bancs, se scindent devant un obstacle, se recomposent, ondulent. C'est le principe de l'émergence — le tout fait davantage que la somme des parties. Approchez la souris : elle attire la nuée ; maintenez le bouton et elle la repousse. Vous perturbez un agent, jamais le groupe, et pourtant tout le banc réagit.

Le vrai enjeu technique : trouver ses voisins

Écrire les trois règles est simple. Le point dur, c'est la performance du calcul de voisinage. Naïvement, savoir « qui est proche de qui » demande de comparer chaque boid à tous les autres : un coût en O(n²) qui explose dès quelques centaines d'agents. J'utilise donc une grille spatiale : je range chaque boid dans une case selon sa position, et je ne le compare qu'aux agents des neuf cases voisines. Le calcul redevient linéaire, et la simulation tient ses images par seconde même à plusieurs centaines de boids. Les bords sont toriques (sortir d'un côté fait réapparaître de l'autre), ce qui impose de mesurer les distances « au plus court » à travers ces bords.

Pourquoi cette démo compte pour vos projets

Les systèmes multi-agents dépassent de loin le folklore graphique : flux logistiques, simulation de foules, moteurs de recommandation, ordonnancement, jumeaux numériques. Derrière ce banc d'oiseaux, il y a exactement les questions que je traite sur des projets sérieux : modéliser un comportement complexe avec des règles simples et maîtrisables, et surtout choisir la bonne structure de données pour que le calcul reste rapide quand le volume grandit. Un algorithme juste mais en O(n²) ne passe pas à l'échelle ; c'est ce genre d'arbitrage — clarté du modèle d'un côté, performance mesurée de l'autre — qui fait la différence entre une maquette et un système qui tient en production.

Photo d'Emmanuel BALLERY, fondateur de x10

À propos de l'auteur

Emmanuel BALLERY est le fondateur de x10 solutions. Ces petits jeux sont surtout un plaisir de développeur, codés le week-end — pas une vitrine de mes missions, qui sont bien plus exigeantes. J'y soigne quand même la performance et la lisibilité, par habitude.

Voir plus arrow_forward
rocket_launch

Un vrai projet en tête ?

Ce petit jeu m'amuse, mais il ne dit pas grand-chose de mon métier : mes missions sont bien plus complexes. Si vous avez une application à concevoir ou à fiabiliser, c'est là que je suis vraiment utile.

Discuter de mon projet arrow_forward