1
- abstract type AbstractOptimizationSolution{T, N} <: AbstractNoTimeSolution{T, N} end
2
-
3
- struct OptimizationSolution{T, N, uType, P, A, Tf} <: AbstractOptimizationSolution{T, N}
4
- u:: uType # minimizer
5
- prob:: P # optimization problem
6
- alg:: A # algorithm
7
- minimum:: Tf
8
- initial_x:: Array{Float64,1}
9
- retcode:: Symbol
10
- original:: String # original output of the optimizer
11
- end
12
-
13
- function build_solution (prob:: AbstractNonlinearProblem ,
14
- alg, u, minimum;
15
- initial_x = prob. u0,
16
- retcode = :Default ,
17
- original = nothing ,
18
- kwargs... )
19
-
20
- T = eltype (eltype (u))
21
- N = ndims (u)
22
-
23
- OptimizationSolution{T, N, typeof (u), typeof (prob), typeof (alg),
24
- typeof (minimum)}
25
- (u, prob, alg, minimum, initial_x,
26
- retcode, original)
27
- end
28
-
29
- function Base. show (io:: IO , A:: AbstractNoTimeSolution )
30
-
31
- @printf io " \n * Status: %s\n\n " A. retcode === :Success ? " success" : " failure"
32
- @printf io " * Candidate solution\n "
33
- @printf io " Final objective value: %e\n " A. minimum
34
- @printf io " \n "
35
- @printf io " * Found with\n "
36
- @printf io " Algorithm: %s\n " A. alg
37
- return
38
- end
39
-
40
1
struct NullData end
41
2
const DEFAULT_DATA = Iterators. cycle ((NullData (),))
42
3
Base. iterate (:: NullData , i= 1 ) = nothing
@@ -46,14 +7,6 @@ get_maxiters(data) = Iterators.IteratorSize(typeof(DEFAULT_DATA)) isa Iterators.
46
7
Iterators. IteratorSize (typeof (DEFAULT_DATA)) isa Iterators. SizeUnknown ?
47
8
typemax (Int) : length (data)
48
9
49
- struct EnsembleOptimizationProblem
50
- prob:: Array{T, 1} where T<: OptimizationProblem
51
- end
52
-
53
- function DiffEqBase. solve (prob:: Union{OptimizationProblem,EnsembleOptimizationProblem} , opt, args... ;kwargs... )
54
- __solve (prob, opt, args... ; kwargs... )
55
- end
56
-
57
10
#=
58
11
function update!(x::AbstractArray, x̄::AbstractArray{<:ForwardDiff.Dual})
59
12
x .-= x̄
@@ -167,6 +120,7 @@ function __solve(prob::OptimizationProblem, opt, data = DEFAULT_DATA;
167
120
168
121
_time = time ()
169
122
123
+ build_solution (prob, opt, θ, x[1 ])
170
124
# here should be build_solution to create the output message
171
125
end
172
126
@@ -225,8 +179,15 @@ function __solve(prob::OptimizationProblem, opt::Optim.AbstractOptimizer,
225
179
optim_f = TwiceDifferentiable (_loss, (G, θ) -> f. grad (G, θ, cur... ), fg!, (H,θ) -> f. hess (H,θ,cur... ), prob. u0)
226
180
end
227
181
228
- Optim. optimize (optim_f, prob. u0, opt, ! (isnothing (maxiters)) ? Optim. Options (;extended_trace = true , callback = _cb, iterations = maxiters, kwargs... )
229
- : Optim. Options (;extended_trace = true , callback = _cb, kwargs... ))
182
+ original = Optim. optimize (optim_f, prob. u0, opt,
183
+ ! (isnothing (maxiters)) ?
184
+ Optim. Options (;extended_trace = true ,
185
+ callback = _cb,
186
+ iterations = maxiters,
187
+ kwargs... ) :
188
+ Optim. Options (;extended_trace = true ,
189
+ callback = _cb, kwargs... ))
190
+ build_solution (prob, opt, original. minimizer, original. minimum; original= original)
230
191
end
231
192
232
193
function __solve (prob:: OptimizationProblem , opt:: Union{Optim.Fminbox,Optim.SAMIN} ,
0 commit comments