159 lines
5.6 KiB
TeX
159 lines
5.6 KiB
TeX
\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:
|