R/268_reductions_solvers_defines.R

Defines functions .nlp_solver_available

#####
## DO NOT EDIT THIS FILE!! EDIT THE SOURCE INSTEAD: rsrc_tree/reductions/solvers/defines.R
#####

## CVXPY SOURCE: reductions/solvers/defines.py
## CVXPY 1.9 parity notes:
## This file defines the NLP solver map and variants from defines.py:86-102.
## Conic/QP solver availability is represented by CVXR's R solver classes and
## solving-chain selection rather than Python's global maps; Python-only solver
## entries without R interfaces are intentionally absent.


# -- NLP solver registry ------------------------------------------
## CVXPY SOURCE: defines.py:86-93 (SOLVER_MAP_NLP, NLP_SOLVERS).
## Lazy-init via delayedAssign: solver objects constructed on first access.
## Preference order matches CVXPY defines.py: IPOPT, KNITRO, UNO, COPT.
## IPOPT and UNO have runnable R backends (`ipopt` and `Uno`); KNITRO and COPT
## are registered-but-unavailable stubs (see their *_nlpif.R files).
SOLVER_MAP_NLP <- new.env(hash = TRUE, parent = emptyenv())
delayedAssign(IPOPT_SOLVER,  IPOPT_NLP_Solver(),  assign.env = SOLVER_MAP_NLP)
delayedAssign(KNITRO_SOLVER, KNITRO_NLP_Solver(), assign.env = SOLVER_MAP_NLP)
delayedAssign(UNO_SOLVER,    UNO_NLP_Solver(),    assign.env = SOLVER_MAP_NLP)
delayedAssign(COPT_SOLVER,   COPT_NLP_Solver(),   assign.env = SOLVER_MAP_NLP)

NLP_SOLVER_PREFERENCE <- c(IPOPT_SOLVER, KNITRO_SOLVER, UNO_SOLVER, COPT_SOLVER)

# -- NLP solver variants ------------------------------------------
## CVXPY SOURCE: defines.py:95-102 (NLP_SOLVER_VARIANTS).
## Maps a lowercase variant name -> (base solver name, extra solver kwargs).
## The kwargs are merged into the user's solver options before the solve.
NLP_SOLVER_VARIANTS <- list(
  knitro_ipm = list(base = KNITRO_SOLVER, kwargs = list(algorithm = 1L)),
  knitro_sqp = list(base = KNITRO_SOLVER, kwargs = list(algorithm = 4L)),
  knitro_alm = list(base = KNITRO_SOLVER, kwargs = list(algorithm = 6L)),
  uno_ipm    = list(base = UNO_SOLVER,
                    kwargs = list(preset = "ipopt", linear_solver = "MUMPS")),
  uno_sqp    = list(base = UNO_SOLVER, kwargs = list(preset = "filtersqp"))
)

# -- NLP solver availability --------------------------------------
## Mirrors `.solver_package_available` (solving_chain.R) for the NLP path.
## Respects the user's solver-exclusion set.
.NLP_SOLVER_PACKAGES <- list(
  UNO    = "Uno",
  IPOPT  = "ipopt",
  KNITRO = NA_character_,
  COPT   = NA_character_
)

.nlp_solver_available <- function(solver_name) {
  if (solver_name %in% .cvxr_env$excluded_solvers) return(FALSE)
  pkg <- .NLP_SOLVER_PACKAGES[[solver_name]]
  if (is.null(pkg) || is.na(pkg)) return(FALSE)
  requireNamespace(pkg, quietly = TRUE)
}

Try the CVXR package in your browser

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

CVXR documentation built on Aug. 24, 2026, 9:10 a.m.