| Historize | R Documentation |
Provides storage for function calls.
Historize(fun, len = 0, ...)
fun |
Function of one or several variables. |
len |
If > 0, input values will be stored, too. |
... |
Additional parameters to be handed to the function. |
Historize() adds storage to the function. If len=0 then only
function values will be stored in a vector, if len>0 then
variables will be stored in a vector, and function values will be stored
in a matrix, one line for every function call.
If Fn = Historize(...) is the 'historized' function, then the
storage can be retrieved with Fn(), and can be cleared with
Fn(NULL).
Filling the storage will take extra time and can slow down the
function calls. Especially also storing the variables used in the
call (with len>0) will make it considerably slower.
Functions can have multivariate output; the user is asked to take care of handling the output vector or matrix correctly. The function may even require additional parameters.
Returns a list, $input the input variables as matrix, $H2 the function values as vector, $nvars the number of input variables of the function, and $ncalls the number or recorded function calls.
Can also be applied to functions that output a vector (same length for every call).
Hans W. Borchers
trace
f <- function(x) sum(x^2)
F <- Historize(f, len = 1)
c( F(c(1,1)), F(c(1,2)), F(c(2,1)), F(c(2,2)) )
#> [1] 2 5 5 8
F()
#> $input
#> [,1] [,2]
#> [1,] 1 1
#> [2,] 1 2
#> [3,] 2 1
#> [4,] 2 2
#>
#> $values
#> [1] 2 5 5 8
#>
#> $nvars
#> [1] 2
#>
#> $ncalls
#> [1] 4
F(NULL) # reset memory
## Rastrigin under Differential Evolution
Fn <- Historize(fnRastrigin)
dm <- 10
lb <- rep(-5.2, dm); ub <- -lb
sol <- simpleDE(Fn, lower = lb, upper = ub)
fvalues <- Fn()$values
fvals <- cummin(fvalues)
## Not run:
plot(fvalues, type = 'p', col = 7, pch = '.', cex = 2,
main = "Simple DE optimization", xlab = '', ylab = '')
lines(fvals, col = 2, lwd = 2)
legend(length(fvalues), max(fvalues),
c("Intermediate values", "cummulated min"),
xjust = 1, col = c(7, 2), lwd = 2)
grid()
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.