voyageur de commerce Le but de l'appli est de tester le fonctionnement de ProActive de façon plus précise en l'utilisant sur un problème standart du labo : le TSP.
TSP représente un voyageur de commerce qui va de ville en ville. Le but est de trouver l'ordonnancement optimal des villes de façon à réduire les couts (par exemple la distante totale parcourue).
Il existe plusieurs version du TSP, ajout de contraintes de fenêtre de temps pour livrer un client, minimiser le nombre de véhicules,... Je me bornerais pour l'instant à considérer comme unique paramètre la distance entre deux villes.
Pour rappel, pour calculer cette distance il suffit d'appliquer pythagore :

dist(A,B) = RACINE( ValeurAbsolue(abscisse(A)-abscisse(B))² + ValeurAbsolue(ordonee(A)-ordonnee(B))² )

Voici les buts de l'appli :

  • pouvoir être utiliser en mode graphique ou en mode texte.
  • pouvoir générer une configuration xml du TSP en fonction de divers parametres.
  • pouvoir charger une configuration du TSP au format xml.
  • pouvoir charger la configuration des nodes à utiliser au format xml.
  • pouvoir generer une configuration xml des nodes.
  • avoir un affichage graphique et une mise à l'echelle de la carte.
  • pouvoir afficher au fur à mesure du déroulement de l'algo, la meilleure solution trouvée.
  • pouvoir enregistrer les solutions au format xml.

L'algo utilise pour la distribution est relativement simple et se rapproche de celui utilisé dans le problème des n-reines. Il suffit en effet de fixer une ville de départ et de générer des combinaison à partir de celle-ci.

  • affectation d'un identifiant à chaque ville
  • N représente le nombre de ville en jeu.
  • on crée une liste de combinaison des trois première ville (en fixant un point de départ)

Première perte de temps : eclipse ne trouvait pas ma classe principale. Au quatrième projet crée, il a enfin daigné prendre en compte mes paramètres.
Autre problème : l'ajout/le retrait dynamique de JPanel en fonction de l'option choisie a necessité l'utilisation de revalidate(). La même fonction dans mon projet romeAlesia n'avait eut besoin que de repaint().
Enfin, j'ai une nouvelle fois essayé de comprendre le fonctionnement des GridBagLayout et comme à chaque fois, je trouve cela incompréhensible ou au moins fortement non-intuitif. Comme d'abitude je vais donc utiliser un melting-polt des layouts courants.