Algorithme d'agrégation ¶
Programmation créative - L’agrégation et les collisions

Plan de leçon¶
- Récupération du projet
- Chercher une cible
- L’agrégation
- Qu’est-ce que l’agrégation?
- Notions scientifiques
- Cohésion
- Séparation
- Alignement
Récupération du projet¶
- Pour cette leçon, nous allons utiliser le projet
c05_godot_agregation - Testez l’application
- Il s'agit seulement d'objets (boids) qui se déplacent dans une direction aléatoire.
- Parcourez le code pour comprendre les grandes lignes (5 min)
Projet sans agrégation¶
Les boids ne se déplace qu’avec une vitesse initiale

Calculer le vecteur de braquage¶
- Avant de débuter avec l’agrégation, il est important de comprendre comment calculer un vecteur de braquage
- Dans certaine situation, on voudrait qu’un objet atteigne une cible tout en ayant une vitesse de rotation limitée
- Exemple : Véhicule qui se braque dans une direction
- C'est le cas avec la force de cohésion
Algo¶
- Trouver le vecteur de différence entre la cible et l’objet
- Limiter le vecteur de différence (vitesse max)
- Trouver la différence entre le vecteur de différence en la vitesse de l’objet (vitesse de braquage)
- Limiter le vecteur de braquage
- Retourner le vecteur de braquage
Exemple de code¶
Qu’est-ce qu’une agrégation?¶
- Une agrégation est un groupe d’agents dans lequel chaque individu est indépendant et dépendant des autres individus
- Dans la littérature, on va lire sur le swarm ou flocking behaviour
- Chaque individu se nomme un boid
- Synonyme : Essaim, troupeau, banc, volée, etc.
Exemples d’agrégation¶
Volée d'étourneaux
Banc de thons
Notions scientifiques¶
- Le principe de volée nécessite 3 forces
- La cohésion
- La séparation
- L’alignement
- L’addition de ces trois forces sur un ensemble d’agents simule l’effet du comportement de troupeau chez les animaux.

Note : On peut ajouter d’autres forces comme l’attraction vers une cible ou la répulsion d’un obstacle.
- Chacune des forces s’applique dans une limite de distance
- Généralement l’ordre de distance est la répulsion, l’alignement et ensuite la cohésion

La séparation ou répulsion¶
- La force de séparation ou de répulsion est celle qui permet à l’agent de d’éloigner des voisins trop près
- On pourrait la définir comme la bulle personnelle
- On calcule en effectuant la \({\color{blue}moyenne\ de\ la\ différence\ des\ distances}\) divisé par la \({\color{blue}distance}\)
- Ensuite on trouve le vecteur pour trouver la force de braquage
Algorithme¶
- Pour chaque agents qui sont dans la bulle de répulsion
- Diff <-- agent.position – autre.position
- Normalise diff
- Divise diff par la distance
- Somme la diff
- Suivant
- Diviser la somme par le nombre d’agents trouvés
- Cela calcule la direction à atteindre
- Normaliser la division
- Multiplier par la vitesse max
- Soustraire la vitesse de l’agent
- Limiter par la vitesse de braquage max
Exemple de code¶
Visualisation¶
- Avec le projet
c05_autonomous_agentsouvert - Exécutez le projet
- Pendant que le projet s'exécute dans Godot, sélectionnez la scène
World - Dans l'inspecteur, activez la propriété
Separation - Observez le comportement des boids. Que voyez-vous?
Voici ce que vous devriez voir

L’alignement¶
- L’alignement est la force qui permet à l’agent de suivre le groupe
- Elle se calcule en effectuant la moyenne de la vitesse des agents qui sont dans le voisinage établi
Algo¶
- Pour chaque agent dans le voisinage
- Ajouter la vitesse de l'agent à la somme des vitesses
- Incrémenter le compteur
- Diviser la somme par le nombre d'agents
- Calculer la force de braquage avec la moyenne trouvée
Exemple de code¶
Visualisation¶
- Dans l'inspecteur, activez la propriété
Alignment - Observez le comportement des boids. Que voyez-vous?
Voici ce que vous devriez voir

La cohésion¶
- La cohésion est la force à laquelle un agent s’attache à d’autres agents
- Généralement, c’est la force dont le voisinage est le plus grand
Calcul¶
- On calcule la cohésion en effectuant la moyenne de la position de chacun des agents
- Ce calcul donne la cible à atteindre pour l’agent
- Ensuite, on calcule la force de braquage pour atteindre cette cible
Algo¶
- Cible <- Calculer la moyenne des positions des voisins
- Calculer le vecteur de braquage pour atteindre la cible
Exemple de code¶
Visualisation¶
- Dans l'inspecteur, activez la propriété
Cohesion - Observez le comportement des boids. Que voyez-vous?
Voici ce que vous devriez voir.

Sommation des forces¶
- Après avoir calculé les trois forces, on applique une pondération pour chacune d’elle
- Par la suite, on les applique à l’agent
- Le résultat final dépendra des facteurs suivants
- La distance de l’application de chaque force
- La pondération de chaque force
- Le nombre de voisins à considérer
Exemple en appliquant les trois forces avec des agents immobiles

Jouer avec les forces¶

Références¶
- En 5 niveaux de difficulté : Comment fonctionne un banc de poissons?
- http://en.wikipedia.org/wiki/Swarm_behaviour
- http://processing.org/examples/flocking.html
- http://igeo.jp/tutorial/43.html
- http://gamedevelopment.tutsplus.com/tutorials/the-three-simple-rules-of-flocking-behaviors-alignment-cohesion-and-separation--gamedev-3444