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. |
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:
VTR
itermax
is reached or the best parameter vector bestmem
has found a value
FUN(bestmem) <= VTR
. Defaults to 10e-6
.itermax
200
.NP
50
.F
0.8
.CR
0.5
.strategy
1
2
3
4
5
6
7
8
9
10
Experiments suggest that binomial likes to have a slightly larger CR
than exponential. By default strategy
is 7
.
refresh
10
iterations.
A list of class DEoptim
with the attributes optim
and
member
containing the following elements:
|
The best set of parameters found. |
|
The value of FUN corresponding to bestmem . |
|
Number of function evaluations. |
|
Number of procedure iterations. |
|
The lower boundary. |
|
The upper boundary. |
|
The best value at each iteration. |
|
The best member at each iteration. |
DEoptim
is a R-vectorized variant of the Differential Evolution algorithm
initialy developed by R. Storn storn@icsi.berkeley.edu,
International Computer Science Institute (ICSI), 1947 Center Street, Suite 600,
Berkeley, CA 94704. http://http.icsi.berkeley.edu/~storn.
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.
If you choose binomial crossover like, rand/1/binomial, CR
is usually
higher than in the exponential crossover variant (in this example
rand/1/exponential). Still, F
and CR
are both generally in
the range [0.5,1] for most problems we have encountered. Keep in mind that
different problems usually require different settings for NP
, F
and CR
.
If you still get misconvergence you might want to try a different method.
We mostly use rand/1/... or best/2/... (for the latter F=0.5
is the
standard choice). The crossover method is not so important although Ken Price
claims that binomial is never worse than exponential. In case of misconvergence
also check your choice of objective function. There might be a better one to
describe your problem. Any knowledge that you have about the problem should be
worked into the objective function. A good objective function can make all
the difference.
The R-adaptation DEoptim
has properties which differ from the
original DE version:
DEoptim
executes fairly fast.D. Ardia <david.ardia@unifr.ch> for the R-port; R. Storn <storn@icsi.berkeley.edu> for the Differential Evolution algorithm.
http://www.icsi.berkeley.edu/~storn
http://www2.lut.fi/~jlampine/debiblio.htm
Nocedal, J. and Wright, S. J. (1999) Numerical Optimization. Springer.
Price, K., Storn, R. and J. Lampingen (2005) Differential Evolution - A Practical Approach to Global Optimization over Continuous Spaces. Springer.
Storn, R. and Price, K. (1995) Differential Evolution - a Simple and Efficient Adaptive Scheme for Global Optimization over Continuous Spaces. Technical Report TR-95-012.
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))