\@writefile{lof}{\contentsline{figure}{\numberline{1}{\ignorespaces Diff\IeC{\'e}rentes positions possible de points par rapport \IeC{\`a}$A$ et $B$\relax}}{3}}
\@writefile{lof}{\contentsline{figure}{\numberline{1}{\ignorespaces Diff\IeC{\'e}rentes positions possible de points par rapport \IeC{\`a}$A$ et $B$\relax}}{2}}
\@writefile{lof}{\contentsline{figure}{\numberline{9}{\ignorespaces Dijkstra avec le carburant comme co\IeC{\^u}t\relax}}{10}}
\newlabel{fig:32carburant}{{9}{10}}
\@writefile{lof}{\contentsline{figure}{\numberline{10}{\ignorespaces Dijkstra avec le temps comme co\IeC{\^u}t\relax}}{10}}
\newlabel{fig:32temps}{{10}{10}}
\@writefile{lof}{\contentsline{figure}{\numberline{11}{\ignorespaces Temps d'ex\IeC{\'e}cution de l'algorithme de Dijkstra\relax}}{10}}
\newlabel{fig:33}{{11}{10}}
\@writefile{lof}{\contentsline{figure}{\numberline{12}{\ignorespaces Comparaison des temps d'ex\IeC{\'e}cution de Dijkstra et Dijkstra avec tas\relax}}{11}}
\newlabel{fig:36}{{12}{11}}
\@writefile{lof}{\contentsline{figure}{\numberline{13}{\ignorespaces Comparaison des trois algorithmes (temps moyens sur 10 ex\IeC{\'e}cutions)\relax}}{12}}
\newlabel{fig:39}{{13}{12}}
\@writefile{lof}{\contentsline{figure}{\numberline{14}{\ignorespaces Tourn\IeC{\'e}e optimale obtenue par backtracking\relax}}{13}}
\newlabel{fig:42}{{14}{13}}
\@writefile{toc}{\contentsline{part}{III\hspace{1em}Probl\IeC{\`e}me du voyageur de commerce}{13}}
\@writefile{toc}{\contentsline{section}{\numberline{7}R\IeC{\'e}solution par Backtracking}{13}}
@ -196,9 +191,119 @@ Donc l'arête $\{A,B\}$ existe. On montre de la même façon que $\{A,C\}$ et $
Supposons que $\{A,B,C\}$ soit une face de la triangulation. En particulier, $C$ est alors le point de plus grand angle $\widehat{ACB}=\theta$ sur $\mathcal{P}$. Puisque $\{A,B\}$ est une arête, d'après le lemme, tout point $D\in\mathcal{P}'\cap\mathcal{V}$ est d'angle $\widehat{ADB}$ plus petit que $\pi-\theta$. Donc un tel point $D$ ne peut être dans le disque délimité par $(\mathcal{L}(\theta, A, B)\cap\mathcal{P})\cup(\mathcal{L}(\pi-\theta, A, B)\cap\mathcal{P}')$. $\square$
\clearpage
\part{Algorithme de Dijkstra pour la recherche du plus court chemin}
\section{Algorithme de Dijkstra}
\subsection{Coûts constants}
Après avoir implémenté l'algorithme de Dijkstra, on le teste avec des coûts constants (figure \ref{fig:31}).
\begin{figure}
\centering
\includegraphics[width=0.7\linewidth]{images/3_1}
\caption{Algorithme de Dijkstra avec des coûts constants}
\label{fig:31}
\end{figure}
\subsection{Coûts variables}
On implémente la variation du coût de la manière suivante : on stocke le mode de calcul des coûts dans la classe \verb|Graphe| et les objets de type \verb|Arete| vienne le lire pour donner leur coût avec la méthode décorée \verb|cout|. Le résultat est montré par les figures \ref{fig:32carburant} et \ref{fig:32temps}.
On mesure le temps d'exécution de l'algorithme (figure \ref{fig:33}).
\begin{figure}
\centering
\includegraphics[width=0.7\linewidth]{images/3_3}
\caption{Temps d'exécution de l'algorithme de Dijkstra}
\label{fig:33}
\end{figure}
\section{Dijkstra avec tas}
On implémente Dijkstra avec un tas et on compare les temps d'exécutions (figure \ref{fig:36}). On remarque qu'ici le temps d'exécution de Dijkstra avec tas est supérieur. Cela peut être dû à l'implémentation. En effet Dijkstra sans tas utilise des fonctions \verb|builtin| qui sont donc plus rapide. Étant donné que les temps d'exécutions, on peut penser que $m\in\Theta(n)$.
\begin{figure}
\centering
\includegraphics[width=0.7\linewidth]{images/3_6}
\caption{Comparaison des temps d'exécution de Dijkstra et Dijkstra avec tas}
\label{fig:36}
\end{figure}
\section{Algorithme A*}
On implémente l'algorithme A* et on vérifie qu'il donne le même résultat que Dijkstra en visitant moins de sommets.
On compare ensuite les temps d'exécutions des 3 algorithmes (figure \ref{fig:39}). On remarque que A* est le plus efficace quand le nombre de points augmente.
\begin{figure}
\centering
\includegraphics[width=0.7\linewidth]{images/3_9}
\caption{Comparaison des trois algorithmes (temps moyens sur 10 exécutions)}
\label{fig:39}
\end{figure}
\clearpage
\part{Problème du voyageur de commerce}
\section{Résolution par Backtracking}
\subsection{Résolution}
On résout le problème du voyageur de commerce par backtracking. Un état correspond à un parcours partiel de la tournée (représenté par une liste d'indice des sommets de la tournée). L'ensemble des extensions possibles d'un état correspond à l'ajout d'un sommet non encore visité. On élague si le cout minimum est inférieur au cout actuel auquel on ajoute le cout de l'ajout d'un sommet.
On obtient le résultat de la figure \ref{fig:42}.
\begin{figure}
\centering
\includegraphics[width=0.7\linewidth]{images/4_2}
\caption{Tournée optimale obtenue par backtracking}
\label{fig:42}
\end{figure}
\subsection{Temps d'exécution}
En mesurant le temps d'exécution de l'algorithme, on note son caractère exponentiel (figure \ref{fig:43}), ce qui le rend inutilisable en pratique.
\begin{figure}
\centering
\includegraphics[width=0.7\linewidth]{images/4_3}
\caption{Temps d'exécution de l'algorithme par backtracking}
\label{fig:43}
\end{figure}
\section{Résolution approchée}
On résout le problème de manière approchée en construisant un graphe de coût. Ce graphe est complet. On utilise alors l'algorithme de Prim pour trouver un arbre couvrant minimal et ainsi en déduire un ordre de parcours des points de la tournée. Les figures \ref{fig:48approx} et \ref{fig:48naif} montrent que les algorithmes peuvent donner des solutions différentes.
La figure \ref{fig:49} donne le temps d'exécution de la résolution approchée. On remarque que cette solution semble beaucoup plus rapide que la solution naïve.
\begin{figure}
\centering
\includegraphics[width=0.7\linewidth]{images/4_9}
\caption{Temps d'exécution de la résolution approchée}