1.98k likes | 2.17k Views
Cours d’Algorithmique. L’algorithme alpha-beta. Sous-arbres alpha et beta d’un arbre minimax et propriétés. Arbres de recherche équilibrés : la problématique, diverses solutions. Recherche textuelle. Les grandes lignes du cours. Trier et chercher, recherche textuelle Listes et arbres
E N D
Cours d’Algorithmique L’algorithme alpha-beta. Sous-arbres alpha et beta d’un arbre minimax et propriétés. Arbres de recherche équilibrés : la problématique, diverses solutions. Recherche textuelle. Cours d'algorithmique 4 - Intranet
Les grandes lignes du cours • Trier et chercher,recherche textuelle • Listes etarbres • Le back-track • Arbres équilibrés • Récursivité et induction sur la structure • Divide and conquer • Minimax,alpha-beta • Dérécursion • Divers problèmes particuliers • Logique de Hoare • Programmation dynamique • Complexité et calculabilité Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- A R B R E A L P H A - B E T A Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- max 5 ? Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- max 5 ? • Nous parcourons le fils droit pour trouver une valeur dans l’intervalle : [ 5 … +inf [ • Nous nous arrêtons dès que nous savons qu’elle sera inférieure à 5 ! Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- max [ 5 … +inf [ 5 ? • Nous parcourons le fils droit pour trouver une valeur dans l’intervalle : [ 5 … +inf [ • Nous nous arrêtons dès que nous savons qu’elle sera inférieure à 5 ! Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- max [ 5 … +inf [ 5 min 3 ? • Nous parcourons le fils droit pour trouver une valeur dans l’intervalle : [ 5 … +inf [ • Nous nous arrêtons dès que nous savons qu’elle sera inférieure à 5 ! Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- max [ 5 … +inf [ 5 min Coupe ! 3 < 5 !!! 3 ? • Nous parcourons le fils droit pour trouver une valeur dans l’intervalle : [ 5 … +inf [ • Nous nous arrêtons dès que nous savons qu’elle sera inférieure à 5 ! Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- max [ 5 … +inf [ 5 min Poursuite! 7 > 5 !!! 7 ? • Nous parcourons le fils droit pour trouver une valeur dans l’intervalle : [ 5 … +inf [ • Nous nous arrêtons dès que nous savons qu’elle sera inférieure à 5 ! Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- min ? 3 Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- min ? 3 • Nous parcourons le fils droit pour trouver une valeur dans l’intervalle : ] -inf … 3 ] • Nous nous arrêtons dès que nous savons qu’elle sera supérieure à 3 ! Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- min ] -inf … 3 ] ? 3 • Nous parcourons le fils droit pour trouver une valeur dans l’intervalle : ] -inf … 3 ] • Nous nous arrêtons dès que nous savons qu’elle sera supérieure à 3 ! Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- min ] -inf … 3 ] 3 max 5 ? • Nous parcourons le fils droit pour trouver une valeur dans l’intervalle : ] -inf … 3 ] • Nous nous arrêtons dès que nous savons qu’elle sera supérieure à 3 ! Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- min ] -inf … 3 ] 3 max Coupe ! 5 > 3 !!! 5 ? • Nous parcourons le fils droit pour trouver une valeur dans l’intervalle : ] -inf … 3 ] • Nous nous arrêtons dès que nous savons qu’elle sera supérieure à 3 ! Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- min ] -inf … 3 ] 3 max Poursuite! 1 < 3 !!! 1 ? • Nous parcourons le fils droit pour trouver une valeur dans l’intervalle : ] -inf … 3 ] • Nous nous arrêtons dès que nous savons qu’elle sera supérieure à 3 ! Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- max [ 3 … +inf [ 3 ? Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- max [ 3 … +inf [ 3 min [ 3 … 9 ] 9 ? Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- max [ 3 … +inf [ 3 min [ 3 … 9 ] 9 max [ 4 … 9 ] 4 ? Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- max [ 3 … +inf [ 3 min [ 3 … 9 ] 9 max [ 4 … 9 ] 4 min [ 4 … 7 ] 7 ? Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- max [ 3 … +inf [ [ a , b ] 3 min [ 3 … 9 ] 9 max [ 4 … 9 ] 4 min [ 4 … 7 ] 7 ? Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- max [ 3 … +inf [ [ a , b ] 3 min a est la borne minimale garantie ! a grandit seulement … [ 3 … 9 ] 9 max [ 4 … 9 ] 4 min [ 4 … 7 ] 7 ? Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- max [ 3 … +inf [ [ a , b ] 3 min a est la borne minimale garantie ! a grandit seulement … [ 3 … 9 ] 9 max [ 4 … 9 ] 4 min [ 4 … 7 ] 7 ? Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- max [ 3 … +inf [ [ a , b ] 3 min b est la borne maximale possible ! b diminue seulement … [ 3 … 9 ] 9 max [ 4 … 9 ] 4 min [ 4 … 7 ] 7 ? Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- max [ 3 … +inf [ [ a , b ] 3 min b est la borne maximale possible ! b diminue seulement … [ 3 … 9 ] 9 max [ 4 … 9 ] 4 min [ 4 … 7 ] 7 ? Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- max [ 3 … +inf [ 3 min [ 3 … 9 ] 9 max [ 4 … 9 ] 4 min Discussion de la valeur de « ? » par rapport à l’intervalle [ 4 … 7 ]. [ 4 … 7 ] 7 ? Cours d'algorithmique 4 - Intranet
? ? ? ? alpha - beta----------------------------------------------------------------- max [ 3 … +inf [ 3 min [ 3 … 9 ] 9 max [ 4 … 9 ] 4 min 4 <= ? <= 7 Discussion de la valeur de « ? » par rapport à l’intervalle [ 4 … 7 ]. [ 4 … 7 ] 7 ? Cours d'algorithmique 4 - Intranet
? ? ? ? alpha - beta----------------------------------------------------------------- max [ 3 … +inf [ 3 min [ 3 … 9 ] 9 max [ 4 … 9 ] 4 min 4 <= ? <= 7 Discussion de la valeur de « ? » par rapport à l’intervalle [ 4 … 7 ]. [ 4 … 7 ] 7 ? Cours d'algorithmique 4 - Intranet
? alpha - beta----------------------------------------------------------------- max [ 3 … +inf [ 3 min [ 3 … 9 ] 9 max [ 4 … 9 ] 4 min ? <= 4 Discussion de la valeur de « ? » par rapport à l’intervalle [ 4 … 7 ]. [ 4 … 7 ] 7 ? Cours d'algorithmique 4 - Intranet
4 4 4 4 alpha - beta----------------------------------------------------------------- max [ 3 … +inf [ 3 min [ 3 … 9 ] 9 max [ 4 … 9 ] ? min ? < 4 Discussion de la valeur de « ? » par rapport à l’intervalle [ 4 … 7 ]. [ 4 … 7 ] 7 ? Cours d'algorithmique 4 - Intranet
4 4 4 4 alpha - beta----------------------------------------------------------------- max [ 3 … +inf [ 3 min [ 3 … 9 ] 9 max [ 4 … 9 ] ? min ? < 4 Discussion de la valeur de « ? » par rapport à l’intervalle [ 4 … 7 ]. [ 4 … 7 ] 7 ? Fail Low Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- max [ 3 … +inf [ 3 min [ 3 … 9 ] 9 max [ 4 … 9 ] 4 min 7 < ? Discussion de la valeur de « ? » par rapport à l’intervalle [ 4 … 7 ]. [ 4 … 7 ] 7 ? Cours d'algorithmique 4 - Intranet
7 7 7 7 7 alpha - beta----------------------------------------------------------------- max [ 3 … +inf [ 3 min [ 3 … 9 ] 9 max [ 4 … 9 ] 4 min 7 < ? Discussion de la valeur de « ? » par rapport à l’intervalle [ 4 … 7 ]. [ 4 … 7 ] ? Cours d'algorithmique 4 - Intranet
7 7 7 7 7 alpha - beta----------------------------------------------------------------- max [ 3 … +inf [ 3 min [ 3 … 9 ] 9 max [ 4 … 9 ] 4 min 7 < ? Discussion de la valeur de « ? » par rapport à l’intervalle [ 4 … 7 ]. [ 4 … 7 ] ? Fail High Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- int alpha_beta ( un_type situation , int max_ou_pas , int alpha , int beta ) {if ( est_feuille(situation) ) return( valeur(situation) ) ; else if ( max_ou_pas ) xxx else yyy } Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- int alpha_beta ( un_type situation , int max_ou_pas , int alpha , int beta ) {if ( est_feuille(situation) ) return( valeur(situation) ) ; else if ( max_ou_pas ) xxx else yyy } Cas d’arrêt : Nous rendons la valeur de la situation ! Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- int alpha_beta ( un_type situation , int max_ou_pas , int alpha , int beta ) {if ( est_feuille(situation) ) return( valeur(situation) ) ; else if ( max_ou_pas ) xxx else yyy } Le cas max ! Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- int alpha_beta ( un_type situation , int max_ou_pas , int alpha , int beta ) {if ( est_feuille(situation) ) return( valeur(situation) ) ; else if ( max_ou_pas ) xxx else yyy } Le cas min ! Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- xxx Traitement les fils de max for ( « fils » parmi les fils de situation & tantque alpha < beta ) alpha := max( alpha , alpha_beta( fils , not(max_ou_pas) , alpha , beta ) ); return( min(alpha , beta) ); Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- xxx Traitement les fils de max for ( « fils » parmi les fils de situation & tantque alpha < beta ) alpha := max( alpha , alpha_beta( fils , not(max_ou_pas) , alpha , beta ) ); return( min(alpha , beta) ); Parcourons tous les fils, mais arrêtons-nous dès que alpha atteint beta ! Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- xxx Traitement les fils de max for ( « fils » parmi les fils de situation & tantque alpha < beta ) alpha := max( alpha , alpha_beta( fils , not(max_ou_pas) , alpha , beta ) ); return( min(alpha , beta) ); Parcourons tous les fils, mais arrêtons-nous dès que alpha atteint beta ! alpha peut grandir ! Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- xxx Traitement les fils de max for ( « fils » parmi les fils de situation & tantque alpha < beta ) alpha := max( alpha , alpha_beta( fils , not(max_ou_pas) , alpha , beta ) ); return( min(alpha , beta) ); Parcourons tous les fils, mais arrêtons-nous dès que alpha atteint beta ! alpha peut grandir ! Rendre « alpha » ou bien « beta » si alpha > beta ! a <= b Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- yyy Traitement les fils de min for ( « fils » parmi les fils de situation & tantque alpha <= beta ) beta := min( beta , alpha_beta( fils , not(max_ou_pas) , alpha , beta ) ); return( max(alpha , beta) ); Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- yyy Traitement les fils de min for ( « fils » parmi les fils de situation & tantque alpha < beta ) beta := min( beta , alpha_beta( fils , not(max_ou_pas) , alpha , beta ) ); return( max(alpha , beta) ); Parcourons tous les fils, mais arrêtons-nous dès que beta atteint alpha ! Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- yyy Traitement les fils de min for ( « fils » parmi les fils de situation & tantque alpha < beta ) beta := min( beta , alpha_beta( fils , not(max_ou_pas) , alpha , beta ) ); return( max(alpha , beta) ); Parcourons tous les fils, mais arrêtons-nous dès que beta atteint alpha ! beta peut diminuer ! Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- yyy Traitement les fils de min for ( « fils » parmi les fils de situation & tantque alpha < beta ) beta := min( beta , alpha_beta( fils , not(max_ou_pas) , alpha , beta ) ); return( max(alpha , beta) ); Parcourons tous les fils, mais arrêtons-nous dès que beta atteint alpha ! beta peut diminuer ! Rendre « beta » ou bien « alpha » si beta < alpha ! a <= b Cours d'algorithmique 4 - Intranet
Arbre alpha----------------------------------------------------------------- A R B R E A L P H A Cours d'algorithmique 4 - Intranet
alpha - beta----------------------------------------------------------------- max min min max max max max min min min min 3 1 6 2 5 3 7 1 3 2 8 7 Cours d'algorithmique 4 - Intranet
Arbre alpha----------------------------------------------------------------- • Nous gardons tous les fils des min . • Nous gardons un fils des max (choisi au hasard). max min min max max max max min min min min 3 1 6 2 5 3 7 1 3 2 8 7 Cours d'algorithmique 4 - Intranet
Arbre alpha----------------------------------------------------------------- • Nous gardons tous les fils des min . • Nous gardons un fils des max (choisi au hasard). 3 max Minimax = minimum ! ! ! min min max max max max min min min min 3 1 6 2 5 3 7 1 3 2 8 7 Cours d'algorithmique 4 - Intranet
Arbre alpha----------------------------------------------------------------- • Nous gardons tous les fils des min . • Nous gardons un fils des max (choisi au hasard). 3 max Minimax = minimum ! ! ! min min max max max max min min min min 3 1 6 2 5 3 7 1 3 2 8 7 Cours d'algorithmique 4 - Intranet