inst/doc/convergence.R

## ----setup, include = FALSE, echo = FALSE, message = FALSE--------------------
knitr::opts_chunk$set(echo = TRUE, collapse = TRUE, comment = "#>")
library(mize)

## ----Test data----------------------------------------------------------------
rb_fg <- list(
   fn = function(x) { 100 * (x[2] - x[1] * x[1]) ^ 2 + (1 - x[1]) ^ 2  },
   gr = function(x) { c( -400 * x[1] * (x[2] - x[1] * x[1]) - 2 * (1 - x[1]),
                          200 *        (x[2] - x[1] * x[1])) })
rb0 <- c(-1.2, 1)

## ----termination by max_iter--------------------------------------------------
res <- mize(rb0, rb_fg, max_iter = 10)
res$terminate
res$f
res$par

## ----Absolute tolerance-------------------------------------------------------
res <- mize(rb0, rb_fg, max_iter = 100, abs_tol = 1e-8)
res$terminate
res$f
res$par

## ----Relative tolerance-------------------------------------------------------
res <- mize(rb0, rb_fg, max_iter = 100, rel_tol = 1e-3)
# hit relative tolerance
res$terminate

# but stopped too early!
res$iter
res$f
res$par

## ----Gradient 2-norm tolerance------------------------------------------------
res <- mize(rb0, rb_fg, abs_tol = 0, grad_tol = 1e-3)

res$terminate
res$f
res$par

## ----Gradient infinity-norm tolerance-----------------------------------------
res <- mize(rb0, rb_fg, rel_tol = NULL, abs_tol = NULL, ginf_tol = 1e-3)

res$terminate
res$f
res$par

## ----Step tolerance-----------------------------------------------------------
# set abs_tol to zero to stop it from triggering instead of step_tol
res <- mize(rb0, rb_fg, abs_tol = 0, step_tol = .Machine$double.eps)
res$terminate
res$iter
res$f
res$par

## ----Maximum number of function evaluations-----------------------------------
res <- mize(rb0, rb_fg, max_fn = 10)

res$terminate
res$nf
res$f
res$par

## ----Maximum number of gradient evaluations-----------------------------------
res <- mize(rb0, rb_fg, max_gr = 10)

res$terminate
res$ng
res$f
res$par

## ----Maximum number of function and gradient evaluations----------------------
res <- mize(rb0, rb_fg, max_fg = 10)

res$terminate
res$nf
res$ng
res$f
res$par

## ----Checking convergence less often------------------------------------------
res <- mize(rb0, rb_fg, grad_tol = 1e-3, check_conv_every = 5, verbose = TRUE)

Try the mize package in your browser

Any scripts or data that you put into this service are public.

mize documentation built on Aug. 30, 2020, 9:06 a.m.