diff --git a/rapport/presentation.tex b/rapport/presentation.tex index c82ffcceabd84f4743e5feb7e9bf7860009ba54d..c9c566579f60628a7b574c5f28a680c13811516f 100644 --- a/rapport/presentation.tex +++ b/rapport/presentation.tex @@ -96,16 +96,20 @@ \frametitle{TSPLIB} \begin{block}{TSPLIB95} - TSPLIB une librairie d'instances de TSP avec entre $10$ et $10000$ sommets. + TSPLIB une librairie d'instances de TSP de valeurs optimales connues (ou tight encadrement). \end{block} - \begin{exampleblock}{Parsing} - Données sous forme de : - \begin{itemize} - \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} + \begin{exampleblock}{Différentes instances} + + \begin{itemize} + + \item taille variable, entre 10 et 10000 sommets +\item différentes fonctions de coût (distance euclidienne, géodésique\dots). + +\item parfois empruntés à la vie réélle (circuits électroniques, cartes\dots) + + +\end{itemize} \end{exampleblock} \end{frame} @@ -390,14 +394,32 @@ \section{Outils associés} +\begin{frame} +\frametitle{Parsing de TSPLIB} + +\es + + \begin{exampleblock}{Différentes données à parser} + \begin{itemize} + \item matrice explicite des coûts + \item coordonnées des sommets dans le plan (distance euclidienne) + \item distance géodésique + \end{itemize} + \end{exampleblock} + + \ds + + \begin{alertblock}{Représentation} + Distance euclidienne dans le plan : dessin sur Pygame. + \end{alertblock} + + +\end{frame} \begin{frame} \frametitle{Algèbre linéaire} -Ne pas utiliser de bibliothèque préexistante ? - -\es \begin{block}{Inversion de matrice} Implémentation du pivot de Gauss. @@ -405,7 +427,17 @@ Ne pas utiliser de bibliothèque préexistante ? \ds - Sans surprise, de très mauvaises performances. + + Sans surprise, de très mauvaises performances : $140$s pour inverser 100 matrices aléatoires (dimension $100 \times 100$). + + \es + + \begin{block}{Numpy} + \texttt{numpy.linalg.inv} + \end{block} + + \ds + $0.9$s pour inverser les 100 matrices\dots \end{frame} @@ -424,6 +456,12 @@ Ne pas utiliser de bibliothèque préexistante ? \begin{block}{\texttt{scipy.optimize.linopt}} Implémentation en Python de l'algorithme du simplexe. \end{block} + + \ds + + Ce n'est pas très efficace. Ni très précis. + + \ds \begin{block}{\texttt{CVXPy}} Interface élégante de \texttt{CVXopt} associée à Python. Très efficace. @@ -432,7 +470,7 @@ Ne pas utiliser de bibliothèque préexistante ? \begin{frame} -\frametitle{Stoer-Wagner} +\frametitle{Coupe minimale} 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. @@ -472,11 +510,7 @@ Ne pas utiliser de bibliothèque préexistante ? \end{figure} \end{exampleblock} - Note pour la comparaison: - Glouton = 60110 - Glouton + 2OPT = 50826 - Approx2 = 66343 - Approx2 + 2OPT = 54428 + \end{frame} @@ -529,8 +563,12 @@ Avec $D_{E'}$ la matirce d'incidence du graphe restreint à $E'$, et $G_{E'}$ la \section*{Bibliographie} + + \begin{frame}[allowframebreaks] +\frametitle{Bibliographie} + \bibliographystyle{apalike} \bibliography{presentation} diff --git a/testperfs.py b/testperfs.py new file mode 100644 index 0000000000000000000000000000000000000000..3093260179d063f7dee982a134d23a88cc8b7dbc --- /dev/null +++ b/testperfs.py @@ -0,0 +1,30 @@ +from lineartools import invert +import numpy as np +import random +import time + +def testinv(): + + sumnp = 0 + sumlin = 0 + + for i in range(100): + n = 100 + M = np.random.rand(n,n) + print("Iteration",i) + if(np.linalg.det(M) != 0): + a =time.clock() + np.linalg.inv(M) + b = time.clock() + sumnp += b-a + print("numpy done") + a =time.clock() + invert(M) + b = time.clock() + sumlin += b-a + print("=============") + print("Numpy :"sumnp) + print("Gauss :",sumlin) + + +