A straightforward implementation of simulated annealing with box constraints.
sannbox(par, fn, control = list(),...)
Arguments
par: Initial values for the parameters to be optimized over.
fn: 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.
control: A named list of control parameters. See Details .
...: ignored.
Returns
sannbox returns a list with components:
counts: two-element integer vector. The first number gives the number of calls made to fn. The second number is provided for compatibility with optim and will always be NA.
convergence: provided for compatibility with optim; will always be 0.
final.params: last tried value of par.
final.value: value of fn corresponding to final.params.
par: best tried value of par.
value: value of fn corresponding to par.
Details
The control argument is a list that can supply any of the following components:
trace: Non-negative integer. If positive, tracing information on the progress of the optimization is produced. Higher values may produce more tracing information.
fnscale: An overall scaling to be applied to the value of fn during optimization. If negative, turns the problem into a maximization problem. Optimization is performed on fn(par)/fnscale.
parscale: A vector of scaling values for the parameters. Optimization is performed on par/parscale and these should be comparable in the sense that a unit change in any element produces about a unit change in the scaled value.
maxit: The total number of function evaluations: there is no other stopping criterion. Defaults to 10000.
temp: starting temperature for the cooling schedule. Defaults to 1.
tmax: number of function evaluations at each temperature. Defaults to 10.
candidate.dist: function to randomly select a new candidate parameter vector. This should be a function with three arguments, the first being the current parameter vector, the second the temperature, and the third the parameter scaling. By default, candidate.dist is
sched: cooling schedule. A function of a three arguments giving the temperature as a function of iteration number and the control parameters temp and tmax. By default, sched is
```
function(k,temp,tmax) temp/log(((k-1)%/%tmax)*tmax+exp(1)).
```
Alternatively, one can supply a numeric vector of temperatures. This must be of length at least `maxit`.
lower,upper: optional numeric vectors. These describe the lower and upper box constraints, respectively. Each can be specified either as a single scalar (common to all parameters) or as a vector of the same length as par. By default, lower=-Inf and upper=Inf, i.e., there are no constraints.