4 – Exploration en situation d’adversité · 2019-12-19 · champion humain Gary Kasparov. Deep...
Transcript of 4 – Exploration en situation d’adversité · 2019-12-19 · champion humain Gary Kasparov. Deep...
4 – Exploration en situation d’adversité
Faculté des Sciences Département d’Informatique
Introduction à l’Intelligence artificielle
L3 Informatique 2019/2020
http://IntroIA.wordpress.com Amine Brikci-Nigassa
Ces diapos sont librement adaptées de celles de Dan Klein et Pieter Abbeel : CS188 Intro to AI (University of California, Berkeley - ai.berkeley.edu)
Les diapos de ce cours sont adaptées de :CS 188: Artificial Intelligence
Adversarial Search
Instructors: Pieter Abbeel & Dan KleinUniversity of California, Berkeley
[These slides were created by Dan Klein and Pieter Abbeel for CS188 Intro to AI at UC Berkeley (ai.berkeley.edu).]
qui se basent sur le livre de Stuart Russell et Peter Norvig...
Programmes de Jeu : État de l’Art
Jeu de Dames (anglaises) :1950 : 1er programme joueur. 1994 : 1er programme champion : Chinook met fin aux 40 ans de reigne du champion humain Marion Tinsley. 2007 : Le jeu est résolu !
Échecs : 1997 : Deep Blue bat le champion humain Gary Kasparov. Deep Blue examinait 200M positions par seconde, avec un algorithme d’exploration alpha-beta. Les programmes actuels sont encore meilleurs...
Jeu de Go : Les champions humains commencent à êtré défiés par les machines. Dans le go, b > 300 !
Jeu de Dames (anglaises) :1950 : 1er programme joueur. 1994 : 1er programme champion : Chinook met fin aux 40 ans de reigne du champion humain Marion Tinsley. 2007 : Le jeu est résolu !
Échecs : 1997 : Deep Blue bat le champion humain Gary Kasparov. Deep Blue examinait 200M positions par seconde, avec un algorithme d’exploration alpha-beta. Les programmes actuels sont encore meilleurs...
Jeu de Go : 2016 : AlphaGo bat le champion humain Lee Sedol.2017 : Il bat le champion du monde Ke Jie.Il utilise une exploration en arbre de Monte Carlo, avec apprentissage.
Pacman
Programmes de Jeu : État de l’Art
De nombreux types de jeux différents !
Axes :
Déterministe ou stochastique ?
Un, deux ou plusieurs joueurs ?
Somme nulle ?
Information parfaite (peut-on voir l'état) ?
On veut des algorithmes pour calculer une stratégie (politique) qui recommande un déplacement pour chaque état.
Types de Jeux
Jeux Déterministes
Une définition formelle : États: S (départ à s0)
Joueurs: P={1...N} (chacun son tour en général) Actions: A (dépendent du joueur/de l’état) Fonction de Transition: SxA S Test Terminal: S {t,f} Utilité Terminale: SxP R
La Solution pour un joueur est une politique : S A
Jeux à Somme Nulle
Jeux à Somme Nulle
Les agents ont des utilités (valeurs des gains) opposées.
Fait penser à une valeur unique que l'un maximise et l'autre minimise.
Pure competition, en adversité
Jeux Généraux Les agents ont des utilités (valeurs
des gains) indépendantes. Coopération, indifférence,
compétition, etc. sont toutes possibles
Nous reviendrons plus tard sur les jeux à somme non nulle.
Valeur d’un État
États Non Terminaux :
8
2 0 2 6 4 6… …États Terminaux :V(s) = connu
Valeur d’un état : Meilleur gain
(utilité) atteignable à partir de cet état.
Valeurs Minimax
+8-10-5-8
États sous Contrôle de l’Agent :
États terminaux :
États sous Contrôle de l’Adversaire
V(s) = connu
Exploration en Adversité (Minimax)
Jeux à somme nulle déterministes : Morpion, échecs, dames Un joueur maximise le résultat L’autre minimise le résultat
Exploration Minimax : Un arbre d’espace d’états Les joueurs jouent tour à tour Calculer la valeur minimax de
chaque nœud : la meilleure utilité réalisable contre un adversaire rationnel (optimal)
8 2 5 6
max
min2 5
5
Valeurs terminales :partie du jeu
Valeurs minimax :calculées récursivement
Minimax : Implémentation
def val_min(état):v ← +∞pour chaque successeur de état:
v ← min(v, val_max(successeur))
retourner v
def val_max(état):v ← -∞pour chaque successeur de état:
v ← max(v, val_min(successeur))
retourner v
def valeur(état):si état est terminal : retourner utilité(état)si le prochain agent est MAX : retourner val_max(état)si le prochain agent est MIN : retourner val_min(état)
def val_min(état):v ← +∞pour chaque successeur de état: v ← min(v, valeur(successeur))
retourner v
def val_max(état):v ← -∞pour chaque successeur de état:
v ← max(v, valeur(successeur))
retourner v
Minimax : Implémentation (dispatchée)
Video of Demo Min vs. Exp (Min)
Chaque déplacement : -1 pointChaque bille mangée : +10 pointsFin du jeu : Toutes les billes mangées : +500 Collision avec fantôme : -500
Video of Demo Min vs. Exp (Exp)
Chaque déplacement : -1 pointChaque bille mangée : +10 pointsFin du jeu : Toutes les billes mangées : +500 Collision avec fantôme : -500
Minimax : Efficacité
Quelle est l’efficacité de minimax ? Tout comme DFS (exhaustive) Temps : O(bm) Espace : O(bm)
Exemple : Jeu d’échecs, b 35, m 100 La solution exacte est totalement irréalisable. Mais, a-t-on besoin d’explorer tout l’arbre ?
Élagage Alpha-Bêta
Configuration générale (version MIN) On veut calculer la VALEUR MIN à un nœud n
On fait une itération sur les nœuds fils de n
La valeur estimée pour n diminue pendant
l’itération
Qui a besoin de la valeur de n ? MAX
Soit a la meilleure valeur que MAX peut obtenir à
n'importe quel nœud de choix le long du chemin
courant depuis la racine
Si n devient pire que a, MAX l’évitera, donc on peut
arrêter d’examiner les autres fils de n (c’est déjà
assez mauvais pour ne pas être joué)
La version MAX est la symétrique
MAX
MIN
MAX
MIN
a
n
Alpha-Bêta : Implémentation
def valeur_min(état , α, β):
v ← +∞ Pour chaque successeur s de état : v ← min(v, valeur(s, α, β)) si v ≤ α retourner v β ← min(β, v) retourner v
def valeur_max(état, α, β): v ← –∞ Pour chaque successeur s de état : v ← max(v, valeur(s, α, β)) si v ≥ β retourner v α ← max(α, v) retourner v
α : le meilleur choix pour MAX sur le chemin vers la racineβ : le meilleur choix pour MIN sur le chemin vers la racine
Propriétés de l’élagage Alpha-Bêta
Cet élagage n’a pas d’effet sur la valeur minimax calculée pour la racine !
Les valeurs des nœuds intermédiaires peuvent être fausses Important : les nœuds fils de la racine peuvent avoir la mauvaise valeur Ainsi la version la plus naïve ne vous laissera pas sélectionner l’action
Bien ordonner les nœuds fils améliore l’efficacité de l’élagage
Avec l’ordre « parfait » : La complexité temporelle tombe à O(bm/2) La profondeur résoluble est doublée ! L’exploration complète dans le jeu d’échecs (par ex.) reste sans espoir…
Ceci est un exemple de métaraisonnement (raisonnement sur le raisonnement: calcul de ce qu’il faut calculer)
10 10 0
max
min
Ressources Limitées Problème : Dans les jeux réalistes, l’exploration ne peut pas
atteindre les feuilles (nœuds terminaux) !
Solution : Exploration à profondeur limitée À la place, explorer seulement jusqu’à une profondeur
limitée dans l’arbre Remplacer les utilités terminales avec une fonction
d’évaluation pour les positions non-terminales
Exemple : Supposez qu’on a 100 secondes, et qu’on peut explorer
10K nœuds / s Ainsi on peut tester 1M nœuds / coup - atteint une profondeur de 8 environ – programme de
jeu d’échecs décent
La garantie d’un jeu optimal a disparu
Explorer plus de coups fait une GRANDE différence
Utiliser la profondeur itérative pour un algorithme anytime
? ? ? ?
-1 -2 4 9
4
min
max
-2 4
Pourquoi Pacman Reste Affamé
Le danger des agents replanificateurs ! Il sait que son score augmentera s’il mange la bille maintenant (gauche, droite) Il sait que son score augmentera autant s’il mange la bille plus tard (droite,
gauche) Il n’y a pas de chances de marquer des points après avoir mangé la bille (dans la
limite de l’horizon, 2 ici) Les deux options semblent aussi bonnes : il peut aller à gauche, puis revenir à
droite au prochain tour de replanification !
Les fonctions d’évaluation estiment le score des nœuds non terminaux dans l’exploration en profondeur limitée
Fonction idéale : renvoie la valeur minimax réelle de la position En pratique : souvent une somme linéaire pondérée des attributs :
Par ex. : f1(s) = (nombre de reines blanches – nombre de reines noires), etc.
Fonctions d’Évaluation
La Profondeur a son Importance
Les fonctions d'évaluation sont toujours imparfaites.
Plus la fonction d'évaluation est enfouie profondément dans l'arbre, moins la qualité de la fonction d'évaluation est importante.
Il s’agit d’un exemple important de compromis entre la complexité des fonctionnalités et la complexité du calcul.
Synergies entre Fonction d'évaluation et Alpha-bêta ?
Alpha-Bêta : la quantité d'élagage dépend de I'ordre de développement. La fonction d'évaluation peut fournir des indications pour développer
d'abord les nœuds les plus prometteurs (ce qui rend plus probable qu'il existe déjà une bonne alternative sur le chemin vers la racine). (assez similaire au rôle de l’heuristique A*)
Alpha-Bêta : (rôles similaires de min-max échangés) La valeur d’un nœud min ne fera que diminuer Quand la valeur d’un nœud min est plus basse que la meilleure option
pour max sur le chemin vers la racine, on peut élaguer Donc : SI la fonction d’évaluation fournit une limite sup. de la valeur à un
nœud min, et la limite sup. déjà plus basse que la meilleure option pour max sur le chemin vers la racine ALORS on peut élaguer