1) Résolution de grilles de Sudoku par filtrage Le jeu Sudoku
Transcription
1) Résolution de grilles de Sudoku par filtrage Le jeu Sudoku
1) Résolution de grilles de Sudoku par filtrage Le jeu Sudoku consiste à compléter une grille n x n (avec n = p2 et p ≥ 2) avec des chiffres allant de 1 à n. Chaque chiffre ne doit être utilisé qu’une seule fois par ligne, par colonne et par carré de n cases. Exemple de grille 9x9 de niveau facile : Le but du devoir est de modéliser et résoudre des grilles de Sudoku en utilisant différentes formes de filtrage sur les CSPs. a) Modélisation sous forme d’un CSP En utilisant la contrainte globale AllDiff, modéliser sous forme d’un CSP une grille n x n quelconque. Indiquer le nombre de variables, la taille des domaines, ainsi que le nombre de contraintes AllDiff nécessaires à votre modélisation. b) Résolution par cohérence d’arc simple versus cohérence d’arc généralisée En faisant l’hypothèse que l’on ne dispose pas de la contrainte AllDiff, combien de contraintes binaires de différence (≠) sont elles nécessaires ? Dans le cas général, a-t-on besoin d’énumérer pour trouver une solution avec la contrainte binaire ? avec la contrainte AllDiff ? c) Résoudre des grilles 9 x 9 avec un outil de programmation par contraintes Recopier puis compléter le programme java « Sudoku.java » présent dans le répertoire tpmposc/choco pour résoudre des grilles 9 x 9. Pour le compiler et l’exécuter, taper CLASSPATH=.:./choco-1_0b003.jar export CLASSPATH javac Sudoku.java java Sudoku Remplacer la contrainte allDifferent par un ensemble de contraintes binaires d’inégalité « ≠ » (syntaxe choco « pb.post(pb.neq(x, y)) »). Comparer les résultats sur la grille de niveau facile et sur celle de niveau difficile (données présentes dans Sudoku.java). 2) Coopération de méthodes complètes et incomplètes pour le calcul de l’explication la plus probable dans les réseaux bayésiens a) Coopération séquentielle d’une méthode complète pour accélérer une méthode incomplète Il est possible d’accélérer une méthode incomplète en transformant le réseau bayésien à résoudre par l’algorithme d’élimination de variables. Expliquer la nature de la transformation. Quel paramètre permettrait de contrôler la complexité temporelle et spatiale de cette opération de transformation ? Une fois le réseau transformé, comment utiliser l’algorithme d’élimination de variables approché pour produire rapidement une bonne solution initiale à une recherche locale ? b) Expérimentation de la coopération précédente à l’aide du programme gls++ Gls+ est un fondé sur un algorithme de recherche locale avec modification de l’objectif pour sortir des minima locaux. Sa recherche locale interne consiste en une descente gloutonne avec arrêt dès qu’un minimum local est atteint (n’accepte pas de dégrader la solution courante). Tester gls+ sur les exemples de réseaux bayésiens du répertoire bnrep. Essayer : “gls+/gls+ -pB x –i problems/bnrep/diabetes-e0.simple” Le paramètre entier x correspond au paramètre du schéma de coopération précédent. A partir de quelle valeur de x la méthode devient complète ? Comment expliquer la variation des résultats de gls+ d’un essai à l’autre sachant que la solution initiale est toujours la même et que la recherche locale interne est gloutonne ? c) Coopération séquentielle d’une méthode incomplète pour accélérer une méthode complète Quelle information simple une recherche locale peut fournir à l’algorithme Depth First Branch and Bound pour accélérer la recherche ? Expérimenter les gains d’une telle coopération à l’aide du programme toolbar21. Pour calculer l’optimum du problème munin1 avec l’algorithme Depth First Branch and Bound, taper : « toolbar21/toolbarl -p10 -f3 problems/ergo/munin1.erg –v ». Pour donner l’information fournie par la recherche locale, ajouter « -uxxx » avec xxx la valeur obtenue précédemment. 3) Vérification de circuits logiques en SAT a) Est-il possible de vérifier un circuit à l’aide d’une méthode incomplète ? b) Expérimentations d’une méthode complète (zchaff, DPLL avec backtrack non chronologique) et d’une méthode incomplète (walksat, recherche locale de type marche aléatoire) Essayer les instances ssa* dans le repertoire dimacs. Par exemple, « zchaff/zchaff problems/dimacs/ssa7552-038.cnf » et « cat problems/dimacs/ssa7552-038.cnf | walksat-dist/walksat c) MAC / élimination de variables Comparer l’algorithme MAC toolbar12/toolbar problems/dimacs/ssa0432-003.wcsp -u1 –v avec l’algorithme MAC avec élimination de variables (k = 2) toolbar12/toolbar problems/dimacs/ssa0432-003.wcsp -u1 –v –e2 avec l’algorithme d’élimination de variables toolbar12/toolbar problems/dimacs/ssa0432-003.wcsp -T1 –i Comment expliquer les bonnes performances des deux derniers algorithmes ? Sachant qu’il y a beaucoup de clauses d’arité 2, quel filtrage faut-il mieux employer ? d) En cas de panne multiple, proposer une modélisation et une méthode de résolution pour trouver un diagnostic de la panne ?