home | accès étudiants |
GraphStream est un outil pour la modélisation, le traitement et la visualisation de graphes. Même si cet outil est orienté vers le traitement de graphes dynamiques, on peut l'utiliser pour des problèmes statiques, tels que le problème classique du voyageur de commerce (TSP). GraphStream est une bibliothèque de classes Java.
Pour instaler GraphStream :
TSPLIB est une bibliothèque d'instances de TSP et problèmes similaires utilisées pour comparer les différents algorithmes de résolution. Nous avons choisi les instances suivantes de TSPLIB :
nom | villes | optimum |
---|---|---|
berlin52 | 52 | 7542 |
kroA100 | 100 | 21282 |
kroA200 | 200 | 29368 |
fl1400 | 1400 | 20127 |
Les instances choisies sont euclidiennes, c-à-d chaque ville est un point sur le plan et la distance entre deux villes est la distance euclidienne entre les points correspondants (arrondie au nombre entier le plus proche). Cet archive contient les instances en format TSP et DGS. Le format TSP est documenté ici. Les fichiers DGS représentent des graphes complets, chaque sommet possède des attributs x et y (les coordonnées de la ville) et chaque arête possède un attribut length (la longueur).
Pour charger et visualiser une instance, on peut se servir du programme suivant (on passe le nom du fichier dgs en argument de la ligne de commande):
import org.miv.graphstream.io.*; import org.miv.graphstream.graph.*; public class TestTSP { public static void main(String[] args) { Graph g = new CheckedGraph(); GraphReader gr = new GraphReaderDGS(g); try { gr.begin(args[0]); while(gr.nextStep()); } catch(Exception e) { e.printStackTrace(); return; } g.display(false); } }
Si vous voulez tester autres instances de TSPLIB, vous pouvez utiliser le convertisseur TSPtoDGS.java. Utilisation :
export LANG=en_US java TSPtoDGS fichier.tsp fichier.dgs
Attention : le programme marche uniquement pour des instances euclidiennes dans le plan (EDGE_WEIGHT_TYPE: EUC_2D).
En gros, trouver une solution aussi bonne qu'on peut. Implémenter un algorithme de parcours itératif (descente multi-start, GRASP, recuit simulé ou recherche tabou). Tester et comparer différentes structures de voisinage, différents algorithmes gloutons pour la solution initiale, différents paramètres, etc.
Les programmes seront testés sur une instance inconnue de taille ne dépassant pas 300 villes. Chaque programme aura à sa disposition un des coeurs d'un Intel(R) Core(TM)2 Duo à 2.6GHz dédié pendant un certain temps (probablement une dizaine de minutes). Ce temps écoulé, le programme sera arrêté et la meilleure solution trouvée sera retenue. En cas d'égalité entre deux programmes, celui qui a trouvé la solution plus tôt sera classé premier.
Afin de faciliter le test automatique, respecter les règles suivantes :
java -Xmx1024m -cp tsp.jar:/chemin/vers/graphstream.jar tsp.MaClassePrincipale instance.dgs
V1 V2 ... Vnoù Vi est le numéro de la i-ème ville visité. Cet affichage doit se faire à chaque amélioration de la solution trouvée car le résultat retenu sera la meilleure solution affichée avant l'interruption du programme.
java -cp tsp.jar:graphstream.jar MaClassePrincipale instance.dgs | java -cp tspanalyze.jar:graphstream.jar tspanalyze.Analyzer instance.dgsSi vos solutions s'affichent bien et s'il n'y a pas d'exceptions, votre programme est prêt à passer le test.
Le classement des programmes sera publié sur cette page. Le TP sera noté en fonction de ce classement et du rapport.
Envoyer par mail à stefan dot balev at univ dash lehavre dot fr