Robust nonlinear optimization for R
When optim() fails on your ill-conditioned model, arcopt is designed to succeed. It uses Adaptive Regularization with Cubics (ARC) to handle indefinite Hessians and escape saddle points automatically.
Installation
# Install from GitHub pak::pak("marcus-waldman/arcopt") # Or with devtools devtools::install_github("marcus-waldman/arcopt")
Quick Start
library(arcopt) # Rosenbrock function - a classic difficult optimization problem result <- arcopt( x0 = c(-1.2, 1), fn = function(x) (1 - x[1])^2 + 100 * (x[2] - x[1]^2)^2, gr = function(x) c( -2 * (1 - x[1]) - 400 * x[1] * (x[2] - x[1]^2), 200 * (x[2] - x[1]^2) ), hess = function(x) matrix(c( 1200 * x[1]^2 - 400 * x[2] + 2, -400 * x[1], -400 * x[1], 200 ), 2, 2) ) result$par #> [1] 1 1
Two Modes: Exact Hessian vs Quasi-Newton
arcopt offers two optimization strategies:
Mode 1: Exact Hessian (Default)
Best when you can compute the Hessian analytically or via automatic differentiation.
# Provide fn, gr, and hess result <- arcopt(x0, fn, gr, hess)
Mode 2: Quasi-Newton (No Hessian Required)
Best when computing the Hessian is expensive or unavailable. Uses BFGS/SR1 approximations. arcopt seeds the initial approximation