vers Labo Algo
Labo Algo

Le problème du voyageur de commerce : le défi des 250 villes

Le défi des 250 villes : faites participer votre algorithme !

Le défi des 250 villes est un concours ouvert à tous et . Il s'agit de créer un logiciel permettant de trouver, le plus vite possible, le chemin le plus court entre 250 villes (voir un exemple à droite).

Voici comment le défi a commencé :

Après avoir découvert le problème du voyageur de commerce (PVC) et les algorithmes génetiques, j'écris en 1996 une première version de mon algorithme permettant de résoudre des petits problèmes (de l'ordre de 25 villes). Cet algorithme est présenté dans ma page sur les algorithmes génétiques en C (1997). En 1998-99, j'en fait une version Delphi sous Windows (GraphGen), en ajoutant la possibilité de changer le nombre de villes et d'afficher graphiquement la solution.

Le 30 Septembre 2000, je reçois un e-mail d'un étudiant en informatique. Il me dit qu'il travaille depuis un an sur un algorithme permettant de résoudre le problème du voyageur du commerce, qu'il pense être très performant.
Intrigué, je lui demande plus de détails et je lui envoie une version de mon algorithme écrit en Delphi. Il me répond que mon programme est intéressant, mais que le sien est bien mieux que le mien ... et il me le prouve en me l'envoyant !
Effectivement, mon algorithme fonctionne bien pour un nombre de villes assez réduit, mais commence à peiner à partir de 75 villes. Le sien est plus efficace et surtout beaucoup plus rapide !
Sachant que mon programme date un peu, et que j'ai des idées d'amélioration et d'optimisations, je lui propose de nous mesurer grâce à un défi : trouver le meilleur parcours pour un problème de 250 villes. (le défi n'a pas de date de fin car il est impossible à ma connaissance de prouver que l'on a trouvé le meilleur chemin)
Quelques temps plus tard, d'autres personnes me contactent pour participer au concours...

Vous voulez participer ? C'est facile

C'est simple, il suffit de créer un programme qui respècte les règles ci-dessous, et de m'envoyer le résultat (votre meilleur parcours).

Le concours est ouvert à tous, sans limitation de temps (tant que cette page se trouve sur le Web...). Tout système d'exploitation, language, compilateur est accepté. Si possible, il serait bien de fournir l'exécutable ou même le code source (si votre logiciel est libre), mais ce n'est pas obligatoire.

Si vous avez une idéee d'algorithme et si vous savez programmer, n'hésitez pas à nous rejoindre !.
Actuellement plus de 20 participants sont dans la course ! (voir la page des résultats et classement actuel)

Les termes exacts du défi

Le but est simple : trouver le chemin le plus court entre les 250 villes dont les coordonnées (x, y) sont définies dans le fichier suivant : defi250.csv

Les 250 villes se trouvent dans un carré de 1 x 1, c'est à dire entre les points de coordonnées (0, 0) et (1, 1).

Le format du fichier est le suivant :

  nombre de villes total
  position X de la première ville;position Y de la première ville
  position X de la deuxième ville;position Y de la deuxième ville
  position X de la troisième ville;position Y de la troisième ville
  ...
  

Extrait du fichier defi250.csv :

250
0.223118073306978;0.216796220745891
0.447559242602438;0.492616587784141
0.569365015253425;0.473787421826273
0.474918519612402;0.033659254200757
...
  

Les villes sont numérotées de 0 à 249. Les trajets doivent commencer par la ville 0.

Le logiciel devra fournir le résultat (meilleur trajet trouvé) sous la forme :

  n° de la 1ère ville visitée (toujours 0)-n° de la 2ème ville visitée-n° de la 3ème ville visitée...
  

(si possible dans un fichier, c'est plus pratique...)

Par exemple, voici le début du meilleur parcours :

  0-85-24-202-51-05-61-92-37-06-153-32-242-58-155-227-113-126-110-...
  

Pas besoin d'afficheur dans votre programme, il suffit d'utiliser la petite applet que j'ai créé, à intégrer dans une page html très simple (on en voit un exemple en haut de cette page) :

  <html>
  <applet code="DisplayTsp.class" width=400 height=400>
     <param name="Problem" value="default">
     <param name="Parcours" value="0-85-24-202-51-05-61-92-37-06-153-32-242-suite du parcours...">
  </applet>
  </html>
  

Dans le même répertoire, placez le fichier DisplayTsp.class (l'applet Java).

Cette applet de visualisation - dont vous voyez une démo un peu plus haut - est un logiciel libre (GPL) dont code source est disponible ici : DisplayTsp

Elle permet calculer la longueur du trajet et de zoomer. Elle peut aussi fonctionner avec d'autres problèmes (nombre de villes différents...)

Bien sûr, vous pouvez utiliser votre propre afficheur pendant le calcul (quelqu'un l'a même implémenté en OpenGL !) mais je vous préviens que cela rique de ralentir fortement le calcul...

?

Très prochainement je réaliserai une page PHP permettant de s'inscrire et d'envoyer ses résultats facilement. En attendant voici comment faire :

Informations à réunir pour participer :

  • Le meilleur parcours que vous avez trouvé (sous la forme 0-85-24-202-51-05-61-92-37-06-153-32-242-58-155-227-113-126-110-...)
  • Le score de ce parcours et temps de calcul pour y arriver (au mieux ou en moyenne)
  • Les caractéristiques de votre machine (exemple : PC 1.3 GHz, Linux)
  • Le langage ou compilateur utilisé (exemple : C++, gcc)
  • Une description de votre algorithme
  • Si possible, l'exécutable
  • Si vous voulez, le code source de votre programme. Eh oui, c'est la mode de l'Open Source :).
    Le but de ce site est de découvrir toutes les méthodes de résolution du PVC, et il n'y a pas mieux que le code source pour comprendre un algorithme. De plus quelqu'un d'autre pourra reprendre votre algorithme et l'améliorer. Ca m'est arrivé avec Michael Trabbia pour mon programme tspgen. N'hésitez pas parce que votre code source pas assez commenté, ou "mal écrit". Tous les codes sources sont comme ça, j'en sais quelque chose car je travaille dans l'informatique :).
    Mais bien sûr vous êtes libres, vous n'êtes pas obligés de rendre votre code disponible...
  • Indiquez votre participation sur la page des inscriptions du Forum de Labo Algo

(Tant que les pages php ne sont pas en place) il se peut que je ne vous réponde pas immédiatement, car mon boulot me prend beaucoup de temps, mais sachez que je me passionne toujours autant pour ce problème, et que le défi est ouvert tant que le site est ouvert !

vers Labo Algo
Labo Algo

Alexandre Aupetit, Avril 2004