From 7f32a6d1bc4cc1317cbf982a412c6aa47801155e Mon Sep 17 00:00:00 2001 From: Orestis Malaspinas <orestis.malaspinas@hesge.ch> Date: Sat, 24 Nov 2018 22:30:04 +0100 Subject: [PATCH] =?UTF-8?q?mise=20=C3=A0=20jour=20du=20voyageur=20de=20com?= =?UTF-8?q?merce.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cours.md | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/cours.md b/cours.md index 7c26290..0828190 100644 --- a/cours.md +++ b/cours.md @@ -1456,7 +1456,45 @@ La force brute est donc totalement hors de question pour résoudre ce type de pr calculant la solution en temps polynomial. Les meilleurs algorithmes de ce types sont limités à 200'000 villes jusqu'à aujourd'hui. Néanmoins, il existe différentes heuristiques qui nous donnent une solution approchée (qui se trouve à 2-3% de la solution optimale avecune très grande probabilité) et qui fonctionnent avec des millions de villes. -Le problème du +Le problème du voyageur du commerce est un problème **d'optimisation dicrète**, et en particulier **d'optimisation combinatoire**. +Ce genre de problème est en général beaucoup plus difficile à résoudre que les +problèmes d'optimisation continue bien que beaucoup plus simples à énoncer. +Une des difficulté est le cadre théorique (la formulation mathématique générale d'un problème d'optimisation discret) qui est +assez difficile à appréhender et qui peut être très différent entre les différents problèmes +d'optimisations. + +Le voyageur du commerce peut s'écrire mathématiquement sous la formue suivante. +Supposons qu'il y ait $N$ villes qui sont numérotées de $1$ à $N$. +Soit $d_{ij}$ la distance entre la ville $i$ et la ville $j$ (on a que $d_{ij}d_{ji}$) pour $i,j\in 1,..,N$. +Soit $x_{ij}$ définiti comme +$$x_{ij}= + \left\{\begin{array}{ll} + $1,$&$\mbox{ si le chemin va de la ville } i { à la ville }j$\\ + $0,$&$\mbox{ sinon.}$ + \end{array}\right.$$ + +On cherche donc +\begin{align} +&\min \sum_{i=1}^N\sum_{j=1, j\neq i}^N x_{ij}d_{ij}, \mbox{ tel que},\\ +&\sum_{i=1,i\neq j}^N x_{ij}=1,\ \forall i=1,..,N,\\ +&\sum_{j=1,neq i}^N x_{ij}=1,\ \forall j=1,..,N. +\end{align} +La première contrainte nous dit qu'on ne peut arriver sur une ville $j$ que depuis une seule ville $i$ (impossible d'y arriver de deux façons différentes). La deuxième contrainte +nous dit que depuis chaque ville on ne peut partir qu'en direction d'une seule autre ville. Ces conditions (déjà assez complexes à formuler) ne suffisent pas pour définir le problème du voyageur de commerce. Il faut y ajouter deux contraintes supplémentaires +afin de garantir qu'il n'y a qu'un parcours qui couvre toutes les villes en y passant qu'une fois et que le parcours n'est pas une combinaison d'au moins deux parcours disjoints parcourant ensemble toutes les villes. Cette contrainte supplémentaire peut s'écrire (cette contrainte n'est pas exprimable de façon unique) +\begin{align} +&u_1=1,\\ +2\leq u_i\leq n,\ \forall i\neq 1,\\ +&u_i-u_j+N\cdot x_{ij}\leq N-1,\quad i\neq 1,\ \j\neq 1, +\end{align} +où $u_i$ est une variable supplémentaire associée à chaque ville dont le seul but est +d'empêcher des cycles à l'intérieur du parcours (imposer qu'on passe qu'une seule fois par chaque ville). +Il est possible de s'en convaincre de la façon suivante. Cette contrainte supplémentaire nous impose que pour chaque +$x_{ij}=1$, on a que $u_j\geq u_i+1$. Par conséquent si on rentre dans une partie du parcours où on +rentre dans des sous-tours, les $u_i$ vont s'incrémenter à l'infini. Bien que les $u_i$ rajoutent des variables au problèmes (et pourraient le complexifier à première vue), on constate que les $u_i$ numérotent +les villes dans le parcours et peuvent aider à formuler un ordre ou la proximité d'une ville dans la suite. + + [^1]: On pourrait, de façon similaire, utiliser la formule de différences finies en avant ou en arrière (ou un mélange des deux). [^2]: Comme ce polynôme passe par les points $(x_0,y_0)$, $(x_1,y_1)$, ..., $(x_m,y_m)$, il est unique, c'est donc exactement le même que celui exprimé avec les $\{a_i\}_{i=0}^m$. -- GitLab