Dans le cas général, FC effectue parcours mois de nœuds que BT (ou sinon le
même nombre : cf. explication ci-dessus) mais effectue toujours plus de tests (tests
des instances de domaines possibles)
(iv) Les algorithmes BT et FC instancient les variables les unes après les autres dans
un ordre donné. Il est à peut près sur que ces algorithmes effectuerons des retours
en arrières dans l’arbre qu’ils parcourent, il est donc impossible d’affirmer à l’aide de
ces algorithmes que la grille est déductible ou pas. Il faut donc utiliser un autre
algorithme pour pouvoir effectuer ce teste.
b. Génération aléatoire :
Pour générer aléatoirement une grille de sudoku (contenu de 17 à 81
chiffres) valide, il faut qu’elle satisfasse ces 2 propriétés :
- avoir exactement une solution
- cette solution pour être trouver uniquement grâce a des déductions
Pour satisfaire la première propriété, nous avons utilisé un algorithme amélioré de
Forward-Checking qui compte les nombres de solutions possibles, puis pour la
deuxième propriété nous avons créer un nouvelle algorithme qui vérifie si la grille est
déductible ou non.
Pour commencer, nous avons décidé de générer aléatoirement (tout en respectant
les contraintes) une grille de 15 chiffres, puis a l’aide de FC, nous gênerons 1 grille
possible qui devient alors la solution a la future grille générée. Nous avons choisis de
générer 15 chiffres car plus il y a de variables générées aléatoirement, moins il est
possible de trouver une solution possible puisque nous faisons alors face au
problème de chevauchement des domaines :
Exemple : parmi les variables non instanciées, x y et z sont 3 variables en relation les
unes avec les autres (soumis aux contraintes). Il est possible que lors de
l’instanciation des autres variables, les domaines de ces variables deviennent
identiques et ne contiennent que 2 valeurs : k et l. Le sudoku n’aura donc plus de
solution possible puisque les 3 variables se partagent seulement 2 valeurs possibles
(donc une variable aura un domaine vide).
Ensuite, nous supprimons au fur et a mesure des variables tout en mettant les
domaines des autres variables a jour. Des qu’une variable a été supprimée, nous
appelons l’algorithme de déduction pour vérifier que la grille est toujours déductible.
Si c’est le cas nous appelons alors l’algorithme Forward-Checking afin qu’il s’assure
que le grille n’a qu’une seule solution. Nous effectuons les appels à ces algorithmes
dans cet ordre car l’algorithme de déduction est plus rapide que FC. Les variables
supprimés sont sélectionné au hasard mais toutefois, nous avons vérifie que 1
variable ne soit pas testé 2 fois et que si toute les variables on été testées, cela
revient a dire que la grille ne peut plus être allégée.
III. Comparaison entre l’algorithme BT et FC :