Skip to content
jMetalPublic

About

jMetal: a framework for multi-objective optimization with metaheuristics

Topics

Resources

Stars

560 stars

Watchers

52 watching

Forks

Repository files navigation

jMetal project Web site

Build Status Test Status Integration Test Status Documentation Status

jMetal is a Java-based framework for multi-objective optimization with metaheuristics. The last stable version is 7.7. The most recent documentation is hosted in https://jmetal.readthedocs.io.

jMetal 7.7 is a Maven project structured in the following sub-projects:

Sub-project Contents
jmetal-core Core classes
jmetal-algorithm Algorithm implementations
jmetal-problem Benchmark problems
jmetal-lab Experimentation and visualization
jmetal-parallel Parallel extensions
jmetal-auto Auto-design and configuration
jmetal-component Component-based algorithms

Note

jMetal 7.6 is the last version in which jmetal-auto is updated. From now on this sub-project is frozen, as its functionality is covered by the Evolver project, which is under active development.

Related projects

  • jMetalPy: jMetal in Python
  • SAES: Python library to analyse and compare the performance of multi-objective algorithms
  • Evolver: Java framework for the automated meta-optimization of multi-objective metaheuristics, which formulates their automatic configuration and design as a multi-objective optimization problem
  • Evolver-Studio: graphical interface for Evolver (Python/Streamlit application)

Python scripts (NEW)

The scripts/ directory contains Python utilities for visualising Pareto fronts produced by jMetal algorithms (any FUN.csv file):

Script Description
plot_front.py Static matplotlib figure (2D/3D scatter, parallel coordinates for >3 objectives). Saves to PNG/PDF/SVG.
plot_front_interactive.py Interactive Plotly viewer (rotate 3D fronts, hover for values). Opens in the browser or saves as HTML.

Install dependencies and run:

# venv
python -m venv .venv && source .venv/bin/activate
pip install -r scripts/requirements.txt

# conda
conda create -n jmetal python=3.11 && conda activate jmetal
pip install -r scripts/requirements.txt

# Usage examples
python scripts/plot_front.py FUN.csv
python scripts/plot_front.py FUN.csv referenceFront.csv --mode side --output fig.png
python scripts/plot_front_interactive.py FUN.csv referenceFront.csv --mode both

Changelog

  • [10/05/2026] jMetal 7.7 is released.
  • [10/05/2026] JMetalException(String, Exception) and JMetalException(Exception) keep their message and their cause. They used to only log the error, so the exception they created had neither, and whoever caught it got null instead of what went wrong; they no longer log it.
  • [10/02/2026] Spread and GeneralizedSpread no longer sort the arrays they receive: the front, and in Spread the reference front, are sorted in local copies. The reference front is shared by all the calls of an indicator instance, so sorting it in place from several threads at once (e.g., when computing the indicators of independent runs in parallel) corrupted it and made Arrays.sort fail with "Comparison method violates its general contract!"; the fronts of the callers also keep their order now.
  • [09/30/2026] Fixed the decision space of MaF08: the variables were bounded to [0, 1], which contains only a fifth of the polygon that is its Pareto set, so most of its Pareto front could not be reached; the bounds are now [-10000, 10000], as in the definition of the MaF test suite (Cheng et al., 2017). The results of MaF08 obtained with earlier versions are not comparable with those of this one.
  • [09/30/2026] DifferentialEvolutionCrossover.getVariantFromString recognizes RAND_2_EXP, which was in the DE_VARIANT enum but raised an exception when given by name.

The complete list of changes is available in the changelog section of the documentation.

About

jMetal: a framework for multi-objective optimization with metaheuristics

Topics

Resources

Stars

560 stars

Watchers

52 watching

Forks

Releases

Packages

Used by

Contributors

Languages