Skip to content

Commit 8a0ad61

Browse files
authored
Merge pull request #730 from control-toolbox/uno
Integrate Uno solver and add solver requirements documentation
2 parents 5eade75 + f19c26b commit 8a0ad61

23 files changed

+388
-219
lines changed

CHANGELOG.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,39 @@ Versions follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

88
---
99

10+
## [1.3.1-beta] — 2026-03-17
11+
12+
### Added
13+
14+
- **Uno solver integration**: Full support for the Uno nonlinear optimization solver
15+
- Added to solver registry with CPU-only support
16+
- Added methods `(:collocation, :adnlp, :uno, :cpu)` and `(:collocation, :exa, :uno, :cpu)` to available methods
17+
- Uno compatible with both ADNLP and Exa modelers
18+
- Comprehensive test coverage with Beam and Goddard problems
19+
- Extension error handling when `UnoSolver` package not loaded
20+
21+
- **Solver requirements documentation**: Clear documentation of required imports for each solver
22+
- New "Solver requirements" section in `manual-solve.md`
23+
- Updated examples in `manual-solve-explicit.md` with import instructions
24+
- GPU requirements clarification in `manual-solve-gpu.md`
25+
- Based on CTSolvers extension triggers:
26+
- Ipopt: `using NLPModelsIpopt`
27+
- MadNLP: `using MadNLP` (CPU) or `using MadNLPGPU` (GPU)
28+
- Uno: `using UnoSolver`
29+
- MadNCL: `using MadNCL` and `using MadNLP`
30+
- Knitro: `using NLPModelsKnitro` (commercial license)
31+
32+
- **Solver output detection**: `will_solver_print(::CTSolvers.Uno)` method to check if Uno will produce output based on `logger` option (silent when `logger="SILENT"`)
33+
34+
### Changed
35+
36+
- **Solver count**: Updated from 4 to 5 available solvers (Ipopt, MadNLP, Uno, MadNCL, Knitro)
37+
- **Method count**: Updated from 10 to 12 available methods (10 CPU + 2 GPU)
38+
- **Test structure**: Restructured canonical tests to use modeler-solver pairs, Uno now works with both ADNLP and Exa
39+
- **Documentation**: Updated solver lists and examples throughout documentation to include Uno
40+
41+
---
42+
1043
## [Unreleased] — branch `action-options`
1144

1245
### Added

Project.toml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "OptimalControl"
22
uuid = "5f98b655-cc9a-415a-b60e-744165666948"
3-
version = "1.3.0-beta"
3+
version = "1.3.2-beta"
44
authors = ["Olivier Cots <olivier.cots@toulouse-inp.fr>"]
55

66
[deps]
@@ -13,6 +13,7 @@ CTParser = "32681960-a1b1-40db-9bff-a1ca817385d1"
1313
CTSolvers = "d3e8d392-8e4b-4d9b-8e92-d7d4e3650ef6"
1414
CommonSolve = "38540f10-b2f7-11e9-35d8-d573e4eb0ff2"
1515
DocStringExtensions = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
16+
Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
1617
ExaModels = "1037b233-b668-4ce9-9b63-f9f681f55dd2"
1718
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
1819
NLPModels = "a4795742-8479-5a88-8948-cc11e1c8c1a6"
@@ -33,6 +34,7 @@ CUDA = "5"
3334
CommonSolve = "0.2"
3435
DifferentiationInterface = "0.7"
3536
DocStringExtensions = "0.9"
37+
Documenter = "1.17.0"
3638
ExaModels = "0.9"
3739
ForwardDiff = "0.10, 1.0"
3840
LinearAlgebra = "1"
@@ -49,6 +51,7 @@ Reexport = "1"
4951
SolverCore = "0.3.9"
5052
SplitApplyCombine = "1"
5153
Test = "1"
54+
UnoSolver = "0.2"
5255
julia = "1.10"
5356

5457
[extras]
@@ -66,6 +69,7 @@ OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed"
6669
Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7"
6770
SplitApplyCombine = "03a91e81-4c3e-53e1-a0a4-9c0c8f19dd66"
6871
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
72+
UnoSolver = "1baa60ac-02f7-4b39-a7a8-2f4f58486b05"
6973

7074
[targets]
71-
test = ["BenchmarkTools", "CUDA", "DifferentiationInterface", "ForwardDiff", "LinearAlgebra", "MadNCL", "MadNLP", "MadNLPGPU", "NLPModelsIpopt", "NonlinearSolve", "OrdinaryDiffEq", "Printf", "SplitApplyCombine", "Test"]
75+
test = ["BenchmarkTools", "CUDA", "DifferentiationInterface", "ForwardDiff", "LinearAlgebra", "MadNCL", "MadNLP", "MadNLPGPU", "NLPModelsIpopt", "NonlinearSolve", "OrdinaryDiffEq", "Printf", "SplitApplyCombine", "Test", "UnoSolver"]

docs/Project.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ NLPModelsKnitro = "bec4dd0d-7755-52d5-9a02-22f0ffc7efcb"
2424
NonlinearSolve = "8913a72c-1f9b-4ce2-8d82-65094dcecaec"
2525
OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed"
2626
Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
27+
UnoSolver = "1baa60ac-02f7-4b39-a7a8-2f4f58486b05"
2728

2829
[compat]
2930
ADNLPModels = "0.8"
@@ -51,4 +52,5 @@ NLPModelsKnitro = "0.10"
5152
NonlinearSolve = "4"
5253
OrdinaryDiffEq = "6"
5354
Plots = "1"
55+
UnoSolver = "0.2"
5456
julia = "1.10"

docs/doc.jl

Lines changed: 0 additions & 49 deletions
This file was deleted.

docs/make.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,4 +233,4 @@ with_api_reference(src_dir, ext_dir) do api_pages
233233
end
234234

235235
# ═══════════════════════════════════════════════════════════════════════════════
236-
deploydocs(; repo=repo_url * ".git", devbranch="main")
236+
deploydocs(; repo=repo_url * ".git", devbranch="main", push_preview=true)

0 commit comments

Comments
 (0)