Vous êtes sur la page 1sur 3

Bonjour,

Si je fais ce poste aujourd’hui c’est parce que je pense avoir


trouvé une solution au problème du voyageur de commerce. Quand
je dis solution, je veux dire une méthode ou algorithme permettant
de trouver le plus court chemin « rapidement » et ce, dans tous les
cas.

Le problème du voyageur de commerce :


Le problème est posé de la façon suivante :
Imaginons que vous ayez un certain nombre de villes à visiter, une
seule fois, et que vous souhaitiez revenir au point de départ à la fin.
Ainsi vous connaissez les villes à visiter ainsi que toutes les distances
qui les séparent. Le but est de trouver le chemin le plus court qui
vous fera passer par toutes les villes, une fois, et vous ramènera au
point de départ. Il existe plusieurs façons de résoudre ce problème
(plus ou moins longues à réaliser) comme par exemple, en testant
tous les chemins afin de les comparer entre eux, mais en ne gardant
que le plus court. Vous imaginez bien que, plus on a de villes à visiter,
plus il y a de chemins à tester et cette technique devient vite
irréalisable même avec un ordinateur « très puissant ». Toute la
difficulté est là. Il faut trouver un moyen d’obtenir le plus court
chemin à chaque fois, et cela quel que soit le nombre de villes, les
distances qui les séparent et tout ça dans un temps raisonnable (bien
plus rapide qu’avec la méthode dite « brutale »). Pour plus
d’information sur ce problème, je vous laisse consulter la page
Wikipédia.
Passons donc à ma solution.

Voici ce que je propose :


Prenons un schéma composé de n points (appelons ces points : k0, k1,
k2, …, kn-1.). Tous ces points sont reliés entre eux et espacés par des
distances (appelons ces distances : d0 la distance de k0 à k1, d1 la
distance de k1 à k2, …, dn la distance de kn-2 à kn-1.).
Maintenant, prenons les 3 points qui composent ce schéma ainsi que
les distances correspondantes de façon totalement aléatoire, cela n’a
aucune importance vous le verrez par la suite. (Avec un schéma à
trois points vous pouvez tester plusieurs chemins, mais vous verrez
que la distance totale sera la même pour tous, on peut représenter
ça par un triangle). De plus, dans notre schéma de départ, tous les
points sont reliés entre eux, ce qui veut dire que si vous partez du
point k0 ou de n’importe quel autre point du schéma, vous pourrez
obtenir le même chemin le plus court. Tout ça pour dire que le point
de départ n’a aucune importance.
Bref, vous vous retrouvez avec un schéma à 3 points. Maintenant il
vous faut arriver à un schéma avec vos n points. Pour cela rajoutons
un point supplémentaire à votre schéma avec les distances
correspondantes (ce point doit appartenir à votre schéma) de sorte à
avoir un chemin passant par 4 points différents. Bien entendu, il ne
faut pas rajouter ce point n’importe où, il faut faire en sorte que ce
chemin soit le plus court de tous et pour cela voilà comment
procéder :
Soit x,y,z vos trois points sélectionnés et xyzx votre chemin avec les
distances correspondantes, vous voulez rajouter w (w appartient à
votre schéma). Trois possibilités s’offre à vous soit xwyzx, soit xywzx
ou xyzwx. Ensuite il faut simplement prendre l’un des trois chemins,
celui qui est le plus court et répéter ça jusqu’à avoir un chemin
passant par vos n points et revenant au point départ.
Par ailleurs, calculer la taille totale de chaque chemin demanderait
𝑛2 −𝑛−6
( ) étapes, où n est le nombre de points de votre schéma initial.
2

Pour que ce soit plus simple, illustrons cela par un exemple.


Exemple :
Votre schéma de départ est composé de 5 points : A, B, C, D, E. Pour
ma part je note les distance de cette façon-ci (dans le cas où d(x,y) =
d(y,x) ): A :{AB ; AC ; AD ; AE} B :{BC ; BD ; BE} C :{CD ; CE} D :{DE}
A :{4 ; 2 ; 1 ; 3} B :{6 ; 1 ; 3} C :{7 ; 2} D :{1}
Comme cela on peut facilement voir d0(AB) ; d1(AC) …etc. Prenons 3
points du schéma au hasard : A, D et C et fixons le premier chemin
ADCA. (Notez que l’on peut fixer des paramètres en plus comme par
exemple imposer le point de départ). Maintenant, je veux rajouter un
point. (Là aussi ça peut être n’importe lequel) Rajoutons B au
chemin : 3 possibilités : ABDCA, ADBCA ou ADCBA.
ABDCA = 14 ; ADBCA = 10 ; ADCBA = 18. Le chemin ADBCA étant le
plus court, je le garde. Maintenant je dois rajouter le dernier point E
pour avoir mon chemin complet. Ici 4 possibilités :
AEDBCA, ADEBCA, ADBECA ou ADBCEA.
AEDBCA =13, ADEBCA = 13, ADBECA = 9, ADBCEA = 13.
Alors le chemin le plus court passant par A, B, C, D et E en partant de
A et en revenant à A est ADEBCA. Je tiens à préciser tout de même
qu’il est possible qu’il y ait plusieurs chemin partant du même point
de départ qui soit les plus courts mais nous devons trouver au moins
un chemin qui est le plus court.
Je vous remercie d’avoir pris le temps de lire ce post et je vous
remercie d’avance pour tous les commentaires que vous ferais au
sujet de cette solution (pour me dire si elle est valide, ce qu’elle vaut,
ce que je peux en faire …etc.). De plus si quelqu’un veut m’aider pour
réaliser le programme informatique pas de soucis, il suffit de me
demander ;).
Bonne journée.