\section{Chapitre 6: Problèmes de satisfaction de contraintes} \label{sec:ch6} \subsection{Définitions} \label{sec:ch6def} \begin{mydef} Un problème de \textbf{satisfaction de contraintes} est défini par un ensemble de variables $X_1, \ldots, X_n$ et un ensemble de contraintes $C_1, \ldots, C_m$. Chaque variable possède un domaine. \end{mydef} \begin{mydef} Un \textbf{état} est une affectation de variable pour un sous-ensemble ou l'ensemble des variables. \end{mydef} \begin{mydef} Une \textbf{affectation consistante} respecte toutes les contraintes \end{mydef} \begin{mydef} Une \textbf{affectation complète} associe une valeur à toutes les variables \end{mydef} \begin{mydef} Une \textbf{solution} est une affectation complète et consistante \end{mydef} \paragraph{Exemple: coloration de cartes} Dans ce cas, les contraintes sont présentées sous la forme d'inégalités entre les variables représentant la couleur de régions adjacentes de l'image. \subsection{Types de CSP} \label{sec:ch6types} \begin{itemize} \item Variables discrètes: \begin{itemize} \item Domaines finis ($n$ variables, Taille maximale $d$ du domaine, $O(d^n)$ affectations complètes possibles). Ex: Cryptarithmétique \item Domaines infinis (Demande un langage de contraintes) \end{itemize} \item Variables continues (programmation linéaire, $O(n^{\alpha}), \alpha>1$) \end{itemize} \subsection{Types de contraintes} \label{sec:ch6typescontraintes} \begin{itemize} \item Unaire: une seule variable \item Binaire: deux variables. Un CSP avec seulement des contraintes binaires peut être représenté sous forme de graphe. \item Ordre supérieur: plus de deux variables \item Préférence (un coût est associé à chaque affectation) \end{itemize} \subsection{Recherche} \label{sec:ch6recherche} Formulation de la recherche standard: \begin{itemize} \item États: valeurs assignées jusqu'à maintenant \item État initial: $\emptyset$ \item Fonction de successeurs: affecter une valeur à une variable non affectée sans créer de conflit \item Test de but: Affectation complète. Apparait à la profondeur $n$. \end{itemize} Propriétés: \begin{itemize} \item Assignation des variables est commutative \item Une seule assignation par noeud \item Algorithme de profondeur d'abord ou algorithme itératif. Exploration avec retours arrières, lorsqu'il n'y a plus d'affectations possibles. \end{itemize} Améliorations à la recherche \begin{itemize} \item Ordre des variables: \begin{itemize} \item Nombre minimum de valeurs restantes (Minimum Remaining Values) \item Degré: Variable présente dans le plus de contraintes. Réduit le facteur de branchement $b$. \item Valeurs les moins contraignantes. Enlève le moins de choix pour les variables possibles. \end{itemize} \item Vérification avant. Pour une assignation à $X$, enlever les valeurs du domaine de $Y$ reliée à $X$ non cohérentes. Ne détecte pas tous les problèmes \item Cohérence des arcs: un arc entre $X$ et $Y$ est cohérent si pour toutes les valeurs de $X$, il y a une valeur possible de $Y$. Peut être exécuté comme prétraitement ou après chaque assignation. \end{itemize} \paragraph{Algorithme de cohérence des arcs AC-3} On met tous les arcs représentant des contraintes dans une file $A$. \begin{function} \Deb{ \Tq{$A \neq \emptyset$}{ $(X_i,X_j) \leftarrow $\textsc{pop}$(A)$; \Si{\textsc{Revise}$((X,D,C),X_i,X_j) = 1$}{ \Si{$|D_i|=0$}{\Retour{0}} \PourCh{$X_k \in $\textsc{Voisins}$(X_i) \setminus \lbrace X_j \rbrace$}{ \textsc{push}$((X_k,X_i))$\; } } \Retour{1}\; } } \caption{ac3(X,D,C)} \end{function} \begin{function} \Deb{ $R \leftarrow 0$\; \PourCh{$x \in D_i$}{ \Si{$\nexists y \in D_j \text{t.q.} (x,y) \implies C(X_i,X_j)=1 \forall C(X_i,X_j)$}{ \textsc{Delete}$(x,D_i)$\; $R \leftarrow 1$\; } } \Retour{$R$}\; } \caption{Revise(CSP,Xi,Xj)} \end{function} \subsection{Contraintes spécifiques} \label{sec:ch6specifiques} Certains types de contraintes ont des algorithmes spécifiques. \paragraph{AllDifferent} \begin{itemize} \item Enlever les valeurs avec une seule valeur dans leur domaine et enlever cette valeur des autres domaines. \item Continuer tant qu'il y a des domaines avec une seule valeur \item Si un domaine vide est produit, alors une incohérence est détectée \end{itemize} \subsection{Recherche locale} \label{sec:ch6rechlocale} \begin{itemize} \item On assigne une valeur à chacune des variables. \item La fonction successeur change la valeur d'une variable à la fois \item Heuristiques: \begin{itemize} \item Minimum de conflits: choisir la valeur qui donne le moins de conflits. Ex: Problème des 8 reines \end{itemize} \end{itemize} \subsection{Structure des problèmes} \label{sec:ch6structure} \begin{itemize} \item La structure du graphe des contraintes permet d'identifier des sous-problèmes \begin{itemize} \item Les composantes connexes sont des sous-problèmes indépendants ($O(\frac{nd^c}{c})=O(n)$) \item Absence de cycles: tri topologique, Noeud comme racine, les parents précèdent toujours. Appliquer la cohérence des arcs de $j=n,\ldots,2$ et affecter $X_j$ de $1,\ldots,n$. ($O(nd^2)$) \item Proche d'un arbre: on fixe certaines valeurs pour obtenir un arbre. \item Décomposition en un arbre de sous-problèmes: chaque variable et chaque contrainte est dans un sous-problème. Une variable apparait sur tous les chemins entre deux sous-problèmes. ($O(nd^y)$ où $y$ est la grandeur du plus grand sous-problème) \end{itemize} \end{itemize} %%% Local Variables: %%% mode: latex %%% TeX-master: "notes_de_cours" %%% End: