Solver Options

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()
};
}

Convergence

OptionDefaultDescription
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)

Barrier parameter

OptionDefaultDescription
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

Linear solver

OptionDefaultDescription
sparse_threshold110Switch to sparse multifrontal solver when n+m ≥ threshold
linear_solverDirectDirect (MUMPS/BK), Iterative (MINRES), or Hybrid

Mehrotra predictor-corrector

OptionDefaultDescription
mehrotra_pctrueEnable Mehrotra predictor-corrector (20–40% fewer iterations)
gondzio_mcc_max3Max Gondzio centrality corrections per iteration (0 = off)

Line search and corrections

OptionDefaultDescription
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

Hessian strategy

OptionDefaultDescription
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

Fallback cascade

OptionDefaultDescription
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

Restoration

OptionDefaultDescription
restoration_max_iter200Max iterations for NLP restoration subproblem
disable_nlp_restorationfalseDisable NLP restoration (prevents recursion in inner solves)

Warm start

OptionDefaultDescription
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

Initial point

OptionDefaultDescription
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

Bound thresholds

OptionDefaultDescription
nlp_lower_bound_inf-1e20Treat variable/constraint bounds below this as -∞
nlp_upper_bound_inf1e20Treat variable/constraint bounds above this as +∞

Preprocessing and detection

OptionDefaultDescription
enable_preprocessingtrueEliminate fixed variables and redundant constraints
detect_linear_constraintstrueSkip Hessian for constraints with zero second derivatives
proactive_infeasibility_detectionfalseEarly infeasibility detection during iterations

Diagnostics

OptionDefaultDescription
print_level5Verbosity: 0 = silent, 5 = full iteration table + diagnostics

KKT matrix dump (instrumentation)

OptionDefaultDescription
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.