notes mi-session terminées
This commit is contained in:
parent
adbb670cda
commit
c5afaf6d90
7 changed files with 415 additions and 2 deletions
BIN
algo_trick.png
Normal file
BIN
algo_trick.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 34 KiB |
BIN
ch5hypergraph.png
Normal file
BIN
ch5hypergraph.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 25 KiB |
161
ch5hypergraph.svg
Normal file
161
ch5hypergraph.svg
Normal file
|
@ -0,0 +1,161 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="154.01717mm"
|
||||
height="151.94991mm"
|
||||
viewBox="0 0 545.73012 538.40517"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="ch5hypergraph.svg">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.94"
|
||||
inkscape:cx="124.63645"
|
||||
inkscape:cy="196.2942"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1146"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Calque 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-100.24733,-114.62815)">
|
||||
<ellipse
|
||||
style="fill:#ccf4cc;fill-opacity:0.70466321;fill-rule:evenodd;stroke:#000000;stroke-width:1.18974125px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0"
|
||||
id="path3336"
|
||||
cx="371.42856"
|
||||
cy="230.76645"
|
||||
rx="266.01453"
|
||||
ry="115.54343" />
|
||||
<ellipse
|
||||
style="fill:#b4e2ff;fill-opacity:0.70466321"
|
||||
id="path3338"
|
||||
cx="15.592935"
|
||||
cy="492.16742"
|
||||
rx="107.33985"
|
||||
ry="260.9007"
|
||||
transform="matrix(0.85154709,-0.52427812,0.50061731,0.8656687,0,0)" />
|
||||
<ellipse
|
||||
style="fill:#ffaaaa;fill-opacity:0.70466321"
|
||||
id="path3340"
|
||||
cx="617.07098"
|
||||
cy="101.65963"
|
||||
rx="114.28571"
|
||||
ry="275.71429"
|
||||
transform="matrix(0.85060247,0.52580931,-0.52580931,0.85060247,0,0)" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="175.53191"
|
||||
y="243.85156"
|
||||
id="text4142"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4144"
|
||||
x="175.53191"
|
||||
y="243.85156">A</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="510.63831"
|
||||
y="252.3622"
|
||||
id="text4146"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4148"
|
||||
x="510.63831"
|
||||
y="252.3622">B</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="491.48935"
|
||||
y="400.23456"
|
||||
id="text4150"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4152"
|
||||
x="491.48935"
|
||||
y="400.23456">C</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="462.76596"
|
||||
y="503.42606"
|
||||
id="text4154"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4156"
|
||||
x="462.76596"
|
||||
y="503.42606">D</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="330.85107"
|
||||
y="525.76648"
|
||||
id="text4158"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4160"
|
||||
x="330.85107"
|
||||
y="525.76648">E</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="344.68085"
|
||||
y="604.48987"
|
||||
id="text4162"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4164"
|
||||
x="344.68085"
|
||||
y="604.48987">F</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="215.95744"
|
||||
y="433.21326"
|
||||
id="text4166"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4168"
|
||||
x="215.95744"
|
||||
y="433.21326">G</tspan></text>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6 KiB |
135
chapitre4.tex
135
chapitre4.tex
|
@ -1,6 +1,139 @@
|
|||
\section{Chapitre 4}
|
||||
\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"
|
||||
|
|
120
chapitre5.tex
120
chapitre5.tex
|
@ -1,7 +1,125 @@
|
|||
|
||||
\section{Chapitre 5}
|
||||
\section{Chapitre 5: Structures traitables}
|
||||
\label{sec:ch5}
|
||||
|
||||
\textbf{Structure traitable}: propriétés d'un problème qui garantissent une résolution en temps polynomial.
|
||||
|
||||
\paragraph{Éviter un retour arrière}
|
||||
|
||||
\begin{itemize}
|
||||
\item Heuristique qui ne fait que de bons choix
|
||||
\item Filtrage assez fort pour éliminer tous les mauvais choix
|
||||
\end{itemize}
|
||||
|
||||
\subsection{Graphe de contraintes}
|
||||
|
||||
\begin{itemize}
|
||||
\item Problème de satisfaction binaire
|
||||
\item Variable:noeud, Contrainte:arête
|
||||
\item \textbf{Arbre}: graphe acyclique
|
||||
\item \textbf{Arbre orienté}: possède une racine, chaque noeud a des enfants et un parent (sauf le noeud racine)
|
||||
\item Hauteur:
|
||||
\begin{itemize}
|
||||
\item feuille: 0
|
||||
\item autres: maximum des hauteurs des enfants + 1
|
||||
\end{itemize}
|
||||
\item Théorème: Arbre + Cohérence de domaine = Aucun retour arrière
|
||||
\item Sous-ensemble de contraintes forment un arbre = filtrage fort. Dans le cas des horaires de travail, la structure en arbre donne des horaires valides. Il reste à valider les autres contraintes.
|
||||
\end{itemize}
|
||||
|
||||
Modèle avec deux séquences de variables:
|
||||
|
||||
\begin{align}
|
||||
\mathtt{dom}(X_i) &= \lbrace 0,1 \rbrace \forall X_1, \ldots, X_n\\
|
||||
\mathtt{dom}(Y_i) &= \lbrace 0,1,2 \rbrace \forall Y_1, \ldots, Y_n\\
|
||||
X_i = 1 &\Leftrightarrow Y_i=1 et Y_i \leq Y_{i+1}
|
||||
\end{align}
|
||||
|
||||
\paragraph{Hypergraphes de contraintes}
|
||||
|
||||
Tuple $(V,E)$
|
||||
\begin{itemize}
|
||||
\item $V$: ensemble de noeuds: variables du problème
|
||||
\item $E$: ensemble d'hyperarêtes: portées des contraintes
|
||||
\item Décomposition de contrainte: arbre arithmétique
|
||||
\end{itemize}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=6cm]{ch5hypergraph}
|
||||
\caption{Hypergraphe}
|
||||
\label{fig:ch5hypergraphe}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Automate}
|
||||
|
||||
Tuple $(\Sigma,Q,q_0,F,T)$
|
||||
\begin{itemize}
|
||||
\item $\Sigma$ : alphabet
|
||||
\item $Q$: Ensemble d'états
|
||||
\item $q_0$: État initial
|
||||
\item $F \subset Q$: États finaux
|
||||
\item $T \subset Q \times \Sigma \times Q$: Un ensemble de transitions
|
||||
\end{itemize}
|
||||
|
||||
Une séquence de caractères $c_1, \ldots, c_n$ est reconnue par l'automate si $\exists q_1, \ldots, q_n t.q. (q_{i-1},c_i,q_i) \in T \wedge q_n \in F$.
|
||||
|
||||
\paragraph{Contrainte \textsc{Regular}}
|
||||
|
||||
\begin{itemize}
|
||||
\item Comprend une séquence de variable et un automate
|
||||
\item Un algorithme peut appliquer la cohérence de domaine
|
||||
\item Peut aussi être encodée avec une structure en forme d'arbre \ref{fig:arbreregular}
|
||||
\end{itemize}
|
||||
|
||||
\paragraph{Encoder avec des contraintes}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=14cm]{tableau_regular}
|
||||
\caption{Structure d'arbre pour \textsc{Regular}}
|
||||
\label{fig:arbreregular}
|
||||
\end{figure}
|
||||
|
||||
\begin{itemize}
|
||||
\item $dom(x_i) = \Sigma$
|
||||
\item $n+1$ variables $Q_0,\ldots,Q_n$
|
||||
\item \begin{itemize}
|
||||
\item $dom(Q_0)=\lbrace q_o \rbrace$
|
||||
\item $dom(Q_i)=Q, 0<i<n$
|
||||
\item $dom(Q_n)=F$
|
||||
\item $\textsc{Tableau}(Q_{i-1},X_i,Q_i) \in T$
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
|
||||
\paragraph{Ordre lexicographique}
|
||||
|
||||
$X_1,\ldots,X_n$ est lexicographiquement plus petite ($\preceq$) que $Y_1,\ldots,Y_n$ si $\exists P t.q. X_P < Y_P \wedge X_i=Y_i \mid i < P$.
|
||||
|
||||
La contrainte lexicographique s'écrit
|
||||
\begin{align}
|
||||
C(X_i,Y_i,P) \Leftrightarrow (i < P \Rightarrow X_i = Y_i) \wedge (i=O \Rightarrow X_i < Y_i) \\
|
||||
i \leq P \Rightarrow X_i \leq Y_i
|
||||
\end{align}
|
||||
|
||||
\subsection{Largeur d'arbre}
|
||||
|
||||
\textbf{Largeur d'arbre}: permet de dire à quel point une structure est similaire à un arbre. Lorsque la largeur est bornée par une constante, le problème peut être résolu en temps polynomial.
|
||||
|
||||
\textbf{Décomposition en arbre}: graphe de contraintes $G \rightarrow $ arbre $T$ de la façon suivante: Si un noeud dans G se trouve à deux endroits dans T, il doit également se trouver sur tout le chemin reliant un endroit à l’autre. Minimiser le nombre de noeuds de $G$ par noeud de $T$.
|
||||
|
||||
\textbf{Largeur d'arbre}: Cardinalité du plus grand ensemble - 1
|
||||
|
||||
\paragraph{Largeur d'arbre bornée par $k$}
|
||||
|
||||
Chaque noeud devient un problème de résolution de contraintes. Une contrainte \textsc{Tableau} par arête de $T$ avec une colonne par noeud contenant les tuples de solution valides. On garde les lignes compatibles.
|
||||
|
||||
Cardinalité du plus grand domaine bornée par $d$: La complexité d'un sous-problème est $\mathcal{O}(d^{k+1})$. La contrainte tableau a au plus $d^{k+2}$ entrées. L'arbre aura au plus $n$ noeuds. Le problème est résolu en $\mathcal{O}(n)$
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
%%% Local Variables:
|
||||
%%% mode: latex
|
||||
|
|
|
@ -46,6 +46,7 @@
|
|||
\usepackage{lscape}
|
||||
\usepackage{enumerate} % Pour mieux gérer la commande enumerate dans les sections
|
||||
\usepackage{graphicx} % Pour inclure des images
|
||||
\usepackage{pstricks}
|
||||
\usepackage{color} % Pour inclure du texte en couleur
|
||||
\usepackage{units} % Pour pouvoir tapper les unités correctement
|
||||
\usepackage{pgf,tikz} % Utilisation du module tikz, qui permet de tracer des belles images
|
||||
|
|
BIN
tableau_regular.png
Normal file
BIN
tableau_regular.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 51 KiB |
Loading…
Reference in a new issue