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 ?

Documents pareils