Vous êtes sur la page 1sur 7

Programmation par contrainte

Rakotoarimalala Tsinjo Tony

Backtracking

Rakotoarimalala Tsinjo Tony Programmation par contrainte


Le Backtracking est un type d’algorithme pour résoudre des
problèmes de satisfaction de contraintes.
La méthode consiste à créer progresseivement les solutions
Il explore systématiquement toutes les solutions possibles.
Il arrête une branche de l’exploration si une contrainte est non
satistfaite par cette branche

Rakotoarimalala Tsinjo Tony Programmation par contrainte


Fonctionnement
1 Étape de décision : cette décision est souvent représentée par le choix
d’un élément (affecter une valeur à une variable) à inclure dans la
solution partielle en cours de construction.
2 Validation : Après avoir pris une décision, on vérifie si la solution
partielle obtenue jusqu’à présent satisfait les contraintes du problème. Si
la solution partielle est valide, on continue la recherche en explorant les
solutions potentielles à partir de cet état.
3 Exploration récursive : Si la solution partielle est valide, on explore
récursivement les solutions potentielles en prenant d’autres décisions pour
compléter la solution. Cette étape peut nécessiter l’appel récursif de la
fonction de recherche avec une solution partielle mise à jour.
4 Backtrack : Si la solution partielle n’est pas valide ou si on atteint une
impasse où aucune décision ne mène à une solution valide, on revient en
arrière (backtrack) pour annuler la dernière décision prise et explorer
d’autres options.
5 Critères d’arrêt : La recherche se termine lorsque toutes les solutions
potentielles ont été explorées (solution trouvée ou aucune solution
possible), ou lorsqu’une condition de terminaison spécifique est atteinte.

Rakotoarimalala Tsinjo Tony Programmation par contrainte


Exemple: n-queens

Il consiste à placer N reines sur un échiquier de taille N × N de


telle sorte qu’aucune reine ne puisse attaquer une autre reine. Cela
signifie qu’aucune reine ne doit se trouver sur la même ligne, la
même colonne ou la même diagonale qu’une autre reine.

Rakotoarimalala Tsinjo Tony Programmation par contrainte


Exemple: n-queens
1 Étape de décision : À chaque étape, nous devons décider où placer une
reine sur une ligne donnée de l’échiquier.
2 Validation : Après avoir placé une reine sur une ligne, nous devons
vérifier si elle ne menace pas les reines déjà placées. Cela signifie vérifier
si la reine nouvellement placée ne se trouve pas sur la même colonne ou
diagonale qu’une reine déjà placée.
3 Exploration récursive : Si la reine placée sur la ligne actuelle ne menace
pas les reines déjà placées, nous passons à la ligne suivante et répétons le
processus de décision et de validation.
4 Backtrack : Si à un moment donné nous constatons qu’il n’est pas
possible de placer une reine sur la ligne actuelle sans menacer les reines
déjà placées, nous revenons en arrière (backtrack) pour annuler la
dernière décision prise et explorer d’autres options.
5 Critères d’arrêt : La recherche se termine lorsque toutes les lignes de
l’échiquier ont été parcourues avec succès et que toutes les reines ont été
placées sans se menacer mutuellement. Dans ce cas, nous avons trouvé
une solution valide. Si à un moment donné aucune position valide n’est
trouvée pour une reine donnée, la recherche s’arrête et l’algorithme
retourne en arrière pour explorer d’autres options.
Rakotoarimalala Tsinjo Tony Programmation par contrainte
Exemple: n-queens

Rakotoarimalala Tsinjo Tony Programmation par contrainte


Exemple: n-queens
1 def n_queens ( n ) :
2 def is_safe ( board , row , col ) :
3 # Verifier la colonne
4 for i in range ( row ) :
5 if board [ i ] == col :
6 return False
7 # Verifier diagonales
8 if abs ( board [ i ] - col ) == row - i :
9 return False
10 return True
11
12 def backtrack ( board , row ) :
13 nonlocal solution_count
14 if row == n :
15 # Si toutes les reines sont placees avec succes
16 solution_count += 1
17 print ( " Solution " , solution_count , " : " , board )
18 return
19 for col in range ( n ) :
20 if is_safe ( board , row , col ) :
21 board [ row ] = col
22 backtrack ( board , row + 1)
23 board [ row ] = -1 # Annuler la decision pour le backtrack
24
25 sol ution_count = 0
26 board = [ -1] * n # Initialiser le plateau de jeu
27 backtrack ( board , 0) # Commencer la recherche a partir de la premiere ligne
28
29 # Exemple d ’ utilisation pour resoudre le probleme des 4 - Reines
30 n_queens (4)
31
32
Rakotoarimalala Tsinjo Tony Programmation par contrainte

Vous aimerez peut-être aussi