Skip to content

Commit 1e5b25e

Browse files
committed
Rename AbstractOptimizationSolver to AbstractNLPSolver
1 parent 0aceb3c commit 1e5b25e

23 files changed

+73
-73
lines changed

BREAKING.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ docp = DiscretizedModel(ocp, builder)
108108
```julia
109109
registry = create_registry(
110110
AbstractOptimizationModeler => (ADNLPModeler, ExaModeler),
111-
AbstractOptimizationSolver => (IpoptSolver, MadNLPSolver)
111+
AbstractNLPSolver => (IpoptSolver, MadNLPSolver)
112112
)
113113
```
114114

@@ -117,7 +117,7 @@ registry = create_registry(
117117
```julia
118118
registry = create_registry(
119119
AbstractNLPModeler => (Modelers.ADNLP, Modelers.Exa),
120-
AbstractOptimizationSolver => (Solvers.Ipopt, Solvers.MadNLP)
120+
AbstractNLPSolver => (Solvers.Ipopt, Solvers.MadNLP)
121121
)
122122
```
123123

docs/src/architecture.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ classDiagram
5252
}
5353
5454
AbstractStrategy <|-- AbstractNLPModeler
55-
AbstractStrategy <|-- AbstractOptimizationSolver
55+
AbstractStrategy <|-- AbstractNLPSolver
5656
AbstractStrategy <|-- AbstractOptimalControlDiscretizer
5757
5858
class AbstractNLPModeler {
@@ -63,14 +63,14 @@ classDiagram
6363
AbstractNLPModeler <|-- Modelers.ADNLP
6464
AbstractNLPModeler <|-- Modelers.Exa
6565
66-
class AbstractOptimizationSolver {
66+
class AbstractNLPSolver {
6767
<<abstract>>
6868
(solver)(nlp; display) → Stats
6969
}
70-
AbstractOptimizationSolver <|-- Solvers.Ipopt
71-
AbstractOptimizationSolver <|-- Solvers.MadNLP
72-
AbstractOptimizationSolver <|-- Solvers.MadNCL
73-
AbstractOptimizationSolver <|-- Solvers.Knitro
70+
AbstractNLPSolver <|-- Solvers.Ipopt
71+
AbstractNLPSolver <|-- Solvers.MadNLP
72+
AbstractNLPSolver <|-- Solvers.MadNCL
73+
AbstractNLPSolver <|-- Solvers.Knitro
7474
7575
class AbstractOptimalControlDiscretizer {
7676
<<abstract>>
@@ -81,7 +81,7 @@ classDiagram
8181
```
8282

8383
- **`AbstractNLPModeler`** (in `Modelers`): converts problems into NLP models and back into solutions.
84-
- **`AbstractOptimizationSolver`** (in `Solvers`): solves NLP models via backend libraries.
84+
- **`AbstractNLPSolver`** (in `Solvers`): solves NLP models via backend libraries.
8585
- **`AbstractOptimalControlDiscretizer`** (in CTDirect, external): discretizes continuous-time OCP into finite-dimensional problems. See [Implementing a Strategy](@ref) for a complete tutorial.
8686

8787
### Optimization / Builder Branch
@@ -165,7 +165,7 @@ sequenceDiagram
165165
participant Modeler as AbstractNLPModeler
166166
participant Problem as AbstractOptimizationProblem
167167
participant Builder as AbstractModelBuilder
168-
participant Solver as AbstractOptimizationSolver
168+
participant Solver as AbstractNLPSolver
169169
participant SolBuilder as AbstractSolutionBuilder
170170
171171
User->>Solve: solve(problem, x0, modeler, solver)
@@ -248,7 +248,7 @@ Solvers use **Tag Dispatch** to separate type definitions (in `src/Solvers/`) fr
248248
```mermaid
249249
flowchart LR
250250
subgraph src["src/Solvers/"]
251-
SolverType["Solvers.Ipopt <: AbstractOptimizationSolver"]
251+
SolverType["Solvers.Ipopt <: AbstractNLPSolver"]
252252
Tag["IpoptTag <: AbstractTag"]
253253
Callable["(solver)(nlp) → _solve(IpoptTag(), nlp, opts)"]
254254
end

docs/src/guides/implementing_a_solver.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ This guide explains how to implement an optimization solver in CTSolvers. Solver
99
!!! tip "Prerequisites"
1010
Read [Architecture](@ref) and [Implementing a Strategy](@ref) first. A solver is a strategy with two additional requirements: a **callable interface** and a **Tag Dispatch** extension.
1111

12-
## The AbstractOptimizationSolver Contract
12+
## The AbstractNLPSolver Contract
1313

1414
A solver must satisfy **three contracts**:
1515

@@ -26,16 +26,16 @@ classDiagram
2626
options(instance)::StrategyOptions
2727
}
2828
29-
class AbstractOptimizationSolver {
29+
class AbstractNLPSolver {
3030
<<abstract>>
3131
(solver)(nlp; display) → Stats
3232
}
3333
34-
AbstractStrategy <|-- AbstractOptimizationSolver
35-
AbstractOptimizationSolver <|-- Solvers.Ipopt
36-
AbstractOptimizationSolver <|-- Solvers.MadNLP
37-
AbstractOptimizationSolver <|-- Solvers.MadNCL
38-
AbstractOptimizationSolver <|-- Solvers.Knitro
34+
AbstractStrategy <|-- AbstractNLPSolver
35+
AbstractNLPSolver <|-- Solvers.Ipopt
36+
AbstractNLPSolver <|-- Solvers.MadNLP
37+
AbstractNLPSolver <|-- Solvers.MadNCL
38+
AbstractNLPSolver <|-- Solvers.Knitro
3939
```
4040

4141
The default callable throws `NotImplemented` with guidance.
@@ -67,7 +67,7 @@ struct IpoptTag <: AbstractTag end
6767
Like any strategy, the solver has a single `options` field:
6868

6969
```julia
70-
struct Solvers.Ipopt <: AbstractOptimizationSolver
70+
struct Solvers.Ipopt <: AbstractNLPSolver
7171
options::Strategies.StrategyOptions
7272
end
7373
```
@@ -114,7 +114,7 @@ CTSolvers.Solvers.MadNLP()
114114
```mermaid
115115
flowchart LR
116116
subgraph src["src/Solvers/ipopt_solver.jl"]
117-
Type["Solvers.Ipopt <: AbstractOptimizationSolver"]
117+
Type["Solvers.Ipopt <: AbstractNLPSolver"]
118118
Tag["IpoptTag <: AbstractTag"]
119119
Ctor["Solvers.Ipopt(; kwargs...)\n→ build_ipopt_solver(IpoptTag(); kwargs...)"]
120120
Stub["build_ipopt_solver(::AbstractTag)\n→ ExtensionError"]
@@ -287,7 +287,7 @@ To add a new solver (e.g., `MySolver` backed by `MyBackend`):
287287
### In `src/Solvers/`
288288

289289
1. Define `MyTag <: AbstractTag`
290-
2. Define `MySolver <: AbstractOptimizationSolver` with `options::StrategyOptions`
290+
2. Define `MySolver <: AbstractNLPSolver` with `options::StrategyOptions`
291291
3. Implement `Strategies.id(::Type{<:MySolver}) = :my_solver`
292292
4. Write constructor: `MySolver(; mode, kwargs...) = build_my_solver(MyTag(); mode, kwargs...)`
293293
5. Write stub: `build_my_solver(::AbstractTag; kwargs...) = throw(ExtensionError(...))`

src/Orchestration/disambiguation.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ julia> method = (:collocation, :adnlp, :ipopt)
111111
julia> families = (
112112
discretizer = AbstractOptimalControlDiscretizer,
113113
modeler = AbstractNLPModeler,
114-
solver = AbstractOptimizationSolver
114+
solver = AbstractNLPSolver
115115
)
116116
117117
julia> map = build_strategy_to_family_map(method, families, registry)

src/Orchestration/routing.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ julia> method = (:collocation, :adnlp, :ipopt)
7272
julia> families = (
7373
discretizer = AbstractOptimalControlDiscretizer,
7474
modeler = AbstractNLPModeler,
75-
solver = AbstractOptimizationSolver
75+
solver = AbstractNLPSolver
7676
)
7777
7878
julia> action_defs = [

src/Solvers/Solvers.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ using CommonSolve
3636
stats = solve(nlp, solver, display=false)
3737
```
3838
39-
See also: [`AbstractOptimizationSolver`](@ref), [`Solvers.Ipopt`](@ref)
39+
See also: [`AbstractNLPSolver`](@ref), [`Solvers.Ipopt`](@ref)
4040
"""
4141
module Solvers
4242

@@ -70,7 +70,7 @@ include(joinpath(@__DIR__, "knitro.jl"))
7070
include(joinpath(@__DIR__, "common_solve_api.jl"))
7171

7272
# Public API - abstract and concrete types
73-
export AbstractOptimizationSolver
73+
export AbstractNLPSolver
7474
export Ipopt, MadNLP, MadNCL, Knitro
7575

7676
end # module Solvers

src/Solvers/abstract_solver.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ $(TYPEDEF)
44
Abstract base type for optimization solvers in the Control Toolbox.
55
66
All concrete solver types must:
7-
1. Be a subtype of `AbstractOptimizationSolver`
7+
1. Be a subtype of `AbstractNLPSolver`
88
2. Implement the `AbstractStrategy` contract:
99
- `Strategies.id(::Type{<:MySolver})` - Return unique Symbol identifier
1010
- `Strategies.metadata(::Type{<:MySolver})` - Return StrategyMetadata with options
@@ -30,7 +30,7 @@ stats = solver(nlp, display=true)
3030
3131
See also: [`Solvers.Ipopt`](@ref), [`Solvers.MadNLP`](@ref), [`Solvers.MadNCL`](@ref), [`Solvers.Knitro`](@ref)
3232
"""
33-
abstract type AbstractOptimizationSolver <: Strategies.AbstractStrategy end
33+
abstract type AbstractNLPSolver <: Strategies.AbstractStrategy end
3434

3535
"""
3636
$(TYPEDSIGNATURES)
@@ -60,11 +60,11 @@ nlp = ADNLPModel(x -> sum(x.^2), zeros(5))
6060
stats = solver(nlp, display=false)
6161
```
6262
"""
63-
function (solver::AbstractOptimizationSolver)(nlp; display::Bool=true)
63+
function (solver::AbstractNLPSolver)(nlp; display::Bool=true)
6464
throw(Exceptions.NotImplemented(
6565
"Solver callable not implemented",
6666
required_method="(solver::$(typeof(solver)))(nlp; display=Bool)",
6767
suggestion="Implement the callable method for $(typeof(solver))",
68-
context="AbstractOptimizationSolver - required method"
68+
context="AbstractNLPSolver - required method"
6969
))
7070
end

src/Solvers/common_solve_api.jl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ High-level solve: Build NLP model, solve it, and build solution.
2424
- `problem::Optimization.AbstractOptimizationProblem`: The optimization problem
2525
- `initial_guess`: Initial guess for the solution
2626
- `modeler::Modelers.AbstractNLPModeler`: Modeler to build NLP
27-
- `solver::AbstractOptimizationSolver`: Solver to use
27+
- `solver::AbstractNLPSolver`: Solver to use
2828
- `display::Bool`: Whether to show solver output (default: true)
2929
3030
# Returns
@@ -48,7 +48,7 @@ function CommonSolve.solve(
4848
problem::Optimization.AbstractOptimizationProblem,
4949
initial_guess,
5050
modeler::Modelers.AbstractNLPModeler,
51-
solver::AbstractOptimizationSolver;
51+
solver::AbstractNLPSolver;
5252
display::Bool=__display(),
5353
)
5454
# Build NLP model
@@ -70,7 +70,7 @@ Mid-level solve: Solve NLP problem directly.
7070
7171
# Arguments
7272
- `nlp::NLPModels.AbstractNLPModel`: The NLP problem to solve
73-
- `solver::AbstractOptimizationSolver`: Solver to use
73+
- `solver::AbstractNLPSolver`: Solver to use
7474
- `display::Bool`: Whether to show solver output (default: true)
7575
7676
# Returns
@@ -87,7 +87,7 @@ stats = solve(nlp, solver, display=false)
8787
"""
8888
function CommonSolve.solve(
8989
nlp::NLPModels.AbstractNLPModel,
90-
solver::AbstractOptimizationSolver;
90+
solver::AbstractNLPSolver;
9191
display::Bool=__display(),
9292
)::SolverCore.AbstractExecutionStats
9393
return solver(nlp; display=display)
@@ -103,15 +103,15 @@ that may be compatible with the solver's callable interface.
103103
104104
# Arguments
105105
- `nlp`: Problem to solve (any type compatible with solver)
106-
- `solver::AbstractOptimizationSolver`: Solver to use
106+
- `solver::AbstractNLPSolver`: Solver to use
107107
- `display::Bool`: Whether to show solver output (default: true)
108108
109109
# Returns
110110
- Result from solver (type depends on solver implementation)
111111
"""
112112
function CommonSolve.solve(
113113
nlp,
114-
solver::AbstractOptimizationSolver;
114+
solver::AbstractNLPSolver;
115115
display::Bool=__display()
116116
)
117117
return solver(nlp; display=display)

src/Solvers/ipopt.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,9 @@ using NLPModelsIpopt
6666
- Options are validated at construction time using enriched `Exceptions.IncorrectArgument`
6767
- Callable interface: `(solver::Ipopt)(nlp; display=true)` provided by extension
6868
69-
See also: [`AbstractOptimizationSolver`](@ref), [`MadNLP`](@ref), [`Knitro`](@ref)
69+
See also: [`AbstractNLPSolver`](@ref), [`MadNLP`](@ref), [`Knitro`](@ref)
7070
"""
71-
struct Ipopt <: AbstractOptimizationSolver
71+
struct Ipopt <: AbstractNLPSolver
7272
"Solver configuration options containing validated option values"
7373
options::Strategies.StrategyOptions
7474
end

src/Solvers/knitro.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,9 @@ using NLPModelsKnitro
6969
- Callable interface: `(solver::Knitro)(nlp; display=true)` provided by extension
7070
- Requires valid Knitro license for operation
7171
72-
See also: [`AbstractOptimizationSolver`](@ref), [`Ipopt`](@ref), [`MadNLP`](@ref)
72+
See also: [`AbstractNLPSolver`](@ref), [`Ipopt`](@ref), [`MadNLP`](@ref)
7373
"""
74-
struct Knitro <: AbstractOptimizationSolver
74+
struct Knitro <: AbstractNLPSolver
7575
"Solver configuration options containing validated option values"
7676
options::Strategies.StrategyOptions
7777
end

0 commit comments

Comments
 (0)