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