# The Uno (Unifying Nonlinear Optimization) solver

**URL:** <https://discourse.julialang.org/t/the-uno-unifying-nonlinear-optimization-solver/115883>\
**Category:** Optimization (Mathematical)\
**Tags:** nonlinear-optimizati, nonconvex-optimizati, nonlinear-programmin, sqp\
**Created:** [June 19, 2024, 8:23pm UTC](https://discourse.julialang.org/t/the-uno-unifying-nonlinear-optimization-solver/115883 "2024-06-19T20:23:45Z")\
**Posts on this page:** 1\
**Showing post:** 15

<div class="post-metadata">

**Author:** ![cvanaret](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cvanaret/32/11594_2.png) [@cvanaret](https://discourse.julialang.org/u/cvanaret)\
**Post date:** [October 31, 2024, 1:55pm UTC](https://discourse.julialang.org/t/the-uno-unifying-nonlinear-optimization-solver/115883/15 "2024-10-31T13:55:52Z")

</div>

I’m really grateful to @odow and @amontoison for their time (and their patience)!  
Note that at the moment, the `ipopt` preset (whose strategy combination mimics IPOPT) is the only available preset in Uno\_jll.jl (it invokes the linear solver MUMPS\_jll.jl).

If you add constraints to Oscar’s model, you get my favorite problem [hs015.mod](https://vanderbei.princeton.edu/ampl/nlmodels/hs/hs015.mod):

```julia
julia> using AmplNLWriter, JuMP, Uno_jll

julia> model = Model(() -> AmplNLWriter.Optimizer(Uno_jll.amplexe));

julia> @variable(model, x <= 0.5, start = -2);

julia> @variable(model, y, start = 1);

julia> @objective(model, Min, 100 * (y - x^2)^2 + (1 - x)^2);

julia> @constraint(model, x*y >= 1);

julia> @constraint(model, x + y^2 >= 0);

julia> optimize!(model)
Original model /tmp/jl_cyAI59/model.nl
2 variables, 2 constraints
Reformulated model /tmp/jl_cyAI59/model.nl_scaled_equalityconstrained_boundrelaxed
4 variables, 2 constraints

Used overwritten options:
- LS_backtracking_ratio = 0.5
- LS_min_step_length = 5e-7
- LS_scale_duals_with_step_length = yes
- armijo_decrease_fraction = 1e-8
- barrier_damping_factor = 1e-5
- barrier_tau_min = 0.99
- constraint_relaxation_strategy = feasibility_restoration
- filter_beta = 0.99999
- filter_fact = 1e4
- filter_gamma = 1e-8
- filter_type = standard
- filter_ubd = 1e4
- globalization_mechanism = LS
- globalization_strategy = waechter_filter_method
- l1_constraint_violation_coefficient = 1000.
- linear_solver = MUMPS
- loose_tolerance = 1e-6
- loose_tolerance_consecutive_iteration_threshold = 15
- progress_norm = L1
- protect_actual_reduction_against_roundoff = yes
- residual_norm = INF
- scale_functions = yes
- sparse_format = COO
- subproblem = primal_dual_interior_point
- switch_to_optimality_requires_linearized_feasibility = no
- switching_delta = 1
- tolerance = 1e-8

┌───────┬─────────┬────────────────┬─────────────┬───────┬────────────────┬──────────────┬─────────────┬───────────────┬──────────────┬─────────────────┬────────────────────────┐
│ iter │ LS iter │ barrier param. │ step length │ phase │ regularization │ step norm │ objective │ primal feas. │ stationarity │ complementarity │ status │
├───────┼─────────┼────────────────┼─────────────┼───────┼────────────────┼──────────────┼─────────────┼───────────────┼──────────────┼─────────────────┼────────────────────────┤
│ 0 │ - │ - │ - │ OPT │ - │ - │ 37.7805 │ 4.02 │ 39.2084 │ 2.5 │ initial point │
│ 1 │ 1 │ 0.1 │ 1 │ OPT │ 0 │ 0.0233907 │ 35.6959 │ 3.955 │ 107.546 │ 1.52938 │ accepted (h-type) │
│ 2 │ 1 │ 0.1 │ 1 │ OPT │ 0 │ 1.98766 │ 1.04159 │ 1.24585 │ 178.176 │ 0.262071 │ accepted (h-type) │
│ 3 │ 1 │ 0.1 │ 1 │ OPT │ 0 │ 0.553065 │ 0.40318 │ 1.53048 │ 185.734 │ 0.107792 │ accepted (h-type) │
│ 4 │ 1 │ 0.1 │ 1 │ OPT │ 10000 │ 0.00125483 │ 0.39945 │ 1.52798 │ 179.337 │ 0.0780677 │ accepted (h-type) │
│ 5 │ 1 │ 0.1 │ 1 │ OPT │ 0 │ 2.07556 │ 15.8289 │ 4.80884 │ - │ - │ rejected (filter) │
│ - │ 2 │ - │ 0.5 │ - │ - │ 1.03778 │ 2.9258 │ 1.9662 │ - │ - │ rejected (filter) │
│ - │ 3 │ - │ 0.25 │ - │ - │ 0.518889 │ 0.314168 │ 1.44654 │ 369.218 │ 0.120012 │ accepted (h-type) │
│ 6 │ 1 │ 0.1 │ 1 │ OPT │ 3333.33 │ 0.00264217 │ 0.314141 │ 1.44304 │ 362.915 │ 0.0110483 │ accepted (h-type) │
│ 7 │ 1 │ 0.1 │ 1 │ OPT │ 1111.11 │ 0.000795601 │ 0.314547 │ 1.44252 │ 363.966 │ 0.0110967 │ accepted (h-type) │
│ 8 │ 1 │ 0.1 │ 1 │ OPT │ 2962.96 │ 0.18222 │ 0.339671 │ 1.33278 │ 20376.9 │ 15.7265 │ accepted (h-type) │
│ 9 │ 1 │ 0.1 │ 1 │ OPT │ 0 │ 0.00395733 │ 0.342921 │ 1.33029 │ 18813.5 │ 14.5924 │ accepted (h-type) │
│ 10 │ 1 │ 0.1 │ 1 │ OPT │ 0 │ 2.16096 │ 12.7717 │ 2.15844 │ - │ - │ rejected (filter) │
│ - │ 2 │ - │ 0.5 │ - │ - │ 1.08048 │ 4.31384 │ 1.20475 │ 16589.6 │ 12.6198 │ accepted (h-type) │
│ 11 │ 1 │ 0.1 │ 1 │ OPT │ 0 │ 0.630084 │ 5.8819 │ 0.952354 │ 1007.7 │ 0.463586 │ accepted (h-type) │
├───────┼─────────┼────────────────┼─────────────┼───────┼────────────────┼──────────────┼─────────────┼───────────────┼──────────────┼─────────────────┼────────────────────────┤
│ iter │ LS iter │ barrier param. │ step length │ phase │ regularization │ step norm │ objective │ primal feas. │ stationarity │ complementarity │ status │
├───────┼─────────┼────────────────┼─────────────┼───────┼────────────────┼──────────────┼─────────────┼───────────────┼──────────────┼─────────────────┼────────────────────────┤
│ 12 │ 1 │ 0.1 │ 1 │ OPT │ 0 │ 2.28896 │ 12.7534 │ 0.316297 │ 969.044 │ 0.206543 │ accepted (h-type) │
│ 13 │ 1 │ 0.1 │ 1 │ OPT │ 0 │ 0.318652 │ 12.763 │ 4.01388e-07 │ 0.237094 │ 0.107368 │ accepted (h-type) │
│ 14 │ 1 │ 0.02 │ 1 │ OPT │ 0 │ 0.00351111 │ 12.779 │ 1.01312e-06 │ 0.000127402 │ 0.0200148 │ accepted (f-type) │
│ 15 │ 1 │ 0.000150424 │ 1 │ OPT │ 0 │ 0.00955038 │ 12.7393 │ 6.68257e-06 │ 5.06342e-05 │ 0.000192227 │ accepted (f-type) │
│ 16 │ 1 │ 1.84491e-06 │ 1 │ OPT │ 0 │ 7.29582e-05 │ 12.739 │ 4.68065e-10 │ 3.49192e-09 │ 1.848e-06 │ accepted (f-type) │
│ 17 │ 1 │ 2.5059e-09 │ 1 │ OPT │ 0 │ 8.86474e-07 │ 12.739 │ 5.82867e-14 │ 4.13891e-13 │ 2.50627e-09 │ accepted (f-type) │
└───────┴─────────┴────────────────┴─────────────┴───────┴────────────────┴──────────────┴─────────────┴───────────────┴──────────────┴─────────────────┴────────────────────────┘

Uno 1.1.0 (LS feasibility_restoration waechter_filter_method primal_dual_interior_point)
Thu Oct 31 14:46:55 2024
────────────────────────────────────────
Status: Converged with feasible KKT point
Objective value: 306.5
Primal feasibility: 5.240253e-14
┌ Stationarity residual: 4.138911e-13
└ Complementarity residual: 2.506267e-09
┌ Feasibility stationarity residual:	4.138911e-13
└ Feasibility complementarity residual:	2.506267e-09
┌ Infeasibility measure: 5.828671e-14
│ Objective measure: 12.73898
└ Auxiliary measure: 1.146775e-07
Primal solution: 0.5 2 1 4.5 
┌ Constraint multipliers: 700 1.339957e-08 
│ Lower bound multipliers: 0 0 29.09393 5.569483e-10 
└ Upper bound multipliers: -1751 0 0 0 
┌ Constraint feasibility multipliers:	0 0 
│ Lower bound feasibility multipliers:	0 0 0 0 
└ Upper bound feasibility multipliers:	0 0 0 0 
Objective multiplier: 1
CPU time: 0.00495s
Iterations: 17
Objective evaluations: 21
Constraints evaluations: 22
Objective gradient evaluations: 19
Jacobian evaluations: 19
Hessian evaluations: 17
Number of subproblems solved: 17

```

---

_[View the full topic](https://discourse.julialang.org/t/the-uno-unifying-nonlinear-optimization-solver/115883)._
