Skip to content

Releases: MOEAFramework/MOEAFramework

Version 5.1

24 Jun 13:38

Choose a tag to compare

  • Fixes ResultFileViewer tool, which wasn't starting the viewer when invoking the CLI.

  • Adds distributeAll to Samples to evaluate each sample in parallel.

  • Redesigns the data store interfaces to avoid "ambiguous method" errors, simplify the available methods, and wraps
    errors in DataStoreException. Also adds a CLI tool for managing data stores.

  • Deprecates the Plot class and splits its functionality into builder classes, including XYPlotBuilder,
    HeatMapBuilder, SensitivityPlotBuilder, etc.

Version 5.0

17 Jan 21:06
769621a

Choose a tag to compare

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 Objective and Constraint classes. This includes, for example, being able to specify an objective as either
    Minimize or Maximize.

  • Adds a name parameter to Variable, Objective, and Constraint, allowing problems to define custom names for
    each. If no name is given, the name defaults to Var<N>, Obj<N>, and Constr<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 Executor and Analyzer. If previously using the Analyzer, switch to IndicatorStatistics.

  • Reorganized class and package structure. For instance, Population and its subclasses were moved to
    org.moeaframework.core.population. If you see import errors, try updating the import.

  • Replaces EncodingUtils with 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, Evaluator is now EndOfRunEvaluator.

    • Adds main entry point for all command line tools via the cli script:

      ./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

04 Oct 00:52

Choose a tag to compare

  • 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 into Algorithm. Consequently, the visibility also changes from protected to
    public. This may cause compilation errors in code overriding initialize(), but can be fixed by changing the
    visibility modifier to public.

  • No longer require a Problem instance when constructing a Normalizer. Adds static methods to normalize using
    bounds (Normalizer.of(minimum, maximum)) or disable normalization (Normalization.none()).

Version 4.4

04 Aug 23:34
52062ae

Choose a tag to compare

  • Introduces a new clustering package, 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

28 Jun 18:41
6b95fe6

Choose a tag to compare

  • 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 an EnumSet.

  • Analyzer results are now displayed in a more condensed table format.

  • Moves DistributedProblem and related classes from org.moeaframework.util.distributed to
    org.moeaframework.parallel. The old package location is deprecated and will be removed in a future release.

Version 4.2

26 May 23:15

Choose a tag to compare

  • Adds the U-NSGA-III algorithm, which replaces NSGA-III's random selection with niche-based tournament selection
    to increase selection pressure.

  • Adds the AGE-MOEA-II algorithm, 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.attribute for reading and writing attributes.

  • Improves argument validation with the new Validate class, enabling simpler and more expressive conditions along
    with detailed error messages:

    Validate.that("arg", arg).isGreaterThan(0);
    

Version 4.1

06 May 17:48

Choose a tag to compare

  • Adds DefaultNormalizer and DefaultEpsilons classes with the ability to override the defaults with
    problem-specific, custom settings. These settings can be set either by calling override or loaded from the
    properties file.

  • ThreadLocalMersenneTwister is now the default random number generator used by PRNG. Consequently,
    PRNG can 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

05 Apr 21:44

Choose a tag to compare

  • 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 Indicators class to simplify calculating performance indicators.

    • Moves all documentation online, replacing the Beginner's Guide PDF.

Version 3.11

04 Mar 19:19

Choose a tag to compare

  • Removes the setInitialPopulationSize method and corresponding populationSize parameter
    from DBEA. Instead, the population size is dervied from the divisions parameter.

  • Improved online documentation

Version 3.10

18 Jan 18:38

Choose a tag to compare

  • 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.