\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:
