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).
-
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.
-
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(omnioptr)
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, frequency = 1L, verbose = FALSE)
# final points in decision space
plot(fn)
points(t(res$dec))
# visualization of progress
for (i in 1:length(res$history)) {
e = res$history[[i]]
if (is.null(e))
next
plot(fn, main = sprintf("Iteration %i", i))
points(t(e$dec))
Sys.sleep(0.1)
}
# Multi-Objective Example
# ===
set.seed(1) # reproducibility
fn = smoof::makeZDT2Function(dimension = 4L)
res = omniopt(fn, 100, 1000, p.cross = 0.9, verbose = FALSE)
plot(t(res$obj))
pairs(t(res$dec))
The package will be available at CRAN when it is done. If you are interested in trying out and playing around with the current github development version use the devtools package and type the following command in R:
devtools::install_github("jakobbossek/omnioptr")
Please address questions and missing features about the omnioptr as well as annoying bug reports in the issue tracker. Pay attention to explain your problem as good as possible. At its best you provide an example, so I can reproduce your problem quickly. Please avoid sending e-mails.