Component-Wise MOEA/D Implementation

Modular implementation of Multiobjective Evolutionary Algorithms based on Decomposition (MOEA/D) [Zhang and Li (2007), ] for quick assembling and testing of new algorithmic components, as well as easy replication of published MOEA/D proposals. The full framework is documented in a paper published in the Journal of Statistical Software [].

Build Status CRAN_Status_Badge CRAN Downloads

Felipe Campelo and Lucas Batista
Operations Research and Complex Systems Laboratory - ORCS Lab
Universidade Federal de Minas Gerais
Belo Horizonte, Brazil

Claus Aranha
Faculty of Engineering, Information and Systems
University of Tsukuba
Tsukuba, Japan

R package containing a component-based, modular implementation of the Multiobjective Evolutionary Algorithm with Decomposition (MOEA/D) framework.

The MOEA/D framework is seen as a combination of specific design decisions regarding several independent modules:

  • Decomposition strategy;
  • Aggregation function;
  • Objective scaling strategy;
  • Neighborhood assignment strategy;
  • Variation Stack;
  • Update strategy;
  • Constraint handling method;
  • Termination criteria.

This package provides several options for each module, as explained in the documentation of its main function, MOEADr::moead(). The input structure of this function is also explained in its documentation.

To install the current release version in your system, simply use:


For the most up-to-date development version, install the github version using:

# install.packages("devtools")


As a simple example, we can reproduce the original MOEA/D (Zhang and Li, 2007) and run it on a 30-variable ZDT1 function:

 ## 1: prepare test problem
 ZDT1 <- make_vectorized_smoof(  = "ZDT1",
                               dimensions = 30)

 ## 2: set input parameters
 problem   <- list(name       = "ZDT1",
                   xmin       = rep(0, 30),
                   xmax       = rep(1, 30),
                   m          = 2)
 decomp    <- list(name       = "SLD", H = 99)
 neighbors <- list(name       = "lambda",
                   T          = 20,
                   delta.p    = 1)
 aggfun    <- list(name       = "wt")
 variation <- list(list(name  = "sbx",
                        etax  = 20, pc = 1),
                   list(name  = "polymut",
                        etam  = 20, pm = 0.1),
                   list(name  = "truncate"))
 update    <- list(name       = "standard", 
                   UseArchive = FALSE)
 scaling   <- list(name       = "none")
 constraint<- list(name       = "none")
 stopcrit  <- list(list(name  = "maxiter",
                     maxiter  = 200))
 showpars  <- list(show.iters = "dots",
                   showevery  = 10)
 seed      <- NULL

 ## 3: run MOEA/D
 out1 <- moead(problem = problem, 
               decomp = decomp, aggfun = aggfun, neighbors = neighbors, variation = variation, 
               update = update, constraint = constraint, scaling = scaling, stopcrit = stopcrit,
               showpars = showpars, seed = seed)

 ## 3.1: For your convenience, you can also use the preset_moead() function to reproduce the above setup, 
 ##      and only modify the desired parts:
 out2 <- moead(problem = problem,
               preset = preset_moead("original"), 
               stopcrit = list(list(name = "maxiter", maxiter = 1000)),
               showpars = showpars, seed = 42)

 # 4: Plot output:
 plot(out1$Y[,1], out1$Y[,2], type = "p", pch = 20)

Have fun!


MOEADr 1.0.3

  • Changed output class of moead() to moead (instead of moeadoutput). All related functions (plot, summary) and documentation were updated.
  • Added S3 print function for moead objects

MOEADr 1.0.2

  • Corrected the version for the two fixes below;
  • moead() output objects now contain the input configuration used for running the algorithm, for easier reproducibility;
  • Fixed problem in moead() that was compromising reproducibility when running with irace;

MOEADr 1.0.1

  • Fixed minor error in vignette "Fine tuning MOEADr using irace";
  • Fixed minor error in final Archive composition in moead();

MOEADr 1.0.0

  • Moved package smoof back to Suggestions;
  • Updated package examples to reflect looser dependency on smoof;
  • Added summary and plot functions (S3);
  • Added three more Vignettes to explain different aspects of the package: basic usage; automated algorithm assembling and tuning using irace; and using a user-defined operator with the MOEADr framework;
  • Added warning / user confirmation in decomposition_sld() to prevent huge population sizes due to mis-specification of a user parameter;
  • Added preset_moead() to provide fast access to standard configurations from the MOEA/D literature (two "standard MOEA/D" versions and one "MOEA/D-DE");

MOEADr 0.2.2

  • Moved package smoof from Suggestions to Imports
  • Depends updated to R (>= 3.4.0)

MOEADr 0.2.1

  • Added to track changes to the package.
  • R.utils is no longer imported by the MOEADr package
  • Skipped some tests on Solaris platforms, which were throwing spurious errors.

MOEADr 0.2.0

  • Initial release on CRAN

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.


1.1.1 by Felipe Campelo, 2 years ago

Report a bug at

Browse source code at

Authors: Felipe Campelo [aut, cre] , Lucas Batista [com] , Claus Aranha [aut]

Documentation:   PDF Manual  

GPL-2 license

Imports FNN, assertthat

Suggests smoof, scatterplot3d, MASS, grDevices, irace, testthat, knitr, rmarkdown, emoa, ggplot2, reshape2, pkgdown

Suggested by CAISEr.

See at CRAN