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