Modèle de sudoku

L`inconvénient de cette méthode est que le temps de résolution peut être lent par rapport aux algorithmes modélisés après des méthodes déductives. Un programmeur a rapporté qu`un tel algorithme peut typiquement exiger aussi peu que 15 000 cycles, ou autant que 900 000 cycles pour résoudre un Sudoku, chaque cycle étant le changement de position d`un “pointeur” comme il se déplace à travers les cellules d`un Sudoku. 7 [8] lorsque les valeurs des variables de décision sont déterminées, nous saurons si chaque entier k (1 Le k Le 9) apparaît dans chaque élément (i, j) de la matrice de Sudoku n times n. C`est-à-dire que la solution au puzzle Sudoku correspondant sera définie. Un Sudoku peut également être modélisé comme un problème de satisfaction de contrainte. Dans son papier Sudoku comme un problème de contrainte [12], Helmut Simonis décrit de nombreux algorithmes de raisonnement basés sur des contraintes qui peuvent être appliquées pour modéliser et résoudre des problèmes. Certains solveurs de contrainte incluent une méthode pour modéliser et résoudre Sudokus, et un programme peut nécessiter moins de 100 lignes de code pour résoudre un simple Sudoku. 13 [14] si le code emploie un algorithme de raisonnement fort, l`incorporation de rétroaction n`est nécessaire que pour les Sudokus les plus difficiles. Un algorithme combinant un algorithme basé sur un modèle de contrainte avec rétroaction aurait l`avantage de temps de résolution rapide, et la capacité de résoudre tous les Sudokus. La version standard de Sudoku se compose d`une grille carrée de 9 × 9 contenant 81 cellules. La grille est subdivisée en neuf 3 × 3 blocs. Certaines des 81 cellules sont remplies avec des nombres de l`ensemble {1, 2, 3, 4, 5, 6, 7, 8, 9}.

Ces cellules remplies sont appelées Givens. Le but est de remplir la grille entière en utilisant les neuf chiffres de sorte que chaque ligne, chaque colonne, et chaque bloc contienne chaque nombre exactement une fois. Nous appelons cette contrainte sur les lignes, les colonnes et bloque la règle unique. Un Sudoku peut être construit pour travailler contre le backtracking. En supposant que le solveur fonctionne de haut en bas (comme dans l`animation), un puzzle avec peu d`indices (17), pas d`indices dans la rangée supérieure, et a une solution “987654321” pour la première rangée, travaillerait en opposition à l`algorithme. Ainsi, le programme consacrait un temps significatif à «compter» vers le haut avant qu`il arrive à la grille qui satisfait le puzzle. Dans un cas, un programmeur a trouvé un programme de force brute a exigé six heures pour arriver à la solution pour un tel Sudoku (quoique utilisant un ordinateur de 2008-ère). [1] un tel Sudoku peut être résolu de nos jours en moins de 30 secondes en utilisant une routine de recherche exhaustive et des processeurs plus rapides. [citation nécessaire] Comme un exemple spécifique, une recherche d`un Sudoku 17-indice pourrait commencer par un Sudoku connu 18-indice, puis de le modifier en supprimant trois indices, et de les remplacer par seulement deux indices, dans des positions différentes (voir les deux dernières images). Cela peut découvrir de nouveaux Sudokus, mais il n`y aurait pas de garantie immédiate qu`ils sont essentiellement différents de sudokus déjà connu.

Si vous recherchez des sudokus véritablement nouveaux (non découverts), une autre confirmation serait nécessaire pour s`assurer que chaque découverte n`est pas une transformation d`un Sudoku déjà connu. 20 18 Une solution au puzzle est alors trouvée [17]. Les approches pour mélanger les nombres incluent le recuit simulé, l`algorithme génétique et la recherche de Tabu. Algorithmes stochastiques sont connus pour être rapide, mais peut-être pas aussi rapide que les techniques déductives. Contrairement à ce dernier, cependant, les algorithmes d`optimisation ne nécessitent pas nécessairement des problèmes pour être logique-solvable, ce qui leur donne le potentiel pour résoudre un plus large éventail de problèmes. Les algorithmes conçus pour la coloration des graphes sont également connus pour bien performer avec Sudokus. [11] il est également possible d`exprimer un Sudoku comme un problème de programmation linéaire entier.