Jul 03, 2024

Wiki

Python

Aide

edit SideBar

Search

Recuit Simule Et Sudoku


Rappels concernant le Sudoku

On rappelle qu'un Sudoku consiste en la donnée d'une grille carrée divisée en 9 sous-carrés de 3 cases de côté, et partiellement remplie avec des nombres de 1 à 9.

Le but du jeu consiste à compléter la grille avec les chiffres de 1 à 9, de sorte qu'aucun chiffre n'apparaisse deux fois dans la même ligne, dans la même colonne ou dans le même sous-carré

En général, il n'existe qu'une seule manière de compléter la grille.

On peut prouver que compléter un Sudoku est équivalent à compléter le 9-coloriage d'un graphe :

  • dont les sommets sont les cases de la grille,
  • tel que deux sommets sont reliés s'ils appartiennent ) la même ligne, à la même colonne, ou au même sous-carré.

Le problème qui consiste à décider si un Sudoku peut être complété ou non est NP-complet.

Résolution du Sudoku par recuit simulé

Le recuit simulé

Présentation

La méthode du recuit simulé a été proposée dans les années 80, par analogie avec une technique dite du recuit, utilisée par les physiciens.

Il s'agit d'un principe général de construction d'algorithmes pour résoudre des problèmes d'optimisation difficiles.

Cette métaheuristique est assez bien comprise, d'un point de vue théorique, et permet la création d'algorithmes relativement simples.

La théorie

Le cadre

Soit un problème d'optimisation combinatoire qui consiste, étant donnés :

  • un ensemble de solutions $\Omega = \{w_1, ..., w_N\}$,
  • une fonction économie $c : \Omega \rightarrow \{e_1, ..., e_p\}$,
  • une fonction de voisinage $V : \Omega \rightarrow 2^\Omega$,

à trouver un élément $w* \in \Omega$ tel que $e_1 = c(w*) \leqslant c(w) \leqslant e_p$, pour tout $w \in \Omega$.

$c(w)$ s'appelle la valeur de la solution $w$.

La méthode

Au départ, on commence avec une solution arbitraire $w$.

A chaque itération, une solution candidate $w'$ est choisie uniformément dans le voisinage de la solution courante. Elle est acceptée avec une probabilité égale à $min \left(1, e^{-\frac{c(w')-c(w)}{T}}\right)$, et remplace la meilleure solution mémorisée.

Le paramètre $T$ ci-dessus s'appelle la température. Il doit tendre vers 0, de manière monotone, selon une fonction appelée loi de décroissance de la température.

Discussion

On a convergence (en probabilité) vers une solution optimales, sous des conditions peu restrictives (concernant la fonction de voisinage, et la forte connexité du graphe induit).

Cependant, si la convergence est assurée sous ces hypothèses, la décroissance de la température (donc la vitesse de convergence) peut s'avérer être beaucoup trop lente.

Il reste que cette méthode a donnée de bons résultats sur un certain nombre de cas pratiques.

La résolution du Sudoku

Formalisation

L'ensemble des solutions $\Omega$ est l'ensemble des grilles carrées de côté 9 dont les cases contiennent un chiffre de 1 à 9 quelconque, ceci à l'exception des cases fixées par l'énoncé.

S'il y a $m$ cases fixées, le nombre d'éléments de $\Omega$ est égal à $N = 9^{81-m}$.

Soient alors :

  • $W \in \Omega$,
  • $w_{ij}$ le contenu de la case en position $i,j$ dans $w$,
  • $c_{ij}(w)$ le nombre d'occurences du chiffre $w_{ij}$ dans la zone définie par l'union :
    • de la ligne $i$,
    • de la colonne $j$,
    • et du sous-carré contenant la case $ij$, cette dernière n'étant pas comprise.

Choix des fonctions

La fonction économique

La fonction économique est alors naturellement définie par $c(w) = \frac{1}{2} \sum_{i=1}^9 \sum_{j=1}^9 c_{ij}(w)$

Notons dès à présent qu'une solution de fonction économique nulle respecte les règles du Sudoku.

La fonction de voisinage

La fonction de voisinage est définie ainsi : deux grilles sont voisines l'une de l'autre si l'une peut s'obtenir à partir de l'autre en changeant un et un seul chiffre (non fixé).

La température

Il reste à définir l'évolution de la température, et le nombre d'itérations à cette température. Les discutions pour les trouver étant un peu techniques, on se contentera de donner leurs formules. Signalons seulement qu'elles ont été choisies de sorte que :

  • l'algorithme démarre à une température élevée, pour avoir convergence rapide,
  • la température finale est relativement faible, pour avoir de bonnes chances de tirer une solution optimale.

La formule de la température :

$T_0 = 810, T_{k+1} = \frac{T_k}{1 + \frac{log(1+\delta)}{811} T_k}$

  • La température initiale correspond à la plus forte température possible : il y a 10 chiffres et $9^2$ cases.
  • $\delta$ est un petit réel positif, que l'on peut faire varier (par exemple, $\delta = 0.1$)

Itérations par palier, et condition d'arrêt

Reste à fixer le nombre d'itérations par palier, et à savoir quand s'arrêter.

  • On choisit généralement un nombre d'itérations proportionnel à la taille du problème (ici, le nombre de cases du Sudoku)
  • Pour condition d'arrêt, on peut prendre au hasard une température faible, ou on peut pousser la réflexion plus loin. Un raisonnement probabiliste assez fin peut nous convaincre qu'à une température inférieure à 0,00273852, on ne pourra pas trouver mieux que la solution issue de l'algorithme. Si elle ne convient pas, inutile d'attendre plus longtemps : mieux vaut relancer l'algorithme.

L'algorithme

L'ensemble des réflexions précédantes mène à l'algorithme :

  Poser $\delta = 0.1$, et $T = 810$
  Choisir $w$ arbitrairement, et faire $c = c(w)$
  Tant que $T \geqslant 0.00273852$, faire
      (Palier) Pour k=1 à 81, faire
            Choisir $i$ et $j$ uniformément dans [1,9] tant que la case ij est fixée
            Faire $t = w_{ij}$, et $c_1 = c_{ij}(w)$
            Choisir $w_{ij}$ uniformément dans [1,9] tant que $w_{ij} = t$
            Faire $c_2 = c_{ij}(w)$ et $c' = c-c_1+c_2$
            Choisir $u$ uniformément dans [0,1]
            Si $u \leqslant e^{-\frac{c'-c}{T}}$, alors faire $c = c'$ (acceptation)
            Sinon faire $w_{ij} = t$ (rejet)
            Si $c = 0$, alors écrire $w$ et s'arrêter.
      Fin                
      Faire $T = \frac{T}{1+\frac{log(1+\delta)}{811}T}$
  Fin

Travaux pratiques

  1. Mettre en oeuvre cet algorithme.
  2. Essayez d'obtenir de meilleurs résultats, en faisant varier la température, le $\delta$, etc.

Page Actions

Recent Changes

Group & Page

Back Links