Intervenant (mais non responsable du module): Jacques Ferber
On cherche à implémenter un système, dans lequel on a un ensemble d'agents qui se déplacent en utilisant à la fois un algorithme d'exploration et un algorithme de flocking
Faire en sorte que l'agent qui a calculé un chemin suive le chemin tracé. Attention, il faudra numéroter les cases du but vers la source pour bien être sûr que l'agent suive le chemin.
Implémenter l'algorithme d'exploration pour qu'il serve pour plusieurs agents...
Si un agent perçoit un chemin, alors il le suit..
Sinon il commence à calculer son algorithme d'exploration (A* ou Dijkstra. S'il rencontre un chemin, alors il ne va pas jusqu'au but, mais il considère que le chemin trouvé est le but, et il "remonte" vers la source...
Implémentez cet algorithme et faites en sorte que les agents avancent vers le but à partir de cet algorithme
(sauvegarder le fichier de l'algorithem d'exploration précédent, car la structure d'exécution est très modifiée)
Maintenant, on modifie l'algorithme pour que le chemin calculé devienne un plan de l'agent (et non plus un tracé de l'environnement). Pour ce faire, on crée un attribut 'plan' dans l'agent et les chemin calculés par draw-path sont retournés sous la forme d'une liste qui sera placé dans cet attribut.
Modifier l'algorithme de déplacement de la question 1) pour que l'agent suive son plan et aille au but en suivant son plan.
Faire en sorte que l'agent n'avance que d'une étape du plan (une case) à chaque tick ! Attention: vous aurez besoin d'un autre attribut pour stocker le plan en cours d'exécution.
On va implémenter un système dans lequel les agents peuvent utiliser le plan des autres:
a) Vérifier que tout fonctionne avec un ensemble d'agents
b) Mettre un bouton 'create-agents' qui recrée des agents (cette fonction fait déjà partie de fichier Netlogo search-algo-generic)
c) Faire en sorte que ces nouveaux agents s'ils sont proches d'autres agents, utilisent les plans des agents voisins:
Execution avec voisins: soit E l’ensemble des voisins, si j'ai un plan, j'exécute ce plan, stop si j'ai un voisin x de E qui a un plan, alors j'exécute le plan de x, stop sinon je calcule un plan, je signale que j'ai un plan, et j'exécute ce plan, stop
Intégrer le flocking au système précédent
a) Faire un bouton qui, au hasard, décide qu'un agent a un but. Il crée un chemin et il le suit (il sort du flocking).
Les agents proches avancent avec lui vers le but.
b) si un agent croise un agent qui a un plan, il le prend pour lui et il le suit...