Commit 49767ae8 authored by Aliaume Lopez's avatar Aliaume Lopez

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

parents fb91aeea c425bb7d
...@@ -96,16 +96,20 @@ ...@@ -96,16 +96,20 @@
\frametitle{TSPLIB} \frametitle{TSPLIB}
\begin{block}{TSPLIB95} \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} \end{block}
\begin{exampleblock}{Parsing} \begin{exampleblock}{Différentes instances}
Données sous forme de :
\begin{itemize} \begin{itemize}
\item matrice explicite des coûts,
\item coordonnées des sommets dans le plan (distance euclidienne) \item taille variable, entre 10 et 10000 sommets
\item distance géodésique (lat, lon). \item différentes fonctions de coût (distance euclidienne, géodésique\dots).
\end{itemize}
\item parfois empruntés à la vie réélle (circuits électroniques, cartes\dots)
\end{itemize}
\end{exampleblock} \end{exampleblock}
\end{frame} \end{frame}
...@@ -390,14 +394,32 @@ ...@@ -390,14 +394,32 @@
\section{Outils associés} \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} \begin{frame}
\frametitle{Algèbre linéaire} \frametitle{Algèbre linéaire}
Ne pas utiliser de bibliothèque préexistante ?
\es
\begin{block}{Inversion de matrice} \begin{block}{Inversion de matrice}
Implémentation du pivot de Gauss. Implémentation du pivot de Gauss.
...@@ -405,7 +427,17 @@ Ne pas utiliser de bibliothèque préexistante ? ...@@ -405,7 +427,17 @@ Ne pas utiliser de bibliothèque préexistante ?
\ds \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} \end{frame}
...@@ -424,6 +456,12 @@ Ne pas utiliser de bibliothèque préexistante ? ...@@ -424,6 +456,12 @@ Ne pas utiliser de bibliothèque préexistante ?
\begin{block}{\texttt{scipy.optimize.linopt}} \begin{block}{\texttt{scipy.optimize.linopt}}
Implémentation en Python de l'algorithme du simplexe. Implémentation en Python de l'algorithme du simplexe.
\end{block} \end{block}
\ds
Ce n'est pas très efficace. Ni très précis.
\ds
\begin{block}{\texttt{CVXPy}} \begin{block}{\texttt{CVXPy}}
Interface élégante de \texttt{CVXopt} associée à Python. Très efficace. Interface élégante de \texttt{CVXopt} associée à Python. Très efficace.
...@@ -432,7 +470,7 @@ Ne pas utiliser de bibliothèque préexistante ? ...@@ -432,7 +470,7 @@ Ne pas utiliser de bibliothèque préexistante ?
\begin{frame} \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 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 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. is added to the set A.
...@@ -472,11 +510,7 @@ Ne pas utiliser de bibliothèque préexistante ? ...@@ -472,11 +510,7 @@ Ne pas utiliser de bibliothèque préexistante ?
\end{figure} \end{figure}
\end{exampleblock} \end{exampleblock}
Note pour la comparaison:
Glouton = 60110
Glouton + 2OPT = 50826
Approx2 = 66343
Approx2 + 2OPT = 54428
\end{frame} \end{frame}
...@@ -529,8 +563,12 @@ Avec $D_{E'}$ la matirce d'incidence du graphe restreint à $E'$, et $G_{E'}$ la ...@@ -529,8 +563,12 @@ Avec $D_{E'}$ la matirce d'incidence du graphe restreint à $E'$, et $G_{E'}$ la
\section*{Bibliographie} \section*{Bibliographie}
\begin{frame}[allowframebreaks] \begin{frame}[allowframebreaks]
\frametitle{Bibliographie}
\bibliographystyle{apalike} \bibliographystyle{apalike}
\bibliography{presentation} \bibliography{presentation}
......
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)
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