The Uno (Unifying Nonconvex Optimization) solver

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:

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
3 Likes