notes mi-session terminées

This commit is contained in:
François Pelletier 2018-02-27 23:42:59 -05:00
parent adbb670cda
commit c5afaf6d90
7 changed files with 415 additions and 2 deletions

BIN
algo_trick.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
ch5hypergraph.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

161
ch5hypergraph.svg Normal file
View 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

View file

@ -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"

View file

@ -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 à lautre. 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

View file

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB