chapitre 8, rendu au pivot

This commit is contained in:
François Pelletier 2018-04-23 21:15:01 -04:00
parent 97335d9538
commit 62f4c16091
4 changed files with 257 additions and 8 deletions

View file

@ -165,7 +165,7 @@ Exemple de graphe résiduel (Figure \ref{fig:grapheresiduel})
}
\Retour{f} \;
}
\caption{Ford-Fulkerson}
\caption{Algorithme de Ford-Fulkerson}
\end{algorithm}
Complexité:
@ -180,8 +180,8 @@ Complexité:
\hline
\textbf{Total} & $\mathcal{O}(v(f)|E|)$
\end{tabular}
\caption{Complexité de Ford-Fulkerson}
\label{tab:compfouilleprof}
\caption{Complexité de l'algorithme de Ford-Fulkerson}
\label{tab:compfouilleprofordfulkerson}
\end{table}
\subsection{Coupe minimale}
@ -208,14 +208,161 @@ Trois affirmations équivalentes:
\item Il existe une coupe $(S,T)$ dont la capacité $c(S,T)$ est égale a $v(f)$
\end{enumerate}
En résumé:
\subsection{Types de problèmes}
\label{sec:flotproblemes}
\paragraph{Ordonnancement}
Source reliée aux personnes avec des arêtes de capacité 1.
Personnes reliées aux plages de disponibilité avec une capacité de 1
Plages de disponibilité reliées au puits avec capacité de 1.
La partie du graphe se nomme couplage: sous-ensemble d'arêtes non adjacentes.
On recherche un couplage maximum.
\paragraph{All-Different}
\begin{itemize}
\item
\item Se résout aussi avec un couplage maximum.
\item On peut trouver un autre support de domaine en poussant une unité de flot sur un cycle.
\item La différence entre les deux flots valides est un ensemble de cycles disjoints.
\item La valeur $v$ a un support de domaine dans $dom(X_i)$ ssi. $(v,X_i)$ appartient au graphe résiduel ou $(v,X_i)$ appartient à un cycle du graphe résiduel.
\end{itemize}
\subsection{Ordonnancement}
\label{sec:ordonnancement}
\begin{figure}[!ht]
\centering
\includegraphics[width=6cm]{composantsfortementconnexes}
\caption{Composants fortement connexes}
\label{fig:composantfortement}
\end{figure}
\subsection{Algorithmes de Kosaraju et de Régin}
\label{sec:kosarajuregin}
\paragraph{Algorithme de Kosaraju}
Sert à identifier les composantes fortement connexes: ensembles de noeuds où chaque noeud peut rejoindre tous les autres noeuds. Cet ensemble est maximal.
\begin{enumerate}
\item Effectuer une fouille en profondeur
\item Ajouter les noeuds coloriés en noir à une pile
\item Construire le graphe transposé
\item Effectuer une fouille en profondeur sur le graphe transposé en dépilant les noeuds
\item Définir le vecteur parent de cette fouille. Chaque arbre est une composante fortement connexe
\end{enumerate}
\paragraph{Algorithme de Régin}
Filtrage pour All-Different
\begin{enumerate}
\item Calculer un couplage avec Ford-Fulkerson
\item Marquer toutes les arêtes faisant partie d'un cycle
\item Retirer $v$ du domaine de $X_i$ si le flot est nul sur $(X_i,v)$ ou si cette arête n'est pas marquée.
\end{enumerate}
\begin{algorithm}
\Deb{
Construire un graphe $G$ avec $V= \lbrace X_1,\ldots,X_n \rbrace \cup \bigcup_{i=1}^{n} dom(X_i) \cup \lbrace s,t \rbrace$ \;
\Pour{$i \in \left[ 1,\ldots,n \right]$}{
\Pour{$v \in dom(X_i)$}{
Ajouter $(C_i,v)$ de capacité 1 à $G$ \;
}
Ajouter l'arête $(s,X_i)$ de capacité 1 à $G$ \;
}
\Pour{$v \in \bigcup_{i=1}^{n} dom(X_i)$}{
Ajouter l'arête $(v,t)$ de capacité 1 à $G$ \;
}
$f \leftarrow$ Ford-Fulkerson($G$) \;
\Si{$v(f) \neq n$}{
$sat=Faux$ \;
}
composantes $\leftarrow$ Kosaraju(GrapheResiduel) \;
\Pour{$i \in \left[ 1,\ldots,n \right]$}{
\Pour{$v \in dom(X_i)$}{
\Si{$f(X_i,v)=0 \wedge$ composante($X_i$) $\neq$ composante($v$)}{
$dom(X_i) \leftarrow dom(X_i) \ \lbrace v \rbrace$
}
}
}
}
\caption{Algorithme de Régin}
\end{algorithm}
Complexité: (D=somme des cardinalité des domaines). Possible de ramener à $\mathcal{O}(\delta D)$ en pratique, où $\delta$ est le nombre de valeurs supprimées des domaines.
\begin{table}[h]
\centering
\begin{tabular}{l|l}
Étape & Complexité \\
\hline
Calcul du flot&$\mathcal{O}(nD)$ \\
Calcul des composantes fortement connexes&$\mathcal{O}(D)$ \\
Boucles de l'algorithme&$\mathcal{O}(D)$ \\
\hline
\textbf{Total} & $\mathcal{O}(nD)$
\end{tabular}
\caption{Complexité de l'algorithme de Régin}
\label{tab:compregin}
\end{table}
\subsection{Production et consommation de flot}
\label{sec:prodconsflot}
On associe $b_i$ pour chaque noeud $i$ du graphe.
\begin{itemize}
\item Si $b_i>0$, le noeud produit $b_i$ unités de flot et les injecte dans le graphe
\item Si $b_i<0$, le noeud absorbe $b_i$ unités de flot
\end{itemize}
La contrainte de conservation du flot devient:
\begin{align}
\sum_{b \mid (a,b) \in E} f(a,b) - \sum_{b \mid (b,a) \in E} f(b,a) &= b_a &\forall a \in V
\end{align}
Exemple:
\begin{itemize}
\item Problème: Chaque noeud est soit un producteur ou un consommateur de marchandise, les arêtes représentent le réseau de transport.
\item Solution: Créer un noeud source et le relier à chaque producteur. Créer un noeud puits et l'ajouter à chaque consommateur.
\item Résoudre le flot maximum avec Ford-Fulkerson
\end{itemize}
\subsection{Capacités minimales}
\label{sec:capaciteminimale}
On ajoute une capacité minimale $l(a,b)$ sur chaque arête. On a maintenant cette contrainte:
\begin{align}
l(a,b) &\leq f(a,b) \leq c(a,b)\\
l(a,b) &= -c(b,a)
\end{align}
\begin{itemize}
\item Le graphe résiduel est inchangé. Si f(a,b)=l(a,b), l'arête n'apparaitra pas
\item On peut utiliser l'algorithme de Ford-Fulkerson sur ce graphe résiduel.
\item On doit identifier un flot valide initial
\end{itemize}
Résolution:
\begin{enumerate}
\item Ajouter (s,t) tel que $l(s,t)=0$ et $c(s,t)=\infty$
\item On effectue le changement de variable $f^{\prime}(a,b) = f(a,b) - l(a,b)$
\item On retrouve le problème de production et consommation de flot
\item On ajoute une source et un puits, puis on exécute l'algorithme de Ford-Fulkerson
\item Le flot maximum obtenu est un flot initial valide pour le problème des capacités minimales
\item On exécute l'algorithme de Ford-Fulkerson pour le problème initial
\end{enumerate}

View file

@ -1,6 +1,85 @@
\section{Chapitre 8:}
\section{Chapitre 8: La programmation linéaire}
\label{sec:ch8}
\subsection{Forme normale}
\label{sec:formenormale}
\begin{alignat*}{2}
& \text{maximiser} && c^Tx \\
& \text{sujet à} & \quad &
\begin{aligned}[t]
Ax& \leq b & \\
x& \geq 0 &
\end{aligned}
\end{alignat*}
Équivalences de problèmes:
\begin{itemize}
\item $\min c^Tx \iff \max (-c^T)x$
\item $a^Tx \geq k \iff (-a^T)x \leq -k$
\item $a^Tx = k \iff a^Tx \leq k \wedge a^Tx \geq k$
\item $x_i$ libre devient $x_i=x_i^{+} - x_i^{-}, \quad x_i^{+} \geq 0 \wedge x_i^{-} \geq 0$
\end{itemize}
\subsection{Polytope convexe}
\label{sec:polytopeconvexe}
L'espace des solutions d'un système d'inégalités linéaires forme un polytope convexe. Il est possible de résoudre graphiquement un programme linéaire. La solution se situe nécessairement sur un sommet. Si le problème a plus d'une solution, alors celle-ci est définie par une face, ce qui inclus les sommets.
Un espace est convexe le segment reliant deux point de cet espace est entièrement inclus dans l'espace. Combinaison convexe:
\begin{align}
\alpha\vec{x}+(1-\alpha)\vec{y} \in S
\end{align}
Soit deux solutions valides $y$ et $z$, toute solution $\alpha\vec{y}+(1-\alpha)\vec{z}$ est aussi valide si $\alpha \in \left[ 0,1 \right]$
\subsection{Algorithme du simplexe}
\label{sec:simplexe}
\begin{itemize}
\item Exploite deux propriétés:
\begin{itemize}
\item Solution à un sommet du polytope
\item Espace de recherche convexe
\end{itemize}
\item Trouve une solution réalisable
\item Parcours les sommets du polytope
\item Variables d'écart: convertir les inéquations en équations en ajoutant une variable. Il y a une variable d'écart par contrainte du programme.
\item Solution initiale: débute avec une solution réalisable. Ce peux être $x_i=0$.
\item Solution de base: contient $m$ variables non-nulles dont les colonnes forment une base.
\item Solution réalisable de base: Solution de base qui satisfait toutes les équations avec des valeurs non négatives. Forment l'ensemble des sommets du polytope
\end{itemize}
Changement de base: Une variable entre dans la base en devenant positive et une autre quitte en devenant nulle
\begin{table}[ht]
\centering
\label{tab:simplexe}
\begin{tabular}{|l|l|l|l|l|l|}
\hline
\textbf{$-c_1$} & \textbf{$-c_2$} & \textbf{$-c_3$} & \textbf{$\ldots$} & \textbf{$-c_n$} & \textbf{$v$} \\ \hline
$a_{11}$ & $a_{12}$ & $a_{13}$ & $\ldots$ & $a_{1n}$ & $b_1$ \\ \hline
$a_{21}$ & $a_{22}$ & $a_{23}$ & $\ldots$ & $a_{2n}$ & $b_2$ \\ \hline
$\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ \\ \hline
$a_{m1}$ & $a_{m2}$ & $a_{m3}$ & $\ldots$ & $a_{mn}$ & $b_m$ \\ \hline
\end{tabular}
\caption{Tableau du simplexe}
\end{table}
Invariants du tableau:
\begin{itemize}
\item Les colonnes de la base ont une valeur nulle sauf une composante qui a une valeur de 1
\item Le coût d'une variable de la base est 0
\item La valeur objectif apparait dans le coin supérieur droit
\item La valeur des variables non-nulles apparait à la dernière colonne de droite. Ces valeurs sont non-négatives
\end{itemize}
Opération de pivot:
%%% Local Variables:

View file

@ -0,0 +1,22 @@
digraph {
// rankdir=LR;
subgraph cluster_comp0{
a->b;
e->a;
b->e;
}
subgraph cluster_comp1{
f->g;
g->f;
}
subgraph cluster_comp2{
c->d;
d->c;
d->h;
h->d;
}
b->c;
e->f;
c->g;
h->g;
}

View file

@ -42,6 +42,7 @@
]{dirtytalk}
\newtheorem{definition}{Définition}
\usepackage{array}
\usepackage{mathtools,amssymb}
\usepackage{float}
\usepackage{lscape}
\usepackage{enumerate} % Pour mieux gérer la commande enumerate dans les sections