IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

A* , graphe , arbre de recherche


Sujet :

Algorithmes et structures de données

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Points : 176
    Points
    176
    Par défaut A* , graphe , arbre de recherche
    Bonjour,
    J'essaye de comprendre le fonctionnement de l'algorithme A* , mais je suis perdu avec la notion d'arbre de recherche.
    cet algo est bien fait pour être utiliser dans un graphe , alors pourquoi parle t-on d'arbre de recherche ?
    Merci

  2. #2
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    Bien le bonsoir,

    l'algorithme A* ne nécessite pas d'arbre de recherche.
    Il fonctionne sur un graphe et il a besoin de deux listes.

    Ensuite, et selon les optimisations que tu souhaites apporter, tu peux utiliser des arbres de recherche à la place des listes, de même que tu peux utiliser des listes triées à la place des simples listes. Mais rien ne t'y oblige.

    comprendre l'algo A*

  3. #3
    Débutant
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Points : 176
    Points
    176
    Par défaut
    Merci

  4. #4
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    L'algo A* est bien un algorithme de recheche dans un graphe. Son but est de construire un chemin d'un sommet de départ, vers un sommet d'arrivée (ou un ensemble désignés comme finaux). Il se base sur une évaluation heuristique du chemin restant à parcourir, permetant ainsi de rechercher d'abord les noeuds les plus prometteurs.

    Son principe n'est guere different d'un parcours classique d'arbre. Dans le cas ou l'on considère une heuristique nulle, (aucune information pour avantager des noeuds) elle se comporte comme un parcours en largeur.

    Tu trouveras sur le net, ou dans des livres. De nombreuses explications et démonstration de l'optimalité avec une heuristique admissible (qui ne surestime jamais la distance restante à parcourir). Par contre, plus l'heuristique est proche de la réalité plus vite l'algo trouvera une solution.

    Le point important, c'est le choix d'une heuristique. En cela seul l'expérience et la nature du graphe, permet vraiment de décider.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    Au sujet de l'arbre, c'est celui que dessine le parcours dans le graphe. La structure d'arbre est implicte. On y a souvent recourt, en ne conservant que les transformations d'etat et le parent du noeud sur son chemin. Alors il suffit d'effectuer ces transformations jusqu'aux parent commun, pour faire le saut d'un noeud à l'autre. (ou simplement depuis la racine)

    C'est pratique lorsque l'information à chaque noeud est lourde. Un tableau même s'il n'est pas grand pris tous seul, s'il est alloué pour 1000 ou 10000 noeuds consomme vite la memoire.

  6. #6
    Débutant
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Points : 176
    Points
    176
    Par défaut
    si on applique A* au 'jeux du taquin' , précisement un plateau d'une taille 2*2 et en prenant comme heuristique
    le nombre de case mal placé, en quoi le test présant dans A* g(e') > g(e) + h(e) avec e' successeur de e est utile?

    merci

  7. #7
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par guillaume07
    en quoi le test présant dans A* g(e') > g(e) + h(e) avec e' successeur de e est utile?
    Je dirais qu'il n'est pas présent, enfin je vois pas où tu le case. par contre

    g_nouveau(e') < g_ancien(e')

    sert à savoir s'il faut modifier le chemin menant à e'.

    les tests d'évaluation ne servent que dans la file de priorité des noeuds en attente (noeuds ouverts), pour savoir lequel traiter en premier. Le critère étant f(e) = g(e) + h(e)

    En ce qui concerne le taquin. l'heuristique
    h1(e) = nb d'éléments mal placés

    est moins précise que
    h2(e) = somme des déplacements nécéssaire (chaque case étant considérée seule)

  8. #8
    Débutant
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Points : 176
    Points
    176
    Par défaut
    oui et en cherchant sur google tu verras qu'il y a une heuristique encore plus informée, le test dont je parle se situe au même niveau que le test de la présence () ou non du noeud dans 'la file des ouverts et des fermés', c'est à dire juste avant de mettre à jour la qualité du noeud et de l'ajouter à l'ensemble des ouverts.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    Non non, je confirme. Pas de tel test dans A*, seul les evaluations totales sont comparés, (f=g+h). Que ce soit pour mettre à jour les noeud open, ou pour choisir le meilleur.

    Jamais tu ne compare les g ou les h, encore moins un g à un g+h. Du moins dans l'algo standard. Regarde l'article sur wikipedia il est plutôt bien fait.

  10. #10
    Débutant
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Points : 176
    Points
    176
    Par défaut
    a oui erreur de clavier, le test dont je parle c'est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g(e')>g(e)+k(e,e')
    où k représente le coût pour aller de e à e'

    mais malgrès tout je n'en perçoit toujours pas l'intérêt dans le cas que j'ai mentioné..

  11. #11
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    g(e')>g(e)+k(e,e')

    ok, c'est juste pour tester si le nouveau chemin (g(e)+k(e,e')) est plus court que l'ancien (g(e'))

    tu peut également tester directement les f = g + h, h n'étant pas sensé dépendre du chemin (que t'as emprunté), mais seulement de l'état courant. Ce test est donc equivalent à

    ancienne_evalution(e') moins bonne que nouvelle_evaluation(e')

    dans l'affirmative de laquelle il faudra modifier les infos concernant le noeud dans OPEN (et l'y remettre s'il n'y etait plus).

  12. #12
    Débutant
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Points : 176
    Points
    176
    Par défaut
    mais dans le cas du taquin 2*2 , on s'en sert jamais de ce test , nan ?

  13. #13
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    Non, en effet dans un cas aussi simple il ne servira pas. Car tu est sûre d'explorer un noeud d'abord par son chemin le plus court (à condition d'utiliser une heuristique admissible, c'est à dire positive et qui ne surestime pas la distance restante)

    Par contre c'est presque inutile d'utiliser A*, dans ce cas aussi simple. Un parcours en largeur te donnant les même résultats, plus rapidement (pas de priorité à gérer dans la file d'attente)

  14. #14
    Débutant
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Points : 176
    Points
    176
    Par défaut
    oui c clair, mais ça fait quand même économiser quelques noeuds

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/04/2009, 18h05
  2. arbre binaire & rechercher arborescence
    Par tomsc dans le forum Débuter
    Réponses: 2
    Dernier message: 18/11/2008, 21h19
  3. Arbre de recherche binaire
    Par dword2add dans le forum C++
    Réponses: 5
    Dernier message: 03/12/2007, 15h51
  4. Arbre de recherche pour jeu Teeko
    Par Rastacouéne dans le forum Prolog
    Réponses: 4
    Dernier message: 02/12/2007, 22h11
  5. Arbre de recherche : quel algo conseiller ?
    Par cedico dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 02/12/2005, 11h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo