Robots extracteurs de minerai

From OFSET Wiki

Jump to: navigation, search

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

  • La zone d'exploration est donc représentée par une grille de 90x90 cases, les robots partent de leurs base située au milieu de la carte. Pour explorer, à l'initialisation, chaque robot reçoit un angle aléatoire.
  • Les filons de minerai sont placés aléatoirement à la création de la carte, on place donc entre 100 et 200 filons de minerai, chacun ayant au maximum 20 unités de minerai.
Principe d'exploration des robots

[edit] Comportement des robots

Nous avons défini plusieurs comportement différents pour les robots.

Le premier comportement que nous avons implémenté est simpliste : [simpleExplore]

  • Si le robot transporte du Minerai
    • Si le Robot est sur la base
      • Déposer le Minerai
      • Avancer
    • Sinon
      • Avancer
    • Fin Si
  • Sinon
    • Si du minerai est présent à la position du robot
      • Miner une unité de minerai
      • Avancer
    • Sinon
      • Avancer
    • Fin Si
  • Fin Si


Carte de base à l'initialisation

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).

Comportement avec simpleExplore
  • Nous avons défini un second comportement quasiment identique au premier mis à part que les robots tournent doucement à chaque déplacement. Cette petite modification nous permet au final de balayer plus vite la carte. [simpleExploreWithSpin]

Un comportement plus évolué a également été créé afin que les robots puissent retourner automatiquement à la base : [exploreToMine]

  • Si Robot transporte Minerai
    • Si Robot est à la Base
      • Déposer minerai
      • Faire exactement demi-tour (pour retrouver la direction du filon de minerai)
      • Avancer
    • Sinon
      • Si bord de la carte atteint
        • Faire exactement demi-tour
        • Se souvenir qu'on a atteint le bord de la carte
        • Avancer
      • Sinon
        • Avancer
      • Fin Si
    • Fin Si
  • Sinon
    • Si Robot est à la Base (il sait donc qu'il n'exploite pas de minerai et qu'il a atteint le bord de la carte)
      • Prendre un angle aléatoire
      • Avancer
    • Sinon
      • Si le Robot peut miner (prendre du minerai)
        • Miner
        • Faire exactement demi-tour
        • Si la quantité de minerai restante est nulle
          • Se souvenir qu'on exploite plus de filon de minerai
        • Avancer
      • Sinon
        • Si bord de la carte atteint
          • Faire exactement demi-tour
          • Se souvenir qu'on a atteint le bord de la carte
          • Avancer
        • Sinon
          • Avancer
        • Fin Si
      • Fin Si
    • Fin Si
  • Fin Si


[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.

Traçage des chemins sans filons

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 ...

La dispersion avec exploreToMine

[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 :

Personal tools