Restart an Optimisation Algorithm
The function provides a simple wrapper for the optimisation algorithms in the package.
restartOpt(fun, n, OF, algo, ..., method = c("loop", "multicore", "snow"), mc.control = list(), cl = NULL, best.only = FALSE)
fun |
the optimisation function: |
n |
the number of restarts |
OF |
the objective function |
algo |
the list |
... |
additional data that is passed to the particular optimisation function |
method |
can be |
mc.control |
a list containing settings that will be passed to |
cl |
default is |
best.only |
if |
The argument method
determines how fun
is
evaluated. Default is loop
. If method
is "multicore",
function mclapply
from package parallel is used. Further
settings for mclapply
can be passed through the list
mc.control
. If multicore
is chosen but the functionality
is not available, then method
will be set to loop
and a
warning is issued. If method == "snow"
, function
clusterApply
from package parallel is used. In this case,
the argument cl
must either be a cluster object (see the
documentation of clusterApply
) or an integer. If an integer, a
cluster will be set up via makeCluster(c(rep("localhost", cl)),
type = "SOCK")
, and stopCluster
is called when the function is
exited. If snow
is chosen but parallel is not available
or cl
is not specified, then method
will be set to
loop
and a warning is issued. In case that cl
is an
cluster object, stopCluster
will not be called automatically.
If best.only
is FALSE
(the default), the function
returns a list of n
lists. Each of the n
lists stores
the output of one of the runs.
If best.only
is TRUE
, only the best restart is
reported. The returned list has the structure specific to the used
method.
Enrico Schumann
Gilli, M., Maringer, D. and Schumann, E. (2019) Numerical Methods and Optimization in Finance. 2nd edition. Elsevier. https://www.elsevier.com/books/numerical-methods-and-optimization-in-finance/gilli/978-0-12-815065-8
Schumann, E. (2019) Financial Optimisation with R (NMOF Manual). http://enricoschumann.net/NMOF.htm#NMOFmanual
## see example(DEopt) algo <- list(nP = 50L, F = 0.5, CR = 0.9, min = c(-10, -10), max = c( 10, 10), printDetail = FALSE, printBar = FALSE) ## choose a larger 'n' when you can afford it algo$nG <- 100L res100 <- restartOpt(DEopt, n = 5L, OF = tfTrefethen, algo = algo) res100F <- sapply(res100, `[[`, "OFvalue") algo$nG <- 200L res200 <- restartOpt(DEopt, n = 5L, OF = tfTrefethen, algo = algo) res200F <- sapply(res200, `[[`, "OFvalue") xx <- pretty(c(res100F, res200F, -3.31)) plot(ecdf(res100F), main = "optimum is -3.306", xlim = c(xx[1L], tail(xx, 1L))) abline(v = -3.3069, col = "red") ## optimum lines(ecdf(res200F), col = "blue") legend(x = "right", box.lty = 0, , lty = 1, legend = c("optimum", "100 generations", "200 generations"), pch = c(NA, 19, 19), col = c("red", "black", "blue")) ## a 'best-of-N' strategy: given a sample x of objective ## function values, compute the probability that, after N draws, ## we have at least one realisation not worse than X x <- c(0.1,.3,.5,.5,.6) bestofN <- function(x, N) { nx <- length(x) function(X) 1 - (sum(x > X)/nx)^N } bestof2 <- bestofN(x, 2) bestof5 <- bestofN(x, 5) bestof2(0.15) bestof5(0.15) ## Not run: ## with R >= 2.13.0 and the compiler package algo$nG <- 100L system.time(res100 <- restartOpt(DEopt, n = 10L, OF = tfTrefethen, algo = algo)) require("compiler") enableJIT(3) system.time(res100 <- restartOpt(DEopt, n = 10L, OF = tfTrefethen, algo = algo)) ## End(Not run)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.