Le précédant test de performance sur le solveur porté en Java s'était avéré catastrophique : environ deux heures pour un problème qui se résolvait en 4 min sur mon portable.
J'ai donc modifié mon code afin que celui-ci n'utilise plus de structure de stockage objet (Vector, ArrayList). Si ces structures sont très faciles (et très agréables) à utiliser, elles entrainent une diminution significative des performances (environ x4 dans mon exemple).
La seconde modification est algorithmique. Comme en C, je precalcule le cout de tous les troncons possibles. Cette méthode évite le calcule de la distance entre deux point, étape très couteuse.
L'utilisation de ces deux "améliorations" permet de résoudre le même problème en 8 min (gain x16). Les erreurs de réallocation dans le cas de la résolution successives de plusieurs problèmes étant résolus, je peux plus ou moins dire que mon programme Java est prêt à être porter sous ProActive.
Ce portage va se faire en plusieurs étapes :

  • création des classes permettant de générer les tâches selon un nombre défini de villes fixés au départ.
  • création de la class Task representant une tâche à envoyer.
  • création des classes permettant de distribuer les tâches.
  • modification de la classe TspSolve en un package worker.
  • serialisation de toutes les classes pouvant être utiliser par le(s) worker(s)
  • ecriture de la classe/fonction permettant de remonter au manager une solution trouvée localement
  • ecriture de la classe/fonction permettant d'informer les workers d'une nouvelle solution optimale
  • test en local sur un worker
  • test en local avec plusieurs workers
  • test reseau avec plusieurs workers

Il reste encore pas mal de boulot. Mon objectif est de finir ces étapes avant les vacances, afin de :

  • pouvoir faire un compte-rendu avant ou pendant les vacances
  • pouvoir étudier l'installation et la configuration d'OpenSSI pendant mes jours de congés.