140 lines
4.4 KiB
TeX
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:
|