Aller au contenu

Le voyageur de commerce

Un voyageur de commerce doit parcourir une certaine liste de villes (un seul passage par ville) et il connaît les distances entre deux villes quelconques.

Comment doit-il s'organiser pour minimiser la distance qu'il doit parcourir ?

Exercice 4

Le voyageur part de la ville A et doit finir en A après être passé une seule fois par chaque ville. Recherchez tous les trajets et donnez un trajet optimal.


Nombre de chemins possibles (recherche exhaustive)⚓︎

Supposons qu'il y ait n villes à visiter en tout. Laissons de côté la ville de départ (et d'arrivée), il reste n − 1 villes.

Le voyageur doit choisir :

  • la première ville à visiter : n − 1 choix ;
  • la deuxième ville à visiter : n − 2 choix ;
  • la troisième ville à visiter : n − 3 choix ;
  • etc.
  • la dernière ville à visiter : 1 choix

soit \((n − 1) \times (n − 2) \times (n − 3) \times \dots \times 2 \times 1\) choix.

En mathématiques, ce nombre est noté \((n − 1)!\) (factorielle de \(n − 1\)).

Cependant, dans ce calcul, la moitié des trajets est inutile pour nous, par exemple Lille-Paris-Lyon-Lille revient à Lille-Lyon-Paris-Lille en terme de distance totale.

Bref, le nombre de chemins possibles est au final \(\dfrac{(n − 1)!}{2}\).

Calculons ce nombre de chemins dans quelques cas :

Nombre de villes n 5 10 20 100
Nombre de chemins (n − 1)!/2 12 181440 6,0823 × 1016 4,6663 × 10155

Ainsi, ce problème donne encore plus de cas à envisager que celui du sac à dos. A titre de comparaison, pour n = 10 :

  • 210 = 1024 combinaisons d'objets pour le sac à dos ;
  • 9!/2 = 181440 chemins pour le voyageur de commerce.

La recherche exhaustive semble donc inenvisageable, par exemple, pour 71 villes, le nombre de chemins est supérieur à 5 × 1080 qui est de l'ordre du nombre d'atomes dans l'univers connu !


Encore plus étonnant, si le calcul d'un chemin prend une microseconde, alors voici les temps de calculs de tous les chemins :

  • pour 10 villes : 181 440 microsecondes = 0,18 seconde ;
  • pour 15 villes : 43 589 145 600 microsecondes = 12 heures environ ;
  • pour 20 villes : 6 × 1016 microsecondes soit environ 1 901 années ;
  • pour 25 villes : le temps de calcul dépasse l'âge de l'Univers...

Le voyageur va donc devoir se contenter d'un algorithme glouton qui lui donnera un chemin convenable mais pas forcément optimal.

Méthode gloutonne⚓︎

Exercice 5

  1. Quelle est la stratégie gloutonne qui vous paraît la plus adaptée (quel est le critère de choix de la prochaine ville du chemin) ?
  2. Appliquez cette stratégie à cette configuration (le tableau donne les distances entre les villes) :

    A B C D E F
    A 0 30 44,7 72,8 22,4 60
    B 30 0 22,4 44,7 28,3 30
    C 44,7 22,4 0 30 30 28,3
    D 72,8 44,7 30 0 60 22,4
    E 22,4 28,3 30 60 0 53,9
    F 60 30 28,3 22,4 53,9 0

  3. Donne-t-elle le chemin optimal ?

Aide

Voici une représentation graphique de la disposition de ces villes :

exo voyageur commerce


Exercice 6 : pour les plus rapides

Vous pouvez essayer de programmer un algorithme glouton pour le problème du voyageur de commerce (en entrée : une liste de villes et une liste de listes donnant les distances entre deux villes, en sortie : la liste des villes à parcourir dans l'ordre).

Retour en haut de la page