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 :

Algorithme alpha-beta pruning


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Novembre 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Novembre 2009
    Messages : 46
    Par défaut Algorithme alpha-beta pruning
    bonjour à tous,
    jusqu'à lors, j'utilisais l'algorithme susmentionné sans l'avoir éprouvé par mon humble intellect.
    j'ai voulu jeter un coup d’œil à un ancien programme qui l'utilisait et, ne voyant pas comment il se faisait que la valeur de alpha et de bêta soit reportées avant l'appel précédent à la fonction mère de l'algorithme, je me suis reporté à sa page wikipédia. Et voilà l'algo que j'en ai tiré:
    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
     
    fonction alphabeta(nœud, α, β) /* α est toujours inférieur à β */
       si nœud est une feuille alors
           retourner la valeur de nœud
       sinon si nœud est de type Min alors
               v = +∞
               pour tout fils de nœud faire
                   v = min(v, alphabeta(fils, α, β))                
                   si α ≥ v alors  /* coupure alpha */
                       retourner v
                   β = min(β, v)           
        sinon
               v = -∞
               pour tout fils de nœud faire
                   v = max(v, alphabeta(fils, α, β))                
                   si v ≥ β alors /* coupure beta */
                       retourner v
                   α = max(α, v)
        retourner v
    Ma question est: Comment ces valeurs ( celles de alpha et de bêta ) peuvent être accessibles depuis l'appel récursif précédent afin d'effectuer la comparaison avec v ( et ainsi de rendre l'élagage efficient )?
    Merci pour vos lumières... cordialement.

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 489
    Par défaut
    salut

    v est local a la méthode
    ensuite selon le cas on compare le v à la résultante de la fonction sous jascente
    a aucun moment on passe le v


    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
     
    fonction alphabeta(nœud, alpha, Beta) /* α est toujours inférieur à β */
      si nœud.isFeuille alors
        retourner nœud.Valeur
      sinon 
      si nœud est de type Min alors // Cas Negatif
        v = +999999999999  // Afectation
        pour tout fils de nœud faire
          v = min(v,alphabeta(fils, alpha, Beta)) // Affectation selon la résultante  (fils = branche )
          si alpha >= v alors /* coupure alpha */
            retourner v
         Beta = min(Beta, v)
      sinon  // Cas Possitif
        v = -999999999999  // Afectation
        pour tout fils de nœud faire 
          v = max(v, alphabeta(fils, alpha, Beta))  // Affectation selon la résultante (fils = branche )
          si v >= Beta alors /* coupure beta */
            retourner v
          alpha = max(alpha, v) 
    retourner v

Discussions similaires

  1. Tri dans algorithme alpha - beta
    Par Rumpel dans le forum Intelligence artificielle
    Réponses: 2
    Dernier message: 15/04/2013, 21h24
  2. Alpha-beta pruning avec jeu de dames
    Par Sumoner dans le forum Intelligence artificielle
    Réponses: 1
    Dernier message: 21/09/2011, 22h52
  3. Algorithme d'élagage alpha-beta en java appliqué au jeu du morpion 3*3
    Par sampaiX dans le forum Intelligence artificielle
    Réponses: 4
    Dernier message: 06/05/2010, 13h38
  4. [Alpha/beta] Comprendre l'algorithme
    Par Clad3 dans le forum Intelligence artificielle
    Réponses: 1
    Dernier message: 15/01/2007, 10h50
  5. Algorithme Minimax/Alpha-Beta
    Par Guybrush Threepwood dans le forum Flash
    Réponses: 2
    Dernier message: 14/03/2006, 11h01

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