diff --git a/chapitre8.tex b/chapitre8.tex index e18e924..f54993a 100644 --- a/chapitre8.tex +++ b/chapitre8.tex @@ -103,15 +103,176 @@ Si toutes les valeurs de la colonne du pivot sont nulles ou négatives, la valeu \subsection{Chemin le plus court} \label{sec:cheminpluscourt} +Premier modèle: une variable par arête, inéquations = contraintes de conservation de flot. La première équation est linéairement dépendande, on peut l'enlever. + +\begin{align*} + &\min + \begin{bmatrix} + 2&4&1&5&1&2 + \end{bmatrix} + \vec{x}\\ + &\text{s.t.} + \begin{bmatrix} + 1&0&-1&-1&1&0\\ + 0&1&1&0&-1&-1\\ + 0&0&0&1&0&1 + \end{bmatrix} + \begin{bmatrix} + x_{ab}\\ + x_{ac}\\ + x_{bc}\\ + x_{bd}\\ + x_{cb}\\ + x_{cd} + \end{bmatrix} + = + \begin{bmatrix} + 0\\ + 0\\ + 1 + \end{bmatrix} +\end{align*} + +Deuxième modèle: bout de ficelle reliant les noeuds, on fixe $A$ en position 0 et on tire sur le noeud $D$. Une variable par noeud modélise la position du noeud. Une contrainte par arête pour limiter l'éloignement des noeuds. + + \subsection{Dualité} \label{sec:dualite} -\subsection{Problèmes en nombres entiers} +Ces deux programmes linéaires sont équivalents: + +Programme 1 (primal) + +\begin{align*} + &\min &c^Tx\\ + &s.t. &Ax=b\\ + &&x \geq 0 +\end{align*} +Programme 2 (dual) + +\begin{align*} + &\max &b^Ty\\ + &s.t. &A^Ty \leq c\\ + &&y \in \R +\end{align*} + +Comparaison des solutions réalisables + +\begin{align*} + A^Ty &\leq c & \text{Solution dual} \\ + y^TA &\leq c^T & \text{Transposée} \\ + y^TAx &\leq c¸Tx & \text{Mult. par}\ x\\ + y^TB &\leq c^Tx & \text{Solution primal}\\ + b^Ty &\leq c^Tx & \text{Propriété du produit scalaire} +\end{align*} + +\paragraph{Matrice B} + +\begin{itemize} +\item $B$ est la matrice formée des colonnes de la matrice $A$ associées aux variables de la base (prises dans l'ordre où les 1 apparaissent, de haut en bas). +\item $B^{-1}A$ est la matrice des coefficients du tableau dans son état final +\item $C_B$ est le coût associé aux variables de base +\item Le vecteur de coût est donnée par $c^T-c_B^TB^{-1}A \geq 0$ +\item Si les deux solutions sont optimales, on a l'égalité $C^Tx = c+B^Tx_B = c_B^TB^{-1}b = y^Tb = b^Ty$ +\end{itemize} + +\paragraph{Généralisation} + +\begin{table}[ht] +\centering +\label{tab:primaldual} +\begin{tabular}{l|l} +\textbf{Primal} & \textbf{Dual} \\ +\hline +Équation & Variable libre \\ +Inégalité & Variable non-négative \\ +Variable libre & Équation \\ +Variable non-négative & inégalité \\ +minimisation & maximisation +\end{tabular} +\caption{Primal et dual} +\end{table} + +\begin{itemize} +\item $E$: Contraintes d'égalité +\item $L$: Variables libres +\item $A[i]$: $i$e rangée de $A$ +\end{itemize} + + +\begin{table}[ht] +\centering +\label{my-labeltab:primaldualeq} +\begin{tabular}{lllll} + & $\min c^Tx$ & & & $\max b^Ty$ \\ +s.t. & $A[i]x=b_i$ & $i \in E$ & s.t. & $y_i \in \R$ \\ + & $A[i]x \geq b_i$ & $i \notin E$ & & $y_i \geq 0$ \\ + & $x_j \in \R$ & $j \in L$ & & $A^T[j]y=c_j$ \\ + & $x_j \geq 0$ & $j \notin L$ & & $A^T[j]y \leq c_j$ +\end{tabular} +\caption{Primal et dual en équations} +\end{table} + + +\subsection{Programmation en nombres entiers} \label{sec:nombresentiers} +\begin{alignat*}{2} + & \text{maximiser} && c^Tx \\ + & \text{sujet à} & \quad & + \begin{aligned}[t] + Ax& \leq b & \\ + x& \in \N^{n} & + \end{aligned} +\end{alignat*} + +Deux techniques à utiliser après le simplexe: +\begin{itemize} +\item Fouille dans un arbre de recherche + \begin{itemize} + \item Ajout de deux branches pour les valeurs $x_i=v$ non entières + \item $x_i \leq \floor{v}$, $x_i \geq \ceil{v}$ + \item La meilleure valeur objective $v^\star$ devient une borne minimale + \end{itemize} +\item Coupes de Gomory + \begin{itemize} + \item Coupe: contrainte ajoutée à un programme linéaire + \item Depuis le tableau du simplexe, on extrait une équation de la forme $x_i+\sum_{j \notin B}a_{i,j}x_j=b_i$. + \item La coupe de Gomory prend la forme + \begin{align} + \sum_{j \notin B}(a_{i,j}-\floor{a_{i,j}})x_j-s=b_i-\floor{b_i} + \end{align} + \item Exemple: + \begin{align} + y+0.5s_1-0.5s_3&=2.5\\ + 0.5s_1+0.5s_3-s_4&=0.5 + \end{align} + \end{itemize} +\end{itemize} + \subsection{Matrices totalement unimodulaires} \label{sec:matricestotalementunimod} +\begin{itemize} +\item Matrices totalement unimodulaires: chaque sous-matrice a un déterminant de -1,0 ou 1. Son adjointe a donc aussi seulement des -1,0 et 1. +\item Si $A$ est inversible, alors sont inverse ne contient que des -1,0,1. Son inverse est donc une matrice entière. +\item $x_B=B^{-1}b$, $x$ sera entier. +\item Si $A$ est totalement unimodulaire et $b$ est un vecteur d'entier, alors la solution du simplexe sera entière +\item Si une sous-matrice d'un problème est unimodulaire, on peut résoudre les autres variables par Branch and Bound et ensuite utiliser le simplexe pour réduire la taille du problème +\end{itemize} + +\paragraph{Matrice d'incidence d'un graphe} + +\begin{align} + A_{i,j} &= \begin{cases} + 1 &\text{si la destination de l'arete}\ j\ \text{est le noeud}\ i\\ + -1&\text{si l'origine de l'arete}\ j\ \text{est le noeud}\ i\\ + 0 &sinon + \end{cases} +\end{align} + + + diff --git a/notes_de_cours.tex b/notes_de_cours.tex index 03709b4..939ae05 100644 --- a/notes_de_cours.tex +++ b/notes_de_cours.tex @@ -61,6 +61,8 @@ \newcommand{\R}{\mathbb{R}} % Commande personnelle, plus rapide pour tapper les ensembles \DeclareMathOperator*{\argmax}{arg\,max} \DeclareMathOperator*{\argmin}{arg\,min} +\DeclarePairedDelimiter\ceil{\lceil}{\rceil} +\DeclarePairedDelimiter\floor{\lfloor}{\rfloor} \usepackage{cprotect} % Pour pouvoir personaliser la légende des figures %----------------------------------------------------------------