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* ou A star


Sujet :

Algorithmes et structures de données

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 85
    Points : 46
    Points
    46
    Par défaut A* ou A star
    Salut à tous ^^


    Je suis en train de plancher sur une implémentation de l'algo A* dans le cadre d'un problème de recherche opérationnel (Trouver le meilleur trajet entre un point A et un point B).
    Je code tout ça en java.


    J'ai vu ce pseudo code sur Wikipedia :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
     
        START : nœud de départ
        GOAL : nœud d'arrivée
        OPEN : liste des nœuds à traiter (en général : représenté comme une file de priorité)
        CLOSED : liste des nœuds traités
        N : nombre de nœuds
        h(i) : distance estimée d'un nœud i au nœud d'arrivée (i ? {1, 2, ..., N})
        g(i) : distance réelle d'un nœud i au nœud de départ (i ? {1, 2, ..., N})
        f(i) : somme des distances h(i) et g(i)
        parent() : parent d'un nœud i (parent(x) donne la position dans parent() du nœud précédant x))
     
     
        * Initialiser la liste OPEN à vide
        * Initialiser la liste CLOSED à vide
     
     
        * Ajouter START à la liste OPEN
        * Tant que la liste OPEN n'est pas vide
     
        * Retirer le nœud n de la liste OPEN tel que f(n) soit le plus petit
        * Si n est le GOAL retourner la solution ;
        * Sinon ajouter n a CLOSED
        * Pour chaque successeur n´ du nœud n
     
        * Heuristique H = estimation du coût de n´ au GOAL
        * Stocker dans G_tmp g(), le coût g(n) + le coût pour aller de n à n´
        * Stocker dans F_tmp f(), g() + H ; c'est l'heuristique
     
        * Si n´ se trouve déjà dans OPEN avec un f() meilleur on passe au point n´ suivant
        * Si n´ se trouve déjà dans CLOSED avec un f() meilleur on passe au point n´ suivant
        * Mettre n dans parent(n')
        * Mettre G_tmp dans g(n')
        * Mettre F_tmp dans f()
        * Retirer n´ des deux listes OPEN et CLOSED
        * Ajouter n´ à la liste OPEN

    Je comprends pas ce qu'ils veulent dire par "on passe au point n´ suivant" ?:


    Bizarrement la compréhension de l'algo en lui même ne me pose aucune difficulté mais j'ai du mal avec son implémentation


    Merci de votre aide

  2. #2
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Je pense que ceci peut t'aider :

    http://khayyam.developpez.com/articles/algo/astar/

  3. #3
    Membre confirmé
    Profil pro
    Directeur Scientifique
    Inscrit en
    Avril 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur Scientifique

    Informations forums :
    Inscription : Avril 2005
    Messages : 419
    Points : 554
    Points
    554
    Par défaut
    Citation Envoyé par denebj
    Je comprends pas ce qu'ils veulent dire par "on passe au point n´ suivant" ?:
    Il veulent simplement dire "passer à l'itération suivante de la boucle", ce qui serait équivalent à un "continue" en c++.

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 85
    Points : 46
    Points
    46
    Par défaut
    Ok merci bien
    J'en profite pour poser une question plus technique, c'est possible de créer une table de hachage qui stocke plusieurs données sur une ligne, par exemple avoir pour clef Toulouse et que cela me renvoi plusieurs données ?
    Exemple Clef Toulouse => 100 ,Toto , 487

    Je n'ai vu que des tables de hachage ou la clef ne renvoi qu'à une valeur, mais pas à une série de valeurs.

  5. #5
    Membre confirmé
    Profil pro
    Directeur Scientifique
    Inscrit en
    Avril 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur Scientifique

    Informations forums :
    Inscription : Avril 2005
    Messages : 419
    Points : 554
    Points
    554
    Par défaut
    Non, il n'y a pas de problème pour faire cela. On peut par exemple réunir toutes les données dans une seule structure ou mettre plusieurs champ dans la structure.

    Si tu as des questions plus précises là-dessus, je te conseille d'ouvrir une nouvelle discussion avec un nouveau titre (éventuellement dans un nouveau forum s'il s'agit dun problème d'implantation).

  6. #6
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    Citation Envoyé par denebj
    J'en profite pour poser une question plus technique, c'est possible de créer une table de hachage qui stocke plusieurs données sur une ligne, par exemple avoir pour clef Toulouse et que cela me renvoi plusieurs données ?
    Une table de hachage de listes ? (ou alors effectivement une structure créée pour l'occasion pour tout réunir)

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 85
    Points : 46
    Points
    46
    Par défaut
    A oui c'est bon, j'ai crée une table de hachage contenant une structure, ça marche au poil

    Résolu.

    Merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/03/2005, 18h42

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