The {trackopt}
package tracks parameter values,
gradients, and Hessians at each iteration of numerical optimizers in
R
. This can be useful for analyzing optimization progress,
diagnosing issues, and studying convergence behavior.
You can install the released package version from CRAN with:
install.packages("trackopt")
The following is the nlm
minimization track of the Himmelblau’s
function:
library("trackopt")
<- function(x) (x[1]^2 + x[2] - 11)^2 + (x[1] + x[2]^2 - 7)^2
himmelblau <- nlm_track(f = himmelblau, p = c(0, 0))
track print(track)
#> # A tibble: 17 × 7
#> iteration value step parameter gradient hessian seconds
#> * <dbl> <dbl> <dbl> <list> <list> <list> <dbl>
#> 1 0 170 0 <dbl [2]> <dbl [1]> <dbl [1]> 0
#> 2 1 47.4 -1.23e+2 <dbl [2]> <dbl [2]> <dbl [2 × 2]> 0.0247
#> 3 2 14.0 -3.34e+1 <dbl [2]> <dbl [2]> <dbl [2 × 2]> 0.00119
#> 4 3 4.91 -9.08e+0 <dbl [2]> <dbl [2]> <dbl [2 × 2]> 0.00122
#> 5 4 2.26 -2.65e+0 <dbl [2]> <dbl [2]> <dbl [2 × 2]> 0.00127
#> 6 5 0.951 -1.31e+0 <dbl [2]> <dbl [2]> <dbl [2 × 2]> 0.00110
#> 7 6 0.272 -6.79e-1 <dbl [2]> <dbl [2]> <dbl [2 × 2]> 0.00102
#> 8 7 0.0650 -2.07e-1 <dbl [2]> <dbl [2]> <dbl [2 × 2]> 0.000993
#> 9 8 0.0168 -4.82e-2 <dbl [2]> <dbl [2]> <dbl [2 × 2]> 0.000989
#> 10 9 0.00400 -1.28e-2 <dbl [2]> <dbl [2]> <dbl [2 × 2]> 0.000997
#> 11 10 0.000948 -3.06e-3 <dbl [2]> <dbl [2]> <dbl [2 × 2]> 0.000997
#> 12 11 0.000221 -7.28e-4 <dbl [2]> <dbl [2]> <dbl [2 × 2]> 0.00100
#> 13 12 0.0000512 -1.69e-4 <dbl [2]> <dbl [2]> <dbl [2 × 2]> 0.00107
#> 14 13 0.0000118 -3.94e-5 <dbl [2]> <dbl [2]> <dbl [2 × 2]> 0.00100
#> 15 14 0.00000275 -9.05e-6 <dbl [2]> <dbl [2]> <dbl [2 × 2]> 0.00101
#> 16 15 0.000000628 -2.13e-6 <dbl [2]> <dbl [2]> <dbl [2 × 2]> 0.00166
#> 17 16 0.000000152 -4.76e-7 <dbl [2]> <dbl [2]> <dbl [2 × 2]> 0.00102
summary(track)
#> Iterations: 16
#> Function improvement: 170 -> 1.521e-07
#> Computation time: 0.04125 seconds
#> Initial parameter: 0, 0
#> Final parameter: 3, 2
::autoplot(track) ggplot2
The following is the optim
maximization track of the Beta-PDF:
optim_track(
f = dbeta, p = 0, lower = 0, upper = 1, shape1 = 4, shape2 = 2, method = "Brent", minimize = FALSE
|> ggplot2::autoplot() )
If you have any questions, found a bug, need a feature, just file an issue on GitHub.