tests/poo.R

 objfun <- function(x) {
     ##### Rosenbrock's function #####
     stopifnot(is.numeric(x))
     stopifnot(length(x) == 2)
     f <- expression(100 * (x2 - x1^2)^2 + (1 - x1)^2)
     g1 <- D(f, "x1")
     g2 <- D(f, "x2")
     h11 <- D(g1, "x1")
     h12 <- D(g1, "x2")
     h22 <- D(g2, "x2")
     x1 <- x[1]
     x2 <- x[2]
     f <- eval(f)
     g <- c(eval(g1), eval(g2))
     B <- rbind(c(eval(h11), eval(h12)), c(eval(h12), eval(h22)))
     list(value = f, gradient = g, hessian = B)
 }

 library(trust)

 parinit <- c(3, 1)

 out <- trust(objfun, parinit, 1, 1e5, blather = TRUE)
 out$converged
 length(out$r)

 parscale <- c(5, 1)
 shift <- 4
 theta <- parscale * (parinit + shift)

 pobjfun <- function(x) {
     out <- objfun(x / parscale - shift)
     out$gradient <- out$gradient / parscale
     out$hessian <- out$hessian / outer(parscale, parscale)
     return(out)
 }

 pout <- trust(pobjfun, theta, 1, 1e5, blather = TRUE)
 pout$converged
 length(pout$r)
 all.equal(out$argument, pout$argument / parscale - shift)

 qout <- trust(objfun, parinit, 1, 1e5, parscale = parscale, blather = TRUE)
 qout$converged
 length(qout$r)

 all.equal(pout$valpath, qout$valpath)
 transpath <- pout$argpath
 transpath <- sweep(transpath, 2, parscale, "/")
 transpath <- sweep(transpath, 2, shift)
 all.equal(transpath, qout$argpath)

Try the trust package in your browser

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

trust documentation built on Jan. 10, 2020, 9:07 a.m.