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.
\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.
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)