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