Robots extracteurs de minerai
From OFSET Wiki
Contents |
[edit] Auteurs
- Hamadache Kahina & Coquelin Yvan
- Master Informatique 1ère Année 2005/2006
- Université de Caen - UFR de Sciences
- Projet d'Intelligence Artificielle Distribuée (UE08 - IAD)
[edit] Présentation de la simulation
Le projet que nous avons choisi de réaliser est une simulation de robots explorateurs et extracteurs de minerai. Ces robots sont des agents tropiques, c'est à dire qu'ils ne réagissent que par réflexes, en fonction de ce qu'ils peuvent percevoir. On a pris l'exemple de robots devant explorer une planète ou une zone inconnu à la recherche de minerai.
[edit] Fonctionnement général
[edit] Configuration de Base
| |
[edit] Comportement des robotsNous avons défini plusieurs comportement différents pour les robots. Le premier comportement que nous avons implémenté est simpliste : [simpleExplore]
|
Ce comportement est relativement "bête" dans le sens ou un robot n'est pas sur de retourner à sa base. Mais il a l'avantage de balayer la quasi totalité de la carte assez rapidement. Ce comportement a cependant l'intérêt d'être très simple à mettre en oeuvre et n'a nécessité que quelques blocs pour être réalisé (si on ne considère pas l'initialisation).
|
|
Un comportement plus évolué a également été créé afin que les robots puissent retourner automatiquement à la base : [exploreToMine]
|
[edit] Amélioration du comportement des robots
Afin d'améliorer le déplacement et le comportement des robots nous avons ajouté une "fonctionnalité" qui fait que lorsqu'un robot heurte un bord de la carte, il laisse une trace derrière lui jusqu'à arriver à une certaine distance de la base. Cette trace correspond en fait au marquage d'un chemin emprunté et indique aux autres robots que cette direction ne possède pas de filon de minerai (DeadEnd) et qu'il peut donc faire demi-tour pour retourner à la base et prendre une autre direction.
Cette amélioration a pourtant un défaut majeur (du au fait que la représentation est faite sur 100x100 cases) est qu'une partie du minerai ne pourra jamais être exploitée, puisque des chemins inexplorés ne seront pas atteint du fait du "blocage" de chemins très proches.
[edit] Analyse des résultats
|
Les résultats que nous avons eu avec ces différentes méthodes sont assez différents, en effet la méthode la plus simple permet d'atteindre quasiment tous les minerais, mais ceci dans un temps très long, les robots ne sachant pas ou se trouve la base, ils doivent donc d'abord retrouver la base pour déposer leur minerai une fois qu'ils en ont ramassé une unité. La deuxième solution simple qui cette fois ajoute une rotation au déplacement semble nous permettre de parcourir la carte plus rapidement que la première méthode, cependant, comme pour la première méthode, le déplacement aléatoire sans connaître la position de la base prend relativement beaucoup de temps pour atteindre tous les filons de minerai. La solution plus complexe où les robots font demi tour pour retourner à la base et retourne exploiter les filons de minerai qu'ils ont trouvé et qui ne sont pas encore épuisés semble bien plus efficace en terme de temps que les deux premières méthode, cependant, du fait de la représentation assez limitée de la carte, tous les filons de minerai ne peuvent pas être atteints par cette solution. Malgré ce problème, cette solution est bien meilleure que les autres, du fait que les robots ne se perdent pas en théorie. En théorie seulement, puisque la représentation fait que certains robots peuvent "rater" la base et donc se perdre ... |
[edit] Remarque
Nous avons eu quelques problèmes lors de la réalisation de ce projet, notamment avec les fonctions angleTo et distanceTo , en effet, malgré de nombreuses tentatives pour faire fonctionner correctement ces fonctions, nous n'avons pas réussi à les employer. Aucune des méthodes que nous avons employé n'a réussi à les faire fonctionner. En regardant les autres projets que nous avions à notre disposition (tels que les fourmis et leurs "nid") nous avons essayer de recopier leurs façon de faire, cependant, ils utilisaient la fonction "turtleAt" pour trouver une tortue à une certaine position, fonction que nous n'avons pas réussi à trouver dans l'interface Kedama, nous avons donc supposé que cette fonction correspondait à "turtleOf". Mais cette fonction n'a pas donné plus de résultats.
Si nous avions pu utiliser correctement ces fonctions, cela nous aurait permis de réaliser des comportement peut être plus intelligents en explorant plus précisément la carte.
[edit] Liens
Voir et étudier le projet :

