Élagage alpha-bêta
En informatique, plus précisément en intelligence artificielle et en théorie des jeux, l’élagage alpha-bêta (abrégé élagage αβ) est une technique permettant de réduire le nombre de nœuds évalués par l'algorithme minimax. Il est utilisé dans des programmes informatiques qui jouent à des jeux à 2 joueurs, comme les échecs ou les dames[réf. souhaitée].
Pour les articles homonymes, voir élagage et élagage synaptique.
Principe
L'algorithme minimax effectue une exploration complète de l'arbre de recherche jusqu'à un niveau donné. L'élagage alpha-beta permet d'optimiser grandement l'algorithme minimax sans en modifier le résultat. Pour cela, il ne réalise qu'une exploration partielle de l'arbre. Lors de l'exploration, il n'est pas nécessaire d'examiner les sous-arbres qui conduisent à des configurations dont la valeur ne contribuera pas au calcul du gain à la racine de l'arbre. Dit autrement, l'élagage αβ n'évalue pas des nœuds dont on peut penser, si la fonction d'évaluation est à peu près correcte, que leur qualité sera inférieure à un nœud déjà évalué.
Il importe de comprendre à ce stade qu'une fonction d'évaluation parfaite (comme au Marienbad) ne demanderait aucune exploration d'arbre et qu'une exploration d'arbre exhaustive (comme au tic-tac-toe) ne demanderait aucune fonction d'évaluation. Il s'agit donc de combiner au mieux l'heuristique (fonction d'évaluation, plus ou moins arbitraire, mais de portée globale) et la logique dure (exploration de l'arbre des possibilités), qui n'est possible que sur un domaine qu'on a au préalable restreint.
On va combiner les deux pour accélérer l'exploration sous l'hypothèse que la fonction d'évaluation ne soit pas trop mauvaise. Prenons α et β appartenant au domaine d’arrivée de la fonction d’évaluation tel que α < β. On définit la fonction AlphaBeta ainsi :
- AlphaBeta(P, α, β) = g(P) si P est une feuille de l'arbre et g la fonction d'évaluation du nœud
- AlphaBeta(P, α, β) = min(β, max(-AlphaBeta( , -β, -α))) où les sont les enfants du nœud P
On appelle fenêtre αβ le couple (α, β) où α et β sont les deux paramètres d’appel de la fonction. Les nœuds élagués sont ceux qui seraient appelés avec une fenêtre tel que α ≥ β. Il existe 3 types de nœuds ne pouvant donc pas être élagués :
- Nœud de type 1 : fenêtre d’appel : (-∞, +∞)
- Nœud de type 2 : fenêtre d’appel : (-∞, β) avec β ≠ +∞
- Nœud de type 3 : fenêtre d’appel : (α, +∞) avec α ≠ -∞
Le schéma ci-dessus présente les deux types de coupures possibles. Les nœuds Min sont représentés par un rond bleu et les nœuds Max par un carré gris. Rappel : les nœuds Min prennent la valeur minimum de leurs enfants (et respectivement maximum pour les nœuds Max).
Coupure Alpha : le premier enfant du nœud Min V vaut 4 donc V vaudra au plus 4. Le nœud Max U prendra donc la valeur 5 (maximum entre 5 et une valeur inférieure ou égale à 4).
Coupure Bêta : le premier enfant du nœud Max V vaut 4 donc V vaudra au minimum 4. Le nœud Min U prendra donc la valeur 3 (minimum entre 3 et une valeur supérieure ou égale à 4).
Pseudocode
Ci-dessous le pseudocode de l'algorithme alpha-bêta : α est initialisé à -∞ et β à +∞
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
De la même manière que l'algorithme minimax peut être remplacé par NegaMax, on simplifie Alpha-Beta. Cela donne l’algorithme suivant :
fonction alphabeta(nœud, i) /* i représente la valeur minimale du résultat attendu. Si on s'aperçoit que le résultat sera inférieur à i, autant renvoyer directement la valeur en cours (inférieure à i) et ne pas perdre de temps à calculer la vraie valeur du nœud qui sera, de toute façon, inférieure à i également. À l'initialisation, on prendra i = -∞ */ si nœud est une feuille alors retourner la valeur de nœud sinon j = -∞ pour tout fils de nœud faire j = max(j, alphabeta(fils, j)) si -j ⩽ i alors retourner -j retourner -j
Exemple
Nous allons illustrer l’algorithme sur l’arbre ci-dessous déjà étiqueté avec les valeurs d’un minimax. Le résultat obtenu est le schéma ci-dessous.
Plusieurs coupures ont pu être réalisées. De gauche à droite :
- Le nœud MIN vient de mettre à jour sa valeur courante à 4. Celle-ci, qui ne peut que baisser, est déjà inférieure à α=5, la valeur actuelle du nœud MAX précédent. Celui-ci cherchant la valeur la plus grande possible, ne la choisira donc de toute façon pas.
- Le nœud MIN vient de mettre à jour sa valeur courante à 6. Celle-ci, qui ne peut que baisser, est déjà égale à α=6, la valeur actuelle du nœud MAX précédent. Celui-ci cherchant une valeur supérieure, il ne mettra de toute façon pas à jour sa valeur que ce nœud vaille 6 ou moins.
- Le nœud MIN vient de mettre à jour sa valeur courante à 5. Celle-ci, qui ne peut que baisser, est déjà inférieure à α=6, la valeur actuelle du nœud MAX précédent. Celui-ci cherchant la valeur la plus grande possible, ne la choisira donc de toute façon pas.
Améliorations possibles
La plupart des améliorations d'alpha-bêta sont destinées à augmenter le nombre de coupes pour augmenter les nœuds qui ne sont pas examinés. Cela s'obtient grâce à des heuristiques comme l'exploration en premier des coups qui ont permis d'effectuer des coupes dans des nœuds du même niveau (killer move) ; d'autres améliorations permettent de rétrécir l'intervalle de départ entre les valeurs alpha et bêta utilisées dans le nœud racine et débouchent sur des améliorations comme Negascout ou MTD-F.
On peut trier les positions à tester à chaque profondeur testée, pour améliorer le temps ou la profondeur totale de calcul à chaque demi-coup, selon la limitation en profondeur totale ou en temps de calcul à chaque demi-coup.
Applications de la technique
Alpha-béta est largement utilisé par les programmes qui jouent aux jeux de réflexion.
Annexes
Bibliographie
Voir aussi
Notes
Lien externe
- Portail de l'informatique théorique