# 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:** 20
**Page:** 3

<div class="post-metadata">

### Author: ![baggepinnen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/baggepinnen/32/693_2.png) [@baggepinnen](https://discourse.julialang.org/u/baggepinnen)
#### Post date: [October 28, 2025, 10:15am UTC](https://discourse.julialang.org/t/the-uno-unifying-nonlinear-optimization-solver/115883/42 "2025-10-28T10:15:25Z")

</div>

Exciting! 🙂  
@franckgaga there’s a decent change that Uno with the SQP settings would beat Ipopt for MPC problems

---

<div class="post-metadata">

### Author: ![franckgaga](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/franckgaga/32/218241_2.png) [@franckgaga](https://discourse.julialang.org/u/franckgaga)
#### Post date: [November 3, 2025, 3:47pm UTC](https://discourse.julialang.org/t/the-uno-unifying-nonlinear-optimization-solver/115883/43 "2025-11-03T15:47:30Z")

</div>

I’m in a good position to know that a free and positive publicity is always appreciated for open source projects. I finished the implementation of exact Hessian support in ModelPredictiveControl.jl. I just tested UnoSolver.jl with `filtersqp`, a multiple shooting transcription, and exact Hessian computed by sparse ForwardDiff.jl on the inverted pendulum case study (unstable system + highly nonlinear/nonconvex). It’s about 2.1 times faster than Ipopt.jl, all other things being equal. Excellent work @cvanaret and @amontoison ! 🤘🚀💯

The L-BFGS will be a nice addition in the case where Hessian is too expensive to compute. Even in the small-in-size case study above (in which sparse ForwardDiff.jl is typically well-suited), a fair amount of time is spent in the Hessian evaluation.

---

<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: [November 3, 2025, 5:10pm UTC](https://discourse.julialang.org/t/the-uno-unifying-nonlinear-optimization-solver/115883/44 "2025-11-03T17:10:02Z")

</div>

That’s awesome news @franckgaga! 🥳 Thanks for the feedback.

The underlying QP solver (BQPD) accepts Hessian-vector products, so if you think that they’re cheaper than forming the explicit Hessian for your application, feel free to give it a go.  
Also, I’m curious to see how the (undocumented) `funnelsqp` preset performs. It replaces the filter method with a funnel method, which allows more non-monotonicity. Let me know!

---

<div class="post-metadata">

### Author: ![franckgaga](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/franckgaga/32/218241_2.png) [@franckgaga](https://discourse.julialang.org/u/franckgaga)
#### Post date: [November 3, 2025, 6:13pm UTC](https://discourse.julialang.org/t/the-uno-unifying-nonlinear-optimization-solver/115883/45 "2025-11-03T18:13:22Z")

</div>

> [@cvanaret](#):
>
> The underlying QP solver (BQPD) accepts Hessian-vector products, so if you think that they’re cheaper than forming the explicit Hessian for your application, feel free to give it a go.

It is not supported by the `MOI.VectorNonlinearOracle` for now, but maybe in the future. Still, it’s already a huge efficiency improvement compared to the old ways of doing this with `@operator` (computing individual Hessians for each components of the nonlinear constrain vectors and manually evaluating the weighted sum, while using splatting when there are multiple decision variables).

> [@cvanaret](#):
>
> Also, I’m curious to see how the (undocumented) `funnelsqp` preset performs. It replaces the filter method with a funnel method, which allows more non-monotonicity. Let me know!

I just tested it on the same case study and it’s very similar in performance compared to `filtersqp`.

---

<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: [November 10, 2025, 10:23am UTC](https://discourse.julialang.org/t/the-uno-unifying-nonlinear-optimization-solver/115883/46 "2025-11-10T10:23:41Z")

</div>

We have just submitted the [revision of the Uno paper](https://www.researchgate.net/publication/397446552) to [Math Programming Computation](https://link.springer.com/journal/12532) 😎

We introduce a unifying framework for Lagrange-Newton methods (SQP and barrier) with 8 ingredients (a major update since the first submission in June 2024), and describe state-of-the-art strategies through the prism of the unifying framework. We then present the basic algorithmic design of Uno and show how various nonlinear optimization methods fit within the architecture. Finally, we provide preliminary numerical results and compare Uno against state-of-the-art solvers.

Happy to get some feedback and suggestions!

---

<div class="post-metadata">

### Author: ![baggepinnen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/baggepinnen/32/693_2.png) [@baggepinnen](https://discourse.julialang.org/u/baggepinnen)
#### Post date: [November 17, 2025, 3:35pm UTC](https://discourse.julialang.org/t/the-uno-unifying-nonlinear-optimization-solver/115883/47 "2025-11-17T15:35:42Z")

</div>

I just tried Uno with the filtersqp present as the inner optimizer for a mixed-integer MPC problem, it was 6x faster despite using tighter tolerances than Ipopt. What a nice addition to the julia optimizer ecosystem 🙂

---

<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: [November 17, 2025, 7:29pm UTC](https://discourse.julialang.org/t/the-uno-unifying-nonlinear-optimization-solver/115883/48 "2025-11-17T19:29:29Z")

</div>

Wow that’s super cool! Thanks for your positive feedback 🙂

@baggepinnen @franckgaga would you mind sharing some info about your instances (#variables, #constraints, #inequality constraints, #sparsity, etc)?

---

<div class="post-metadata">

### Author: ![gdalle](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdalle/32/27854_2.png) [@gdalle](https://discourse.julialang.org/u/gdalle)
#### Post date: [November 17, 2025, 7:44pm UTC](https://discourse.julialang.org/t/the-uno-unifying-nonlinear-optimization-solver/115883/49 "2025-11-17T19:44:32Z")

</div>

@franckgaga not sure that’s relevant but I think your benchmarks have changed following our recent discussions on sparse autodiff?

---

<div class="post-metadata">

### Author: ![stevengj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevengj/32/71_2.png) [@stevengj](https://discourse.julialang.org/u/stevengj)
#### Post date: [November 17, 2025, 7:46pm UTC](https://discourse.julialang.org/t/the-uno-unifying-nonlinear-optimization-solver/115883/50 "2025-11-17T19:46:33Z")

</div>

It would be nice to show some results for larger-scale problems, with thousands or even millions of parameters, in which dense Hessians are not practical.

A nice collection of high-dimensional non-convex optimization test problems in physics can be found at [invrs-gym](https://invrs-io.github.io/gym/readme.html), for example.

---

<div class="post-metadata">

### Author: ![franckgaga](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/franckgaga/32/218241_2.png) [@franckgaga](https://discourse.julialang.org/u/franckgaga)
#### Post date: [November 17, 2025, 9:56pm UTC](https://discourse.julialang.org/t/the-uno-unifying-nonlinear-optimization-solver/115883/51 "2025-11-17T21:56:07Z")

</div>

> [@cvanaret](#):
>
> @baggepinnen @franckgaga would you mind sharing some info about your instances (#variables, #constraints, #inequality constraints, #sparsity, etc)?

It’s not a large-scale problem. As a side note, I personally think that large-scale problems are ill-suited for online real-time optimization like MPC. Surrogate or reduced-order plant models should be used if possible. That being said, here’s the problem sizes:

- 62 decisions variables (2 for the manipulated input, 60 for the states over the prediction horizon)
- 60 nonlinear equality constraints (the state defects over the prediction horizon)
- 40 linear inequality constraints (operational limits for the manipulated input)
- 403 non-zeros in the Hessian of the Lagrangian
- 271 non-zeros in the nonlinear equality constraint Jacobian

> [@gdalle](#):
>
> @franckgaga not sure that’s relevant but I think your benchmarks have changed following our recent discussions on sparse autodiff?

Yes, my recent modifications to the coloring parameters may have improved the performances, but I’m no longer able to fairly compare the performances of UnoSolver.jl vs Ipopt.jl right now, since a recent improvement in the linear constraint handling was introduced in the MOI of Ipopt.jl, but not in UnoSolver.jl (details [here](https://github.com/cvanaret/Uno/issues/419)).

---

<div class="post-metadata">

### Author: ![baggepinnen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/baggepinnen/32/693_2.png) [@baggepinnen](https://discourse.julialang.org/u/baggepinnen)
#### Post date: [November 18, 2025, 7:21am UTC](https://discourse.julialang.org/t/the-uno-unifying-nonlinear-optimization-solver/115883/52 "2025-11-18T07:21:55Z")

</div>

[My problem](https://help.juliahub.com/dyadcontrol/stable/examples/hvac/) wasn’t very large either, 124 variables, 100 constraints (100 equality, 0 inequality), 400 nonzeros in the Hessian of the Lagrangian and 580 in the constraint Jacobian.

I am not using JuMP, but I am using Uno through the MOI interface wrapped by Optimizaiton.jl. I believe that this interface supports vector-Jacobian products, but I’m not sure if they are used? It does not look like Optimization.jl supports Lag-Hess-vector products, but maybe it could be made to? @SebastianM-C

```julia-auto
Objective evaluations: 2
Constraints evaluations: 2
Objective gradient evaluations: 2
Jacobian evaluations: 2
Hessian evaluations: 1
Number of subproblems solved: 1

```

> [@cvanaret](#):
>
> Also, I’m curious to see how the (undocumented) `funnelsqp` preset performs.

More or less identically to the filtersqp present for the particular problem I’m testing on.

> [@franckgaga](#):
>
> As a side note, I personally think that large-scale problems are ill-suited for online real-time optimization like MPC. Surrogate or reduced-order plant models should be used if possible.

Coming up with a good surrogate model is hard, and so is coming up with good terminal ingredients. The larger problems we can solve efficiently, the less those two difficult things are needed, moving the effort from the user to the solver 🙂

---

<div class="post-metadata">

### Author: ![SebastianM-C](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sebastianm-c/32/2480_2.png) [@SebastianM-C](https://discourse.julialang.org/u/SebastianM-C)
#### Post date: [November 19, 2025, 2:42pm UTC](https://discourse.julialang.org/t/the-uno-unifying-nonlinear-optimization-solver/115883/53 "2025-11-19T14:42:23Z")

</div>

As I understand we would need to add Lagrangian Hessian vector products in OptimizationBase and then the optimization backends that support that will be able to opt in.  
As for vector-Jacobian products, we have both `cons_vjp` and `cons_jvp` in OptimizationBase, but only OptimizationMadNLP is using that at the moment.

---

<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: [November 26, 2025, 3:07pm UTC](https://discourse.julialang.org/t/the-uno-unifying-nonlinear-optimization-solver/115883/54 "2025-11-26T15:07:40Z")

</div>

We had major issues with the GC in Uno’s NLPModels interface. This is now fixed in UnoSolver.jl v0.1.6 🙂

---

<div class="post-metadata">

### Author: ![cgeoga](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cgeoga/32/216186_2.png) [@cgeoga](https://discourse.julialang.org/u/cgeoga)
#### Post date: [December 16, 2025, 8:24pm UTC](https://discourse.julialang.org/t/the-uno-unifying-nonlinear-optimization-solver/115883/55 "2025-12-16T20:24:49Z")

</div>

Just another happy testimonial for anybody skimming this thread: I used to pay for KNITRO because a lot of the GP problems I need to fit are very challenging for Ipopt (I would guess because they have a lot of negative curvature that TR methods are better for, but I am not a knowledgeable optimizer and could be mistaken). That algorithm 4 in KNITRO really was a workhorse for me, but `uno` with the `filtersqp` preset has worked so well for me that I have very happily given up my KNITRO license.

---

<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: [December 16, 2025, 11:03pm UTC](https://discourse.julialang.org/t/the-uno-unifying-nonlinear-optimization-solver/115883/56 "2025-12-16T23:03:11Z")

</div>

Thank you for your feedback 😊 It makes all this time and energy invested in Uno worthwhile!

---

<div class="post-metadata">

### Author: ![amontoison](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/amontoison/32/218741_2.png) [@amontoison](https://discourse.julialang.org/u/amontoison)
#### Post date: [December 20, 2025, 4:00am UTC](https://discourse.julialang.org/t/the-uno-unifying-nonlinear-optimization-solver/115883/57 "2025-12-20T04:00:18Z")

</div>

@SebastianM-C If your model doesn’t have Hessian-vector products, you can use another preset in UnoSolver.jl to not rely on BQPD.

The latest release uses `nlp.meta.hprod_available` to check if the H\*v products are available or not (NLPModel interface) and uses another preset automatically.

We plan to check `nlp.meta.hess_available` in the soon future to use LBFGS if the Hessian of the Lagrangian is not available.  
We discussed about it with Charlie this week 🙂

For the interface with MOI, we added the support of Lagrange multipliers for MOI.VectorNonlinearOracle and also improved the performances for resolve.  
If we only update bounds on variables or rhs of constraints, we don’t anymore recreate the internal “MOI Model” with all the workspace for the AD, coloring, sparsity pattern detection, etc…

If you need anything specific, don’t hesitate to open an issue.  
What I plan to do soon is to return the same kind of output (for the NLPModel interface) than MadNLP.jl, NLPModelsIpopt.jl and NLPModelsKnitro.jl.

---

<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: [March 2, 2026, 8:51am UTC](https://discourse.julialang.org/t/the-uno-unifying-nonlinear-optimization-solver/115883/58 "2026-03-02T08:51:10Z")

</div>

**L-BFGS** is now available for SQP methods in the latest [Uno](https://github.com/cvanaret/Uno) - [UnoSolver.jl](https://juliahub.com/ui/Packages/General/UnoSolver) - [unopy](https://pypi.org/project/unopy/) release! 🥳

The L-BFGS Hessian approximations are stored implicitly as a low-rank update to a diagonal term (see [Compact quasi-Newton representation - Wikipedia](https://en.wikipedia.org/wiki/Compact_quasi-Newton_representation)), and the linear algebra runs on BLAS and LAPACK. Since the L-BFGS Hessian approximation is positive definite, it is best combined with a line search (`globalization_mechanism="LS"`).

L-BFGS is used by Uno when:

- the hessian\_model is set to `LBFGS`, or
- the problem is a QP or an NLP, and no Hessian (matrix or operator) is available in the model.

The size of the limited memory can be controlled via the `quasi_newton_memory_size` option (default 6).

```julia
using UnoSolver, JuMP

jump_model = Model(() -> UnoSolver.Optimizer(preset="filtersqp", hessian_model="LBFGS", globalization_mechanism="LS"))
# the famous hs015 instance
x0 = [-2, 1]
uvar = [0.5, Inf]
@variable(jump_model, x[i = 1:2] ≤ uvar[i], start = x0[i])
@objective(jump_model, Min, 100 * (x[2] - x[1]^2)^2 + (1 - x[1])^2)
@constraint(jump_model, x[1] * x[2] - 1 ≥ 0)
@constraint(jump_model, x[1] + x[2]^2 ≥ 0)

optimize!(jump_model)

```

```julia-auto
Original model C model
2 variables, 2 constraints (0 equality, 2 inequality)

Non-default options:
QP_solver = BQPD

───────────────────────────────────────────────────────────────────────────────────────────────────────────────────
  Iterations
 Major Minor Penalty Steplength Phase |BFGS| ||Step|| Objective Infeas Statio Compl Status        
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 0 - - - OPT 0 - 9.090e+02 4.00e+00 2.48e+03 0.00e+00 initial point 
 1 1 - 1.00e+00 OPT 1 2.50e+00 2.525e+01 6.25e-01 2.38e+03 1.88e+02 ✔ (f-type)    
 2 1 - 1.00e+00 OPT 2 1.25e+00 3.065e+02 0.00e+00 3.65e+03 0.00e+00 ✔ (h-type)    
 3 1 - 1.00e+00 OPT 2 0.00e+00 3.065e+02 0.00e+00 0.00e+00 0.00e+00 0 primal step 
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────
  Iterations
 Major Minor Penalty Steplength Phase |BFGS| ||Step|| Objective Infeas Statio Compl Status        
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Uno 2.4.0 (LS Fletcher-filter restoration inequality-constrained method with L-BFGS Hessian and no regularization)
Sun Mar 1 22:37:09 2026
────────────────────────────────────────
Optimization status: Success
Solution status: Feasible KKT point
Objective value: 306.5
Primal feasibility: 0
┌ Stationarity residual: 0
│ Primal feasibility: 0
└ Complementarity residual: 0
CPU time: 0.00922s
Iterations: 3
Objective evaluations: 5
Constraints evaluations: 4
Objective gradient evaluation 4
Jacobian evaluations: 4
Hessian evaluations: 0
Number of subproblems solved:	3

```

Support for L-BFGS in interior-point methods is a bit more involved and will be addressed in a future release. [Limited-memory SR1](https://en.wikipedia.org/wiki/Symmetric_rank-one) is also in the pipeline!

Note that we’ve also solved an annoying bug in the MOI interface that caused some solver options to be (sometimes) ignored.

---

<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: [March 13, 2026, 2:46pm UTC](https://discourse.julialang.org/t/the-uno-unifying-nonlinear-optimization-solver/115883/59 "2026-03-13T14:46:35Z")

</div>

@amontoison and I fixed a longstanding bug in our MOI and NLPModels interfaces. The problem type is now correctly detected, and the Hessian information is properly passed to the C interface. Uno now defaults to L-BFGS when no Hessian information is provided (as advertised last week 😃 ). It’s patched in [UnoSolver.jl v0.2.6](https://juliahub.com/ui/Packages/General/UnoSolver).

Thanks @franckgaga for your feedback!

---

<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: [March 25, 2026, 9:54am UTC](https://discourse.julialang.org/t/the-uno-unifying-nonlinear-optimization-solver/115883/60 "2026-03-25T09:54:32Z")

</div>

**L-BFGS** is now available for **interior-point methods** too!  
👉 [Uno 2.6.0](https://github.com/cvanaret/Uno/releases/tag/v2.6.0) / [UnoSolver.jl 0.2.9](https://juliahub.com/ui/Packages/General/UnoSolver/0.2.9)

Another new feature that should increase robustness: trial iterates at which the derivatives of the objective and the constraints do not exist (i.e., are Inf or NaN) are now rejected.

```julia
using UnoSolver, JuMP

jump_model = Model(() -> UnoSolver.Optimizer(preset="ipopt", hessian_model="LBFGS"))
# the famous hs015 instance
x0 = [-2, 1]
uvar = [0.5, Inf]
@variable(jump_model, x[i = 1:2] ≤ uvar[i], start = x0[i])
@objective(jump_model, Min, 100 * (x[2] - x[1]^2)^2 + (1 - x[1])^2)
@constraint(jump_model, x[1] * x[2] - 1 ≥ 0)
@constraint(jump_model, x[1] + x[2]^2 ≥ 0)

optimize!(jump_model)

```

```julia-auto
Original model C model
2 variables, 2 constraints (0 equality, 2 inequality)
Problem type: NLP
Reformulated model C model -> no fixed bounds -> equality constrained -> bounds relaxed
4 variables, 2 constraints (2 equality, 0 inequality)

Non-default options:
linear_solver = MUMPS

───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
  Iterations
 Major Minor Penalty Barrier Steplength Phase Regulariz |BFGS| ||Step|| Objective Infeas Statio Compl Status        
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 0 - - - - OPT - 0 - 9.090e+02 4.02e+00 2.40e+03 2.50e+00 initial point 
 1 1 - 1.00e-01 1.00e+00 OPT 0.00e+00 1 2.48e+00 6.710e+01 3.20e+00 7.50e+02 4.30e-01 ✔ (h-type)    
 2 1 - 1.00e-01 1.00e+00 OPT 0.00e+00 1 5.95e-02 6.318e+01 3.08e+00 7.08e+02 4.66e-01 ✔ (h-type)    
 3 1 - 1.00e-01 1.00e+00 OPT 0.00e+00 2 2.83e-01 6.475e+01 2.69e+00 6.08e+02 5.72e-01 ✔ (h-type)    
 4 1 - 1.00e-01 1.00e+00 OPT 0.00e+00 3 1.51e+00 6.657e+01 6.52e-01 1.90e+02 1.06e-01 ✔ (h-type)    
 5 1 - 1.00e-01 1.00e+00 OPT 0.00e+00 4 1.51e-02 6.607e+01 6.34e-01 1.87e+02 1.23e-01 ✔ (h-type)    
 6 1 - 1.00e-01 1.00e+00 OPT 0.00e+00 5 4.50e-01 1.089e+02 4.24e-01 5.35e+02 2.03e-02 ✔ (h-type)    
 7 1 - 1.00e-01 1.00e+00 OPT 0.00e+00 - 1.76e+00 3.067e+02 5.02e-01 - - ✘ (h-type)    
 - 2 - - 5.00e-01 - - 6 8.80e-01 1.952e+02 2.67e-01 5.25e+02 1.38e-01 ✔ (h-type)    
 8 1 - 1.00e-01 1.00e+00 OPT 0.00e+00 6 1.26e+00 3.067e+02 1.25e-01 3.01e+02 1.03e-01 ✔ (h-type)    
 9 1 - 1.00e-01 1.00e+00 OPT 0.00e+00 6 1.26e-01 3.067e+02 2.98e-09 3.32e+01 1.01e-01 ✔ (h-type)    
 10 1 - 1.00e-01 1.00e+00 OPT 0.00e+00 6 1.18e-04 3.067e+02 1.00e-09 9.53e-03 1.00e-01 ✔ (f-type)    
 11 1 - 1.50e-04 1.00e+00 OPT 0.00e+00 6 1.99e-03 3.065e+02 2.91e-07 1.67e-01 2.10e-04 ✔ (f-type)    
 12 1 - 1.50e-04 1.00e+00 OPT 0.00e+00 - 3.65e-07 3.065e+02 3.40e-14 - - ✘ (f-type)    
 - 2 - - 5.00e-01 - - - 1.82e-07 3.065e+02 1.46e-07 - - ✘ (f-type)    
 - 3 - - 2.50e-01 - - - 9.12e-08 3.065e+02 2.18e-07 - - ✘ (f-type)    
 - 4 - - 1.25e-01 - - 6 4.56e-08 3.065e+02 2.55e-07 1.37e-01 2.03e-04 ✔ (f-type)    
 13 1 - 1.50e-04 1.00e+00 OPT 0.00e+00 6 3.19e-07 3.065e+02 2.40e-14 6.53e-05 1.50e-04 ✔ (h-type)    
 14 1 - 2.51e-09 1.00e+00 OPT 0.00e+00 6 3.01e-06 3.065e+02 6.64e-13 1.93e-04 2.61e-09 ✔ (f-type)    
 15 1 - 2.51e-09 1.00e+00 OPT 0.00e+00 6 1.97e-13 3.065e+02 0.00e+00 5.02e-11 2.51e-09 ✔ (h-type)    
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
  Iterations
 Major Minor Penalty Barrier Steplength Phase Regulariz |BFGS| ||Step|| Objective Infeas Statio Compl Status        
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Uno 2.6.0 (LS Waechter-filter restoration primal-dual interior-point method with L-BFGS Hessian and primal-dual regularization)
Wed Mar 25 10:46:07 2026
────────────────────────────────────────
Optimization status: Success
Solution status: Feasible KKT point
Objective value: 306.5
Primal feasibility: 0
┌ Stationarity residual: 5.024958e-11
│ Primal feasibility: 0
└ Complementarity residual: 2.50594e-09
CPU time: 2.203518s
Iterations: 15
Objective evaluations: 20
Constraints evaluations: 21
Objective gradient evaluations:	20
Jacobian evaluations: 20
Hessian evaluations: 0
Number of subproblems solved:	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: [May 26, 2026, 12:36pm UTC](https://discourse.julialang.org/t/the-uno-unifying-nonlinear-optimization-solver/115883/61 "2026-05-26T12:36:13Z")

</div>

The Uno team (Sven Leyffer, @amontoison and myself) will be attending the [SIAM OP](https://meetings.siam.org/sess/dsp_programsess.cfm?SESSIONCODE=87810) conference next week in Edinburgh 🎉 Alexis and I will also be at the JuMP-dev workshop (prior to SIAM OP).

Come chat with us 🙂

[Previous page](https://discourse.julialang.org/t/the-uno-unifying-nonlinear-optimization-solver/115883.md?page=2)

[Next page](https://discourse.julialang.org/t/the-uno-unifying-nonlinear-optimization-solver/115883.md?page=4)
