| DEoptim {DEoptim} | R Documentation |
Performs evolutionary optimization via the Differential Evolution algorithm.
DEoptim(FUN, lower, upper, control = list(), ...)
FUN |
A function to be minimized, with first argument the vector
of parameters over which minimization is to take place. It should
return a scalar result. NA and NaN values are not allowed. |
lower, upper |
Bounds on the variables. |
control |
A list of control parameters. See *Details*. |
... |
Further arguments to be passed to FUN. |
DEoptim performs minimization of FUN.
The control argument is a list that can supply any of
the following components:
VTRitermax
is reached or the best parameter vector bestmem has found a value
FUN(bestmem) <= VTR. Default to -Inf.itermax200.NP50.F0.8.CR0.5.initialNULL.strategy12345
By default strategy is 2. See references below for details.
refresh10 iterations.digits
A list of lists of the class DEoptim.
list optim contains the followings:
bestmem: the best set of parameters found.
bestval: the value of FUN corresponding to bestmem.
nfeval: number of function evaluations.
iter: number of procedure iterations.
list member contains the followings:
lower: the lower boundary.
upper: the upper boundary.
bestvalit: the best value of FUN at each iteration.
bestmemit: the best member at each iteration.
pop: the population generated at the last iteration.
DEoptim is a R-vectorized variant of the Differential Evolution algorithm
initialy developed by Rainer Storn storn@icsi.berkeley.edu,
International Computer Science Institute (ICSI), 1947 Center Street, Suite 600,
Berkeley, CA 94704.
If you experience misconvergence in the optimization process you usually
have to increase the value for NP, but often you only have to adjust
F to be a little lower or higher than 0.8. If you increase
NP and simultaneously lower F a little, convergence is more
likely to occur but generally takes longer, i.e. DEoptim is getting
more robust (there is always a convergence speed/robustness tradeoff).
DEoptim is much more sensitive to the choice of F than it is to
the choice of CR. CR is more like a fine tuning element. High
values of CR like CR=1 give faster convergence if convergence
occurs. Sometimes, however, you have to go down as much as CR=0 to
make DEoptim robust enough for a particular problem.
The R-adaptation DEoptim has properties which differ from the
original DE version:
DEoptim executes fairly fast.
To perform a maximization (instead of minimization) of a given
function, simply define a new function which is the opposite of the
function to maximize and apply DEoptim to it.
To integrate additional constraints on the parameters x of
FUN(x), for instance x[1] + x[2]^2 < 2, integrate the
constraint within the function to optimize, for instance:
FUN <- function(x){
if (x[1] + x[2]^2 < 2){
r <- Inf
else{
...
}
return(r)
}
Note that DEoptim stops if any NA or NaN value is
obtained. You have to redefine your function to handle these values
(for instance, set NA to Inf in your objective function).
David Ardia david.ardia@unifr.ch for the R-port; Rainer Storn storn@icsi.berkeley.edu for the Differential Evolution algorithm.
Differential Evolution homepage :
http://www.icsi.berkeley.edu/~storn/code.html
Some useful books:
Price, K. V., Storn, R. M. and Lampinen J. A. (2005) Differential Evolution - A Practical Approach to Global Optimization. Springer. ISBN 3540209506.
Nocedal, J. and Wright, S. J. (1999) Numerical Optimization. Springer. ISBN 0387987932.
DEoptim-methods for methods on DEoptim object;
optim or constrOptim for constrained optimization.
## Rosenbrock Banana function
Rosenbrock <- function(x){
x1 <- x[1]
x2 <- x[2]
100 * (x2 - x1 * x1)^2 + (1 - x1)^2
}
lower <- c(-10,-10)
upper <- -lower
DEoptim(Rosenbrock, lower, upper)
DEoptim(Rosenbrock, lower, upper,
control = list(NP = 100, refresh = 1))
DEoptim(Rosenbrock, lower, upper,
control = list(NP = 50, itermax = 200, F = 1.5,
CR = 0.2, refresh = 1))
DEoptim(Rosenbrock, lower, upper,
control = list(NP = 80, itermax = 400, F = 1.2,
CR = 0.7, refresh = 1))
## 'Wild' function, global minimum at about -15.81515
Wild <- function(x)
10 * sin(0.3*x) * sin(1.3*x^2) +
0.00001 * x^4 + 0.2 * x + 80
plot(Wild, -50, 50, n = 1000,
main = "DEoptim minimizing 'Wild function'")
DEoptim(Wild, lower = -50, upper = 50,
control = list(NP = 50, refresh = 1))
DEoptim(Wild, lower = -50, upper = 50,
control = list(NP = 50, refresh = 1, digits = 8))