ift7020-notes-de-cours/chapitre4.tex
2018-02-27 23:42:59 -05:00

140 lines
4.4 KiB
TeX

\section{Chapitre 4: Algorithmes de filtrage pour les contraintes arithmétiques}
\label{sec:ch4}
\subsection{Contrainte d'égalité}
\label{sec:ch4egal}
\begin{itemize}
\item $X=Y, \texttt{dom}(X) = [a,b], \mathtt{dom}(Y) = [c,d]$
\item Cohérence de domaine: $\texttt{dom}(X) \cap \mathtt{dom}(Y)$
\item Cohérence de bornes: $[\max(a,c),\min(b,d)]$
\end{itemize}
\subsection{Arithmétique des intervalles}
\label{sec:ch4arith}
\paragraph{Addition}
\begin{itemize}
\item $X+Y=Z, \texttt{dom}(X) = [a,b], \mathtt{dom}(Y) = [c,d], \mathtt{dom}(Z) = [e,f]$
\item $\mathtt{dom}(X+Y) = [a,b]+[c,d]=[a+c,b+d]$
\item $\mathtt{dom}(Z)=[a+c,b+d] \cap [e,f] = [\max(e,a+c),\min(f,b+d)]$
\item Addition d'une constante: $[a,b]+k = [a+k,b+k]$
\end{itemize}
\paragraph{Multiplication par une constante}
\begin{align}
k[a,b] &= \begin{cases}
[ka,kb], k \geq 0\\
[kb,ka], k < 0
\end{cases}
\end{align}
\paragraph{Soustraction}
\begin{align}
[a,b]-[c,d] = [a-d,b-c]
\end{align}
\paragraph{Multiplication et division}
La multiplication par l'inverse équivaut à une division.
\begin{align}
[a,b] \times [c,d] &= [\min(ac, ad, bc, bd), \max(ac, ad, bc, bd)]\\
\frac{1}{[a,b]} &= \begin{cases}
[\frac{1}{b},\frac{1}{a} ], & 0 \notin [a,b]\\
[\frac{1}{b},\infty ), & a=0<b\\
(-\infty, \frac{1}{a}, & a<0=b\\
(-\infty,\infty) \setminus (\frac{1}{a},\frac{1}{b}), & a<0<b\\
\end{cases}
\end{align}
\subsection{Fonctions}
\label{sec:ch4fonctions}
Deux techniques possibles:
\begin{itemize}
\item Application telle quelle: on utilise l'inclusion: $\subset$
\item Factorisation: on utilise l'égalité $=$
\end{itemize}
Conditions pour obtenir un intervalle exact:
\begin{itemize}
\item Les variables n'apparaîssent qu'une seule fois
\item La fonction est monotone sur le domaine de toutes ses variables
\end{itemize}
Étude de la monotonicité
\begin{itemize}
\item \begin{itemize}
\item Fonction croissante: $f([a,b]) = [f(a),f(b)]$
\item Fonction décroissante: $f([a,b]) = [f(b),f(a)]$
\end{itemize}
\item Pour $f(X_1,\ldots,X_n), \mathtt{dom}(X_i)=[a_i,b_i]$:
\begin{itemize}
\item Borne supérieure:
\begin{itemize}
\item $X_i \leftarrow b_i, \frac{df}{dX_i} > 0$
\item $X_i \leftarrow a_i, \frac{df}{dX_i} < 0$
\end{itemize}
\item Borne inférieure:
\begin{itemize}
\item $X_i \leftarrow a_i, \frac{df}{dX_i} > 0$
\item $X_i \leftarrow b_i, \frac{df}{dX_i} < 0$
\end{itemize}
\end{itemize}
\item On peut utiliser des résultats où la fonction est monotone seulement par rapport à quelques variables. On fixe les bornes inférieures et supérieures et on applique l'arithmétique des intervalles ensuite. On obtient un surensemble davantage restreint.
\end{itemize}
\paragraph{Filtrer une contrainte arithmétique}
Exprimer une variable en fonction des autres variables, puis utiliser l'arithmétique des intervalles. $X_i = f(X_1,\ldots,X_{i-1},X_{i+1},\ldots,X_n)$.
Si une variable ne peut être isolée: on crée des contraintes plus petites en utilisant des variables additionnelles.
Variables entières: \begin{itemize}
\item Calcul des intervalles continus
\item Borne supérieure: fonction plancher
\item Borne inférieure: fonction plafond
\item \textbf{Attention}: Pas de cohérence de bornes. NP-Difficile
\end{itemize}
\paragraph{Réduction}
$S=\lbrace a_1,\ldots,a_n \rbrace$ un ensemble d'entiers. On pose $\sum_{a_i\in A}a_i = \sum_{a_i\in S \setminus A}a_i$ Est-ce que $A$ existe ?
On peut réduire le problème à $a_1X_1+a_2X_2+\ldots+a_nX_n = \frac{1}{2} \sum_{i=1}^{n}a_i, X_i \in \lbrace 0,1 \rbrace$.
\subsection{Cohérence de domaine}
\label{sec:ch4cohdom}
La cohérence de domaine est aussi NP-Difficile.
Algorithme pseudo-polynomial (dépend de la taille des coefficients et des cartinalité des domaines): Algorithme de Trick
\paragraph{Algorithme de Trick}
\begin{itemize}
\item Filtre $< \leq X_1 + \ldots + X_n \leq u$. Égalité si $l=u$.
\item Graphe de n+1 niveaux. Niveau 0: Un noeud étiqueté 0.
\item On crée un noeud $v+u$ au niveau $i$ pour chaque valeur $u$ au niveau $i-1$ et chaque valeur $u$ du domaine de $X_i$.
\item L'arête prend la valeur $u$.
\item Illustration: \ref{fig:algotrick}
\end{itemize}
\begin{figure}[H]
\centering
\includegraphics[width=10cm]{algo_trick}
\caption{Algorithme de Trick}
\label{fig:algotrick}
\end{figure}
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "notes_de_cours"
%%% End: