Commit 2cb60db7 authored by Aliaume Lopez's avatar Aliaume Lopez

Merge branch 'master' of gitlab.crans.org:alopez/projet-optimisation

parents 2c6eef92 ea765a92
......@@ -88,7 +88,7 @@
\ds
Bonne nouvelle : le problème métrique est approximable, et même à ratio $123/122$ \cite{Karpinski, M., Lampis, M., & Schmied, R. (2015). New inapproximability bounds for TSP. Journal of Computer and System Sciences, 81(8), 1665-1677.}.
Bonne nouvelle : le problème métrique est approximable à ratio constant.
\end{frame}
......@@ -143,12 +143,11 @@
\end{block}
\begin{block}{1.5-approximation}
Algorithme de Christofides : arbre couvrant de poids min + couplage de poids minimum. Complexité cubique.
\begin{block}{1.5-approximation \cite{christofides1976}}
Algorithme de Christofides : arbre couvrant de poids min + couplage de poids minimum.
\end{block}
\ds
Et bien d'autres\dots
C'est toujours le meilleur ratio connu \cite{karpinski2015}.
\end{frame}
\begin{frame}
......@@ -243,46 +242,53 @@
\end{frame}
\section{Problème linéaire et bornes inférieures}
\subsection{Présentation sous forme ILP}
\begin{frame}
\frametitle{Présentation sous forme d'ILP}
\frametitle{Programme linéaire en nombres entiers}
\begin{block}{ILP associé}
\begin{block}{PLNE associé}
\begin{equation} \label{eqn:primal:ilp}
\boxed{
\begin{array}{rlc}
\textrm{min} & \displaystyle \sum_{uv \in E'} c_{uv} x_{uv} & \\
& \displaystyle \forall u \in V, &\displaystyle \sum_{uv \in E'} x_{uv} = 2 \\
& \displaystyle \forall S \in W, &\displaystyle \sum_{uv \in E' \wedge uv \in \delta(S)} x_{uv} \geq 2 \\
& \displaystyle \forall uv \in E', & x_{uv} \in \{0,1\}
\textrm{Minimiser} & \displaystyle \sum_{uv \in E} c_{uv} x_{uv} & \\
\textrm{Avec} & \displaystyle \forall u \in V, &\displaystyle \sum_{uv \in E} x_{uv} = 2 \\
& \onslide<2->\displaystyle \forall \varnothing \subsetneq S \subsetneq E, &\displaystyle \sum_{uv \in \delta(S)} x_{uv} \geq 2 \\
\onslide<1->
& \displaystyle \forall uv \in E, & x_{uv} \in \{0,1\}
\end{array}
}
\end{equation}
\end{block}
\onslide<3->
\begin{exampleblock}{Relaxation linéaire}
En retirant la dernière contrainte et demandant seulement $0 \leq x_{uv} \leq 1$,
on obtient une formulation d'un Programme Linéaire, dont la solution
optimale donne une borne \emph{inférieure}.
Remplacer la dernière contrainte par $0 \leq x_{uv} \leq 1$, donne une \emph{borne inférieure} au TSP.
\end{exampleblock}
\end{frame}
\begin{frame}
\frametitle{Présentation sous forme ILP}
\frametitle{Le problème n'est pas entier}
\begin{exampleblock}{Exemple non entier~: ts225}
\begin{exampleblock}{Contre-exemple~: ts225 (optimum à 126643)}
\begin{figure}
\centering
\subfloat[Solution optimale]{
\includegraphics[width=4cm]{../images/0CVX_ts225_separationfinie.png}
\subfloat[Optimum du PL($115605$)]{
\includegraphics[width=5cm]{../images/0CVX_ts225_separationfinie.png}
}
\subfloat[Conversion via glouton]{
\includegraphics[width=4cm]{../images/0CVX_ts225_approxPL.png}
\subfloat[Une approximation à $138954$]{
\includegraphics[width=5cm]{../images/0CVX_ts225_approxPL.png}
}
\caption{Programme linéaire sur ts225}
\end{figure}
......@@ -292,29 +298,31 @@
\end{frame}
\begin{frame}
\frametitle{Présentation sous forme ILP}
\begin{alertblock}{Nombre de contraintes}
Retirer les contraites de \emph{sous-tours}
et ne les ajouter que pour améliorer la solution.
\frametitle{Oracle de séparation}
\begin{alertblock}{Problème}
Nombre exponentiel de contraintes\dots
\end{alertblock}
\begin{block}{Oracle de séparation}
Permet de trouver quelle contrainte ajouter.
\begin{block}{Solution}
N'ajouter les contraintes de sous-tour que quand elles sont violées.
Idée : trouver un oracle de séparation.
\end{block}
\onslide<2->
\begin{block}{Algorithme de séparation}
\[
v_1 \leq v_2 \leq \dots \leq v^* \leq v_{\textrm{entier}}
v_1 \leq v_2 \leq \dots \leq v^* \leq \text{OPT\_TSP}
\]
\end{block}
\end{frame}
\subsection{Oracle de séparation}
\begin{frame}
\frametitle{Coupe minimale et séparation}
\frametitle{Oracle de séparation}
\begin{block}{Équivalence des contraintes}
\begin{block}{Coupe minimale et séparation}
\begin{center}
Contrainte violée $\iff$ MinCut $< 2$
\end{center}
......@@ -322,16 +330,16 @@
\begin{block}{Calculs}
\begin{itemize}
\item Calcul de la coupe minimale en temps polynomial
\item Calcul de la coupe minimale (en temps polynomial)
\item Calcul de la contrainte violée à partir
de la coupe minimale \textit{facile} (linéaire)
de la coupe minimale (linéaire)
\end{itemize}
\end{block}
\end{frame}
\begin{frame}
\frametitle{Coupe minimale et séparation}
\frametitle{Oracle de séparation}
\begin{exampleblock}{Exemple~:}
\begin{figure}
\centering
......@@ -363,42 +371,64 @@
\end{frame}
\begin{frame}
\frametitle{Un encadrement de la solution}
\begin{block}{Borne inférieure}
Permet d'obtenir des bornes inférieures, mais pas de tour approché ! Pourtant on a une information "précieuse".
\end{block}
\begin{alertblock}{Approximation}
Utiliser le glouton sur les résultats du PL.
\end{alertblock}
\ds
Combiné avec 2-OPT, donne de bons résultats.
\end{frame}
\section{Outils associés}
\subsection{Algèbre linéaire}
\begin{frame}
\frametitle{Algèbre linéaire}
Ne pas utiliser de bibliothèque préexistante ?
\begin{block}{Coucou}
Pivot de gauss et compagnie dans un fichier \texttt{lintools.py}
\es
\begin{block}{Inversion de matrice}
Implémentation du pivot de Gauss.
\end{block}
\ds
Sans surprise, de très mauvaises performances.
\end{frame}
\subsection{Simplexe}
\begin{frame}
Implémentation du simplexe maison
\end{frame}
\begin{frame}
\frametitle{Simplexe}
Implémentation du simplexe maison
Les performances dégeu (quantifier !)
\end{frame}
\begin{frame}
\begin{block}{\texttt{Scipy.optimize}}
algorithme du simplexe
\frametitle{Simplexe}
\begin{block}{\texttt{scipy.optimize.linopt}}
Implémentation en Python de l'algorithme du simplexe.
\end{block}
\begin{block}{\texttt{CVXPy}}
Interface élégante à \texttt{CVXopt} une lib pour python sympathique
Interface élégante de \texttt{CVXopt} associée à Python. Très efficace.
\end{block}
\end{frame}
\subsection{Mincut}
\subsubsection{Stoer-Wagner}
\begin{frame}
\frametitle{Stoer-Wagner}
In the MinimumCutPhase, the subset A of the graphs vertices grows starting with an arbitrary single vertex until
A is equal to V. In each step, the vertex which is outside of A, but most tightly connected with A
is added to the set A.
......@@ -422,6 +452,8 @@
\begin{frame}
\frametitle{Bornes inférieures précises sur de grosses instances}
\begin{exampleblock}{Sur un problème avec 657 points}
\begin{figure}
\centering
......@@ -496,8 +528,11 @@ Avec $D_{E'}$ la matirce d'incidence du graphe restreint à $E'$, et $G_{E'}$ la
\begin{frame}[allowframebreaks]
\bibliographystyle{apalike}
\bibliography{rapport_projet_opti}
\bibliography{presentation}
\end{frame}
\end{document}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment