Simple interface to the C-implementation of the Omni-optimizer by Deb and Tiwari [1,2]. The algorithm “is designed as a generic multi-objective, multi-optima optimizer” [2].
omniopt( fn, pop.size = 4L, n.gens = 100L, p.cross = 0.6, p.mut = 1/smoof::getNumberOfParameters(fn), eta.cross = 20L, eta.mut = 20L, mate = "normal", delta = 0.001, var.space.niching = FALSE, obj.space.niching = TRUE, init = "random", frequency = 10L, seed = runif(1), verbose = TRUE, envir = environment() )
fn | [ |
---|---|
pop.size | [ |
n.gens | [ |
p.cross | [ |
p.mut | [ |
eta.cross | [ |
eta.mut | [ |
mate | [ |
delta | [ |
var.space.niching | [ |
obj.space.niching | [ |
init | [ |
frequency | [ |
seed | [ |
verbose | [ |
envir | [ |
[List
] List with the following entries:
Matrix of points in decision space (each column is a point).
Matrix of objective values in objective space (each column is a point). Note that this is a matrix even in the single-objective case.
A list of named lists. The i-th component contains the
“dec” and “obj” values (see preceding bullet points)
if the population was logged in i-th generation or NULL
if it
was not logged.
The function expects a real-valued benchmark function from package smoof, the population size and the number of generations (the only stopping condition) as mandatory arguments. Besides there are various parameters that can be adjusted (see the referenced papers for an in-depth explanation of the algorithms working principles).
The original C-code can be found at the COIN laboratory website.
[1] Kalyanmoy Deb, Santosh Tiwari: Omni-optimizer: A generic evolutionary algorithm for single and multi-objective optimization. European Journal of Operations Research 185(3): 1062-1087.
[2] Kalyanmoy Deb, Santosh Tiwari: Omni-optimizer: A Procedure for Single and Multi-objective Optimization. In: Proceedings of the Evolutionary Multi-Criterion Optimization Conference (EMO) 2005: 47-61.
library(smoof) # Single-Objective Example (see reference [2], Section 4.2) # === set.seed(1) # reproducibility fn = smoof::makeHimmelblauFunction() res = omniopt(fn, 100, 200, var.space.niching = TRUE, delta = 0.001, verbose = FALSE) if (FALSE) { plot(fn) points(t(res$dec)) } # Multi-Objective Example # === set.seed(1) # reproducibility fn = smoof::makeZDT2Function(dimension = 4L) res = omniopt(fn, 100, 1000, p.cross = 0.9, verbose = FALSE) if (FALSE) { plot(t(res$obj)) pairs(t(res$dec)) }