All options are set via SolverOptions. Defaults match Ipopt where applicable.
#![allow(unused)]
fn main() {
let opts = SolverOptions {
tol: 1e-8,
max_iter: 500,
..SolverOptions::default()
};
}
Option Default Description
tol1e-8KKT optimality tolerance (dual infeasibility + complementarity)
constr_viol_tol1e-4Constraint violation tolerance
dual_inf_tol1.0Dual infeasibility tolerance (scaled)
compl_inf_tol1e-4Complementarity tolerance
max_iter3000Maximum iterations
max_wall_time0.0Wall-clock limit in seconds (0 = unlimited)
stall_iter_limit30Max iters without 1% improvement before stall detection (0 = off)
early_stall_timeout120.0Max seconds for first 3 iterations (0 = off)
Option Default Description
mu_init0.1Initial barrier parameter
mu_min1e-11Minimum barrier parameter floor
mu_strategy_adaptivetruetrue = oracle-based (Free mode); false = monotone
kappa10.0Barrier decrease divisor: μ_new = avg_compl / kappa
mu_linear_decrease_factor0.2Monotone mode: μ_new = factor * μ
mu_superlinear_decrease_power1.5Monotone mode superlinear exponent
barrier_tol_factor10.0Subproblem tol = barrier_tol_factor * μ
mu_allow_increasetrueAllow μ to increase after restoration/stall recovery
adaptive_mu_monotone_init_factor0.8Initial μ factor when entering Fixed (monotone) mode
mu_oracle_quality_functionfalseUse quality function for mu selection
Option Default Description
sparse_threshold110Switch to sparse multifrontal solver when n+m ≥ threshold
linear_solverDirectDirect (MUMPS/BK), Iterative (MINRES), or Hybrid
Opt-in alternative to inertia-based regularization (IBR). When the linear solver reports
wrong inertia, run the curvature test of Chiang & Zavala (2016, COAP 64:327-354, eq. 28)
on the computed direction; accept if the curvature condition holds, otherwise fall back
to the standard δ-escalation ladder. Mirrors Ipopt 3.14's IpPDFullSpaceSolver dispatch.
Option Default Description
neg_curv_test_tol0.0Curvature acceptance tolerance α_d. 0.0 disables IFRd (pure IBR). Set to 1e-12 to enable.
neg_curv_test_regtrueInclude δ_w·‖(dx,ds)‖² regularization in the curvature sum (matches Ipopt)
Empirically (CUTEst sweep, 727 problems): default vs. tol=1e-12 both solve 541 to
Optimal, but the mix differs — 19 problems are rescued by IFRd and 19 different
problems regress. Default off; enable on a per-problem basis when a problem doesn't
solve with IBR.
Option Default Description
mehrotra_pctrueEnable Mehrotra predictor-corrector (20–40% fewer iterations)
gondzio_mcc_max3Max Gondzio centrality corrections per iteration (0 = off)
Option Default Description
max_soc4Max second-order corrections per step
tau_min0.99Fraction-to-boundary parameter (τ in step size rule)
constraint_slack_barriertrueInclude constraint slack log-barriers in filter merit function
watchdog_shortened_iter_trigger10Consecutive short steps before watchdog
watchdog_trial_iter_max3Watchdog trial iterations
Option Default Description
hessian_approximation_lbfgsfalseUse L-BFGS instead of exact Hessian (no hessian_values needed)
enable_lbfgs_hessian_fallbacktrueAuto-retry with L-BFGS if exact Hessian IPM fails
Option Default Description
enable_slack_fallbacktrueReformulate inequalities with explicit slacks on failure
enable_al_fallbacktrueTry Augmented Lagrangian if IPM fails (equality problems)
enable_sqp_fallbacktrueTry SQP if AL/slack also fail
enable_lbfgs_fallbacktrueTry L-BFGS for unconstrained problems on IPM failure
Option Default Description
restoration_max_iter200Max iterations for NLP restoration subproblem
disable_nlp_restorationfalseDisable NLP restoration (prevents recursion in inner solves)
Option Default Description
warm_startfalseInitialize from a previous solution
warm_start_bound_push1e-3Bound push for warm-started variables
warm_start_bound_frac1e-3Bound fraction for warm-started variables
warm_start_mult_bound_push1e-3Multiplier floor for warm start
Option Default Description
bound_push1e-2κ₁: push initial x away from bounds by max(κ₁, κ₂·(u−l))
bound_frac1e-2κ₂: fraction of bound gap used for push
slack_bound_push1e-2Slack variable bound push
slack_bound_frac1e-2Slack variable bound fraction
least_squares_mult_inittrueInitialize y by least-squares on stationarity
constr_mult_init_max1000.0Cap on LS multiplier init magnitude
Option Default Description
nlp_lower_bound_inf-1e20Treat variable/constraint bounds below this as -∞
nlp_upper_bound_inf1e20Treat variable/constraint bounds above this as +∞
Option Default Description
enable_preprocessingtrueAuxiliary equality-block preprocessing/recovery, fixed-variable elimination, and redundant-constraint removal
auxiliary_tol1e-8Accepted residual for auxiliary preprocessing/recovery block solves
detect_linear_constraintstrueSkip Hessian for constraints with zero second derivatives
proactive_infeasibility_detectionfalseEarly infeasibility detection during iterations
Option Default Description
print_level5Verbosity: 0 = silent, 5 = full iteration table + diagnostics
Option Default Description
kkt_dump_dirNoneIf set, write each KKT matrix to this directory after factorization
kkt_dump_name"problem"Problem name prefix for dump filenames
When kkt_dump_dir is set, ripopt writes two files per iteration:
<name>_<iter:04>.mtx — Matrix Market symmetric format, lower triangle
<name>_<iter:04>.json — Metadata: n, m, rhs, inertia, status
This is useful for collecting benchmark matrices for external sparse solvers.