jMetal 5.0: Nouvelle architecture du framework de méta-heuristiques en Java
Un billet Blog par Matthieu Vergne

Le , par Matthieu Vergne

0PARTAGES

(If you need an English version of this post, please contact me at matthieu.vergne@gmail.com)
(Conflits d'intérêts : je suis actuellement contributeur du projet jMetal et co-auteur de la publication citée)

Tout programmeur digne de ce nom a déjà écrit, voire conçu, des algorithmes. Parmi les plus classiques, on retrouve les algorithmes de tri, tels que le tri à bulle ou le tri rapide, ou encore les algorithmes de recherche, comme l'algorithme de Dijkstra ou la recherche dichotomique. Quand le problème (ou sa solution) devient difficile à modéliser, on utilise des algorithmes qui font appels à des connaissances très spécifiques au problème qui nous concerne de façon à trouver, si ce n'est la meilleure, au moins une bonne solution. On parle à ce moment là d'heuristiques. En allant plus loin, on peut identifier des catégories d'heuristiques qui permettent de résoudre efficacement (mais toujours approximativement) différentes classes de problèmes, ce qui permet de les généraliser pour pouvoir les appliquer de manière plus large. On parle alors de métaheuristiques. Il en existe là encore une variété, notamment les algorithmes génétiques, les algorithmes de colonies de fourmis, et le recuit simulé.


jMetal est une bibliothèque Java développée par deux chercheurs, Antonio J. Nebro et Juan J. Durillo, travaillant sur ces fameuses métaheuristiques. Initialement développée à titre personnel, cette bibliothèque est aujourd'hui distribuée sous licence Open Source GNU LGPL et est l'une des bibliothèques Java dédiées aux métaheuristiques les plus utilisées dans le domaine de la recherche. Distribuée via SourceForge jusqu'à la version 4.5, elle est passée sur GitHub où elle vient de sortir sa première version : la 5.0. Cette nouvelle version a d'ailleurs fait l'objet d'une publication durant la conférence Genetic and Evolutionary Computation Conference de 2015, publication qui détaille les changements majeurs depuis la versions 4.5.

Si initialement le projet était apprécié pour son architecture générique et simple, reprenant des concepts classiques du domaine comme Problem, Solution et Algorithm, mais aussi pour les nombreux algorithmes qu'il implémentait, les retours utilisateurs mentionnaient néanmoins le besoin de revoir le code en profondeur. Pour la version 5.0, le code a donc été considérablement revu pour :
  • tenter de suivre les principes SOLID
  • remplacer des contrôles à l'exécution par des contrôles à la compilation en utilisant des generics Java
  • factoriser le code commun pour créer des modèles réutilisables
  • fournir des mesures en temps réel (pendant l'exécution des algorithmes)
  • mesurer la qualité du code via des outils reconnus, comme SonarQube
  • faciliter l'utilisation de la bibliothèque en en faisant une dépendance Maven
  • améliorer le support du parallélisme


Ainsi, même si l'architecture a préservé les concepts les plus importants, elle a été significativement revue pour être simplifiée et utiliser les generics Java. Cela dit, la version 5.0 étant une remise à zéro, le transfert de l'ensemble des fonctionnalités prends du temps, et tout n'a donc pas encore été implémenté dans cette nouvelle mouture, laissant certaines parties importantes pour de futures versions. Sont absent notamment certains algorithmes déjà présents dans la version 4.5, mais aussi les expérimentations, qui visent à exécuter différents algorithmes sur différents problèmes à des fins de comparaison. D'autres parts, même si l'architecture a déjà été modifiée de manière significative, justifiant le changement de version majeur, de nouvelles modifications pourraient voir le jour au fur et à mesure des discussions, et certaines touchant encore une fois les concepts fondamentaux comme Solution. Enfin, si les generics datent de Java 5 (2002), la version utilisée pour jMetal 5.0 est Java 7 et il est d'ores et déjà prévu d'utiliser des fonctionnalités fournies par Java 8 pour les futures versions, telles que les streams.

En bref, jMetal est un projet en pleine évolution, et les contributions et retours utilisateurs y sont donc les bienvenus. En particulier pour des cas pratiques, vu que l'implémentation initiale s'est surtout faite d'un point de vue de chercheur, et donc principalement sur des problèmes artificiels, peu représentatifs de l'industrie.

jMetal 5.0 (sources) : https://github.com/jMetal/jMetal
jMetal 5.0 (binaires) : https://search.maven.org/#search|ga|1|jmetal
jMetal 4.5 (version précédente) : http://sourceforge.net/projects/jmetal/
Publication GECCO 2015 : http://dl.acm.org/citation.cfm?doid=...739482.2768462

Une erreur dans cette actualité ? Signalez-le nous !

Contacter le responsable de la rubrique Accueil

Partenaire : Hébergement Web