Releases: MOEAFramework/MOEAFramework
Version 5.1
-
Fixes
ResultFileViewertool, which wasn't starting the viewer when invoking the CLI. -
Adds
distributeAlltoSamplesto evaluate each sample in parallel. -
Redesigns the data store interfaces to avoid "ambiguous method" errors, simplify the available methods, and wraps
errors inDataStoreException. Also adds a CLI tool for managing data stores. -
Deprecates the
Plotclass and splits its functionality into builder classes, includingXYPlotBuilder,
HeatMapBuilder,SensitivityPlotBuilder, etc.
Version 5.0
Version 5.0 includes substantial changes over previous versions. While we encourage users to upgrade to this new
version to access the latest features, please be aware you will likely need to update your code.
-
Adds
ObjectiveandConstraintclasses. This includes, for example, being able to specify an objective as either
MinimizeorMaximize. -
Adds a
nameparameter toVariable,Objective, andConstraint, allowing problems to define custom names for
each. If no name is given, the name defaults toVar<N>,Obj<N>, andConstr<N>. -
Variables no longer have a constructor for setting the value. Instead, the value must be set in a separate call.
This helps avoid any ambiguity regarding the ordering of arguments.// old version RealVariable variable = new RealVariable(0.5, 0.0, 1.0); // new version RealVariable variable = new RealVariable(0.0, 1.0); variable.setValue(0.5); -
Updated "result file" format. Namely, information about the new objective and constraint types is stored in the
header, allowing it to interpret the data correctly. -
Removes
ExecutorandAnalyzer. If previously using theAnalyzer, switch toIndicatorStatistics. -
Reorganized class and package structure. For instance,
Populationand its subclasses were moved to
org.moeaframework.core.population. If you see import errors, try updating the import. -
Replaces
EncodingUtilswith static methods on each variable types:// old version double[] values = EncodingUtils.getReal(solution); // new version double[] values = RealVariable.getReal(solution); -
Updated command line tools:
-
Several of the command line tools are removed or renamed. For example,
Evaluatoris nowEndOfRunEvaluator. -
Adds main entry point for all command line tools via the
cliscript:./cli --help ./cli solve --problem DTLZ2 --algorithm NSGAII --numberOfEvaluations 10000 --output NSGAII_DTLZ2_Runtime.txt ./cli calc --problem DTLZ2 --indicator hypervolume NSGAII_DTLZ2_Runtime.txt
-
-
New parameter definitions and sampling package.
ParameterSet parameters = new ParameterSet( Parameter.named("populationSize").asInt().range(100, 1000, 10), Parameter.named("sbx.rate").asDouble().range(0.0, 1.0, 0.1), Parameter.named("pm.rate").asDouble().range(0.0, 1.0, 0.1)); Samples samples = parameters.enumerate(); -
Streams API. This simplifies common data manipulation and aggregation procedures, such as grouping samples and
computing the average hypervolume:double averageHypervolume = DataStream.of(samples) .map(sample -> { NSGAII algorithm = new NSGAII(new DTLZ2(2)); algorithm.applyConfiguration(sample); return algorithm.getResult() }) .groupBy(Groupings.bucket("populationSize", 100)) .map(result -> hypervolume.evaluate(result)) .measure(Measures.average()); -
New data store package. This provides a means to store a large number of output files without needing to manage
or organize the data.DataStore dataStore = new FileSystemDataStore(new File("results")); NSGAII algorithm = new NSGAIII(problem); algorithm.run(10000); Reference reference = Reference.of(algorithm.getConfiguration()); Container container = dataStore.getContainer(reference); Blob blob = container.getBlob("result"); blob.store(algorithm.getResult());
Version 4.5
-
Introduce extensions. These are reusble components that extend or augment the functionality of an algorithm
without needing to create new classes. -
Redefines the
algorithm.terminate()method to be called whenever termination conditions are reached. Also permits
algorithms to continue running after being terminated. -
Moves the
initialize()method intoAlgorithm. Consequently, the visibility also changes fromprotectedto
public. This may cause compilation errors in code overridinginitialize(), but can be fixed by changing the
visibility modifier topublic. -
No longer require a
Probleminstance when constructing aNormalizer. Adds static methods to normalize using
bounds (Normalizer.of(minimum, maximum)) or disable normalization (Normalization.none()).
Version 4.4
-
Introduces a new
clusteringpackage, with implementations of single-linkage clustering and K-means++. This
also refactors the clustering implementation used by AMOSA. -
Adds support for the GD+ and IGD+ performance indicators. These "plus" variants utilize a different distance
measure resulting in weakly Pareto compliant variants of the original GD and IGD indicators. -
Updates all dependencies to their latest versions.
-
Fixes bug in Maven packaging that caused version 4.3 artifacts to exclude the Pareto front files. Added
integration tests to validate releases.
Version 4.3
-
Adds default operators for mixed type problems. For example, if given a problem with real and binary decision
variables, we will now automatically combine SBX and PM for the real values and HUX and BitFlip for binary. -
Adds an enumeration for performance indicators,
StandardIndicator, to replace string matching. This also
simplifies configuring code using indicators, using either the enum constants or anEnumSet. -
Analyzer results are now displayed in a more condensed table format.
-
Moves
DistributedProblemand related classes fromorg.moeaframework.util.distributedto
org.moeaframework.parallel. The old package location is deprecated and will be removed in a future release.
Version 4.2
-
Adds the
U-NSGA-IIIalgorithm, which replaces NSGA-III's random selection with niche-based tournament selection
to increase selection pressure. -
Adds the
AGE-MOEA-IIalgorithm, which uses the (estimated) geometry of the Pareto front when assigning survival
scores / fitness to solutions. -
Adds the 15 problems from the MaF test problem suite.
-
Adds classes in
org.moeaframework.core.attributefor reading and writing attributes. -
Improves argument validation with the new
Validateclass, enabling simpler and more expressive conditions along
with detailed error messages:Validate.that("arg", arg).isGreaterThan(0);
Version 4.1
-
Adds
DefaultNormalizerandDefaultEpsilonsclasses with the ability to override the defaults with
problem-specific, custom settings. These settings can be set either by callingoverrideor loaded from the
properties file. -
ThreadLocalMersenneTwisteris now the default random number generator used byPRNG. Consequently,
PRNGcan be used by multi-threaded or parallel codes directly. -
Markdown and Latex support when saving or displaying tables:
algorithm.getResult().save(TableFormat.Latex, new File("result.tex")); -
Expands CI testing to include Windows and MacOS.
-
Improvements to
ExternalProblem, including:-
Adds Builder to simplify configuring the executable, optional sockets, and other settings:
new ExternalProblem.Builder().withCommand("problem.exe").withDebugging() -
Added retries and shutdown timeout, which can be configured through the builder or the global properties:
org.moeaframework.problem.external.enable_debugging = true org.moeaframework.problem.external.retry_attempts = 5 org.moeaframework.problem.external.retry_delay = 1 org.moeaframework.problem.external.shutdown_timeout = 10 -
Adds Winsock support on Windows, enabling socket communication on all supported platforms.
-
Adds brackets "[0,1,2]" and braces "{0,3}" to permutation and subset string encodings, respectively, for
improved parsing and validation.
-
Version 4.0
-
Bumps minimum supported Java version to 17. This is a long-term support (LTS) release with an end-of-life of
Sept 2029. -
As this is a major update, a number of breaking changes have been introduced, including removing deprecated
methods and reorganizing classes. Most classes still exists, but have been moved to different packages.
Please update imports to fix any compilation issues. -
Other notable changes include:
-
Adds ProblemBuilder tool that generates templates for writing problems in C, C++, Fortran, Java,
and Python. See the Writing Native Problems documentation for more details. -
Adds the
Indicatorsclass to simplify calculating performance indicators. -
Moves all documentation online, replacing the Beginner's Guide PDF.
-
Version 3.11
-
Removes the
setInitialPopulationSizemethod and correspondingpopulationSizeparameter
from DBEA. Instead, the population size is dervied from thedivisionsparameter. -
Improved online documentation
Version 3.10
-
Fixes bug #394 where changing the aggregate fitness comparator used by a GeneticAlgorithm would
not update the comparator used by its selection operator. -
Adds ZCAT test problem suite.
-
Adds feasibility ratio calculator that estimates the difficulty of constrained problems by measuring
the percentage of randomly-generated solutions that are feasible. -
Updates all dependencies to their latest versions.