JMH (Java MetaHeuristics)
JMH is the acronym of Java MetaHeuristics. JMH is a framework to create metaheuristic algorithms and compare them among each other. It is specifically designed to do research in the metaheuristics field.
JMH is evolving very fast. Nowadays, it offers the following funcionality:
- A framework for defining algorithms: constructive methods, improvement methods, solution combinators; and mixing all these methods into different metaheuristics (Scatter Search, GRASP, Genetic Algorithms, and so on)
- A framework to compare different algorithms through experimentation
- Classes to perform different types of analysis over the data generated by the experiments ran
- Utility classes that are used across the framework, but that can be also used by developers when defining their own algorithms: a random number generator manager, implementation of RCLs, methods for efficiently ordering arrays and collections, among others
JMH provides several metaheuristics that can be used out-of-the-box. They can be configured by different ways. For instance, there is a GRASP class, and users of this class can configure an object of this class with the constructive and improment methods they want to use, and it is ready to be used within an experiment.
However, when there is a heavy need for efficiency, users may prefer to develop their own metaheuristics, even if there is a ready-to-use implementation in the framework. In this case, the framework provides several utility classes that it is worth to consider using them. Have a look at the es.gavab.jmh.util project.
Download
JMH can be downloaded from the SourceForge page (SVN repository: https://jmh.svn.sourceforge.net/svnroot/jmh)
Documentation
Given the dynamic nature of the project (with frequent changes in the code made by the developers in an "as-needed" basis) we have no time to prepare a complete documentation of the different features of the framework. We are doing an effort towards documenting the code to make understandable by anybody who reads it (supposing he has some idea of what metaheuristics are). However, packages and class names are self-explanatory.
- JMH layout: Java projects in which is divided JMH.
- Problem project layout: Layout used when developing a specific metaheuristic.
- Experiments: Info about the execution of experiments with JMH.
Development
The development page contains information about future development of the project. You need to be a project developer in order to access this page.