Single and Multi-Objective Optimization Test Functions

Provides generators for a high number of both single- and multi- objective test functions which are frequently used for the benchmarking of (numerical) optimization algorithms. Moreover, it offers a set of convenient functions to generate, plot and work with objective functions.


smoof v1.4 (Release data: 2016-08-03)

  • Fixed: issue in formula and global optimum of BukinN2 function
  • overworked and refactored autoplot functions
    • dropped use.facets parameter (always use facets now if discrete parameters exist)
    • We now support mixed functions with up to two numeric params (or one numeric vector param of length 2) and up to 2 discrete/logical (or a corresponding vector param)
  • Added makeGOMOPFunction to create multi-objective test function based on a set of single objective functions.
  • Added new single-objective functions: Branin (modified version by Forrester et al. (2008))
  • Added new multi-objective functions: Van Valedhuizen's test suite (MOP1-7), Binh-Korn function, BiSphere (bi-objective Sphere), Dent function, Viennet function.
  • Added first mixed parameter space funtion: Zhou2011
  • visualizeParetoOptimalFront now draws lines instead of points
  • Added possibility to draw interactive 3D surface plots via smoof::plot3D(fn, package = "plotly")
  • Removed S3 method definition of getParamSet. This function is now contained in ParamHelpers 1.8

smoof v1.3 (Release data: 2016-02-23)

  • Modified: function name is optional now
  • Added optional reference point ref.point for multi-objective functions
    • Reference point for ZDT functions is (11, 11)
    • Reference point for DTLZ function family is r = (11, ..., 11) with #r = #objectives
    • Added getter getRefPoint
  • Added possibility to pass the true mean function of a noisy function, i.e., the "unnoisy" via the smoof parameter fn.mean
    • Added getter getMeanFunction
  • makeMPM2Function now has additional parameters rotated and peak.shape

smoof v1.2 (Release data: 2016-01-21)

  • Added: functions convertToMaximization and convertToMinimization
  • Added: main parameter for plot and autoplot. By default the function name is used for the plot title.
  • Fixed: autoplot and plot do not work for wrapped functions.
  • objective functions now can be passed an additional id attribute. All predefined smoof functions have an id now.
  • visualizeParetoOptimalFront now works for bi-objective functions with arbitrary search space dimensions and works by calling the mco::nsga2 algorithm. Due to this, the parameters show.only.front, are dropped.
  • Renamed makeFunctionByName to makeFunctionsByName
  • Added tags 'single-objective' and 'multi-objective'
  • filterFunctionByTags now stops if both 'single-objective' and 'multi-objective' tags are passed
  • All functions now check the passed paramter to be of the right dimension and type
  • makeFunctionsByName now expects a character vector generator names (the list methods was removed)
  • Generator names now do not contain the 'Function' suffix
  • Fixed: hasConstraints for wrapped smoof functions
  • Fixed: getUpperBoxConstraints

smoof v1.1 (Release date: 2015-11-24):

  • Parameter set of predefined smoof function now contains a single vector parameter instead of multiple single numeric parameters. This is consistent with function calls now, since these always expect a single vector or list.
  • Added helper function get{Lower,Upper}BoxConstraints
  • smoof functions now expect an optional 'minimize' argument which indicates which objectives should be minimized or maximized respectively
  • Fixed some wrong tag assigments
  • Added shouldBeMinimized function
  • Fixed global optimum of Giunta function
  • Added function makeFunctionByName, which expects a function name or a list of functions names. The corresponding generator(s) is/are called. Useful if you want, e.g., filter functions by tags and generate them directly afterwards.
  • Added hasTags helper function.
  • filterFunctionByTags now has an additional logical argument 'or'. If this is set to TRUE, a subset of the passed tags is sufficient to select a function.
  • Added multi-objective DTLZ function family
  • Added 2D single objective functions: Aluffi-Pentini-(Zirilli), Complex, Engvall, Jennrich-Sampsam, Judge, Kearfott
  • Renamed bochachevsky function to bohachevsky.n1

smoof v1.0 (Release date: 2015-05-19):

  • First submission to 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.5.1 by Jakob Bossek, 3 months ago

Report a bug at

Browse source code at

Authors: Jakob Bossek [aut, cre], Pascal Kerschke [ctb]

Documentation:   PDF Manual  

Task views: Optimization and Mathematical Programming

BSD_2_clause + file LICENSE license

Imports ggplot2, RColorBrewer, plot3D, plotly, mco, Rcpp, RJSONIO

Depends on ParamHelpers, BBmisc, checkmate

Suggests testthat, rPython

Linking to Rcpp, RcppArmadillo

Depended on by cmaesr, ecr, mlrMBO.

Suggested by CAISEr, MOEADr, flacco, mlr.

See at CRAN