- Apprendre
- Informatique et numérique
- Informatique
- Intelligence artificielle : agents, recherche et apprentissage
- Satisfaction de contraintes
Problèmes de satisfaction de contraintes
IntermédiaireUnité 3 sur 10 de la formation Formation : Intelligence artificielle : agents, recherche et apprentissage
Ce que tu vas apprendre
- Décrire un problème par ses variables, ses domaines et ses contraintes, reconnaître les types de contraintes et transformer des tâches réelles d'ordonnancement et d'affectation en problèmes de satisfaction de contraintes bien définis.
- Décrire les composantes d'un problème de satisfaction de contraintesNommer les variables, les domaines et les contraintes d'un problème, distinguer les affectations partielles, cohérentes et complètes, et tracer le graphe de contraintes.
- Distinguer les types de contraintesClasser les contraintes en contraintes unaires, binaires, d'arité supérieure ou globales, réécrire les contraintes d'arité supérieure sous forme binaire et distinguer les contraintes dures des préférences.
- Modéliser l'ordonnancement et l'affectation par des problèmes de satisfaction de contraintesTransformer les problèmes d'emploi du temps, d'ordonnancement d'atelier, d'affectation et les énigmes en problèmes de satisfaction de contraintes, en choisissant les variables et les domaines de manière à garder des contraintes simples.
- Décrire les composantes d'un problème de satisfaction de contraintes
- Rechercher une solution en affectant une variable à la fois, revenir en arrière dans les impasses et choisir l'ordre des variables et des valeurs pour trouver une solution, ou prouver qu'il n'en existe aucune, avec beaucoup moins de travail.
- Exécuter une recherche avec retour arrière pas à pasExpliquer pourquoi le retour arrière affecte une variable par niveau, exécuter l'algorithme à la main et indiquer sa complétude et son coût.
- Choisir les variables et les valeurs à l'aide d'heuristiques d'ordonnancementAppliquer l'heuristique du minimum de valeurs restantes, l'heuristique du degré et celle de la valeur la moins contraignante, expliquer pourquoi elles vont dans des directions opposées et mesurer leur effet sur une recherche.
- Effectuer un retour arrière intelligent après une impasseUtiliser les ensembles de conflit pour revenir au-delà des variables qui n'ont pas causé un échec, et enregistrer les nogoods afin de ne pas répéter le même échec.
- Exécuter une recherche avec retour arrière pas à pas
- Utiliser l'inférence pour supprimer les valeurs qui ne peuvent appartenir à aucune solution, avant et pendant la recherche, et déterminer ce que garantissent respectivement la vérification anticipée, la cohérence d'arc et les cohérences plus fortes.
- Appliquer la vérification anticipée pendant la rechercheRéduire les domaines des voisins d'une variable nouvellement affectée, détecter les domaines vides, restaurer les valeurs lors du retour arrière et reconnaître ce que la vérification anticipée ne détecte pas.
- Établir la cohérence d'arc avec AC-3Appliquer la cohérence de nœud et d'arc, exécuter AC-3 à la main, connaître son coût et ses limites, et maintenir la cohérence d'arc pendant la recherche.
- Utiliser des cohérences plus fortes et des contraintes globalesExpliquer la cohérence de chemin et la k-cohérence, propager les contraintes Alldiff et les contraintes sur les bornes, et mettre en balance la réduction supplémentaire des domaines et son coût.
- Appliquer la vérification anticipée pendant la recherche
- Partir d'une affectation complète et la réparer avec l'heuristique des conflits minimaux, échapper aux plateaux et aux minima locaux, et déterminer quand la recherche locale ou le retour arrière est le meilleur outil.
- Réparer les affectations avec l'heuristique des conflits minimauxExécuter à la main l'heuristique des conflits minimaux avec une formulation à états complets, expliquer pourquoi elle fonctionne bien sur les grands problèmes et l'utiliser pour réparer un emploi du temps après un changement.
- Échapper aux plateaux et aux minima locaux, et choisir entre recherche locale et retour arrièreUtiliser les déplacements latéraux, la recherche tabou, la pondération des contraintes et les redémarrages, et déterminer quelle méthode convient à un problème donné.
- Réparer les affectations avec l'heuristique des conflits minimaux
- Lire le graphe de contraintes pour séparer un problème en parties indépendantes, résoudre en temps linéaire les problèmes de structure arborescente et ramener à des arbres les problèmes dont la structure est presque arborescente.
- Séparer les sous-problèmes indépendants et résoudre les problèmes de satisfaction de contraintes arborescentsTrouver les sous-problèmes indépendants dans le graphe de contraintes et résoudre un problème de satisfaction de contraintes arborescent avec les parcours ascendant et descendant de l'algorithme pour les arbres.
- Ramener à des arbres les problèmes dont la structure est presque arborescenteAppliquer le conditionnement par ensemble coupe-cycles et la décomposition arborescente, relier leur coût à la taille de l'ensemble coupe-cycles et à la largeur arborescente, et briser la symétrie de valeurs.
- Séparer les sous-problèmes indépendants et résoudre les problèmes de satisfaction de contraintes arborescents
Satisfaction de contraintes : cours
1Formuler des problèmes de satisfaction de contraintes
Choisir un emploi du temps ou affecter des relecteurs commence par un modèle : quels éléments ont besoin d'une valeur, quelles valeurs sont possibles et quelles combinaisons sont autorisées. Un modèle clair permet d'utiliser les mêmes méthodes de résolution pour des tâches très différentes. Tu vas construire ce modèle, distinguer les exigences des préférences et voir comment le choix des variables modifie le travail d'un solveur. De petits exemples d'ordonnancement et d'énigmes rendent chaque composante concrète.
1.1 Décrire les composantes d'un problème de satisfaction de contraintes
Un problème de satisfaction de contraintes décrit un ensemble de choix et les règles qui les relient. Son état est une représentation factorisée : tu peux examiner chaque variable et sa valeur, puis réutiliser des méthodes générales de réduction des domaines et de recherche.
Variables, domaines et contraintes
Une variable désigne quelque chose à choisir. Son domaine énumère ses valeurs autorisées. Une contrainte précise les combinaisons qui peuvent se présenter ensemble. Pour les ateliers A et B, chaque valeur est un créneau de . La règle « A précède B » a pour portée et pour relation . L'écriture exprime la même relation de façon concise.
La portée indique les variables concernées ; la relation donne les tuples de valeurs autorisés. Confondre les deux conduit à un modèle dans lequel « rouge » devient une variable. Dans la coloration de carte, les régions sont les variables et les couleurs sont les valeurs.
Qu'est-ce qu'une solution ?
Une affectation donne des valeurs aux variables. Trois critères décrivent son état :
- Elle est partielle si certaines variables n'ont pas de valeur.
- Elle est complète si chaque variable a une valeur.
- Elle est cohérente si elle ne viole aucune contrainte entre les variables affectées.
Une solution doit être complète et cohérente. Avec seule, l'affectation est cohérente mais partielle. La compléter avec la rend complète et incohérente. Choisir donne une solution à cet exemple à deux variables. Une affectation partielle cohérente peut néanmoins être impossible à compléter : les variables non affectées peuvent manquer de choix compatibles.
Lire un graphe de contraintes
Pour un problème de satisfaction de contraintes binaire, trace un nœud par variable et une arête pour chaque paire soumise à une contrainte. Dans une carte simplifiée de l'Australie, les variables sont WA, NT, SA, Q, NSW, V et T, chacune de domaine {rouge, vert, bleu}. Les paires voisines sont WA-NT, WA-SA, NT-SA, NT-Q, SA-Q, SA-NSW, SA-V, Q-NSW et NSW-V. Chaque arête exige des couleurs différentes.
Une solution est WA rouge, NT vert, SA bleu, Q rouge, NSW vert, V rouge et T rouge. Vérifie chaque arête, y compris SA-V. T n'a aucune arête : sa couleur est donc indépendante de celle du continent. Il y a 6 colorations du continent et 3 choix pour T, soit 18 solutions. Une contrainte concernant plusieurs variables nécessite une représentation par hypergraphe ; un nœud supplémentaire pour la contrainte peut être relié à chaque variable de sa portée.
Domaines et taille de la recherche
Un domaine discret fini est une liste fixe, comme trois couleurs. Un domaine discret infini pourrait contenir tous les horaires de début entiers positifs ou nuls. Un domaine continu pourrait contenir des horaires à valeurs réelles. Ces deux derniers types nécessitent des représentations et des méthodes adaptées ; la programmation linéaire traite les contraintes linéaires continues.
Pour variables ayant chacune valeurs, il y a affectations complètes. La carte possède affectations candidates avant que les contraintes n'en éliminent. Les problèmes de satisfaction de contraintes finis comprennent des problèmes NP-complets : on ne connaît donc pas de méthode générale de résolution en temps polynomial. Leur structure interne permet néanmoins de réduire la recherche : le solveur peut éliminer un choix sans énumérer toutes les affectations complètes qui le contiennent. Seules les valeurs finales déterminent si la réponse est valide ; le chemin suivi pour les trouver est sans importance.
Points clés
- Un problème de satisfaction de contraintes précise les variables, leurs domaines et les contraintes sur les combinaisons de valeurs.
- Une solution est à la fois complète et cohérente.
- Un graphe de contraintes binaires montre quelles variables agissent directement les unes sur les autres.
- Avec des domaines de même taille, le nombre d'affectations complètes est .
1.2 Distinguer les types de contraintes
Les contraintes se distinguent par le nombre de variables qu'elles relient et selon qu'elles expriment des exigences ou des préférences. Reconnaître cette structure t'aide à écrire un modèle fidèle et à choisir des méthodes de propagation utiles.
Classer selon la portée
Une contrainte unaire restreint une variable. Si l'atelier E ne peut pas utiliser le créneau 1, applique en réduisant son domaine de à avant la recherche. Une contrainte binaire relie deux variables, comme ou . Un problème de satisfaction de contraintes binaire ne contient que des contraintes unaires et binaires.
Une contrainte d'arité supérieure concerne au moins trois variables. Si les durées des tâches X, Y et Z doivent remplir 10 heures, écris . Chaque durée appartenant à , le tuple ne convient pas, tandis que convient. Pour vérifier une règle d'arité supérieure, les valeurs doivent convenir ensemble.
Conserver les contraintes globales utiles
Une contrainte globale donne un nom à une règle portant sur un groupe de variables de taille variable. exige des valeurs différentes pour chaque paire. Son ensemble de solutions est égal à celui défini par les inégalités prises deux à deux. Pour neuf cases de Sudoku, cela représente 36 contraintes binaires.
La forme globale permet aussi au solveur de raisonner sur le groupe. Trois variables limitées à deux valeurs distinctes ne peuvent pas toutes être différentes, même si chaque paire séparément admet une affectation compatible. Des ensembles de solutions identiques ne garantissent pas une réduction des domaines aussi forte.
Une règle de capacité peut aussi être globale. Ici, signifie : le nombre total de personnes affectées aux trois tâches ne peut pas dépasser dix. Les arguments représentent des quantités additionnées ; cette règle autorise donc, par exemple, .
Convertir une contrainte finie en forme binaire
Introduis une variable auxiliaire U dont les valeurs sont les triplets autorisés pour . Une valeur possible est . Ajoute trois contraintes binaires : la première composante de U est égale à X, la deuxième à Y et la troisième à Z. Choisir cette valeur pour U exige donc , et .
Chaque triplet valide d'origine correspond à une valeur de U et chaque affectation cohérente comprenant U produit un triplet valide d'origine. Cette construction permet aux méthodes binaires de traiter une contrainte finie d'arité supérieure. Elle a pour coût un domaine de tuples potentiellement grand : c'est pourquoi les solveurs conservent souvent la règle globale ou d'arité supérieure d'origine.
Exigences et préférences
| Type | Signification | Exemple d'ordonnancement |
|---|---|---|
| Contrainte dure | Chaque solution doit la satisfaire. | Un formateur ne peut pas animer deux ateliers à la fois. |
| Contrainte souple | Une violation ajoute un coût à un choix par ailleurs réalisable. | Un formateur préfère une séance l'après-midi. |
Avec des contraintes souples, la tâche devient un problème d'optimisation sous contraintes : satisfaire toutes les règles dures et minimiser le coût total des préférences. La séparation et évaluation et la recherche locale peuvent servir à l'optimisation.
Teste le modèle avec une affectation que tu sais valide et une autre que tu sais invalide. Une inégalité inventée entre des ateliers sans lien élimine des emplois du temps légitimes ; l'oubli d'une contrainte liée à un formateur commun autorise des emplois du temps impossibles. Les préférences demandent aussi de l'attention : transformer « après-midi préférable » en « après-midi obligatoire » peut éliminer tous les emplois du temps réalisables.
Points clés
- Les contraintes unaires réduisent un domaine ; les contraintes binaires relient deux variables.
- Alldiff exige des valeurs différentes deux à deux, mais permet une réduction plus forte des domaines par un raisonnement sur le groupe.
- Des variables auxiliaires dont les valeurs sont des tuples permettent de convertir des contraintes finies d'arité supérieure en forme binaire.
- Les contraintes dures définissent ce qui est réalisable ; les contraintes souples classent les choix réalisables.
- Vérifie un cas valide et un cas invalide lorsque tu testes un modèle.
1.3 Modéliser l'ordonnancement et l'affectation par des problèmes de satisfaction de contraintes
Un modèle doit décrire les décisions assez directement pour que les règles soient faciles à exprimer. Commence par déterminer ce qu'il faut choisir, puis attribue des domaines et traduis chaque exigence à l'aide des variables qu'elle concerne réellement.
Construire un emploi du temps d'ateliers
Cinq ateliers d'un créneau chacun se partagent trois créneaux : 1 le matin, 2 au milieu de la journée et 3 l'après-midi. Soit A l'atelier Bases de Python, B Python avancé, C Statistiques, D Bases de données et E Éthique. Chaque atelier est une variable de domaine initial .
Les participants communs imposent , , , , et . L'atelier de base doit précéder l'atelier avancé, donc . Le formateur en éthique arrive au milieu de la journée, donc . Cela donne sept arêtes binaires et une règle unaire ; C a quatre voisins.
L'affectation satisfait toutes les règles : chaque paire d'ateliers ayant des participants communs occupe des créneaux différents, l'atelier de base précède l'atelier avancé et l'atelier Éthique n'est pas au créneau 1. C'est la seule affectation valide parmi les candidates. Les ateliers B et D peuvent tous deux utiliser le créneau 3, car aucune règle ne leur impose d'être différents.
Choisir plutôt une variable par créneau ferait de chaque valeur un sous-ensemble d'ateliers, avec jusqu'à sous-ensembles possibles par créneau. Les règles devraient alors examiner ces ensembles et garantir que chaque atelier a lieu une fois. Choisir les ateliers comme variables permet de garder des contraintes plus simples.
Exprimer les horaires des tâches et les ressources partagées
Dans l'ordonnancement d'atelier, utilise une variable d'heure de début pour chaque tâche. Préparer prend 20 minutes, Analyser 40 et Rédiger le rapport 30. Les heures de début sont des nombres entiers de minutes positifs ou nuls. L'ordre et l'échéance de 120 minutes donnent
Les débuts au plus tôt sont 0, 20 et 60. En remontant depuis l'échéance, on obtient les débuts au plus tard 30, 50 et 90. Les intervalles sont donc , et .
Deux tâches qui partagent une machine nécessitent une contrainte disjonctive : ou . L'une ou l'autre peut venir en premier, mais elles ne peuvent pas se chevaucher. Une simple contrainte de précédence imposerait un ordre particulier et supprimerait l'autre possibilité.
Modéliser les affectations et les énigmes
Pour trois rapports affectés à trois relecteurs, fais de chaque rapport une variable dont les valeurs sont les relecteurs. Utilise Alldiff si chaque relecteur traite un rapport. Un conflit d'intérêts retire un relecteur du domaine du rapport concerné.
Pour le problème des n reines, soit la ligne de la reine dans la colonne . Une reine par colonne est intégrée au modèle. Pour chaque paire, impose et afin d'éviter les attaques sur les lignes et les diagonales. Pour huit reines, cela réduit l'espace des possibilités : au lieu de choisir 8 cases parmi 64, soit placements, on obtient affectations. Il y a 92 solutions.
Pour le Sudoku, les 81 variables correspondant aux cases ont pour domaine les valeurs de 1 à 9. Les chiffres donnés imposent des contraintes unaires, et les 9 lignes, 9 colonnes et 9 régions imposent chacune une contrainte Alldiff.
Choisis les unités de temps les plus grossières qui permettent encore de représenter chaque début autorisé. Des séances commençant à chaque heure nécessitent des choix à l'heure près ; des domaines à la minute près augmenteraient le travail sans ajouter d'emploi du temps utile. Termine en séparant les préférences des règles dures et en vérifiant un petit cas dont tu connais la réponse.
Points clés
- Choisis des variables qui gardent les contraintes simples et des domaines pas plus fins que nécessaire.
- La précédence utilise des inégalités imposant une fin avant un début ; les ressources partagées exigent l'absence de chevauchement.
- Une reine par colonne peut être intégrée au choix des variables.
- Un modèle correct comprend les règles implicites sur les ressources et conserve les possibilités légitimes de partager un créneau.
2Résoudre des problèmes de satisfaction de contraintes par recherche avec retour arrière
Une recherche peut gaspiller l'essentiel de son effort en examinant à nouveau les mêmes choix ou en découvrant les conflits trop tard. Le retour arrière construit une affectation variable par variable et revient aux choix précédents lorsqu'une branche échoue. L'ordonnancement des variables et des valeurs l'aide à trouver plus tôt des branches utiles, tandis que l'analyse des conflits détermine quels choix ont causé une impasse. Suivre les décisions pas à pas facilite l'évaluation de la méthode de base comme de ses améliorations.
2.1 Exécuter une recherche avec retour arrière pas à pas
Le retour arrière construit une affectation partielle par recherche en profondeur d'abord. Il choisit une variable, essaie une valeur et continue jusqu'à trouver une solution ou devoir annuler un choix. La recherche conserve les choix antérieurs utiles lorsqu'un choix ultérieur échoue.
Créer des branches sur les valeurs, une variable à la fois
Affecter A puis B produit la même affectation finale qu'affecter B puis A. Cette commutativité permet à un solveur de contraintes de choisir une variable à chaque niveau et de créer des branches sur ses valeurs. Autoriser tous les ordres de variables produirait feuilles pour seulement affectations complètes distinctes. Pour cinq variables ayant trois valeurs, cela représente 29 160 feuilles au lieu de 243.
La variable suivante peut dépendre des domaines courants. Ce qui compte est de choisir une seule variable suivante à un nœud ; la recherche n'a pas besoin de branches distinctes pour tous les ordres d'affectation possibles.
Suivre les étapes récursives
- Si l'affectation est complète et cohérente, la renvoyer.
- Choisir une variable non affectée.
- Essayer chaque valeur du domaine qui est cohérente avec l'affectation courante.
- Effectuer un appel récursif après avoir ajouté une valeur. Si l'appel échoue, supprimer cette affectation et essayer la valeur suivante.
- Si aucune valeur ne convient, renvoyer un échec à l'appelant.
Le retour arrière simple teste une contrainte dès que toutes les variables de sa portée ont une valeur. Avec et B non affectée, ne dispose d'aucun couple complet à rejeter. Essayer ensuite échoue immédiatement. Attendre que toutes les variables soient affectées retarderait ce rejet facile.
Suivre une impasse
Utilise les règles des ateliers : . Prends les variables dans l'ordre A, B, C, D, E et essaie les valeurs 1, 2, 3.
- Affecte . Rejette et choisis .
- Rejette à cause de A et à cause de B ; choisis .
- Rejette à cause de A ; choisis .
- E n'a aucune valeur autorisée : 1 est interdite, 2 est incompatible avec D et 3 avec C.
L'échec pour E rend le contrôle à D. Sa valeur suivante, 3, est incompatible avec C. C n'a pas de valeur suivante, le contrôle revient donc à B. Essayer conduit finalement à une autre impasse avec . La recherche essaie alors et atteint . Dans cet ordre, le retour arrière simple teste 32 valeurs candidates au total, y compris celles qui sont rejetées.
Ce que garantit la méthode
| Propriété | Retour arrière simple sur des domaines finis |
|---|---|
| Complétude | Trouve une solution s'il en existe une ; l'épuisement de la recherche établit qu'il n'y en a pas. |
| Taille de la recherche dans le pire des cas | Exponentielle, affectations selon la borne usuelle. |
| Mémoire du chemin de recherche | Linéaire en ; un seul chemin actif est stocké. |
La vérification des contraintes et le stockage du modèle ont aussi un coût. La mémoire linéaire décrite concerne le chemin de recherche, tandis que la propagation peut aussi stocker les domaines et des informations de restauration.
Le retour arrière chronologique revient au choix le plus récent. Des variantes plus rapides améliorent quatre décisions distinctes : la variable suivante, l'ordre de ses valeurs, les conséquences déduites après un choix et le choix antérieur à reprendre après un échec. Ces améliorations réduisent le travail en pratique sans changer ce qui constitue une solution.
Points clés
- La commutativité évite de rechercher tous les ordres d'affectation.
- Le retour arrière affecte une variable par niveau et rejette les violations de contraintes dont toutes les variables sont affectées.
- Un appel récursif qui échoue annule son choix et essaie une autre valeur.
- Le retour arrière sur domaines finis est complet, mais sa recherche est exponentielle dans le pire des cas.
- La mémoire linéaire du chemin de recherche ne comprend pas tout le stockage du modèle et de la propagation.
2.2 Choisir les variables et les valeurs à l'aide d'heuristiques d'ordonnancement
Un bon ordre peut révéler un échec près du sommet d'un arbre de recherche ou préserver des choix utiles pour la suite. L'ordonnancement des variables et celui des valeurs ont des objectifs différents : la direction qui semble la meilleure diffère donc entre les deux.
Choisir la variable la plus contrainte
L'heuristique du minimum de valeurs restantes sélectionne la variable non affectée qui possède actuellement le moins de valeurs autorisées. Elle est aussi appelée heuristique de la variable la plus contrainte ou du premier échec. Un domaine presque épuisé risque de révéler bientôt une contradiction. Si un domaine est vide, la branche échoue immédiatement.
Compte les valeurs courantes après réduction des domaines, et non les tailles initiales des domaines. Sans domaines stockés, un solveur doit déterminer quelles valeurs d'origine restent cohérentes avec l'affectation avant d'appliquer l'heuristique.
L'heuristique du degré départage les variables à égalité en choisissant celle qui a le plus de contraintes avec d'autres variables non affectées. Un tel choix influence davantage de décisions restantes. Les voisins déjà affectés ne comptent pas dans ce degré restant. Au départ sur la carte de l'Australie, les domaines de trois couleurs sont à égalité et les cinq voisins de SA lui donnent le degré le plus élevé.
Garder des possibilités lors du choix d'une valeur
L'heuristique de la valeur la moins contraignante essaie la valeur qui supprime le moins de valeurs des domaines voisins non affectés. Évaluer les valeurs candidates ajoute des calculs, mais peut éviter une branche infructueuse coûteuse.
Avec WA rouge et NT vert, SA ne peut être que bleue, tandis que Q peut être rouge ou bleue. Choisir Q bleu viderait le domaine de SA. Choisir Q rouge supprime rouge du domaine de NSW tout en conservant bleu pour SA. L'heuristique essaie donc Q rouge.
| Décision d'ordonnancement | Choix privilégié | Raison |
|---|---|---|
| Variable suivante | Moins de valeurs restantes | Révéler tôt un échec probable. |
| Variable à égalité | Plus de voisins non affectés | Influencer davantage de décisions restantes. |
| Valeur suivante | Moins de valeurs supprimées chez les voisins | Préserver les chances de compléter l'affectation. |
Chaque variable doit finir par recevoir une valeur, ce qui rend utile le test précoce d'une variable fragile. Une seule valeur est nécessaire pour compléter une première solution, ce qui favorise une valeur qui laisse de la place aux autres décisions.
Combiner l'ordonnancement et la vérification anticipée
Dans l'emploi du temps des ateliers, applique d'abord . E a deux valeurs ; A, B, C et D en ont chacune trois. L'heuristique du minimum de valeurs restantes choisit E. Essaie : la vérification anticipée supprime 2 des domaines de C et D.
C et D sont maintenant à égalité avec les domaines . C a trois voisins non affectés, A, B et D ; D en a deux, A et C. L'heuristique du degré sélectionne C. Choisis , ce qui laisse et . L'heuristique du minimum de valeurs restantes choisit , ce qui impose ; la règle de précédence donne alors . Cinq affectations permettent de trouver la solution sans retour arrière. Avec un ordre fixe des variables, la vérification anticipée nécessite 12 affectations et atteint deux impasses.
L'ordonnancement préserve la complétude, car il change la séquence des choix sans écarter de branches autorisées. La recherche reste exponentielle dans le pire des cas. Lorsqu'on énumère toutes les solutions ou qu'on prouve l'absence de solution, toutes les valeurs pertinentes doivent finir par être explorées : l'avantage de la valeur la moins contraignante pour obtenir un succès précoce est donc réduit. Son principal intérêt est de trouver plus tôt une première solution.
Points clés
- L'heuristique du minimum de valeurs restantes utilise le nombre courant de valeurs autorisées.
- L'heuristique du degré départage les variables à l'aide des contraintes avec les variables non affectées.
- L'heuristique de la valeur la moins contraignante préserve les choix des voisins lorsqu'elle essaie une valeur.
- L'ordonnancement modifie le travail de recherche tout en préservant la complétude.
2.3 Effectuer un retour arrière intelligent après une impasse
Une impasse a souvent une cause plus limitée que l'ensemble de l'affectation courante. Le retour arrière non chronologique utilise cette cause pour décider où revenir, et l'apprentissage de contraintes mémorise un échec afin de ne pas avoir à le redécouvrir.
Trouver les choix qui ont causé l'échec
Sur la carte de l'Australie, prends l'ordre d'affectation Q, NSW, V, T, SA. Soit Q rouge, NSW vert, V bleu et T rouge. SA touche Q, NSW et V : les trois couleurs sont donc interdites. Son ensemble de conflit est : ce sont les variables antérieures dont les choix excluent ses valeurs.
Le retour arrière chronologique essaierait de modifier T. La Tasmanie n'a aucune arête avec SA : changer sa couleur ne peut donc rétablir aucune possibilité pour SA. Le retour arrière non chronologique revient à V, le membre le plus récemment affecté de l'ensemble de conflit, et saute T.
Un ensemble de conflit contient des variables ; un nogood enregistre des affectations particulières. Cette distinction compte : une autre couleur pour V peut corriger l'échec, même si V reste voisine de SA.
Transmettre un conflit à travers les échecs antérieurs
Le retour arrière non chronologique simple utilise l'ensemble de conflit direct de l'échec courant. Le retour arrière non chronologique dirigé par les conflits transmet l'information à travers plusieurs niveaux en échec. Lorsqu'une variable X en échec revient à Y, Y absorbe l'ensemble de conflit de X après en avoir retiré Y. Si Y épuise ensuite toutes ses valeurs, son ensemble combiné indique une cause située plus loin dans les affectations antérieures.
Par exemple, utilise l'ordre WA, NSW, T, NT, Q, V, SA et commence avec WA rouge, NSW rouge, T rouge. WA et NSW ne sont pas voisines : cette affectation partielle est donc cohérente. Leurs choix retirent rouge des domaines de NT, Q et SA. Ces trois régions forment un triangle qui ne peut pas être colorié avec seulement du vert et du bleu.
Aucun choix pour T ne change ce triangle. Les informations de conflit peuvent remonter à travers les tentatives infructueuses et désigner WA et NSW comme la cause sous-jacente. La recherche revient à NSW, la plus récente de ces deux décisions, au lieu de passer du temps à recolorier T.
Apprendre la combinaison ayant échoué
Un solveur peut enregistrer comme nogood. Chaque fois que les deux choix se reproduisent, la même contradiction sur le triangle s'ensuit : la branche peut donc être rejetée immédiatement. Il serait incorrect d'interdire WA rouge à elle seule : WA peut être rouge dans des solutions valides où NSW a une autre couleur.
L'apprentissage ajoute une contrainte ou une combinaison interdite en cache. La condition apprise doit découler des contraintes d'origine ; un échec dû uniquement à l'atteinte d'une limite de temps ne fournit pas une telle justification logique. Un nogood utile conserve suffisamment d'affectations pour expliquer l'impossibilité sans inclure de choix sans rapport.
Combiner anticipation et retour sur les échecs
La vérification anticipée et la cohérence d'arc suppriment les valeurs sans support avant qu'un échec ne se produise en profondeur. Le retour arrière non chronologique analyse un échec après qu'il s'est produit. Le retour arrière non chronologique direct et simple n'ajoute aucune réduction à ce que détecte déjà la vérification anticipée, mais les méthodes dirigées par les conflits peuvent combiner les explications d'échecs plus profonds. L'apprentissage conserve ces explications pour les branches ultérieures.
Points clés
- Un ensemble de conflit indique les variables antérieures responsables d'un échec.
- Le retour arrière non chronologique saute les choix sans rapport avec cet échec.
- Le retour arrière non chronologique dirigé par les conflits combine les informations de conflit à travers les niveaux en échec.
- Un nogood interdit une combinaison impossible d'affectations, et non chaque affectation séparément.
- La réduction anticipée des domaines et les explications apprises peuvent fonctionner ensemble.
3Réduire les domaines par propagation de contraintes
Une valeur peut être impossible avant même que sa variable soit choisie. La propagation de contraintes suit les conséquences des domaines et des affectations courants en supprimant les valeurs qui n'ont pas le support nécessaire. Les méthodes diffèrent par la portée de leur examen : des voisins immédiats d'une décision aux paires, aux triplets et aux groupes entiers de variables. Des modifications de domaines détaillées montrent ce que chaque méthode détecte, ce qu'elle manque et quand le travail supplémentaire est rentable.
3.1 Appliquer la vérification anticipée pendant la recherche
La vérification anticipée examine ce qu'une nouvelle affectation élimine immédiatement pour ses voisins non affectés. Elle supprime les valeurs incompatibles avant que la recherche n'atteigne ces variables, ce qui rend certaines impasses visibles plusieurs niveaux plus tôt.
Réduire les domaines après une affectation
Après avoir choisi , examine chaque variable Y non affectée qui partage une contrainte avec X. Supprime de toute valeur incompatible avec ce choix. Un domaine vide signifie que la branche courante ne peut pas être complétée : reviens donc immédiatement en arrière.
Pour , affecter supprime 2 du domaine de Y. Pour , affecter supprime toute valeur de Y inférieure ou égale à 2. C'est la relation elle-même qui détermine les valeurs supprimées ; la vérification anticipée ne se limite pas à supprimer les valeurs égales.
La réduction des domaines modifie ceux de la branche courante. Tiens une liste de restauration, souvent appelée pile de restauration, de chaque suppression causée par le choix. Lorsque ce choix est annulé, rétablis les valeurs qu'il a supprimées tout en conservant les restrictions dues aux choix antérieurs. Une autre implémentation consiste à copier les domaines à chaque niveau.
Suivre les domaines des ateliers
Utilise les créneaux 1 à 3 et les règles . Applique la règle unaire pour obtenir , puis utilise l'ordre fixe A, B, C, D, E.
- laisse à B, C et D le domaine .
- laisse à C le domaine .
- laisse à D et E le domaine pour chacune.
- supprime 2 du domaine de E, qui devient vide. Reviens en arrière.
Après restauration des domaines, essayer impose à C la valeur 2. D et E ne peuvent alors valoir que 3 ; affecter D vide donc à nouveau le domaine de E. La recherche doit modifier A. Avec , elle peut atteindre . Ce parcours essaie 12 valeurs, contre 32 valeurs candidates testées par le retour arrière simple dans le même ordre.
Reconnaître la limite d'une vérification à un pas
Après l'étape 3, D et E ont toutes deux 2 comme seule valeur et doivent être différentes. La vérification anticipée n'a toujours pas vérifié cette contrainte : ni D ni E ne vient d'être affectée. Elle ne détecte l'échec que lorsque D reçoit sa valeur.
C'est la limite principale de la vérification anticipée. Elle teste la variable affectée par rapport à ses voisins non affectés, sans propager plus loin la réduction du domaine d'un voisin. La cohérence d'arc peut suivre ces conséquences entre variables non affectées.
Utiliser les domaines maintenus à jour
L'heuristique du minimum de valeurs restantes peut maintenant sélectionner directement le plus petit domaine restant. Un domaine réduit à une seule valeur devient souvent le choix suivant ; un domaine vide signale un échec sans ajouter d'affectation. Maintenir les domaines à jour aide à la fois l'inférence et l'ordonnancement.
Pour au plus voisins et au plus valeurs par voisin, une passe de vérification anticipée utilise environ vérifications binaires, en supposant que le test de la relation prend un temps constant. Elle ne supprime que des valeurs incompatibles avec l'affectation courante : le retour arrière reste donc complet. Oublier de restaurer une valeur supprimée peut faire perdre une solution valide dans une branche ultérieure ; réduire le domaine d'une variable sans rapport peut avoir le même effet.
Points clés
- La vérification anticipée réduit les domaines des voisins non affectés de la variable nouvellement affectée.
- Un domaine vide rejette immédiatement la branche courante.
- Restaure les valeurs supprimées dans une branche lorsque tu annules un choix.
- La vérification anticipée ne propage pas les conséquences entre deux variables non affectées.
3.2 Établir la cohérence d'arc avec AC-3
Une valeur a besoin d'une valeur compatible dans chaque domaine voisin. La cohérence d'arc rend cette exigence de support explicite et suit les effets des changements de domaine dans tout un problème de satisfaction de contraintes binaire.
Le support a une direction
La cohérence de nœud supprime d'abord les valeurs interdites par les règles unaires. Pour une contrainte binaire, l'arc orienté est cohérent lorsque chaque valeur de X possède au moins une valeur compatible dans Y. Cette valeur de Y est un support. Réviser l'arc consiste à supprimer les valeurs sans support à son origine, X.
Pour avec les deux domaines , réviser supprime 3 du domaine de A. Réviser supprime 1 du domaine de B. Les domaines obtenus sont et . Une valeur conservée peut utiliser un support différent pour chaque voisin ; ces supports ne forment pas nécessairement une solution commune.
Exécuter AC-3
AC-3 utilise une file d'arcs orientés :
- Placer initialement tous les arcs dans la file.
- Retirer et réviser le domaine de X à l'aide de celui de Y.
- Si le domaine de X devient vide, s'arrêter avec un échec.
- Si le domaine de X est réduit, ajouter pour chaque autre voisin Z de X, à l'exception de Y.
- Continuer jusqu'à ce que la file soit vide.
Une suppression dans le domaine de X peut retirer un support à Z : la file doit donc contenir des arcs dirigés vers le domaine modifié. L'arc provenant de Y n'a pas besoin d'être immédiatement vérifié à nouveau : les valeurs supprimées de X ne servaient de support à aucune valeur de Y, puisqu'aucune n'était compatible avec Y au départ. Les domaines non vides obtenus à la fin sont indépendants de l'ordre de traitement ; des ordres différents peuvent conduire à un échec sur des domaines vides différents.
Propager une décision concernant les ateliers
Pour les règles des ateliers , l'application initiale d'AC-3 supprime 3 du domaine de A et 1 de celui de B. Elle laisse à C et D le domaine et à E le domaine .
Décide maintenant . L'arc supprime 1 du domaine de A, ce qui laisse . Réviser B par rapport à A impose . D diffère de C et de A, donc . E diffère de D et ne peut pas valoir 1, donc . Les réductions de domaines se sont propagées au-delà des voisins immédiats de la décision initiale.
Le maintien de la cohérence d'arc applique cette inférence après chaque décision de recherche. En partant de domaines cohérents d'arc, la restriction à nécessite une file contenant les arcs entrants provenant de ses voisins non affectés. Les valeurs supprimées des domaines doivent être restaurées lorsque la recherche annule la branche.
Interpréter le résultat et le coût
| Résultat après cohérence de nœud et d'arc | Signification |
|---|---|
| Un domaine vide | Aucune solution ne prolonge les restrictions courantes. |
| Chaque domaine contient une seule valeur | L'unique affectation restante satisfait le problème binaire. |
| Certains domaines ont plusieurs valeurs | Une inférence supplémentaire ou une recherche peut être nécessaire. |
Un triangle dont les domaines sont {rouge, bleu} et dont les trois arêtes imposent des inégalités reste cohérent d'arc, mais n'a pas de solution. Chaque arête possède des supports séparément, mais les trois choix ne peuvent pas fonctionner ensemble.
Avec contraintes binaires et des domaines de taille maximale , AC-3 prend un temps de : une révision d'arc vérifie jusqu'à couples, et chaque arc peut nécessiter jusqu'à révisions à mesure que son extrémité perd des valeurs. Le maintien de la cohérence d'arc coûte davantage par nœud de recherche que la vérification anticipée, souvent en échange d'un arbre de recherche beaucoup plus petit.
Points clés
- Réviser supprime de X les valeurs sans support.
- Après la réduction du domaine de X, AC-3 vérifie à nouveau les arcs dirigés vers X.
- Des domaines non vides et cohérents d'arc peuvent encore décrire un problème de satisfaction de contraintes sans solution.
- Le maintien de la cohérence d'arc conserve cette cohérence après les décisions de recherche.
- La borne usuelle d'AC-3 dans le pire des cas est .
- Pour conclure à partir de domaines à une seule valeur, les contraintes unaires et binaires doivent avoir été appliquées.
3.3 Utiliser des cohérences plus fortes et des contraintes globales
Des supports considérés séparément par paires peuvent masquer une contradiction au sein d'un groupe. Des cohérences plus fortes et des propagations spécialisées pour les contraintes globales examinent des combinaisons que la cohérence d'arc manque, tandis que les bornes numériques peuvent représenter de grands domaines par des intervalles utiles.
Étendre des affectations à une autre variable
La cohérence de chemin examine des triplets. Toute affectation cohérente à deux variables doit pouvoir être étendue à une troisième de manière cohérente avec les deux. Dans un triangle colorié en rouge ou en bleu, X rouge et Y bleu ne laissent aucune valeur pour Z. La cohérence de chemin supprime cette paire autorisée et finit par révéler l'absence de solution. Elle peut supprimer des tuples de relations et fait donc plus que supprimer des valeurs individuelles de domaines.
La k-cohérence exige que toute affectation cohérente à n'importe quelles variables puisse être étendue à n'importe quelle variable supplémentaire. Pour les problèmes binaires, la 1-cohérence correspond à la cohérence de nœud, la 2-cohérence à la cohérence d'arc et la 3-cohérence à la cohérence de chemin. La k-cohérence forte comprend tous les niveaux de 1 à k. Avec la n-cohérence forte sur n variables et des domaines non vides, toute affectation partielle cohérente peut être étendue jusqu'à devenir une solution, sans retour arrière. Établir cette propriété a un coût exponentiel en temps et en mémoire dans le pire des cas.
Dénombrer les valeurs dans Alldiff
Alldiff exige des valeurs distinctes pour toutes les variables de sa portée. Si un groupe de m variables ne dispose que de n valeurs possibles distinctes et que , aucune affectation ne peut satisfaire la contrainte.
Pour trois cases de domaine , les inégalités prises deux à deux sont cohérentes d'arc : chaque 4 a pour support 7 chez chaque voisin, et chaque 7 a pour support 4. Le dénombrement global échoue néanmoins, car trois valeurs différentes sont nécessaires et il n'en existe que deux.
Si deux cases ont toutes deux le domaine , elles doivent prendre les valeurs 4 et 7. Ces valeurs peuvent être supprimées de toutes les autres cases de la ligne. Ce raisonnement par paire nue utilise un sous-ensemble de toute la portée d'Alldiff. Un propagateur global simple peut aussi traiter à plusieurs reprises les variables à une seule valeur, supprimer leurs valeurs ailleurs et vérifier s'il reste trop peu de valeurs distinctes. Des propagateurs plus puissants reconnaissent aussi les sous-ensembles contraints.
Resserrer les bornes numériques
La propagation des bornes stocke un domaine à l'aide de son minimum et de son maximum. La cohérence de bornes exige que chaque extrémité puisse être étendue en une affectation qui satisfait chaque contrainte concernée ; elle ne vérifie pas chaque valeur intérieure.
Pour deux bus transportant 100 personnes, soit et , avec . Le second bus transporte au plus 70 personnes, ce qui impose . Le premier en transporte au plus 50, ce qui impose . Les intervalles resserrés sont et .
Pour Préparer, Analyser et Rédiger le rapport, qui prennent respectivement 20, 40 et 30 minutes dans cet ordre, une échéance de 120 minutes donne les débuts au plus tard 30, 50 et 90. Des débuts positifs ou nuls donnent les débuts au plus tôt 0, 20 et 60. La propagation vers l'avant et vers l'arrière donne ces intervalles avant qu'un horaire de début soit choisi.
Choisir une puissance d'inférence utile
Chaque case de Sudoku a 20 cases distinctes liées à elle : 8 dans sa ligne, 8 dans sa colonne et 4 autres dans sa région. Pour les 81 cases, cela donne paires distinctes de cases devant être différentes. Les contraintes globales conservent les mêmes solutions que ces paires, mais peuvent révéler plus tôt les paires nues et les manques de valeurs. Une inférence plus forte coûte davantage par passe ; les solveurs pratiques mettent ce coût en balance avec la recherche économisée, souvent en combinant la cohérence d'arc avec une propagation spécialisée des contraintes globales et des bornes.
Points clés
- La cohérence de chemin vérifie si une paire cohérente peut être étendue à une troisième variable.
- La k-cohérence forte comprend tous les niveaux de cohérence inférieurs.
- Alldiff détecte les groupes qui disposent de trop peu de valeurs distinctes.
- Une paire nue réserve ses deux valeurs à ces deux variables.
- La propagation des bornes resserre les extrémités sans énumérer un grand domaine numérique.
- Une inférence plus forte échange davantage de travail par passe contre moins de recherche.
4Résoudre des problèmes de satisfaction de contraintes par recherche locale
Un emploi du temps qui viole quelques règles peut néanmoins être un point de départ utile. La recherche locale conserve une valeur pour chaque variable et répare les conflits un déplacement à la fois. Le défi consiste à choisir des déplacements utiles et à sortir des régions où les progrès s'arrêtent. Tu vas suivre l'heuristique des conflits minimaux sur un petit échiquier, examiner comment poursuivre les réparations et choisir une méthode de résolution adaptée au type de résultat attendu d'une tâche d'ordonnancement ou d'affectation.
4.1 Réparer les affectations avec l'heuristique des conflits minimaux
La recherche locale part d'une valeur pour chaque variable, même lorsque certaines contraintes ne sont pas respectées. L'heuristique des conflits minimaux répare cette affectation complète en donnant à une variable en conflit une valeur qui cause aussi peu de conflits que possible.
Choisir une réparation
- Construire une affectation complète, aléatoirement ou de manière gloutonne.
- Si aucune contrainte n'est violée, renvoyer la solution.
- Choisir au hasard une variable intervenant dans une contrainte violée.
- Évaluer chacune des valeurs de son domaine par rapport aux autres variables, qui restent fixes.
- Choisir une valeur causant le moins de conflits, en départageant aléatoirement les ex æquo, et répéter jusqu'à réussir ou atteindre une limite d'étapes.
Une variable en conflit intervient dans au moins une contrainte violée. Ce n'est pas nécessairement la variable qui participe au plus grand nombre de violations. Le choix aléatoire parmi les variables en conflit et les valeurs ex æquo aide à éviter la répétition d'une séquence rigide.
Réparer un échiquier de 4 reines
Utilise une reine par colonne, avec les variables de ligne . Une paire est en conflit si ses lignes sont égales ou si leur différence est égale à la différence de ses colonnes. Commence par . Les colonnes 1 et 3 partagent la ligne 2 ; les reines des colonnes 3 et 4 s'attaquent en diagonale. Les variables en conflit sont Q1, Q3 et Q4.
Choisis Q3 et évalue les lignes tandis que Q1, Q2 et Q4 restent fixes :
| Ligne candidate pour Q3 | Conflits concernant Q3 |
|---|---|
| 1 | 0 |
| 2 | 2 |
| 3 | 2 |
| 4 | 3 |
La ligne 1 donne , une solution. Si Q1 avait été choisie à la place, ses nombres de conflits pour les lignes 1 à 4 seraient 0, 1, 2 et 2. La déplacer à la ligne 1 donne , où subsiste le conflit en diagonale entre Q3 et Q4. Une réparation localement optimale peut donc nécessiter d'autres réparations.
Compte les contraintes concernant la variable sélectionnée. Compter toutes les violations sur chaque échiquier obtenu donne le même ordre, car les contraintes sans rapport ajoutent une constante pour chaque valeur candidate. Cela demande simplement plus de travail. Utilise une définition cohérente des conflits lorsque tu compares les valeurs candidates.
Réparer un emploi du temps existant
Lorsqu'un formateur devient indisponible, l'emploi du temps courant est déjà une affectation complète. L'heuristique des conflits minimaux peut partir de là et déplacer des séances jusqu'à ce que les contraintes nouvelles et existantes soient respectées. Un petit changement nécessite souvent peu de réparations, même si un déplacement peut créer de nouveaux conflits ailleurs. S'il importe de conserver le plan initial, associe un coût explicite à la modification d'une affectation ; minimiser les violations ne minimise pas à lui seul les changements.
Des expériences avec une bonne affectation initiale ont nécessité relativement peu d'étapes de réparation, même pour un million de reines. Sur des échiquiers plus grands, chaque étape reste plus coûteuse. L'heuristique des conflits minimaux a aussi servi à la planification de Hubble : le temps nécessaire pour planifier une semaine d'observations aurait été réduit d'environ trois semaines à environ 10 minutes.
Interpréter le comportement de la recherche
Dans de nombreuses familles de problèmes de satisfaction de contraintes aléatoires, les problèmes passent de majoritairement solubles à majoritairement insolubles lorsque le rapport entre contraintes et variables augmente. Près de cette transition, déterminer comment les choix interagissent est souvent le plus difficile. Les problèmes peu contraints peuvent avoir de nombreuses solutions faciles à atteindre. Les problèmes très contraints et sans solution peuvent être rapidement rejetés par des solveurs complets fondés sur la propagation.
Atteindre la limite d'étapes de l'heuristique des conflits minimaux signifie qu'aucune solution n'a été trouvée lors de cette exécution. Le problème peut néanmoins être soluble. La force pratique de la méthode vient de réparations efficaces, notamment des déplacements entre valeurs de même score, bien que les solutions ne représentent qu'une infime partie de toutes les affectations possibles.
Points clés
- L'heuristique des conflits minimaux part d'une affectation complète et répare les contraintes violées.
- Choisis une variable en conflit, puis une valeur causant le moins de conflits, en départageant aléatoirement les ex æquo.
- Les scores des valeurs candidates peuvent ignorer les contraintes sans rapport avec la variable choisie.
- Rendre une affectation réalisable et minimiser les changements sont deux objectifs différents.
- Un échec dû à la limite d'étapes ne permet pas de conclure à l'absence de solution.
4.2 Échapper aux plateaux et aux minima locaux, et choisir entre recherche locale et retour arrière
La recherche par réparation peut cesser de progresser alors que des conflits subsistent. Pour continuer, le solveur a besoin d'un moyen de traverser des états de même score ou de changer les déplacements qui paraissent utiles. Le résultat recherché compte aussi : une réparation réalisable rapide et une preuve d'absence de solution demandent des méthodes différentes.
Traverser un plateau
Un minimum local comporte des violations, mais aucun déplacement modifiant une seule variable ne réduit leur nombre. Un plateau est une région connexe d'affectations ayant le même score. Les déplacements qui ne font que réduire le score peuvent y rester bloqués ; un déplacement latéral change l'état sans réduire le score.
Pour le problème des 4 reines, comporte un conflit entre Q3 et Q4. Les autres reines restant fixes, les nombres de conflits de Q3 pour les lignes 1 à 4 sont 1, 1, 3 et 2 ; ceux de Q4 sont 2, 2, 1 et 2. Aucune des deux variables ne permet un déplacement qui améliore le score.
Déplacer Q3 à la ligne 1 donne , toujours avec un conflit, cette fois entre Q1 et Q3 qui partagent une ligne. Dans ce nouvel état, les nombres de conflits de Q1 sont 1, 0, 3 et 1. Déplacer Q1 à la ligne 2 produit et élimine le conflit. Le déplacement latéral a changé les déplacements améliorants disponibles.
Poursuivre la recherche
| Méthode | Effet sur la recherche |
|---|---|
| Recherche tabou | Interdit temporairement des états ou déplacements récents pour réduire les cycles. |
| Pondération des contraintes | Augmente l'importance des contraintes qui restent violées. |
| Redémarrages aléatoires | Repart d'une autre affectation complète après des étapes infructueuses. |
| Recuit simulé | Accepte parfois des déplacements moins bons, avec une probabilité qui diminue lorsque la température baisse. |
Une liste tabou est une mémoire de courte durée. Elle décourage le retour immédiat à un état que l'on vient de quitter. Un redémarrage explore une autre région, tandis que le recuit peut traverser une région comportant davantage de conflits au cours de la même exécution.
Avec la pondération des contraintes, donne d'abord à chaque contrainte un poids de 1 et calcule le score d'un état comme la somme des poids de ses contraintes violées. Choisis une modification qui réduit ce score pondéré, puis augmente les poids des contraintes qui restent violées. Les échecs répétés deviennent plus coûteux, ce qui remodèle le paysage de recherche. Un score pondéré nul signifie toujours que chaque contrainte dure de poids positif est satisfaite.
Choisir le résultat dont tu as besoin
La recherche locale est incomplète : elle peut manquer une solution existante et une exécution finie infructueuse ne permet pas de conclure à l'absence de solution. Le retour arrière sur domaines finis avec propagation est complet : il finit par trouver une solution ou par épuiser toutes les façons de compléter l'affectation.
Utilise la recherche locale lorsqu'un grand problème peu contraint nécessite une affectation réalisable ou une réparation rapide. Le retour arrière avec l'heuristique du minimum de valeurs restantes et le maintien de la cohérence d'arc est un choix solide pour les énigmes fortement contraintes et chaque fois que la tâche exige de déterminer s'il n'y a pas de solution. Le temps d'exécution dépend néanmoins de l'instance ; ces choix de méthode reposent sur leurs garanties.
L'emploi du temps des ateliers possède l'unique solution . Ajouter l'élimine. L'heuristique des conflits minimaux peut essayer des réparations jusqu'à sa limite, mais seule une recherche complète qui épuise les cas restants établit que l'organisateur doit modifier une exigence, par exemple en ajoutant un créneau.
Points clés
- Un déplacement latéral peut révéler un déplacement améliorant au-delà d'un plateau.
- La mémoire tabou, les poids, les redémarrages et le recuit répondent à différents obstacles à la progression.
- La recherche locale est incomplète ; le retour arrière exhaustif sur domaines finis est complet.
- Choisis une méthode complète lorsqu'il faut établir l'absence de solution.
5Exploiter la structure d'un problème
La forme d'un graphe de contraintes peut compter autant que la taille de ses domaines. Les composantes séparées peuvent être résolues indépendamment, et un arbre permet d'effectuer un parcours ascendant de réduction des domaines suivi d'un parcours descendant d'affectation sans retour arrière. Les cycles demandent plus de travail, mais un petit ensemble coupe-cycles ou une décomposition arborescente de faible largeur peut le limiter. Ces méthodes relient la structure du graphe au temps nécessaire pour trouver une affectation cohérente.
5.1 Séparer les sous-problèmes indépendants et résoudre les problèmes de satisfaction de contraintes arborescents
Un graphe de contraintes peut révéler des problèmes plus petits à l'intérieur d'un grand problème. Les composantes indépendantes peuvent être résolues séparément, et les composantes sans cycle admettent un algorithme particulièrement efficace, avec un parcours ascendant de réduction des domaines et un parcours descendant d'affectation.
Séparer les composantes non reliées
Une composante connexe est indépendante lorsqu'aucune contrainte ne relie ses variables à une autre composante. Résous chaque composante, puis combine une solution de chacune. Si une composante n'a pas de solution, le problème de satisfaction de contraintes complet n'en a pas non plus. Sur la carte de l'Australie, la Tasmanie est indépendante du continent.
Avec n variables réparties en groupes indépendants de taille c, trouver une affectation complète demande un travail de l'ordre de au lieu de . Pour 60 variables binaires réparties en trois groupes de 20, les recherches exhaustives séparées examinent au plus affectations au lieu d'environ . Énumérer toutes les solutions combinées exigerait encore de lister les combinaisons ; l'économie décrite concerne la résolution des problèmes associés aux composantes.
Ordonner un arbre depuis sa racine
Un problème de satisfaction de contraintes binaire est arborescent lorsque son graphe de contraintes ne comporte aucun cycle. Un arbre connexe possède un chemin entre chaque paire de variables ; une forêt contient des arbres séparés. Applique d'abord les restrictions unaires. Choisis une racine quelconque et ordonne les variables de sorte que chaque parent apparaisse avant ses enfants.
La cohérence d'arc directionnelle dans cet ordre exige que chaque variable antérieure ait un support chez chaque voisin ultérieur. Dans un arbre, ces voisins ultérieurs sont ses enfants. Le support va du parent vers l'enfant, même si l'algorithme traite les enfants avant les parents.
Réduire les domaines en remontant, affecter en descendant
- Parcourir l'ordre à l'envers, sauf la racine. Pour chaque enfant, réviser l'arc de son parent vers cet enfant. Supprimer les valeurs sans support du domaine du parent.
- Si un domaine devient vide, signaler qu'il n'y a pas de solution.
- Parcourir l'ordre dans le sens direct. Choisir une valeur restante quelconque pour la racine, puis donner à chaque enfant une valeur compatible avec celle de son parent affecté.
Les descendants de l'enfant ont déjà été traités lorsque son parent est révisé. Une valeur restante du parent possède donc un support chez chaque enfant, et chaque valeur d'enfant possède déjà un support plus bas. Les différentes branches issues des enfants n'ont aucune arête qui les relie : ces supports peuvent donc être choisis indépendamment. C'est pourquoi le parcours descendant ne nécessite aucun retour arrière.
Suivre l'arbre des ateliers
Fixe dans l'emploi du temps des ateliers et supprime 1 des domaines des autres ateliers. Le graphe restant est le chemin B-A-D-E, avec les domaines et les contraintes .
Choisis A comme racine et l'ordre A, B, D, E. Le parcours ascendant révise , puis , sans changement. Enfin, supprime 3 du domaine de A, car B n'a pas de valeur supérieure. L'affectation en descendant donne . Rétablir donne l'emploi du temps complet.
Pour n variables dont les domaines ont une taille maximale d, le parcours ascendant révise arcs à un coût pouvant atteindre chacun, soit un temps de . Cette garantie dépend de l'absence de cycle. Un cycle peut relier des branches distinctes issues d'enfants et invalider l'indépendance qui rendait ces choix locaux fiables.
Points clés
- Les composantes non reliées peuvent être résolues indépendamment et leurs solutions combinées.
- La méthode pour les arbres applique d'abord les restrictions unaires et ordonne les parents avant les enfants.
- Le parcours ascendant révise les arcs du parent vers l'enfant et réduit les domaines des parents.
- Le parcours descendant choisit des valeurs compatibles sans retour arrière.
- La borne de temps usuelle pour un problème de satisfaction de contraintes arborescent est .
5.2 Ramener à des arbres les problèmes dont la structure est presque arborescente
Un graphe comportant quelques cycles peut néanmoins être assez proche d'un arbre pour être résolu efficacement. Le conditionnement par ensemble coupe-cycles affecte d'abord certaines variables ; la décomposition arborescente regroupe les variables en parties qui se chevauchent. Les deux méthodes donnent à la coordination restante une structure arborescente.
Conditionner sur un ensemble coupe-cycles
Un ensemble coupe-cycles est un ensemble de variables dont la suppression laisse un arbre ou une forêt. Vérifie chaque cycle restant, et pas seulement le plus visible. Pour la carte de l'Australie, supprimer SA laisse le chemin WA-NT-Q-NSW-V ainsi que T isolée. Pour le graphe des ateliers, supprimer C laisse B-A-D-E.
Pour chaque affectation de l'ensemble coupe-cycles qui satisfait ses contraintes internes :
- Supprimer les valeurs incompatibles des domaines restants.
- Résoudre chaque arbre restant par réduction des domaines en remontant et affectation en descendant.
- Si tous aboutissent, combiner leurs affectations avec les valeurs de l'ensemble coupe-cycles. Sinon, essayer une autre affectation de cet ensemble.
Dans le problème des ateliers, laisse un arbre qui possède une solution. Avec , A et B doivent appartenir à et impose . D doit être différente à la fois de A et de C, ce qui donne . E ne peut pas valoir 1 et doit être différente de C et de D : il ne lui reste aucune valeur. Avec , A et B doivent valoir 1 et 2 ; D doit alors valoir 2, ce qui ne laisse à nouveau aucune valeur pour E.
Pour un ensemble coupe-cycles de taille c, il y a au plus affectations, chacune suivie d'un problème arborescent de coût . Le total est . La méthode est utile si c est petit ; son coût reste exponentiel en c. Trouver un ensemble coupe-cycles minimal est NP-difficile, mais un ensemble valide non minimal donne tout de même une procédure correcte.
Relier des sacs qui se chevauchent
Une décomposition arborescente dispose en arbre des ensembles de variables appelés sacs. Elle doit respecter trois conditions :
- Chaque variable apparaît dans un sac.
- La portée de chaque contrainte tient dans au moins un sac.
- Les sacs contenant une même variable forment une partie connexe de l'arbre de sacs.
La troisième règle est la propriété d'intersection courante. Si X apparaît aux deux extrémités d'un chemin de sacs, elle doit apparaître tout au long de ce chemin. Sinon, des sacs éloignés pourraient choisir des valeurs incohérentes de X sans vérification de leur accord entre les deux.
Les affectations localement valides de chaque sac deviennent les valeurs d'une méga-variable. Les sacs voisins doivent s'accorder sur les variables partagées. L'arbre obtenu coordonne les solutions locales. Pour un triangle X-Y-Z-X auquel s'ajoute l'arête Z-W, les sacs et couvrent toutes les arêtes et s'accordent sur Z.
La largeur arborescente de la décomposition est la taille de son plus grand sac moins 1. Celle d'un graphe est le minimum sur toutes ses décompositions valides. Pour une largeur w, la borne usuelle d'un problème de satisfaction de contraintes est . Une largeur bornée par une constante limite l'exposant.
Supprimer la symétrie de valeurs
Lorsque les noms des couleurs n'ont pas de signification particulière, permuter rouge, vert et bleu conserve la validité. Les six solutions du continent australien sont six renommages d'un même motif. Fixer l'ordre NT avant SA avant WA dans l'ordre des couleurs rouge, vert, bleu conserve un représentant. Une telle contrainte de bris de symétrie n'est valide que si le renommage préserve les règles d'origine. Une règle exigeant qu'une région particulière soit rouge donne à cette couleur un rôle particulier et modifie les permutations qui restent des symétries.
Points clés
- Un ensemble coupe-cycles doit supprimer tous les cycles.
- Le conditionnement essaie les affectations de l'ensemble coupe-cycles et résout la forêt restante.
- Le coût du conditionnement est exponentiel en fonction de la taille de l'ensemble coupe-cycles.
- Les décompositions arborescentes couvrent les variables et les contraintes et satisfont la propriété d'intersection courante.
- La largeur arborescente est la taille maximale d'un sac moins un, minimisée sur les décompositions du graphe.
- Ne brise la symétrie de valeurs que pour les renommages qui préservent les contraintes d'origine.
Satisfaction de contraintes : exemples
1Construire et vérifier un modèle de satisfaction de contraintes
13 étapes
- 1IntroductionTransformer une tâche en choix
Un solveur a besoin d'une description précise de ce qui peut être choisi et des combinaisons qui conviennent. Cette description comprend un ensemble de variables avec leurs domaines de valeurs, ainsi que des contraintes portant chacune sur une portée de variables. Toute erreur dans cette description se répercute sur chaque recherche. Construis un petit emploi du temps, puis compare-le à des modèles d'affectation et d'énigmes. L'objectif est de rendre visibles les décisions et leurs dépendances avant de chercher à les résoudre.
- 2ExplicationNommer chaque décision
Soit A et B les créneaux d'ateliers, chacun dans . A doit précéder B, donc écris . Les variables correspondent aux choix de créneaux des ateliers ; les nombres sont des valeurs.
La portée de la contrainte comprend A et B. Sa relation autorise les couples . Un solveur peut utiliser cette liste de tuples ou la règle d'ordre pour tester une affectation candidate.
- 3ExempleVérifier une affectation candidate
Avec seule, l'affectation est partielle et cohérente. Choisir la complète, mais viole la règle d'ordre. Choisir à la place donne une affectation complète et cohérente.
Ce sont deux vérifications distinctes : chaque variable doit recevoir une valeur de son domaine et chaque contrainte doit être respectée. Une affectation partielle peut passer les vérifications courantes tout en ne pouvant pas être complétée.
- 4DéfiLe choix partiel peut-il être complété ?
Trois variables X, Y et Z ont pour domaines et pour contraintes . La valeur 1 est affectée à X. Cette affectation partielle cohérente peut-elle être complétée ?
---reveal---
Non. X seule ne viole aucune contrainte. Compléter l'affectation impose la valeur 2 à Y et à Z, ce qui viole leur contrainte d'inégalité. La cohérence courante et la possibilité de compléter l'affectation sont deux exigences différentes.
- 5LienLire les dépendances dans le graphe
Un graphe de contraintes binaires place un nœud pour chaque variable et une arête pour chaque paire soumise à une contrainte. Le triangle du défi montre trois choix qui interagissent. Une variable isolée n'a aucune dépendance binaire avec une autre variable.
Ce graphe sert aux méthodes ultérieures : la réduction des domaines suit les arêtes et les composantes non reliées peuvent être résolues indépendamment. Une contrainte d'arité supérieure nécessite que toute sa portée soit représentée, par exemple par un nœud de contrainte distinct.
- 6ExplicationRelier la règle à sa portée
Une règle unaire restreint un domaine : retire le créneau le plus tôt à l'atelier Éthique. Une règle binaire relie deux variables : ordonne des ateliers. Une règle d'arité supérieure comme relie trois choix.
Une contrainte globale donne un nom à une règle portant sur un groupe de variables de taille variable. Alldiff exige que chaque valeur de sa portée soit différente de toutes les autres.
- 7ExemplePourquoi conserver Alldiff ?
Trois variables correspondant à des rapports autorisent chacune les relecteurs 1 et 2. Chaque paire peut recevoir des relecteurs différents, mais trois rapports ne peuvent pas utiliser trois relecteurs distincts dans un ensemble de deux.
Alldiff révèle ce manque au niveau du groupe. Sa forme en inégalités prises deux à deux possède les mêmes solutions, mais des vérifications séparées par paires peuvent manquer la contradiction. La représentation influence les inférences qu'un solveur peut effectuer.
- 8DéfiExigence ou préférence ?
Un plan de répartition des salles doit respecter leur capacité pour les réunions. Un organisateur préfère une salle près de l'entrée, mais une salle admissible plus éloignée est disponible. Choisir la salle la plus éloignée devrait-il rendre le plan irréalisable ?
---reveal---
Non. La capacité est une exigence dure, tandis que l'emplacement est une préférence souple. La salle plus éloignée peut entraîner un coût de préférence sans invalider le plan. Pour être réalisable, le plan doit toujours respecter toutes les règles dures.
- 9ExempleModéliser la journée d'ateliers
Utilise les variables A à E pour Bases de Python, Python avancé, Statistiques, Bases de données et Éthique. Chacune prend le créneau 1, 2 ou 3.
Les participants communs donnent . L'atelier de base précède l'atelier avancé, donc . L'atelier Éthique ne peut pas avoir lieu au créneau 1, donc . Chaque règle relie exactement les décisions qu'elle régit.
- 10ExempleVérifier l'emploi du temps complet
Essaie . Les six paires d'ateliers ayant des participants communs occupent des créneaux différents. L'atelier de base précède l'atelier avancé et l'atelier Éthique n'a pas lieu le matin. Chaque atelier possède un créneau autorisé : c'est donc une solution.
B et D partagent le créneau 3, ce qui est autorisé puisqu'aucune contrainte ne les relie. Ajouter une règle imposant que tous les ateliers aient des créneaux différents rejetterait cet emploi du temps légitime.
- 11ExplicationÉcrire correctement l'absence de chevauchement
Si la tâche X dure 20 minutes et la tâche Y 35, leur machine partagée autorise les deux ordres :
Chaque alternative compare l'heure de fin d'une tâche à l'heure de début de l'autre. Utiliser « et » exigerait que chacune des deux tâches de durée positive précède l'autre. N'utilise une seule règle de précédence que lorsque l'ordre des tâches est effectivement fixé.
- 12DéfiConstruire un modèle d'affectation
Trois rapports nécessitent trois relecteurs différents. Le relecteur 2 a un conflit d'intérêts avec le rapport A. Quelles variables, quels domaines et quelles contraintes expriment cette tâche ?
---reveal---
Utilise une variable par rapport avec les relecteurs 1 à 3 comme valeurs. Retire 2 du domaine de A et applique Alldiff aux trois rapports. Il s'agit d'une restriction unaire d'admissibilité et d'une règle globale de distinction ; le modèle donne exactement un relecteur à chaque rapport.
- 13RécapitulatifVérifier le modèle avant la recherche
Identifie les décisions, énumère leurs valeurs autorisées et écris les exigences réelles qui les concernent. Vérifie un cas valide et un cas invalide. Les règles dures déterminent ce qui est réalisable ; les coûts des préférences guident l'optimisation. Le choix des variables doit permettre d'exprimer facilement ces règles.
2Suivre et améliorer le retour arrière
14 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionConstruire une solution un choix à la fois
- 2Point cléUne seule variable suivante suffit
- 3ExempleCommencer la recherche à ordre fixe
- 4ExempleReconnaître l'impasse
- 5DéfiQuel appel essaie une autre valeur ?
- 6ExplicationChoisir la variable susceptible d'échouer
- 7ExempleLaisser les domaines déterminer l'ordre des ateliers
- 8Point cléGarder des possibilités lors du choix de la valeur
- 9DéfiChoisir une valeur après avoir sélectionné la variable
- 10ExempleSauter une décision sans rapport
- 11ExplicationFaire remonter les causes dans la recherche
- 12ExempleApprendre une combinaison ayant échoué
- 13DéfiConcilier ordonnancement et apprentissage
- 14RécapitulatifDistinguer les améliorations de la recherche
3Suivre la réduction des domaines, d'une décision à un conflit de groupe
17 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionSuivre les conséquences d'un changement de domaine
- 2ExplicationRéduire les domaines des voisins immédiats
- 3ExempleObserver l'interaction manquée
- 4DéfiRestaurer exactement les bonnes valeurs
- 5ExplicationVérifier le support de l'origine vers l'extrémité
- 6ExempleDéclencher une chaîne de conséquences
- 7ExempleTerminer l'établissement de la cohérence d'arc
- 8ConseilMettre en file les arcs susceptibles de perdre un support
- 9DéfiQue signifie un résultat aux domaines non vides ?
- 10LienMaintenir la cohérence pendant la recherche
- 11ExplicationVérifier une paire par rapport à une troisième variable
- 12Point cléPourquoi la cohérence forte compte
- 13ExempleRéserver une paire de valeurs
- 14ExemplePropager les bornes numériques dans les deux sens
- 15DéfiDétecter un manque de valeurs dans un groupe
- 16DéfiChoisir l'inférence qui explique l'échec
- 17RécapitulatifLire précisément chaque garantie
4Réparer un échiquier et échapper à un plateau
11 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionRéparer une affectation candidate complète
- 2ExplicationChoisir une variable en conflit
- 3ExempleRepérer les attaques sur l'échiquier
- 4ExempleÉvaluer les lignes candidates d'une reine
- 5DéfiIgnorer la partie constante
- 6ExempleAtteindre un état sans déplacement améliorant
- 7ExempleUtiliser un déplacement latéral pour rendre une réparation possible
- 8ConseilAdapter la méthode de sortie à l'obstacle
- 9DéfiChoisir un solveur pour déterminer l'absence de solution
- 10LienRéparer en limitant les changements
- 11RécapitulatifÉvaluer le résultat de la réparation
5Résoudre les problèmes arborescents et maîtriser les cycles restants
15 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionUtiliser le graphe pour réduire le travail
- 2ExplicationRésoudre séparément les composantes indépendantes
- 3ExplicationÉtablir l'ordre de l'arbre
- 4ExempleRéduire les domaines de l'arbre des ateliers en remontant
- 5ExempleAffecter les valeurs restantes en descendant
- 6DéfiRepérer un arc inversé
- 7ExplicationBriser tous les cycles avec un ensemble coupe-cycles
- 8ExempleEssayer l'ensemble coupe-cycles des ateliers
- 9Point cléDe petits ensembles coupe-cycles limitent l'exposant
- 10ExplicationRemplacer les cycles par des sacs qui se chevauchent
- 11DéfiVérifier le chemin de sacs
- 12LienDéduire le coût de la taille des sacs
- 13LienSupprimer les noms de couleurs interchangeables
- 14DéfiCombiner un ensemble coupe-cycles et la garantie des arbres
- 15RécapitulatifVérifier la condition structurelle
Satisfaction de contraintes : QCM
Série 1 : Modéliser les choix et suivre les algorithmes de base10 Questions Pratiques
Question 1 sur 10
Afficher la réponseMasquer la réponse
Question 2 sur 10
Afficher la réponseMasquer la réponse
Question 3 sur 10
Afficher la réponseMasquer la réponse
Question 4 sur 10
Afficher la réponseMasquer la réponse
Question 5 sur 10
Afficher la réponseMasquer la réponse
Question 6 sur 10
Afficher la réponseMasquer la réponse
Question 7 sur 10
Afficher la réponseMasquer la réponse
Question 8 sur 10
Afficher la réponseMasquer la réponse
Question 9 sur 10
Afficher la réponseMasquer la réponse
Question 10 sur 10
Afficher la réponseMasquer la réponse
Série 2 : Suivre la propagation et analyser les échecs de recherche10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 3 : Combiner décisions, inférence et réparation10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 4 : Appliquer les méthodes à de nouvelles structures de contraintes10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Tu bloques sur ton propre exercice ? Aide aux Devoirs
Mots-Clés
A
AC-3
Affectation cohérente
Alldiff
Apprentissage de contraintes
C
Cohérence d'arc
Cohérence d'arc directionnelle
Cohérence de bornes
Cohérence de chemin
Cohérence de nœud
Commutativité
Composante indépendante
Conditionnement par ensemble coupe-cycles
Contrainte binaire
Contrainte d'arité supérieure
Contrainte de bris de symétrie
Contrainte de précédence
Contrainte disjonctive
Contrainte dure
Contrainte globale
Contrainte souple
Contrainte unaire
D
Décomposition arborescente
Déplacement latéral
Domaine
E
Ensemble coupe-cycles
Ensemble de conflit
F
Formulation à états complets
G
Graphe de contraintes
H
Heuristique des conflits minimaux
Heuristique du degré
Heuristique du minimum de valeurs restantes
K
k-cohérence
k-cohérence forte
L
Largeur arborescente
M
Maintien de la cohérence d'arc
Minimum local
Modèle factorisé
N
Nogood
O
Ordonnancement d'atelier
P
Paire nue
Parcours ascendant de l'arbre
Parcours descendant de l'arbre
Pile de restauration
Plateau
Pondération des contraintes
Portée d'une contrainte
Principe du premier échec
Problème d'affectation
Problème d'optimisation sous contraintes
Problème de satisfaction de contraintes
Problème de satisfaction de contraintes arborescent
Propagation des bornes
Propriété d'intersection courante
R
Rapport critique de contraintes
Recherche avec retour arrière
Recherche complète
Recherche tabou
Recuit simulé
Redémarrage aléatoire
Relation d'une contrainte
Réparation en ligne
Retour arrière chronologique
Retour arrière non chronologique
Retour arrière non chronologique dirigé par les conflits
Révision d'arc
S
Solution
Support
Symétrie de valeurs
V
Valeur la moins contraignante
Variable
Variable en conflit
Vérification anticipée
Vidage de domaine
À propos de cette unité
Crée ton propre Matériel d'Étude
Transforme tes notes, diapos et documents en Guides d'Étude, Questions Pratiques, Flashcards et 6 autres outils.