CM2 B Flashcards
De quelle manière est-il possible d’accélérer une recherche Backtrack ?
- En raisonnant sur les échecs (look-back)
- En propageant les contraintes (look-ahead/forward)
- En ordonnant les variables
- En ordonnant les valeurs des domaines
Quel est le principe du look-back ?
Il s’agit de foncer sur les éches et de réflechir après
Quelles sont les deux façons de raisonner sur les échecs (look-back) ?
- Avoir un meilleur point de retour que celui par défaut : backjumping
- Ne pas refaire les mêmes erreurs : nogood learning
Comment fonctionne le backjumping ?
Lors du backtrack, lorsqu’un domaine est vidé, on remonte à la plus basse variable responsable de l’échec plutôt que de toujours remonter juste au niveau précédent
Comment fonctionne le nogood learning ?
Lors du backtrack, lorsqu’un domaine est vidé, on garde en mémoire la raison de l’échec en l’ajoutant aux contraintes pour ne pas retomber sur le même échec une deuxième fois
Quel est le principe du look-ahead/forward ?
Il s’agit de réfléchir d’abord ou ne pas descendre, c’est à dire d’enlever des branches qui conduisent à un échec avant de les explorer
Quelles sont les deux façons de faire du look-ahead/forward ?
Dans les deux cas il s’agit de propagation de contraintes :
- Forward-Checking (FC)
- Maintaining Arc Consistency (MAC)
Algorihtme du Forward-Checking (entrée, sortie, algorithme)
- Entrée : Réseau N, Instanciation I
- Sortie : Booléen
- FC(N, I) :
- Si |I| = |X|, renvoyer Vrai
- Choisir xi !∈ I
- Pour chaque valeur vi de D(xi) :
- D(xi) ← {vi}
- Supprimer tous les couples (xj, vj) inchohérents avec I ← I ∪ (xi, vi)
- Si aucun domaine n’a été vidé :
- Si FC(N, I ∪ (xi, vi)), renvoyer Vrai
- Restaurer toutes les valeurs supprimées à cause du choix (xi, vi)
- Renvoyer Faux
Comment fonctionne l’algorithme du Forward-Checking ?
On construit une instanciation au fur et à mesure en prenant une variable non-instanciée et en construisant une branche pour chaque valeur de son domaine dans laquelle on supprime les valeurs incompatibles de tous les autres domaines, puis on coupe la branche si on obtient un domaine vide
Algorihtme MAC (entrée, sortie, algorithme)
- Entrée : Réseau N
- Sortie : Booléen
- MAC(N) :
- N = AC(N)
- Si un domaine est vide, renvoyer Faux
- Si tous les domaines sont réduits à des singletons et si c’est une solution, renvoyer Vrai
- Choisir une variable xi dont le domaine n’est pas un singleton
- Choisir une valeur vi de D(xi)
- Renvoyer MAC(N+{xi = vi}) ∨ MAC(N+{xi != vi})
Comment fonctionne l’algorithme MAC ?
On commence par calculer l’arc-cohérence, et si cela ne donne pas déjà une réponse, on prend une variable qui a plusieurs valeurs possibles et on branche sur l’une e ces valeurs avec = ou != puis on recommence
Comment évaluer l’efficacité des algorithmes de résolution ?
L’analyse asymptotique n’est pas adaptée donc on utilise des benchmarks de problèmes binaires aléatoires
Quels sont les paramètres des benchmarks de problèmes binaires aléatoires ?
- le nombre de variables n
- la taille des domaines d
- la proportion de contraintes p1 → |C| = p1 × n(n-1)/2
- l’étanchéité des contraintes p2 → |tuples interdits| = p2 × d2
Conjecture de Cheeseman, Kanesfky et Taylor
Pour évaluer une méthoe de résolution :
- Prendre un problème NPC et identifier les k paramètres qui le caractérisent
- Fixer k-1 paramètres et varier le k-ième
- Pour chaque valeur du paramètre k, générer 100 instances
Qu’est-ce que la transition de phase ?
C’est le moment où, en faisant varier les paramètres, les problèmes passent de tous satisfiables à tous insatisfiables