diff --git a/rapport/presentation.tex b/rapport/presentation.tex index a6a9a39fe219c76a3882535ebf1c89ff19c84c45..8a7cb9c0a3fec9ae298da53db367d5d554e9fe8d 100644 --- a/rapport/presentation.tex +++ b/rapport/presentation.tex @@ -3,8 +3,7 @@ \usecolortheme{whale} \usecolortheme{orchid} \usepackage[french]{babel} -\usepackage[T1]{fontenc} -\usepackage[utf8x]{inputenc} +\usepackage[utf8]{inputenc} \usepackage{amsmath,amssymb}%for \mod, \bmod, .. \usepackage{amsthm,amsfonts,mathrsfs,bbold} \usepackage[full,small]{complexity} @@ -24,14 +23,14 @@ \newcommand{\Nat}{{\mathbb{N}}} \newcommand{\eqv}{\Leftrightarrow} \newcommand{\ds}{\vspace{0.5\baselineskip}} +\newcommand{\es}{\vspace{1\baselineskip}} % Plan des sections et numéros des sections -%\AtBeginSubsection[]{ - %\frame{ - %\frametitle{Plan} - %\tableofcontents[currentsection,currentsubsection] }} +\AtBeginSection[]{ + \frame{ + \frametitle{Plan} + \tableofcontents[currentsection] }} \setbeamertemplate{section in toc}[sections numbered] -\setbeamertemplate{subsection in toc}[subsections numbered] % Titre \title{\textbf{Optimisation Combinatoire \& Convexe} \\ Le problème du voyageur de commerce} @@ -41,82 +40,71 @@ \maketitle - -\section{Introduction au problème} - -\subsection{Le cas général} - - - \begin{frame} - \frametitle{Introduction au problème général} - \begin{block}{Définition} - Soit $G = \langle V, A, w \rangle$ un graphe complet - et $w$ une fonction de coût sur les arcs. - - On cherche à calculer~: + \frametitle{Problème du voyageur de commerce (TSP)} + \begin{block}{Définition : TSP} + Soit $G = \langle V, E \rangle$ un graphe (complet) + et $w : V \rightarrow R_+ \cup\{+ \infty\}$ une fonction de coût des arêtes. On cherche à calculer~: \[ \min \{ w(C) ~|~ C \textrm{ cycle hamiltonien de } G \} \] \end{block} - \begin{alertblock}{Symétrie} - \begin{description} - \item[Cas symétrique~:] - Le graphe $G$ est non-orienté, et donc $w(i,j) = w(j,i)$. - - \item[Cas asymétrique~:] - Le graphe $G$ est non-orienté, et donc il faut faire - la distinction entre $w(i,j)$ et $w(j,i)$. - \end{description} - \end{alertblock} + + \es + + On considèrera $G$ non-orienté (problème symétrique). \end{frame} \begin{frame} \frametitle{Propriétés générales du problème} + + \begin{block}{Complexité} + Problème de décision associé \NP-complet. + \end{block} + \begin{alertblock}{Approximabilité} + Inapproximable à ratio constant, sauf si \P = \NP. + + \end{alertblock} + + \end{frame} -\subsection{Le cas euclidien} \begin{frame} \frametitle{Dans le cas euclidien ou métrique} - - \url{https://fr.wikipedia.org/wiki/Algorithme_de_Christofides} - - Le problème dans le cas métrique est APX-difficile, même avec des poids 1 - ou 2, ce qui empêche l'existence d'un schéma d'approximation en temps - polynomial. Le facteur de 3/2 est en fait le meilleur facteur connu. -\end{frame} - -\subsection{Intérêt pratique} - -\begin{frame} - \frametitle{Applications} - - \begin{itemize} - \item Logistique - \item Réseaux - \item Robotique \cite{brassai2012optimization} - \item Biologie (génétique) - \item Machine Learning~: prédiction des fonctions - des protéines \cite{Johnson2006} - \end{itemize} + + \begin{alertblock}{Restricition} + On ne considère que des instances où la fonction de coût vérifie l'inégalité triangulaire. + + \end{alertblock} + + \begin{exampleblock}{Exemple} + Cas de la distance euclidienne dans le plan. Facilement représentable. + + Mais le problème de décision associé reste \NP-complet. + + \end{exampleblock} + + \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.}. \end{frame} -\subsection{Banque de problèmes} \begin{frame} \frametitle{TSPLIB} \begin{block}{TSPLIB95} - TSPLIB is a library of sample instances for the TSP (and related problems) from various sources and of various types. + TSPLIB une librairie d'instances de TSP avec entre $10$ et $10000$ sommets. \end{block} \begin{exampleblock}{Parsing} + Données sous forme de : \begin{itemize} - \item Matrice - \item Euclidien - \item Distance GÉO + \item matrice explicite des coûts, + \item coordonnées des sommets dans le plan (distance euclidienne) + \item distance géodésique (lat, lon). \end{itemize} \end{exampleblock} @@ -128,44 +116,51 @@ \section{Approximation} -\subsection{La 2OPT} - \begin{frame} - \frametitle{L'algorithme 2OPT} + \frametitle{L'algorithme 2-OPT} - \begin{block}{Algorithme} + \begin{block}{Algorithme pour optimiser un tour} Tant qu'on peut trouver deux arêtes du tour $(v_1,v_2)$ et $(v_1', v_2')$ telles que le tour en les remplaçant par $(v_1, v_2')$ et $(v_1',v_2)$ a une valeur inférieure, on effectue cette opération. \end{block} + + DESSIN - \begin{block}{Description équivalente} - On recherche un segment du tour - à renverser en raisonnant sur les - sommets. - \end{block} \begin{alertblock}{Temps} - Temps très long, potentiellementp pas borné !!! - Néanmoins, cas euclidien avec quelques restrictions, - on peut se ramener à un truc bien + La complexité en temps dans le pire des cas est un problème ouvert. + + Cependant elle est raisonnable en pratique. \end{alertblock} \end{frame} -\subsection{La 2 approximation} \begin{frame} - Dans le cas de l'inégalité triangulaire. Calcul en temps $O(|G|^2)$. + +\frametitle{Garantie d'approximation} + + \begin{block}{2-approximation} + Basée sur un arbre couvrant de poids minimal. Complexité quadratique. + + \end{block} + + \begin{block}{1.5-approximation} + Algorithme de Christofides : arbre couvrant de poids min + couplage de poids minimum. Complexité cubique. + + \end{block} + \ds + Et bien d'autres\dots \end{frame} \begin{frame} \frametitle{Combinaison des deux approches} - \begin{exampleblock}{Exemple~: eil101 (629)} + \begin{exampleblock}{Exemple~: eil101 (valeur optimale : 629)} \begin{figure} \centering - \subfloat[2 Approximation seule (878)]{ + \subfloat[2-approximation seule (878)]{ \includegraphics[width=4cm]{../images/00_APPROX_eil101_approx2.png} } \subfloat[Suivie de 2OPT (679)]{ @@ -176,43 +171,34 @@ \end{exampleblock} \end{frame} -\subsubsection{La 1.5 approximation} -\begin{frame} - \url{https://fr.wikipedia.org/wiki/Algorithme_de_Christofides} -\end{frame} - -\subsection{L'algorithme glouton} - -\subsubsection{Description} \begin{frame} - \frametitle{Description de l'algorithme glouton} + \frametitle{Un algorithme glouton générique} - \begin{block}{Def} - On se donne un poids $w$ sur les arêtes (une préférence) - et on va utiliser ça pour fare des choses - vachement bien. + \begin{block}{Glouton générique} + On se donne un ordre sur les arêtes, et les ajoute de manière gloutonne jusqu'à obtenir un tour. \end{block} - \begin{exampleblock}{Remarque} - Le choix du poids est important, et on peut - prendre la distance, ou bien le résultat - donné par un PL ... comme par hasard ! + \begin{exampleblock}{Exemples} + \begin{itemize} + \item choix naturel : trier les arêtes en fonction de leur coût + + \item on verra plus loin qu'on peut les trier en fonction de la solution d'un autre problème. + \end{itemize} \end{exampleblock} \end{frame} -\subsubsection{Avec des distances} \begin{frame} - \frametitle{} - \begin{block}{coucou} + \frametitle{Un algorithme glouton générique} + \begin{block}{Exécution de l'algorithme} \begin{figure} \centering - \subfloat[Résultat partiel]{ + \subfloat[Ajout d'arêtes formant des chemins]{ \includegraphics[width=5cm]{../images/00154_APPROX_kroA100_glouton.png} } - \subfloat[Résultat final ]{ + \subfloat[Résultat final : tour ]{ \includegraphics[width=5cm]{../images/00_APPROX_kroA100_glouton.png} } \caption{Algorithme glouton en utilisant les distances} @@ -221,51 +207,46 @@ \end{frame} -\section{Combinaison \& Comparaison} - -\begin{frame} - \begin{exampleblock}{Exemple~: Berlin51, 51 points, optimum à 7542} - - \begin{center} - \begin{tabular}{l|r} - \textbf{Algorithme} & \textbf{Borne Sup} \\ \hline - GLOUTON & 9951 \\ - GLOUTON + 2OPT & 7657 \\ - APPROX2 & 10114 \\ - APPROX2 + 2OPT & 7755 \\ \hline - PL simple + GLOUTON & 7941 \\ - PL full + GLOUTON & 7542 - \end{tabular} - \end{center} - \end{exampleblock} -\end{frame} \begin{frame} - \begin{exampleblock}{Exemple~: Berlin51, 51 points, optimum à 7542} - \begin{figure} - \centering - \subfloat[2-Approx]{ - \includegraphics[width=3cm]{../images/00_APPROX_berlin52_approx2.png} - } - \subfloat[2-Approx + 2OPT]{ - \includegraphics[width=3cm]{../images/00_APPROX_berlin52_approx2_2opt.png} - } - - - \subfloat[Glouton\label{fig:approx:berlin:glouton}]{ - \includegraphics[width=3cm]{../images/00_APPROX_berlin52_glouton.png} - } - \subfloat[Glouton + 2OPT\label{fig:approx:berlin:glouton2opt}]{ - \includegraphics[width=3cm]{../images/00_APPROX_berlin52_glouton_2opt.png} - } - \caption{Approximations sur Berlin51}\label{fig:approx:berlin} - \end{figure} +\frametitle{Comparaison des méthodes} + \begin{exampleblock}{Exemple~: berlin52 (52 points, valeur optimale à 7542)} + + \begin{multicols}{2} + + \raggedcolumns + \begin{center} + \includegraphics[width=4cm]{../images/00_APPROX_berlin52_approx2.png} + + 2-approximation (10114) + + \ds + + + \includegraphics[width=4cm]{../images/00_APPROX_berlin52_glouton.png} + + glouton (9951) + + \end{center} + + \columnbreak + \begin{center} +\includegraphics[width=4cm]{../images/00_APPROX_berlin52_approx2_2opt.png} + +2-approx + 2-OPT (7755) + +\ds + + \includegraphics[width=4cm]{../images/00_APPROX_berlin52_glouton_2opt.png} + + glouton + 2-OPT(7657) + \end{center} + \end{multicols} \end{exampleblock} \end{frame} -\subsection{Les plus proches voisins ?} -\section{Programme Linéaire} +\section{Problème linéaire et bornes inférieures} \subsection{Présentation sous forme ILP}