ift7020-notes-de-cours/chapitre2.tex

108 lines
4.1 KiB
TeX
Raw Normal View History

2018-02-25 22:44:15 -05:00
\section{Chapitre 2: Fouille et filtrage}
\label{sec:ch2}
\subsection{Processus de résolution}
\label{sec:ch2res}
\paragraph{Énumération}
\begin{itemize}
\item Force brute: énumérer toutes les solutions candidates
\item Itération et filtration
\item Au moins une unité de temps sur chaque solution candidate
\item Compléxité dans
\begin{align}
\Omega \left( \prod_{i=1}^{n} \| \texttt{dom}(x_i) \| \right)
\end{align}
\item Fondement des algorithmes les plus sophistiqués
\end{itemize}
\paragraph{Fouille en profondeur}
\begin{itemize}
\item Créer un arbre de recherche
\item Chaque noeud équivaut à une solution partielle
\item Ordre de visite:
\begin{itemize}
\item Racine
\item Premier enfant non visité depuis la gauche
\item Si tous les enfants visités, retour au noeud parent
\end{itemize}
\item Validité
\begin{itemize}
\item Doit visiter toutes les solutions candidates possibles
\item Ne devrait pas visiter deux fois la même solution partielle ou candidate
\end{itemize}
\item Décisions de l'arbre de recherche: \textbf{heuristique} décide de la politique de choix
\item Voir Algorithme \ref{alg:fouilleprofcomp}: $K$=Solution candidate, $P$=Solution partielle, $S$=Solution
\end{itemize}
\begin{algorithm}
\DontPrintSemicolon
\Deb{
\Repeter{$S \neq \emptyset$}{
2018-02-26 01:00:43 -05:00
$K \leftarrow \lbrace x_i \mid \left\lVert \mathtt{dom}(x_i)\right\rVert > 1 \rbrace$ \;
2018-02-25 22:44:15 -05:00
\Si{$K = \emptyset$}{
\Si{$\mathtt{dom}(x_1), \ldots, \mathtt{dom}(x_n) \text{ satisfait contraintes}$}{
\Retour{$\mathtt{dom}(x_1), \ldots, \mathtt{dom}(x_n)$}
}
\Sinon{\Retour{$\emptyset$}}
}
Choisir une variable $x_i \in K$\;
Choisir une valeur $v\in \mathtt{dom}(x_i)$\;
$S \leftarrow \texttt{FouilleEnProfondeurComplète}(\mathtt{dom}(x_1), \ldots, \mathtt{dom}(x_{i-1}),\lbrace v \rbrace, \mathtt{dom}(x_{x+1}), \ldots, \mathtt{dom}(x_{n}))$\;
\Si{$S=\emptyset$}{$\mathtt{dom}(x_i) \leftarrow \mathtt{dom}(x_i) \setminus \lbrace v \rbrace$}
}
\Retour{$S$}
}
\caption{FouilleEnProfondeurComplète($\mathtt{dom}(x_1), \ldots, \mathtt{dom}(x_n)$)}
\label{alg:fouilleprofcomp}
\end{algorithm}
\paragraph{Fouille en profondeur avec retours arrières}
On améliore l'algorithme précédent en validant les contraintes pour chaque solution partielle. Algorithme \ref{alg:fouilleprofretarr}. Seul un sous-ensemble des noeuds est exploré. Permet de résoudre certains problèmes en temps polynomial.
\begin{algorithm}
\DontPrintSemicolon
\Deb{
\Repeter{$S \neq \emptyset$}{
2018-02-26 01:00:43 -05:00
$K \leftarrow \lbrace x_i \mid \left\lVert \mathtt{dom}(x_i)\right\rVert > 1 \rbrace$ \;
$P \leftarrow \lbrace x_i \mid \left\lVert \mathtt{dom}(x_i)\right\rVert = 1 \rbrace$
2018-02-25 22:44:15 -05:00
\Pour{$C_j \in \mathcal{C}$}{
\Si{$Portée(C_j) \subseteq P \wedge \neg C_j$}{\Retour{$\emptyset$}}
}
\Si{$C = \emptyset$}{ \Retour{$\mathtt{dom}(x_1), \ldots, \mathtt{dom}(x_n)$}}
Choisir une variable $x_i \in K$\;
Choisir une valeur $v\in \mathtt{dom}(x_i)$\;
$S \leftarrow \texttt{FouilleEnProfondeurRetArr}(\mathtt{dom}(x_1), \ldots, \mathtt{dom}(x_{i-1}),\lbrace v \rbrace, \mathtt{dom}(x_{x+1}), \ldots, \mathtt{dom}(x_{n}))$\;
\Si{$S=\emptyset$}{$\mathtt{dom}(x_i) \leftarrow \mathtt{dom}(x_i) \setminus \lbrace v \rbrace$}
}
\Retour{$S$}
}
\caption{FouilleEnProfondeurRetArr($\mathtt{dom}(x_1), \ldots, \mathtt{dom}(x_n)$)}
\label{alg:fouilleprofretarr}
\end{algorithm}
\paragraph{Vérification anticipée}
2018-02-26 01:00:43 -05:00
S'il reste une seule variable non instanciée, itérer sur toutes les valeurs du domaine de celle-ci. Explore un sous-ensemble de noeuds explorés par la fouille avec retours arrières. Certains problèmes peuvent être résolus sans retour arrière.
\subsection{Filtrage des domaines}
\label{sec:ch2filt}
\begin{itemize}
\item \textbf{Algorithme de filtrage}: domaine des variables dans la portée de la contrainte, modifie les domaines
\item Un algorithme de filtrage par contrainte
\end{itemize}
\paragraph{Support}
2018-02-25 22:44:15 -05:00
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "notes_de_cours"
%%% End: