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* : heuristique et admissibilité


Sujet :

Algorithmes et structures de données

  1. #1
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut A* : heuristique et admissibilité
    Bonjour,

    Je cherche à appliquer un A* au problème du Sokoban
    http://fr.wikipedia.org/wiki/Sokoban

    Le principe est très simple : soit un puzzle (représenté par une matrice) comportant un personnage (le pousseur), des caisses et des goals. Le but est de pousser toutes les caisses dans les goals sachant qu'on ne peut pousser qu'une seule caisse à la fois. Il est interdit de tirer une caisse. Un goal ne peut avoir qu'une caisse dessus.

    J'ai lu sur internet que l'algorithme A* est optimal, c'est à dire retourne toujours la solution la plus courte si la fonction heuristique utilisée est admissible, c'est à dire si elle ne sur-estime jamais le coût entre le noeud considéré et l'objectif final.

    J'essaye d'appliquer cela au Sokoban. Soit l'état initial qui représente la position des caisses au début du niveau et la position du personnage. L'état final correspond à l'état où toutes les caisses sont dans un goal.
    Soit f(n) le coût total de l'état n (un noeud = un état = positions des caisses + personnage)
    Soit g(n) le coût pour aller de l'état initial à l'état n
    Soit h(n) le coût pour aller de l'état n à l'état final (fonction heuristique)
    On a ainsi d'après A*: f(n) = g(n) + h(n) pour tout n.

    J'ai volontairement choisis une heuristique mauvaise pour ce jeu : la distance de Manhattan entra chaque caisse et son goal le plus proche.
    Etant donné que je ne sur-estime jamais, A* devrait me retourner la solution optimale (c'est à dire la solution qui nécessite le moins de poussée de caisse, sachant qu'on ne se préoccupe pas du déplacement du personnage = coût nul)

    Pourtant parfois, mon algo ne me retourne pas la solution la plus courte. Est ce que mon raisonnement est juste ? ou alors peut être que mon heuristique n'est pas correcte et sur-estime dans certains cas ?

    Merci d'avance
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Bonjour,

    on ne se préoccupe pas du déplacement du personnage = coût nul
    Pourtant, c'est ce qu'on compte dans le sokoban. Il faut atteindre le minimum de déplacements.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Bonjour,

    Pourtant, c'est ce qu'on compte dans le sokoban. Il faut atteindre le minimum de déplacements.
    Bonjour,

    Non pas du tout, la plupart des solveurs de nos jours ne se préoccupe que des déplacements des caisses et ne cherche pas l'optimalité dans les déplacements du personnage. C'est le cas de solveurs comme Rolling Stone ou Taking Stone voire même de YASS Solver.
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

Discussions similaires

  1. code de l'heuristique Tabou
    Par anes_2004 dans le forum C++
    Réponses: 1
    Dernier message: 01/07/2008, 11h38
  2. Algo heuristique voyageur de commerce
    Par tagsOf dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 25/03/2008, 13h44
  3. Heuristique voyageur de commerce
    Par tagsOf dans le forum C
    Réponses: 1
    Dernier message: 25/03/2008, 13h25
  4. la programmation de la méta heuristique tabou en java
    Par jijilamara dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 08/03/2006, 09h11
  5. Algos génétiques, heuristiques...
    Par Regis.C dans le forum Intelligence artificielle
    Réponses: 3
    Dernier message: 29/04/2004, 23h32

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