| Type: | Package |
| Title: | R Interface to the 'Uno' Nonlinear Optimization Solver |
| Version: | 2.9.2-1 |
| Date: | 2026-10-28 |
| Description: | Bindings to 'Uno' (Unifying Nonlinear Optimization), a C++ solver for smooth nonlinearly constrained optimization. 'Uno' unifies Lagrange-Newton methods, including sequential quadratic programming and interior-point methods, by decomposing them into interacting building blocks (constraint-relaxation, inequality-handling, Hessian, and globalization strategies) that can be freely combined, either through options or through presets that reproduce established solvers such as 'filterSQP' and 'IPOPT'. The framework is described in Vanaret and Leyffer (2026) <doi:10.1007/s12532-026-00310-9>. |
| License: | MIT + file LICENSE |
| Copyright: | file inst/COPYRIGHTS |
| URL: | https://bnaras.github.io/Uno/, https://github.com/bnaras/Uno |
| BugReports: | https://github.com/bnaras/Uno/issues |
| SystemRequirements: | CMake (>= 3.16), C++17, GNU make |
| Imports: | rmumps (≥ 5.2.1-43) |
| LinkingTo: | cpp11, rmumps |
| Suggests: | cpp11, tinytest, knitr, rmarkdown |
| VignetteBuilder: | knitr |
| NeedsCompilation: | yes |
| Encoding: | UTF-8 |
| Config/roxygen2/version: | 8.1.0 |
| Packaged: | 2026-10-30 14:21:26 UTC; naras |
| Author: | Balasubramanian Narasimhan [aut, cre, cph] (R package: R/, src/uno_binding.cpp, src/dmumps_shim.c, build scripts), Charlie Vanaret [aut, cph] (Bundled Uno C++ solver (inst/uno, MIT); designed and implemented Uno), Alexis Montoison [ctb, cph] (Uno C API (inst/uno/interfaces/C) and Fortran interface, MA86 interface), Joris Gillis [ctb, cph] (Uno dynamic loader (inst/uno/uno/tools/DynamicLoader.*)), David Kiessling [ctb, cph] (Uno funnel globalization method (inst/uno/uno/ingredients/glob/switching/funnel_methods)), Manuel Schaich [ctb, cph] (Uno MA27 interface (inst/uno/uno/ingredients/subproblem_solvers/MA27); compiled only when HSL is found), HiGHS development team [cph] (Bundled HiGHS LP/QP/MIP solver (MIT); see inst/COPYRIGHTS) |
| Maintainer: | Balasubramanian Narasimhan <naras@stanford.edu> |
| Repository: | CRAN |
| Date/Publication: | 2026-10-30 20:20:02 UTC |
Uno: R interface to the Uno nonlinear optimization solver
Description
R bindings to Uno (Unifying Nonlinear
Optimization), a C++ solver for nonlinearly constrained optimization, via
Uno's C API. The HiGHS QP/LP subproblem solver is built from source for the
SQP presets; the MUMPS linear solver used by the interior-point preset is
reached at run time through the rmumps package (bound when the
namespace loads; see uno_mumps_version). Intended as a
nonlinear (DNLP) backend for CVXR; this is the R analog of the
unopy Python package.
Author(s)
Maintainer: Balasubramanian Narasimhan naras@stanford.edu
Authors:
Balasubramanian Narasimhan naras@stanford.edu
Charlie Vanaret (Designed and implemented Uno) [copyright holder]
Sven Leyffer (Co-developed the Uno framework) [copyright holder]
Other contributors:
HiGHS development team (Bundled HiGHS LP/QP/MIP solver (MIT); see inst/COPYRIGHTS) [copyright holder]
See Also
uno_solve to solve a nonlinear program,
uno_version for the linked Uno version,
uno_options and uno_status_labels for what the
linked Uno accepts and returns.
MUMPS version reached through rmumps
Description
The version of the MUMPS linear solver that Uno's interior-point preset uses, as provided by the installed rmumps package, or 'NA' for a build made without MUMPS ('R_UNO_NO_MUMPS=1').
Usage
uno_mumps_version()
Value
A character scalar such as '"5.9.1"', or 'NA_character_'.
Examples
uno_mumps_version()
Uno solver options
Description
Every option the linked Uno accepts in the 'options' argument of [uno_solve()], with its declared type ('"integer"', '"double"', '"bool"' or ‘"string"'), as read from Uno’s C API option iterator.
Usage
uno_options()
Value
A data frame with the columns 'name' and 'type', one row per option, sorted by name.
Examples
opts <- uno_options()
head(opts)
opts[opts$name == "preset", ]
Solve a nonlinear program with Uno
Description
Solve a nonlinear program with Uno
Usage
uno_solve(
n,
lb,
ub,
sense,
obj,
grad,
m,
cl,
cu,
cons,
jac_rows,
jac_cols,
jac,
hess_rows,
hess_cols,
hess,
x0,
preset,
base_indexing,
verbose,
options = list(),
lagrangian_sign = c("negative", "positive"),
dual0 = NULL,
iter_callback = NULL,
log_callback = NULL,
name = NULL
)
Arguments
n |
number of variables. |
lb, ub |
variable lower/upper bounds (length 'n'; use '-Inf'/'Inf'). |
sense |
'"minimize"' or '"maximize"'. |
obj, grad |
objective 'function(x)' and its gradient 'function(x)'. |
m |
number of constraints (0 for unconstrained). |
cl, cu |
constraint lower/upper bounds (length 'm'). |
cons |
constraint 'function(x)' returning a length-'m' vector. |
jac_rows, jac_cols |
COO row/column indices of the Jacobian nonzeros. |
jac |
Jacobian 'function(x)' returning the nonzero values. |
hess_rows, hess_cols |
COO indices of the lower-triangular Hessian. |
hess |
Lagrangian Hessian 'function(x, sigma, lambda)' returning the lower-triangular nonzero values, or 'NULL' (Uno then uses an L-BFGS approximation, which the HiGHS subproblem solver cannot use). |
x0 |
initial primal iterate (length 'n'). |
preset |
Uno preset, e.g. '"filtersqp"' (SQP) or '"ipopt"' (interior point, using MUMPS as the linear solver). |
base_indexing |
0 for C-style or 1 for Fortran-style COO indices. |
verbose |
if ‘FALSE', suppress Uno’s solution printout. |
options |
a named list of Uno solver options applied AFTER the preset (so they override it), e.g. 'list(max_iterations = 200L, primal_tolerance = 1e-8, linear_solver = "MUMPS")'; [uno_options()] lists them. Each value is coerced to the option's declared Uno type; an unknown option name or an unacceptable value raises an error. |
lagrangian_sign |
the Lagrangian multiplier sign convention the 'hess'
callback uses: '"positive"' for |
dual0 |
optional warm-start dual iterate, or ‘NULL' (Uno’s default). |
iter_callback |
optional 'function(info)' called at each acceptable iterate; return 'TRUE' to terminate the solve early. 'info' is a named list with 'primals', 'lower_bound_dual', 'upper_bound_dual', 'constraint_dual', 'objective_multiplier', and the 'primal_feasibility'/'stationarity'/ 'complementarity' residuals. Errors in the callback are caught and treated as "do not terminate". 'NULL' disables it. |
log_callback |
optional ‘function(text)' that receives Uno’s output stream in chunks (a sink for the solver log); ‘NULL' sends Uno’s output to the R console. Independent of 'verbose' (which controls how much Uno prints). |
name |
optional model name (a string) shown in Uno's log; 'NULL' for Uno's default. |
Value
a named list. The 'optimization_status' and 'solution_status' are **named integers** of the form ‘c(SUCCESS = 0L)': the value is Uno’s enum code and the name is its canonical label, so you can key a status map by 'names(status)' and still read the code (e.g. 'status[[1L]]'). The labels are those of Uno's C API (see [uno_status_labels()]). The list also holds the objective, primal and dual solutions ('constraint_dual', 'lower_bound_dual', 'upper_bound_dual'), KKT residuals, and per-callback evaluation counters.
Interrupting a solve
Uno installs its own 'SIGINT' handler for the duration of a solve: a Ctrl-C stops the solve cleanly at the next iteration with ‘optimization_status' 'USER_INTERRUPTION', and R’s handler is restored afterwards. Uno resets 'SIGINT' to the default action after the first Ctrl-C, so a second Ctrl-C before the solve returns terminates the R process. An interrupt that arrives inside a MUMPS factorization is caught by rmumps (version 5.2.1-44 or later) and reported the same way.
Uno status labels
Description
The optimization and solution statuses of the linked Uno, as named integer vectors: the names are the labels [uno_solve()] returns in ‘optimization_status' and 'solution_status', the values are Uno’s enum codes. Generated from Uno's C API header at build time, so they follow the bundled Uno exactly.
Usage
uno_status_labels()
Value
A list with two named integer vectors, 'optimization' and 'solution'.
Examples
uno_status_labels()
Linked Uno version
Description
Returns the version string of the Uno C++ library this package is built against.
Value
A character scalar, e.g. "2.9.2".
Examples
uno_version()