Skip to content

Commit dbeed2d

Browse files
Merge pull request #1071 from SebastianM-C/optbase_cleanup
Cleanup for OptimizationBase
2 parents 36fbd85 + 3480bab commit dbeed2d

File tree

8 files changed

+40
-37
lines changed

8 files changed

+40
-37
lines changed

.github/workflows/CI.yml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ jobs:
1919
matrix:
2020
group:
2121
- Core
22+
- OptimizationBase
2223
- OptimizationAuglag
2324
- OptimizationBBO
2425
- OptimizationCMAEvolutionStrategy
@@ -45,7 +46,7 @@ jobs:
4546
- OptimizationPolyalgorithms
4647
- OptimizationNLPModels
4748
version:
48-
- '1'
49+
- '1.11'
4950
- 'lts'
5051
steps:
5152
- uses: actions/checkout@v4
@@ -57,10 +58,10 @@ jobs:
5758
cache-name: cache-artifacts
5859
with:
5960
path: ~/.julia/artifacts
60-
key: ${{ runner.os }}-test-${{ env.cache-name }}-${{ hashFiles('**/Project.toml') }}
61+
key: ${{ runner.os }}-test-${{ matrix.version }}-${{ env.cache-name }}-${{ hashFiles('**/Project.toml') }}
6162
restore-keys: |
62-
${{ runner.os }}-test-${{ env.cache-name }}-
63-
${{ runner.os }}-test-
63+
${{ runner.os }}-test-${{ matrix.version }}-${{ env.cache-name }}-
64+
${{ runner.os }}-test-${{ matrix.version }}-
6465
${{ runner.os }}-
6566
- uses: julia-actions/julia-buildpkg@v1
6667
- if: ${{ matrix.group == 'OptimizationQuadDIRECT' }}
@@ -70,7 +71,7 @@ jobs:
7071
GROUP: ${{ matrix.group }}
7172
- uses: julia-actions/julia-processcoverage@v1
7273
with:
73-
directories: src,lib/OptimizationBBO/src,lib/OptimizationCMAEvolutionStrategy/src,lib/OptimizationEvolutionary/src,lib/OptimizationGCMAES/src,lib/OptimizationIpopt/src,lib/OptimizationMadNLP/src,lib/OptimizationManopt/src,lib/OptimizationMOI/src,lib/OptimizationMetaheuristics/src,lib/OptimizationMultistartOptimization/src,lib/OptimizationNLopt/src,lib/OptimizationNOMAD/src,lib/OptimizationOptimJL/src,lib/OptimizationOptimisers/src,lib/OptimizationPolyalgorithms/src,lib/OptimizationQuadDIRECT/src,lib/OptimizationSpeedMapping/src
74+
directories: src,lib/OptimizationBase/src,lib/OptimizationBBO/src,lib/OptimizationCMAEvolutionStrategy/src,lib/OptimizationEvolutionary/src,lib/OptimizationGCMAES/src,lib/OptimizationIpopt/src,lib/OptimizationMadNLP/src,lib/OptimizationManopt/src,lib/OptimizationMOI/src,lib/OptimizationMetaheuristics/src,lib/OptimizationMultistartOptimization/src,lib/OptimizationNLopt/src,lib/OptimizationNOMAD/src,lib/OptimizationOptimJL/src,lib/OptimizationOptimisers/src,lib/OptimizationPolyalgorithms/src,lib/OptimizationQuadDIRECT/src,lib/OptimizationSpeedMapping/src
7475
- uses: codecov/codecov-action@v5
7576
with:
76-
file: lcov.info
77+
files: lcov.info

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ ModelingToolkit = "10.23"
4949
Mooncake = "0.4.138"
5050
Optim = ">= 1.4.1"
5151
Optimisers = ">= 0.2.5"
52-
OptimizationBase = "3"
52+
OptimizationBase = "4"
5353
OptimizationLBFGSB = "1"
5454
OptimizationMOI = "0.5"
5555
OptimizationOptimJL = "0.4"

lib/OptimizationBase/Project.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "OptimizationBase"
22
uuid = "bca83a33-5cc9-4baa-983d-23429ab6bcbb"
33
authors = ["Vaibhav Dixit <[email protected]> and contributors"]
4-
version = "3.3.1"
4+
version = "4.0.0"
55

66
[deps]
77
ADTypes = "47edcb42-4c32-4615-8424-f2b9edc5f35b"
@@ -55,7 +55,7 @@ ModelingToolkit = "10.23"
5555
PDMats = "0.11"
5656
Reexport = "1.2"
5757
ReverseDiff = "1.14"
58-
SciMLBase = "2.104"
58+
SciMLBase = "2.122"
5959
SparseConnectivityTracer = "0.6, 1"
6060
SparseMatrixColorings = "0.4"
6161
SymbolicAnalysis = "0.3"

lib/OptimizationBase/src/OptimizationBase.jl

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,10 @@ import SciMLBase: solve, init, solve!, __init, __solve,
1515
requireshessian, requiresconsjac,
1616
requiresconshess
1717

18-
supports_opt_cache_interface(alg) = false
19-
@static if !hasmethod(SciMLBase.__solve, Tuple{OptimizationProblem, SciMLBase.AbstractOptimizationAlgorithm})
20-
include("solve.jl")
21-
end
22-
2318
export ObjSense, MaxSense, MinSense
2419
export allowsbounds, requiresbounds, allowsconstraints, requiresconstraints,
2520
allowscallback, requiresgradient, requireshessian,
26-
requiresconsjac, requiresconshess, supports_opt_cache_interface
21+
requiresconsjac, requiresconshess
2722

2823
using FastClosures
2924

@@ -36,6 +31,7 @@ const DEFAULT_DATA = Iterators.cycle((NullData(),))
3631
Base.iterate(::NullData, i = 1) = nothing
3732
Base.length(::NullData) = 0
3833

34+
include("solve.jl")
3935
include("adtypes.jl")
4036
include("symify.jl")
4137
include("cache.jl")

lib/OptimizationBase/src/cache.jl

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,18 @@ struct AnalysisResults{O, C}
55
constraints::C
66
end
77

8-
struct OptimizationCache{F, RC, LB, UB, LC, UC, S, O, P, C, M} <:
8+
struct OptimizationCache{
9+
O, IIP, F <: SciMLBase.AbstractOptimizationFunction{IIP},
10+
RC, LB, UB, LC, UC, S, P, C, M} <:
911
SciMLBase.AbstractOptimizationCache
12+
opt::O
1013
f::F
1114
reinit_cache::RC
1215
lb::LB
1316
ub::UB
1417
lcons::LC
1518
ucons::UC
1619
sense::S
17-
opt::O
1820
progress::P
1921
callback::C
2022
manifold::M
@@ -46,13 +48,13 @@ function OptimizationCache(prob::SciMLBase.OptimizationProblem, opt;
4648
prob.f.adtype isa AutoZygote) &&
4749
(SciMLBase.requireshessian(opt) || SciMLBase.requiresconshess(opt) ||
4850
SciMLBase.requireslagh(opt))
49-
@warn "The selected optimization algorithm requires second order derivatives, but `SecondOrder` ADtype was not provided.
50-
So a `SecondOrder` with $(prob.f.adtype) for both inner and outer will be created, this can be suboptimal and not work in some cases so
51+
@warn "The selected optimization algorithm requires second order derivatives, but `SecondOrder` ADtype was not provided.
52+
So a `SecondOrder` with $(prob.f.adtype) for both inner and outer will be created, this can be suboptimal and not work in some cases so
5153
an explicit `SecondOrder` ADtype is recommended."
5254
elseif prob.f.adtype isa AutoZygote &&
5355
(SciMLBase.requiresconshess(opt) || SciMLBase.requireslagh(opt) ||
5456
SciMLBase.requireshessian(opt))
55-
@warn "The selected optimization algorithm requires second order derivatives, but `AutoZygote` ADtype was provided.
57+
@warn "The selected optimization algorithm requires second order derivatives, but `AutoZygote` ADtype was provided.
5658
So a `SecondOrder` with `AutoZygote` for inner and `AutoForwardDiff` for outer will be created, for choosing another pair
5759
an explicit `SecondOrder` ADtype is recommended."
5860
end
@@ -71,11 +73,10 @@ function OptimizationCache(prob::SciMLBase.OptimizationProblem, opt;
7173
cons_res = nothing
7274
end
7375

74-
return OptimizationCache(f, reinit_cache_passedon, prob.lb, prob.ub, prob.lcons,
76+
return OptimizationCache(opt, f, reinit_cache_passedon, prob.lb, prob.ub, prob.lcons,
7577
prob.ucons, prob.sense,
76-
opt, progress, callback, manifold, AnalysisResults(obj_res, cons_res),
77-
merge((; maxiters, maxtime, abstol, reltol),
78-
NamedTuple(kwargs)))
78+
progress, callback, manifold, AnalysisResults(obj_res, cons_res),
79+
merge((; maxiters, maxtime, abstol, reltol), NamedTuple(kwargs)))
7980
end
8081

8182
function SciMLBase.__init(prob::SciMLBase.OptimizationProblem, opt;
@@ -91,6 +92,8 @@ function SciMLBase.__init(prob::SciMLBase.OptimizationProblem, opt;
9192
kwargs...)
9293
end
9394

95+
SciMLBase.isinplace(::OptimizationCache{o, iip}) where {o, iip} = iip
96+
9497
# Wrapper for fields that may change in `reinit!(cache)` of a cache.
9598
mutable struct ReInitCache{uType, P}
9699
u0::uType

lib/OptimizationBase/src/solve.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ from NLopt for an example. The common local optimizer arguments are:
9292
"""
9393
function solve(prob::SciMLBase.OptimizationProblem, alg, args...;
9494
kwargs...)::SciMLBase.AbstractOptimizationSolution
95-
if SciMLBase.supports_opt_cache_interface(alg)
95+
if SciMLBase.has_init(alg)
9696
solve!(init(prob, alg, args...; kwargs...))
9797
else
9898
if prob.u0 !== nothing && !isconcretetype(eltype(prob.u0))

lib/OptimizationManopt/test/runtests.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ R2 = Euclidean(2)
166166

167167
opt = OptimizationManopt.TrustRegionsOptimizer()
168168

169-
#TODO: This autodiff currently provides a Hessian that seem to not procide a Hessian
169+
#TODO: This autodiff currently provides a Hessian that seem to not provide a Hessian
170170
# TR Fails but also AD before that warns. So it passes _some_ hessian but a wrong one, even in format
171171
optprob = OptimizationFunction(rosenbrock, AutoForwardDiff())
172172
prob = OptimizationProblem(optprob, x0, p; manifold = R2)
@@ -187,4 +187,4 @@ R2 = Euclidean(2)
187187
#TODO: What is this?
188188
@test_throws SciMLBase.IncompatibleOptimizerError OptimizationBase.solve(prob_cons, opt)
189189
end
190-
end
190+
end

test/runtests.jl

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,19 @@ function activate_subpkg_env(subpkg)
1414
Pkg.instantiate()
1515
end
1616

17-
if GROUP == "All" || GROUP == "Core"
18-
dev_subpkg("OptimizationOptimJL")
19-
dev_subpkg("OptimizationOptimisers")
20-
dev_subpkg("OptimizationMOI")
21-
elseif GROUP == "GPU" || GROUP == "OptimizationPolyalgorithms"
22-
dev_subpkg("OptimizationOptimJL")
23-
dev_subpkg("OptimizationOptimisers")
24-
elseif GROUP == "OptimizationNLPModels"
25-
dev_subpkg("OptimizationOptimJL")
26-
dev_subpkg("OptimizationMOI")
17+
if VERSION < v"1.11"
18+
if GROUP == "All" || GROUP == "Core"
19+
dev_subpkg("OptimizationBase")
20+
dev_subpkg("OptimizationOptimJL")
21+
dev_subpkg("OptimizationOptimisers")
22+
dev_subpkg("OptimizationMOI")
23+
elseif GROUP == "GPU" || GROUP == "OptimizationPolyalgorithms"
24+
dev_subpkg("OptimizationOptimJL")
25+
dev_subpkg("OptimizationOptimisers")
26+
elseif GROUP == "OptimizationNLPModels"
27+
dev_subpkg("OptimizationOptimJL")
28+
dev_subpkg("OptimizationMOI")
29+
end
2730
end
2831

2932
@time begin

0 commit comments

Comments
 (0)