Skip to content

Commit 1d34406

Browse files
committed
[WIP] Leave only core definitions
1 parent b23cdcc commit 1d34406

17 files changed

+296
-706
lines changed

Project.toml

+3-5
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,18 @@ uuid = "ff4d7338-4cf1-434d-91df-b86cb86fb843"
33
version = "0.1.0"
44

55
[deps]
6-
ADNLPModels = "54578032-b7ea-4c30-94aa-7cbd1cce6c9a"
76
Logging = "56ddb016-857b-54e1-b83d-db4d58db5568"
8-
NLPModels = "a4795742-8479-5a88-8948-cc11e1c8c1a6"
7+
OrderedCollections = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
98
Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7"
109

1110
[compat]
12-
NLPModels = "0.14"
1311
julia = "^1.3.0"
1412

1513
[extras]
16-
ADNLPModels = "54578032-b7ea-4c30-94aa-7cbd1cce6c9a"
1714
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
1815
Logging = "56ddb016-857b-54e1-b83d-db4d58db5568"
16+
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
1917
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
2018

2119
[targets]
22-
test = ["ADNLPModels", "LinearAlgebra", "Logging", "Test"]
20+
test = ["LinearAlgebra", "Logging", "Random", "Test"]

src/SolverCore.jl

+4-5
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,14 @@ module SolverCore
22

33
# stdlib
44
using Logging, Printf
5+
using OrderedCollections
56

6-
# include("stats.jl")
7-
include("logger.jl")
8-
include("output.jl")
97
include("solver.jl")
8+
include("output.jl")
9+
10+
include("parameters.jl")
1011
include("traits.jl")
1112

1213
include("grid-search-tuning.jl")
1314

14-
include("optsolver.jl")
15-
1615
end

src/grid-search-tuning.jl

+19-16
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
export grid_search_tune
22

3+
# ISSUE: For grid_search_tune to work, we need to define `reset!`
4+
function reset! end
5+
36
"""
47
solver, results = grid_search_tune(SolverType, problems; kwargs...)
58
@@ -31,7 +34,6 @@ function grid_search_tune(
3134
success = o -> o.status == :first_order,
3235
costs = [
3336
(o -> o.elapsed_time, 100.0),
34-
(o -> o.counters.neval_obj + o.counters.neval_cons, 1000),
3537
(o -> !success(o), 1),
3638
],
3739
grid_length = 10,
@@ -40,15 +42,15 @@ function grid_search_tune(
4042
) where Solver <: AbstractSolver
4143

4244
solver_params = parameters(Solver)
43-
params = Dict()
45+
params = OrderedDict()
4446
for (k,v) in pairs(solver_params)
45-
if v[:type] == :real
47+
if v[:type] <: AbstractFloat && (!haskey(v, :scale) || v[:scale] == :linear)
4648
params[k] = LinRange(v[:min], v[:max], grid_length)
47-
elseif v[:type] == :log
49+
elseif v[:type] <: AbstractFloat && v[:scale] == :log
4850
params[k] = exp.(LinRange(log(v[:min]), log(v[:max]), grid_length))
49-
elseif v[:type] == :bool
51+
elseif v[:type] == Bool
5052
params[k] = (false, true)
51-
elseif v[:type] == :int
53+
elseif v[:type] <: Integer
5254
params[k] = v[:min]:v[:max]
5355
end
5456
end
@@ -57,24 +59,25 @@ function grid_search_tune(
5759
end
5860

5961
# Precompiling
60-
nlp = first(problems)
62+
problem = first(problems)
6163
try
62-
solver = Solver(Val(:nosolve), nlp)
64+
solver = Solver(problem)
6365
output = with_logger(NullLogger()) do
64-
solve!(solver, nlp)
66+
solve!(solver, problem)
6567
end
6668
finally
67-
finalize(nlp)
69+
finalize(problem)
6870
end
6971

7072
cost(θ) = begin
7173
total_cost = [zero(x[2]) for x in costs]
72-
for nlp in problems
73-
reset!(nlp)
74+
for problem in problems
75+
reset!(problem)
7476
try
75-
solver = Solver(Val(:nosolve), nlp)
77+
solver = Solver(problem)
78+
P = (k => θi for (k,θi) in zip(keys(solver_params), θ))
7679
output = with_logger(NullLogger()) do
77-
solve!(solver, nlp; (k => θi for (k,θi) in zip(keys(solver_params), θ))...)
80+
solve!(solver, problem; P...)
7881
end
7982
for (i, c) in enumerate(costs)
8083
if success(output)
@@ -87,9 +90,9 @@ function grid_search_tune(
8790
for (i, c) in enumerate(costs)
8891
total_cost[i] += c[2]
8992
end
90-
@show ex
93+
@error ex
9194
finally
92-
finalize(nlp)
95+
finalize(problem)
9396
end
9497
end
9598
total_cost

src/logger.jl

-88
This file was deleted.

src/optsolver.jl

-71
This file was deleted.

src/output.jl

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
export AbstractSolverOutput
22

33
"""
4-
AbstractSolverOutput
4+
AbstractSolverOutput{T}
55
66
Base type for output of JSO-compliant solvers.
77
An output must have at least the following:
8-
- `status :: Bool`
8+
- `status :: Symbol`
99
- `solution`
1010
"""
1111
abstract type AbstractSolverOutput{T} end

src/parameters.jl

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
export parameters, are_valid_parameters
2+
3+
"""
4+
named_tuple = parameters(solver)
5+
named_tuple = parameters(SolverType)
6+
named_tuple = parameters(SolverType{T})
7+
8+
Return the parameters of a `solver`, or of the type `SolverType`.
9+
You can specify the type `T` of the `SolverType`.
10+
The returned structure is a nested NamedTuple.
11+
Each key of `named_tuple` is the name of a parameter, and its value is a NamedTuple containing
12+
- `default`: The default value of the parameter.
13+
- `type`: The type of the parameter, such as `Int`, `Float64`, `T`, etc.
14+
15+
and possibly other values depending on the `type`.
16+
Some possibilies are:
17+
18+
- `scale`: How to explore the domain
19+
- `:linear`: A continuous value within a range
20+
- `:log`: A positive continuous value that should be explored logarithmically (like 10⁻², 10⁻¹, 1, 10).
21+
- `min`: Minimum value.
22+
- `max`: Maximum value.
23+
24+
Solvers should define
25+
26+
SolverCore.parameters(::Type{Solver{T}}) where T
27+
"""
28+
function parameters end
29+
30+
parameters(::Type{S}) where S <: AbstractSolver = parameters(S{Float64})
31+
parameters(::S) where S <: AbstractSolver = parameters(S)
32+
33+
"""
34+
are_valid_parameters(solver, args...)
35+
36+
Return whether the parameters given in `args` are valid for `solver`.
37+
The order of the parameters must be the same as in `parameters(solver)`.
38+
39+
Solvers should define
40+
41+
SolverCore.are_valid_parameters(::Type{Solver{T}}, arg1, arg2, ...) where T
42+
"""
43+
function are_valid_parameters end
44+
are_valid_parameters(::Type{S}, args...) where S <: AbstractSolver = are_valid_parameters(S{Float64}, args...)
45+
are_valid_parameters(::S, args...) where S <: AbstractSolver = are_valid_parameters(S, args...)

src/solver.jl

+2-34
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export AbstractSolver, solve!, parameters, are_valid_parameters
1+
export AbstractSolver, solve!
22

33
"""
44
AbstractSolver
@@ -20,36 +20,4 @@ end
2020
2121
Solve `problem` with `solver`.
2222
"""
23-
function solve!(::AbstractSolver, ::Any) end
24-
25-
"""
26-
named_tuple = parameters(solver)
27-
named_tuple = parameters(SolverType)
28-
named_tuple = parameters(SolverType{T})
29-
30-
Return the parameters of a `solver`, or of the type `SolverType`.
31-
You can specify the type `T` of the `SolverType`.
32-
The returned structure is a nested NamedTuple.
33-
Each key of `named_tuple` is the name of a parameter, and its value is a NamedTuple containing
34-
- `default`: The default value of the parameter.
35-
- `type`: The type of the parameter, which can any of:
36-
- `:real`: A continuous value within a range
37-
- `:log`: A positive continuous value that should be explored logarithmically (like 10⁻², 10⁻¹, 1, 10).
38-
- `:int`: Integer value.
39-
- `:bool`: Boolean value.
40-
- `min`: Minimum value (may not be included for some parameter types).
41-
- `max`: Maximum value.
42-
"""
43-
function parameters(::Type{AbstractSolver{T}}) where T end
44-
45-
parameters(::Type{S}) where S <: AbstractSolver = parameters(S{Float64})
46-
parameters(::S) where S <: AbstractSolver = parameters(S)
47-
48-
"""
49-
are_valid_parameters(solver, args...)
50-
51-
Return whether the parameters given in `args` are valid for `solver`.
52-
The order of the parameters must be the same as in `parameters(solver)`.
53-
"""
54-
function are_valid_parameters(::Type{AbstractSolver}, args...) end
55-
are_valid_parameters(::S) where S <: AbstractSolver = are_valid_parameters(S)
23+
function solve! end

0 commit comments

Comments
 (0)