02 Algorithmes
02 Algorithmes
1
Résolution des problèmes
2
Résolutions des problèmes
3
Résolutions des problèmes
4
Résolutions des problèmes
5
Résolutions des problèmes
6
Résolutions des problèmes
7
Résolutions des problèmes
(Jeu de Taquin)
Etat initial Etat but
8
Résolutions des problèmes
9
Résolution de problème
10
Algorithme de recherche : Heuristique
Meilleur d’abord : Best-first search
11
Algorithme de recherche : Heuristique
Meilleur d’abord : Best-first search
Cas particulier 1 : Recherche gloutonne (greedy best-first search)
c(n0 ,n1)
5 2 2
2
3
0
Algorithme de recherche : Heuristique
Meilleur d’abord : Best-first search
Cas particulier 2 : Algorithme A*
14
Algorithme de recherche : Heuristique
Algorithme A*
• Une heuristique h(n) est une fonction d’estimation du coût
restant entre un nœud n d’un graphe et le nœud but.
Exemples de fonctions d’heuristique h :
- Chemin entre deux villes :
▪ Distance à vol d’oiseau entre la ville n et la ville de
destination.
- Jeu de taquin :
▪ Nombre de nombres mal placés
15
Algorithme de recherche : A*
1. Déclarer deux nœuds n, ns
2. Déclarer deux listes Open et Closed (vides au départ)
3. Ajouter le nœud Etat initial dans Open.
4. Si Open est vide Alors sortir de la boucle avec un échec.
5. n=nœud à la tête de Open
6. Enlever n de Open et l’ajouter dans Closed.
7. Si n=but alors sortir de la boucle et retourner le chemin.
8. Sinon : pour chaque successeur ns de n :
- Initialiser la valeur g(ns) = g(n) + c(n,ns)
- Mettre le parent de ns à n
- Si Open ou Closed contient un nœud ns’=ns avec f(ns) f(ns’)
Alors enlever ns’ de Open ou Closed et insérer ns dans Open
(en respectant l’ordre croissant de f)
Sinon : Insérer ns dans Open (en respectant l’ordre croissant de f)
16
- Aller à 4.
Algorithme de recherche : Heuristique
Algorithme A* : Exemple de recherche d’un chemin entre deux villes
9 h(n0)
c(n0 ,n1)
n0 : ville de départ (nœud initial)
n6 : ville de destination (nœud but) 5 2 2
h : Distance à vol d’oiseau entre une ville et la
ville de destination(heuristique)
c : Distance réelle entre deux villes 3
2
17
Algorithme de recherche : Heuristique
Algorithme A* : Chemin entre deux villes (Déroulement)
5 2 2
3 2
18
Exercice
On considère la carte suivante. L'objectif est de trouver le chemin optimal entre A et I. On
donne également deux heuristiques h1 et h2 :
Méthode Hill-Climbing
➢ En entrée :
▪ Nœud initial
▪ Fonction objective (notée F(n))à optimiser
▪ Fonction générant des nœuds successeurs (voisins)
➢ Procédure :
▪ Le nœud courant est initialisé au nœud initial
▪ Itérativement, le nœud courant est comparé à ses successeurs
immédiats (voisins) :
• Le meilleur voisin n’ ayant la plus grande valeur F(n’) tel que
F(n’)>F(n) devient le nœud courant.
• Si un tel voisin n’existe pas, on s’arrête et on retourne le nœud
courant comme solution.
Recherche locale
Algorithme Hill-Climbing
7. Sinon n = n’ (Aller à 3)
Recherche locale
6→7
Recherche locale
6→7→8
Recherche locale
6→7→8→9
Recherche locale
6 → 7 → 8 → 9 → 10
Recherche locale
6 → 7 → 8 → 9 → 10 → 11
Recherche locale
6 → 7 → 8 → 9 → 10 → 11 → 12
Recherche locale
6 → 7 → 8 → 9 → 10 → 11 → 12
Hill-Climbing s’arrête et retourne n = 12
Recherche locale
Hill-Climbing : 8-reines
n=[5 6 7 4 5 6 7 6]
Recherche locale
Hill-Climbing : 8-reines
Recherche locale
3 1 2 1 2
4 5 8 3 4 5
6 7 6 7 8
Etat initial Etat but
Recherche locale
4 1 2 1 2
3 5 3 4 5
6 7 8 6 7 8
Etat initial Etat but
Recherche locale
Algorithmes génétiques
Origine
▪ Inspiré du processus de l’évolution naturelle des espèces :
▪ L’intelligence humaine est le résultat d’un processus
d’évolution sur des millions d’années :
• Théorie de l’évolution de Darwin
• Théorie de la sélection naturelle de Weismann
• Concepts de génétiques de Mendel
▪ La simulation de l’évolution n’a pas besoin de durer des
millions d’années sur un ordinateur
Recherche locale
Algorithmes génétiques
Principe
▪ On commence avec un ensemble de k nœuds choisis
aléatoirement : cet ensemble est appelé population.
▪ Un successeur est généré en combinant deux parents.
▪ Un nœud est représenté par une chaine (mot) sur un
alphabet : c’est le code génétique d’un nœud.
▪ La fonction objective est appelée fitness function (fonction
d’adaptation)
▪ La prochaine génération est produite par :
(1)Sélection → (2)Croisement → (3)Mutation
Recherche locale
Algorithmes génétiques
Représentation
▪ On représente l’espace des solutions d’un problème à
résoudre par une population (ensemble de chromosomes).
• Un chromosome est une chaine de caractères (gènes) de
taille fixe. Par exemple : 101101001
▪ Une population génère des enfants par un ensemble de
procédures simples qui manipulent des chromosomes :
• Croisement des parents
• Mutation d’un enfant généré
▪ Les enfants sont conservés en fonction de leur adaptation
(fitness) déterminée par une fonction d’adaptation F(n)
Recherche locale
Algorithmes génétiques
Pseudocode
9.
10.
11.
Recherche locale
Algorithme génétique
Exemple d’un croisement : 8-reines
Recherche locale
Algorithme génétique
8-reines
• Une fonction d’utilité pour les états finaux (Récompense reçue par Max)
Jeux à deux adversaires
Arbre de recherche Tic-Tac-Toe
Jeux à deux adversaires
Algorithme MiniMax
▪ On suppose que l’action la plus profitable pour le joueur Max ou Min
est prise (Obtenir la plus grande valeur MiniMax)
Algorithme MiniMax
Algorithme MiniMax(nœud initial)
- Retourne l’action choisie par TOUR-MAX(nœud initial)
TOUR-MAX(n){
1. Si n correspond à une fin de partie Alors retourner la valeur d’utilité UTILITY(n)
2. U=-∞ , a=void
3. Pour chaque paire(a’, n’) donnée par TRANSITION(n)
- Si l’utilité de TOUR-MIN(n’) > u Alors affecter a=a’ , u=utilité de TOUR-MIN(n’)
Sinon Retourner l’utilité u et l’action a }
TOUR-MIN(n){
1. Si n correspond à une fin de partie Alors retourner la valeur d’utilité UTILITY(n)
2. U=+∞ , a=void
3. Pour chaque paire(a’, n’) donnée par TRANSITION(n)
- Si l’utilité de TOUR-MAX(n’) < u Alors affecter a=a’ , u=utilité de TOUR-MAX(n’)
Sinon Retourner l’utilité u et l’action a}
Jeux à deux adversaires
Algorithme MiniMax / Arbre de jeu
On choisit le nœud ayant la plus grande valeur
MAX
MIN
MAX 12 10 3 5 5 8 10 13 2 +∞ 11
Jeux à deux adversaires
Algorithme MiniMax / Déroulement
5 Minimax = 5
MAX
MAX
MIN 3 5 2
MAX 12 10 3 5 5 8 10 13 2 +∞ 11
Jeux à deux adversaires
Algorithme MiniMax / Complexité
Jeu d’échecs :
Nombre de choix par coup : 35 (b ≈ 35)
Nombre moyen de coups par joueur : 50 (m ≈ 100)
Jeux à deux adversaires
Coupure Alpha-Béta
MAX MIN
5 4
4 5
Coupure 𝛼 Coupure 𝛽
Jeux à deux adversaires
Coupure Alpha-Béta
Principe de la coupure:
▪ On ajoute les paramètres 𝛼 𝑒𝑡 𝛽 (initialement −∞ 𝑒𝑡 + ∞)
▪ Les nœuds coupés (élagués) sont ceux tel que 𝑢(𝑛) ∈ 𝛼, 𝛽 𝑒𝑡 𝛼 ≥ 𝛽
▪ Les nœuds non coupés sont ceux tel que :
−∞, +∞ 𝒐𝒖
𝜶, 𝜷 = ൞ −∞, 𝒃 𝒂𝒗𝒆𝒄 𝒃 ≠ +∞ 𝒐𝒖
𝒂, +∞ 𝒂𝒗𝒆𝒄 𝒂 ≠ −∞
MAX MIN
5 4 4
MIN
4 5
Coupure 𝛼 Coupure 𝛽
Jeux à deux adversaires
Coupure Alpha-Béta
Principe de la coupure:
▪ On ajoute les paramètres 𝛼 𝑒𝑡 𝛽 (initialement −∞ 𝑒𝑡 + ∞)
▪ Les nœuds coupés (élagués) sont ceux tel que 𝑢(𝑛) ∈ 𝛼, 𝛽 𝑒𝑡 𝛼 ≥ 𝛽
▪ Les nœuds non coupés sont ceux tel que :
−∞, +∞ 𝒐𝒖
𝜶, 𝜷 = ൞ −∞, 𝒃 𝒂𝒗𝒆𝒄 𝒃 ≠ +∞ 𝒐𝒖
𝒂, +∞ 𝒂𝒗𝒆𝒄 𝒂 ≠ −∞
MAX 5 MIN
MAX
5 4 4
×
4 5
Coupure 𝛼 Coupure 𝛽
Jeux à deux adversaires
Coupure Alpha-Béta
Principe de la coupure:
▪ On ajoute les paramètres 𝛼 𝑒𝑡 𝛽 (initialement −∞ 𝑒𝑡 + ∞)
▪ Les nœuds coupés (élagués) sont ceux tel que 𝑢(𝑛) ∈ 𝛼, 𝛽 𝑒𝑡 𝛼 ≥ 𝛽
▪ Les nœuds non coupés sont ceux tel que :
−∞, +∞ 𝒐𝒖
𝜶, 𝜷 = ൞ −∞, 𝒃 𝒂𝒗𝒆𝒄 𝒃 ≠ +∞ 𝒐𝒖
𝒂, +∞ 𝒂𝒗𝒆𝒄 𝒂 ≠ −∞
MAX 5 MIN
5 4 4 5
MAX
4 5
Coupure 𝛼 Coupure 𝛽
Jeux à deux adversaires
Coupure Alpha-Béta
Principe de la coupure:
▪ On ajoute les paramètres 𝛼 𝑒𝑡 𝛽 (initialement −∞ 𝑒𝑡 + ∞)
▪ Les nœuds coupés (élagués) sont ceux tel que 𝑢(𝑛) ∈ 𝛼, 𝛽 𝑒𝑡 𝛼 ≥ 𝛽
▪ Les nœuds non coupés sont ceux tel que :
−∞, +∞ 𝒐𝒖
𝜶, 𝜷 = ൞ −∞, 𝒃 𝒂𝒗𝒆𝒄 𝒃 ≠ +∞ 𝒐𝒖
𝒂, +∞ 𝒂𝒗𝒆𝒄 𝒂 ≠ −∞
MAX MIN 4
MIN
5 4 5
×
4 5
Coupure 𝛼 Coupure 𝛽
Jeux à deux adversaires
Coupure Alpha-Béta
𝛼, 𝛽 = −∞, +∞
12 10 3 5
Jeux à deux adversaires
Coupure Alpha-Béta
𝛼, 𝛽 = [3, +∞]
MIN
12 10 3 5
Jeux à deux adversaires
Coupure Alpha-Béta
𝛼, 𝛽 = [3, +∞]
12 10 3 5 5 8 10
Jeux à deux adversaires
Coupure Alpha-Béta
𝛼, 𝛽 = 5, +∞
3 5
MIN
12 10 3 5 5 8 10
Jeux à deux adversaires
Coupure Alpha-Béta
𝛼, 𝛽 = 5, +∞
3 5
12 10 3 5 5 8 10 13 2
Jeux à deux adversaires
Coupure Alpha-Béta
𝛼, 𝛽 = 5, +∞
3 5 2
MIN
12 10 3 5 5 8 10 13 2
Jeux à deux adversaires
Coupure Alpha-Béta
𝛼, 𝛽 = 5, +∞
3 5 2
××
MIN
12 10 3 5 5 8 10 13 2
Jeux à deux adversaires
Coupure Alpha-Béta
𝛼, 𝛽 = 5, +∞
5 Minimax = 5
MAX
3 5 2
××
12 10 3 5 5 8 10 13 2
Jeux à deux adversaires
MinMax Coupure Alpha-Béta
3 12 8 2 13 4 14 5 2
MinMax ? Coupure Alpha-Béta ?
Problèmes de Satisfaction des contraintes (CSP)
Définition
La programmation par contrainte (CSP : Contraint Satisfaction Problems) est à l’interface de
l’Intelligence Artificielle et de la Recherche Opérationnelle. Elle s’intéresse aux problèmes
définis en termes de contraintes de temps, d'espace, ... ou plus généralement de ressources :
▪ Applications :
•les problèmes de planification et ordonnancement : planifier une production, gérer un trafic
ferroviaire, ...
▪ Allocation de ressources
• EXP : Elaboration d’emploi du temps
• Variables : les différentes plages horaires de tous les locaux
(classes, amphis,…)
• Les contraintes : un seul cours est assigné au même local à un
instant donné, aucun groupe n’a deux cours en même
temps,…
Problèmes de Satisfaction des contraintes (CSP)
Définition formelle
• Un ensemble fini de variables V = {X1,…,XN}
• Chaque variable Xi a un domaine Di de valeurs possibles
• Un ensemble fini de contraintes : C = {C1,…,CM}
• Un état d’un problème CSP est défini par une assignation de valeurs
{Xi=vi, Xj=vj, …}
• Une assignation qui ne viole aucune contrainte est dite compatible
(consistante)
• Une assignation est dite complète si elle assigne des valeurs à toutes
les variables
• Une solution est une assignation complète et compatible
Problèmes de Satisfaction des contraintes (CSP)
Exemple 1
• Soit le problème CSP suivant :
• V = {X1,X2,X3}
• D1 = D2 = D3 = {1,2,3}
• Contrainte : X1+X2 = X3
• Trois solutions possibles (assignations complètes et compatibles) :
• {X1=1, X2=1, X3=2}
• {X1=1, X2=2, X3=3}
• {X1=2, X2=1, X3=3}
Problèmes de Satisfaction des contraintes (CSP)
Types de contraintes
Une contrainte est caractérisée par son arité (nombre de variables qu'elle implique) :
• Unaire: Les contraintes ne concernent qu’une variable.
• Binaire: Les contraintes concernent deux variables.
• Multiple : Les contraintes concernent 3 variables ou plus.
Pour les problèmes avec des contraintes binaires, on peut visualiser le problème CSP par un
graphe de contraintes :
• Les nœuds sont les variables (nœud = variable)
• Les arcs sont les contraintes entre deux variables
Problèmes de Satisfaction des contraintes (CSP)
▪ Si toutes les valeurs du domaine de cette variable on été testées sans succès, on doit
procéder à un backtrack : on choisit une autre valeur pour la variable précédant
immédiatement la variable courante. On répète ce processus jusqu’à obtenir une
solution, c’est à dire une instanciation de toutes les variables.
Exercice :
▪ Améliorations :
▪ Filtrage et propagation
▪ Utilisation des heuristiques générales
• Choix de la prochaine variable (Var-Non-Assignée)
• Choix de la prochaine valeurs à assigner (valeurs-Ordonnées)
• Détecter les assignations conflictuelles et réduction des domaines (Inférence)
Problèmes de Satisfaction des contraintes (CSP)
Algorithme Backtracking search
▪ Filtrage et propagation
• supprimer les valeurs des domaines des variables impliquées dans une contrainte
(éviter de parcourir des branches de l’arbre qui ne peuvent aboutir à une solution)
▪ Exemple
– soient x1, x2 et x3 variables,
– soient D(x1) = D(x2) = D(x3) = {1, 2, 3} leurs domaines respectifs,
– soient les contraintes C1 = [x1 < x2] et C2 = [x2 = x3]
Filtrage : La valeur 3 peut être supprimée de D(x1), car il n’existe aucune valeur du
domaine de x2 telle que C1 soit satisfaite si on instancie x1 avec 3 (et idem pour
la variable x2 : la valeur 1 peut être supprimée).
Propagation : Le filtrage de la valeur 1 de D(x2) relatif à C1 peut être propagée sur D(x3): si la valeur 1
n’appartient plus à D(x2), alors la valeur 1 peut également être supprimée de D(x3), car il n’existe
plus de solution de C2 telle que x3 soit instanciée avec 1.
Problèmes de Satisfaction des contraintes (CSP)
Algorithme Backtracking search
▪ Heuristique 1 : Choix de l’ordre d’assignation des variables
▪ Minimum Remaining Value (MRV) heuristic
▪ A chaque étape, choisir la variable avec le moins de valeurs compatibles
restantes
Problèmes de Satisfaction des contraintes (CSP)
Algorithme Backtracking search
▪ Heuristique 1 : Choix de l’ordre d’assignation des variables
▪ Degree heuristic
▪ Choisir la variable ayant le plus de contraintes impliquant des variables non
encore assignées (si l’heuristique précédente donne le même nombre de
valeurs compatibles )
Problèmes de Satisfaction des contraintes (CSP)
Algorithme Backtracking search
▪ Heuristique 2 : Choix de la prochaine valeur à assigner
▪ Least constraining value
Choisir une valeur qui invalide le moins de valeurs possibles pour les variables non encore
assignées (Choisir la valeur qui va enlever le moins de choix pour les variables voisines)
Problèmes de Satisfaction des contraintes (CSP)
Algorithme Forward checking
▪ Heuristique 3 : Détecter les assignations conflictuelles
Forward checking (vérification anticipative) :
▪ Avant d'affecter une valeur v à une variable, vérifie que v est compatible avec les variables
suivantes, c-à-d qu'il existe au moins une valeur pour chaque variable suivante qui soit
consistante avec v. (contrairement au backtrack, qui vérifie que la valeur de la variable
courante est compatible avec les valeurs affectées aux variables précédentes).
1 2 3 4
1
2
3
4
Problèmes de Satisfaction des contraintes (CSP)
Algorithme Forward checking
Algorithme Forward-Checking(X,csp)
Pour chaque Xk dans voisins(X,csp)
Changé, csp = Réviser(Xk,X,csp)
Si Changé et Domaine(Xk,csp) est vide Alors retourner(void,faux)
Sinon retourner(csp,vrai)
Si une variable perd une valeur, ses voisins doivent êtres revérifiées
Problèmes de Satisfaction des contraintes (CSP)
Recherche locale
▪ Algorithme min-conflicts
▪ Fonction objective : minimiser le nombre de conflits
▪ Ressemble à hill-climbing mais qui utilise la stochasticité
Problèmes de Satisfaction des contraintes (CSP)
Algorithme min-conflicts
Algorithme Min-conflicts(csp, nb_itérations)
Assignation = une assignation aléatoire complète (probablement pas compatible) de csp
Pour i = 1 à nb_itérations
1. Si assignation est compatible Alors retourner assignation
2. Sinon X = variable choisie aléatoirement dans Variable(csp)
3. v = valeur dans Domaine(X,csp) satisfaisant le plus de contraintes de X
4. Assigner (X = v) dans assignation
Retourner faux