Générateur de Sudoku aléatoire

13

Je veux générer un Sudoku complètement aléatoire .

Définissez une grille Sudoku comme une grille d'entiers entre et où certains éléments peuvent être omis. Une grille est un casse-tête valide s'il existe un moyen unique de le compléter pour correspondre aux contraintes de Sudoku (chaque ligne, colonne et aligné carré n'a pas d'élément répété) et il est minimal à cet égard (c'est-à-dire si vous omettez plus élément du puzzle a plusieurs solutions).9×9193×3

Comment puis-je générer un puzzle Sudoku aléatoire, de sorte que tous les puzzles Sudoku soient équiprobables?

Justin
la source
Cela ressemble à une solution viable: dryicons.com/blog/2009/08/14/…
Joe
1
Il y a maintenant une méta-question à ce sujet. Veuillez en discuter ou en discuter.
Kevin

Réponses:

15

Générer la distribution uniforme exacte de tous les puzzles sudoku peut être fait de cette façon: vous pouvez simplement générer au hasard une grille 9x9 et la conserver uniquement s'il s'agit d'une grille sudoku correcte, sinon réessayez.

Cette approche par force brute vous garantit une distribution uniforme mais n'est clairement pas efficace, car vous ne pouvez multiplier la probabilité que la grille soit correcte par qu'en générant une grille aléatoire 8x8, puis remplir les deux lignes restantes. Il s'agit toujours d'une distribution aléatoire, mais toujours beaucoup trop inefficace.917

Vous pouvez également forcer la première ligne à , puis générer aléatoirement le reste de la grille, puis choisir aléatoirement une permutation de tous les chiffres. Vous choisirez toujours toutes les grilles avec la même probabilité mais 9 ! plus rapide.[1,2,..9]9!

Peut-être voyez-vous où je vais: répondre à ce problème de manière intelligente vous amènera probablement à vous interroger sur les symétries sous-jacentes des grilles de sudoku. Beaucoup de travail a été fait dans ce sens pour prouver que 17 est le nombre minimal d'indices pour un sudoku ( voir cet article ) et vous pouvez aller ici pour voir cette énumération précise de 5 472 730 538 classes de 3 359 232 grilles similaires, qui utilise ces symétries:

  1. Permutations de chiffres
  2. Permutations de rangées (les bandes et les rangées à l'intérieur de chaque bande)
  3. Même chose pour les colonnes
  4. Transposition

Avec ce cadre, vous pouvez choisir au hasard l'une des 5 472 730 538 classes (elles peuvent en fait être compressées en 6 Go), puis choisir l'un des représentants pour chaque symétrie, respectivement un sur .9!,64,64,2

EDIT: pour l'adapter à des puzzles incomplets, vous pouvez choisir au hasard un sous-ensemble de votre grille, vérifier si la solution est unique avec un solveur sudoku et réessayer sinon. Ce n'est pas une distribution uniforme car le nombre de puzzles incomplets avec une solution unique peut être différent pour deux grilles. (Je serais très surpris sinon)

jmad
la source
Mais Justin demande un moyen de générer un puzzle incomplet de telle sorte qu'il existe un moyen unique de le compléter. Même si vous générez une grille 9x9 satisfaisant aux contraintes de Sudoku, il n'est pas clair pourquoi la suppression d'un sous-ensemble spécifique des cellules vous donnerait un puzzle qui peut être complété de manière unique.
Janoma
1
@Janoma: oh, mon mauvais, je vais éditer. Mais cela n'a pas beaucoup de sens si l'on ne définit pas ce qu'est un véritable casse-tête. (Est-ce qu'une grille avec une seule cellule vide est un casse-tête?). Voulons-nous une grille minimale (par exemple, si vous supprimez un chiffre, la solution n'est plus unique?) C'est une question intéressante.
jmad
"Certains éléments peuvent être omis" est suffisamment précis (c'est-à-dire "un ou plusieurs" éléments peuvent être supprimés). Par exemple, un puzzle valide avec une cellule vide peut être complété d'une manière unique, alors qu'un puzzle vide ne peut pas, car il y a plus d'un puzzle valide. En outre, un puzzle valide terminé peut être complété d'une manière unique (triviale, vide). La question de la grille minimale est également intéressante, mais différente de celle-ci.
Janoma
@Janoma, jmad: un puzzle valide est normalement minime, j'ai oublié de le mentionner.
Gilles 'SO- arrête d'être méchant'
@Gilles Est-ce une définition? Je me demande si tel est bien le sens voulu du PO. Cela rend le problème beaucoup plus difficile :-)
Janoma