Titre. Sudoku

Encadrant(s). C. Bessiere, E. Bourreau

Lieu. LIRMM

Sujet.

Le jeu de Sudoku se définit très simplement. Il consiste en une grille carrée de 9 cases sur 9, soit 81 cases, déjà partiellement remplie de chiffres de 1 à 9. Le but du jeu est de compléter le remplissage uniquement avec des chiffres de 1 à 9 de sorte que tous les chiffres de 1 à 9 apparaîssent sur chaque ligne, chaque colonne et chacun des neuf pavés de 9 cases obtenus en groupant les lignes et les colonnes trois par trois de la première à la troisième, de la quatrième à la sixième et de la septième à la neuvième.

Bien sûr, on peut utiliser un solveur à contraintes pour remplir les cases manquantes, mais l'intérêt est limité. Le problème intéressant est de générer de telles grilles. En effet, une multitude de journaux sont friands de ces grilles car ils en publient une chaque matin. Or, ces grilles ne se génèrent pas simplement en lançant au hasard quelques chiffres. Il faut respecter un certain nombre de points qui rendent le problème non trivial :

Les questions qui se posent vont donc bien au-delà du simple remplissage aléatoire. La programmation par contraintes, avec les notions de consistance locale, de contrainte globale, de 'backdoor', de symétries, etc. est un candidat idéal pour ce genre de problème.

Le but du stage est triple :
D'abord, on cherchera des réponses théoriques aux questions que pose le problème du Sudoku.
Ensuite, on appliquera les techniques trouvées dans une implémentation du problème avec le solveur à contraintes public Choco.
Enfin, on analysera la facilité de mise en oeuvre dans Choco des techniques proposées. Les difficultés rencontrées, s'il y en a, seront étudiées, et des adaptations de l'architecture du solveur seront proposées.