1
- abstract type AbstractOptimizationSolution end # experimental; comments welcome
2
- mutable struct OptimizationSolution{O, Tx, Tf, Tls, Tsb} <: AbstractOptimizationSolution
3
- method:: O
4
- initial_x:: Tx
5
- minimizer:: Tx
6
- minimum:: Tf
7
- iterations:: Int
8
- iteration_converged:: Bool
9
- ls_success:: Tls
10
- time_run:: Float64
11
- stopped_by:: Tsb
12
- end
13
-
14
- function Base. show (io:: IO , r:: AbstractOptimizationSolution )
15
- take = Iterators. take
16
- failure_string = " failure"
17
- if isa (r. ls_success, Bool) && ! r. ls_success
18
- failure_string *= " (line search failed)"
19
- end
20
-
21
- @printf io " * Status: %s\n\n " r. iteration_converged ? " success" : failure_string
22
- @printf io " * Candidate solution\n "
23
- fmt = " Final objective value: %e " * repeat (" , %e " ,length (r. minimum)- 1 )* " \n "
24
- @eval @printf ($ io, $ fmt, $ r. minimum... )
25
- # @printf io " Final objective value: %e\n" r.minimum
26
- @printf io " \n "
27
- @printf io " * Found with\n "
28
- @printf io " Algorithm: %s\n " r. method
29
- return
30
- end
31
-
32
1
struct NullData end
33
2
const DEFAULT_DATA = Iterators. cycle ((NullData (),))
34
3
Base. iterate (:: NullData , i= 1 ) = nothing
@@ -38,14 +7,6 @@ get_maxiters(data) = Iterators.IteratorSize(typeof(DEFAULT_DATA)) isa Iterators.
38
7
Iterators. IteratorSize (typeof (DEFAULT_DATA)) isa Iterators. SizeUnknown ?
39
8
typemax (Int) : length (data)
40
9
41
- struct EnsembleOptimizationProblem
42
- prob:: Array{T, 1} where T<: OptimizationProblem
43
- end
44
-
45
- function DiffEqBase. solve (prob:: Union{OptimizationProblem,EnsembleOptimizationProblem} , opt, args... ;kwargs... )
46
- __solve (prob, opt, args... ; kwargs... )
47
- end
48
-
49
10
#=
50
11
function update!(x::AbstractArray, x̄::AbstractArray{<:ForwardDiff.Dual})
51
12
x .-= x̄
@@ -159,15 +120,8 @@ function __solve(prob::OptimizationProblem, opt, data = DEFAULT_DATA;
159
120
160
121
_time = time ()
161
122
162
- OptimizationSolution (opt,
163
- prob. u0,# initial_x,
164
- θ, # pick_best_x(f_incr_pick, state),
165
- save_best ? first (min_err) : first (x), # pick_best_f(f_incr_pick, state, d),
166
- maxiters, # iteration,
167
- maxiters >= maxiters, # iteration == options.iterations,
168
- true ,
169
- _time- t0,
170
- NamedTuple ())
123
+ SciMLBase. build_solution (prob, opt, θ, x[1 ])
124
+ # here should be build_solution to create the output message
171
125
end
172
126
173
127
@@ -225,8 +179,16 @@ 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
+ SciMLBase. build_solution (prob, opt, original. minimizer,
191
+ original. minimum; original= original)
230
192
end
231
193
232
194
function __solve (prob:: OptimizationProblem , opt:: Union{Optim.Fminbox,Optim.SAMIN} ,
@@ -276,8 +238,14 @@ function __solve(prob::OptimizationProblem, opt::Union{Optim.Fminbox,Optim.SAMIN
276
238
end
277
239
optim_f = OnceDifferentiable (_loss, f. grad, fg!, prob. u0)
278
240
279
- Optim. optimize (optim_f, prob. lb, prob. ub, prob. u0, opt, ! (isnothing (maxiters)) ? Optim. Options (;extended_trace = true , callback = _cb, iterations = maxiters, kwargs... )
280
- : Optim. Options (;extended_trace = true , callback = _cb, kwargs... ))
241
+ original = Optim. optimize (optim_f, prob. lb, prob. ub, prob. u0, opt,
242
+ ! (isnothing (maxiters)) ? Optim. Options (;
243
+ extended_trace = true , callback = _cb,
244
+ iterations = maxiters, kwargs... ) :
245
+ Optim. Options (;extended_trace = true ,
246
+ callback = _cb, kwargs... ))
247
+ SciMLBase. build_solution (prob, opt, original. minimizer,
248
+ original. minimum; original= original)
281
249
end
282
250
283
251
@@ -345,8 +313,14 @@ function __solve(prob::OptimizationProblem, opt::Optim.ConstrainedOptimizer,
345
313
ub = prob. ub === nothing ? [] : prob. ub
346
314
optim_fc = TwiceDifferentiableConstraints (cons!, cons_j!, cons_hl!, lb, ub, prob. lcons, prob. ucons)
347
315
348
- Optim. optimize (optim_f, optim_fc, prob. u0, opt, ! (isnothing (maxiters)) ? Optim. Options (;extended_trace = true , callback = _cb, iterations = maxiters, kwargs... )
349
- : Optim. Options (;extended_trace = true , callback = _cb, kwargs... ))
316
+ original = Optim. optimize (optim_f, optim_fc, prob. u0, opt,
317
+ ! (isnothing (maxiters)) ? Optim. Options (;
318
+ extended_trace = true , callback = _cb,
319
+ iterations = maxiters, kwargs... ) :
320
+ Optim. Options (;extended_trace = true ,
321
+ callback = _cb, kwargs... ))
322
+ SciMLBase. build_solution (prob, opt, original. minimizer,
323
+ original. minimum; original= original)
350
324
end
351
325
352
326
@@ -399,17 +373,8 @@ function __init__()
399
373
400
374
bboptre = ! (isnothing (maxiters)) ? BlackBoxOptim. bboptimize (_loss;Method = opt. method, SearchRange = [(prob. lb[i], prob. ub[i]) for i in 1 : length (prob. lb)], MaxSteps = maxiters, CallbackFunction = _cb, CallbackInterval = 0.0 , kwargs... ) : BlackBoxOptim. bboptimize (_loss;Method = opt. method, SearchRange = [(prob. lb[i], prob. ub[i]) for i in 1 : length (prob. lb)], CallbackFunction = _cb, CallbackInterval = 0.0 , kwargs... )
401
375
402
-
403
- OptimizationSolution (opt. method,
404
- [NaN ],# initial_x,
405
- BlackBoxOptim. best_candidate (bboptre), # pick_best_x(f_incr_pick, state),
406
- BlackBoxOptim. best_fitness (bboptre), # pick_best_f(f_incr_pick, state, d),
407
- bboptre. iterations, # iteration,
408
- ! (isnothing (maxiters)) ? bboptre. iterations >= maxiters : true , # iteration == options.iterations,
409
- true ,
410
- bboptre. elapsed_time,
411
- NamedTuple ())
412
-
376
+ SciMLBase. build_solution (prob, opt, BlackBoxOptim. best_candidate (bboptre),
377
+ BlackBoxOptim. best_fitness (bboptre); original= bboptre)
413
378
end
414
379
415
380
function __solve (prob:: EnsembleOptimizationProblem , opt:: BBO , data = DEFAULT_DATA;
@@ -447,7 +412,7 @@ function __init__()
447
412
end
448
413
449
414
_loss = function (θ)
450
- x = ntuple (i-> first (prob. prob[i]. f (θ, prob. prob[i]. p, cur... )),length (prob. prob))
415
+ x = ntuple (i-> first (prob. prob[i]. f (θ, prob. prob[i]. p, cur... )),length (prob. prob))
451
416
return x
452
417
end
453
418
@@ -464,17 +429,8 @@ function __init__()
464
429
465
430
bboptre = ! (isnothing (maxiters)) ? BlackBoxOptim. bboptimize (_loss;Method = opt. method, SearchRange = [(multi_bounds. lb[i], multi_bounds. ub[i]) for i in 1 : length (multi_bounds. lb)], MaxSteps = maxiters, CallbackFunction = _cb, CallbackInterval = 0.0 , FitnessScheme= FitnessScheme, kwargs... ) : BlackBoxOptim. bboptimize (_loss;Method = opt. method, SearchRange = [(multi_bounds. lb[i], multi_bounds. ub[i]) for i in 1 : length (multi_bounds. lb)], CallbackFunction = _cb, CallbackInterval = 0.0 , FitnessScheme= FitnessScheme, kwargs... )
466
431
467
-
468
- OptimizationSolution (opt. method,
469
- [NaN ],# initial_x,
470
- BlackBoxOptim. best_candidate (bboptre), # pick_best_x(f_incr_pick, state),
471
- BlackBoxOptim. best_fitness (bboptre), # pick_best_f(f_incr_pick, state, d),
472
- bboptre. iterations, # iteration,
473
- ! (isnothing (maxiters)) ? bboptre. iterations >= maxiters : true , # iteration == options.iterations,
474
- true ,
475
- bboptre. elapsed_time,
476
- NamedTuple ())
477
-
432
+ SciMLBase. build_solution (prob, opt, BlackBoxOptim. best_candidate (bboptre),
433
+ BlackBoxOptim. best_fitness (bboptre); original= bboptre)
478
434
end
479
435
end
480
436
@@ -528,15 +484,7 @@ function __init__()
528
484
(minf,minx,ret) = NLopt. optimize (opt, prob. u0)
529
485
_time = time ()
530
486
531
- OptimizationSolution (opt. algorithm,
532
- prob. u0,# initial_x,
533
- minx, # pick_best_x(f_incr_pick, state),
534
- minf, # pick_best_f(f_incr_pick, state, d),
535
- Int (opt. numevals), # iteration,
536
- ! (isnothing (maxiters)) ? opt. numevals >= maxiters : true , # iteration == options.iterations,
537
- ret,
538
- _time- t0,
539
- NamedTuple ())
487
+ SciMLBase. build_solution (prob, opt, minx, minf; original= nothing )
540
488
end
541
489
end
542
490
@@ -570,15 +518,7 @@ function __init__()
570
518
571
519
t1 = time ()
572
520
573
- OptimizationSolution (opt,
574
- [NaN ],# initial_x,
575
- p. location, # pick_best_x(f_incr_pick, state),
576
- p. value, # pick_best_f(f_incr_pick, state, d),
577
- local_maxiters,
578
- local_maxiters>= opt. maxeval, # not sure if that's correct
579
- true ,
580
- t1 - t0,
581
- NamedTuple ())
521
+ SciMLBase. build_solution (prob, opt, p. location, p. value; original= p)
582
522
end
583
523
end
584
524
@@ -613,15 +553,7 @@ function __init__()
613
553
box = minimum (root)
614
554
t1 = time ()
615
555
616
- OptimizationSolution (opt,
617
- [NaN ],# initial_x,
618
- QuadDIRECT. position (box, x0), # pick_best_x(f_incr_pick, state),
619
- QuadDIRECT. value (box), # pick_best_f(f_incr_pick, state, d),
620
- ! (isnothing (maxiters)) ? maxiters : 0 ,
621
- box. qnconverged, # not sure if that's correct
622
- true ,
623
- t1 - t0,
624
- NamedTuple ())
556
+ SciMLBase. build_solution (prob, opt, QuadDIRECT. position (box, x0), QuadDIRECT. value (box); original= root)
625
557
end
626
558
end
627
559
@@ -669,15 +601,7 @@ function __init__()
669
601
: Evolutionary. Options (;callback = _cb, kwargs... ))
670
602
t1 = time ()
671
603
672
- OptimizationSolution (summary (result),
673
- prob. u0, # initial_x
674
- Evolutionary. minimizer (result), # pick_best_x
675
- minimum (result), # pick_best_f
676
- Evolutionary. iterations (result), # iteration
677
- Evolutionary. converged (result), # convergence status
678
- true ,
679
- t1 - t0,
680
- NamedTuple ())
604
+ SciMLBase. build_solution (prob, opt, Evolutionary. minimizer (result), Evolutionary. minimum (result); original= result)
681
605
end
682
606
end
683
607
@require CMAEvolutionStrategy= " 8d3b24bd-414e-49e0-94fb-163cc3a3e411" begin
@@ -726,15 +650,7 @@ function __init__()
726
650
criterion = false
727
651
end
728
652
729
- OptimizationSolution (opt,
730
- prob. u0,# initial_x,
731
- result. logger. xbest[end ], # pick_best_x(f_incr_pick, state),
732
- result. logger. fbest[end ], # pick_best_f(f_incr_pick, state, d),
733
- length (result. logger. fbest),
734
- criterion,
735
- true ,
736
- result. logger. times[end ] - result. logger. times[1 ],
737
- NamedTuple ())
653
+ SciMLBase. build_solution (prob, opt, result. logger. xbest[end ], result. logger. fbest[end ]; original= result)
738
654
end
739
655
end
740
656
end
0 commit comments