Skip to content

Commit 3ae6a7b

Browse files
Fix solution output and make it a major
1 parent 44b73d1 commit 3ae6a7b

File tree

5 files changed

+33
-78
lines changed

5 files changed

+33
-78
lines changed

Project.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "GalacticOptim"
22
uuid = "a75be94c-b780-496d-a8a9-0878b188d577"
33
authors = ["Vaibhavdixit02 <[email protected]>"]
4-
version = "0.4.7"
4+
version = "1.0.0"
55

66
[deps]
77
ArrayInterface = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9"
@@ -40,7 +40,7 @@ ProgressLogging = "0.1"
4040
Reexport = "0.2, 1.0"
4141
Requires = "1.0"
4242
ReverseDiff = "1.4"
43-
SciMLBase = "1.7.3"
43+
SciMLBase = "1.8"
4444
TerminalLoggers = "0.1"
4545
Tracker = "0.2"
4646
Zygote = "0.5, 0.6"

src/GalacticOptim.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ using Logging, ProgressLogging, Printf, ConsoleProgressMonitor, TerminalLoggers,
1010
using ArrayInterface, Base.Iterators
1111

1212
using ForwardDiff: DEFAULT_CHUNK_THRESHOLD
13-
import DiffEqBase: OptimizationProblem, OptimizationFunction, AbstractADType
13+
import SciMLBase: OptimizationProblem, OptimizationFunction, AbstractADType, __solve
1414

1515
import ModelingToolkit
1616
import ModelingToolkit: AutoModelingToolkit

src/solve.jl

Lines changed: 28 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ function __solve(prob::OptimizationProblem, opt, data = DEFAULT_DATA;
120120

121121
_time = time()
122122

123-
build_solution(prob, opt, θ, x[1])
123+
SciMLBase.build_solution(prob, opt, θ, x[1])
124124
# here should be build_solution to create the output message
125125
end
126126

@@ -187,7 +187,8 @@ function __solve(prob::OptimizationProblem, opt::Optim.AbstractOptimizer,
187187
kwargs...) :
188188
Optim.Options(;extended_trace = true,
189189
callback = _cb, kwargs...))
190-
build_solution(prob, opt, original.minimizer, original.minimum; original=original)
190+
SciMLBase.build_solution(prob, opt, original.minimizer,
191+
original.minimum; original=original)
191192
end
192193

193194
function __solve(prob::OptimizationProblem, opt::Union{Optim.Fminbox,Optim.SAMIN},
@@ -237,8 +238,14 @@ function __solve(prob::OptimizationProblem, opt::Union{Optim.Fminbox,Optim.SAMIN
237238
end
238239
optim_f = OnceDifferentiable(_loss, f.grad, fg!, prob.u0)
239240

240-
Optim.optimize(optim_f, prob.lb, prob.ub, prob.u0, opt, !(isnothing(maxiters)) ? Optim.Options(;extended_trace = true, callback = _cb, iterations = maxiters, kwargs...)
241-
: 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)
242249
end
243250

244251

@@ -306,8 +313,14 @@ function __solve(prob::OptimizationProblem, opt::Optim.ConstrainedOptimizer,
306313
ub = prob.ub === nothing ? [] : prob.ub
307314
optim_fc = TwiceDifferentiableConstraints(cons!, cons_j!, cons_hl!, lb, ub, prob.lcons, prob.ucons)
308315

309-
Optim.optimize(optim_f, optim_fc, prob.u0, opt, !(isnothing(maxiters)) ? Optim.Options(;extended_trace = true, callback = _cb, iterations = maxiters, kwargs...)
310-
: 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)
311324
end
312325

313326

@@ -360,17 +373,8 @@ function __init__()
360373

361374
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...)
362375

363-
364-
OptimizationSolution(opt.method,
365-
[NaN],# initial_x,
366-
BlackBoxOptim.best_candidate(bboptre), #pick_best_x(f_incr_pick, state),
367-
BlackBoxOptim.best_fitness(bboptre), # pick_best_f(f_incr_pick, state, d),
368-
bboptre.iterations, #iteration,
369-
!(isnothing(maxiters)) ? bboptre.iterations >= maxiters : true, #iteration == options.iterations,
370-
true,
371-
bboptre.elapsed_time,
372-
NamedTuple())
373-
376+
SciMLBase.build_solution(prob, opt, BlackBoxOptim.best_candidate(bboptre),
377+
BlackBoxOptim.best_fitness(bboptre); original=bboptre)
374378
end
375379

376380
function __solve(prob::EnsembleOptimizationProblem, opt::BBO, data = DEFAULT_DATA;
@@ -425,17 +429,8 @@ function __init__()
425429

426430
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...)
427431

428-
429-
OptimizationSolution(opt.method,
430-
[NaN],# initial_x,
431-
BlackBoxOptim.best_candidate(bboptre), #pick_best_x(f_incr_pick, state),
432-
BlackBoxOptim.best_fitness(bboptre), # pick_best_f(f_incr_pick, state, d),
433-
bboptre.iterations, #iteration,
434-
!(isnothing(maxiters)) ? bboptre.iterations >= maxiters : true, #iteration == options.iterations,
435-
true,
436-
bboptre.elapsed_time,
437-
NamedTuple())
438-
432+
SciMLBase.build_solution(prob, opt, BlackBoxOptim.best_candidate(bboptre),
433+
BlackBoxOptim.best_fitness(bboptre); original=bboptre)
439434
end
440435
end
441436

@@ -489,15 +484,7 @@ function __init__()
489484
(minf,minx,ret) = NLopt.optimize(opt, prob.u0)
490485
_time = time()
491486

492-
OptimizationSolution(opt.algorithm,
493-
prob.u0,# initial_x,
494-
minx, #pick_best_x(f_incr_pick, state),
495-
minf, # pick_best_f(f_incr_pick, state, d),
496-
Int(opt.numevals), #iteration,
497-
!(isnothing(maxiters)) ? opt.numevals >= maxiters : true, #iteration == options.iterations,
498-
ret,
499-
_time-t0,
500-
NamedTuple())
487+
SciMLBase.build_solution(prob, opt, minx, minf; original=nothing)
501488
end
502489
end
503490

@@ -531,15 +518,7 @@ function __init__()
531518

532519
t1 = time()
533520

534-
OptimizationSolution(opt,
535-
[NaN],# initial_x,
536-
p.location, #pick_best_x(f_incr_pick, state),
537-
p.value, # pick_best_f(f_incr_pick, state, d),
538-
local_maxiters,
539-
local_maxiters>=opt.maxeval, #not sure if that's correct
540-
true,
541-
t1 - t0,
542-
NamedTuple())
521+
SciMLBase.build_solution(prob, opt, p.location, p.value; original=p)
543522
end
544523
end
545524

@@ -574,15 +553,7 @@ function __init__()
574553
box = minimum(root)
575554
t1 = time()
576555

577-
OptimizationSolution(opt,
578-
[NaN],# initial_x,
579-
QuadDIRECT.position(box, x0), #pick_best_x(f_incr_pick, state),
580-
QuadDIRECT.value(box), # pick_best_f(f_incr_pick, state, d),
581-
!(isnothing(maxiters)) ? maxiters : 0,
582-
box.qnconverged, #not sure if that's correct
583-
true,
584-
t1 - t0,
585-
NamedTuple())
556+
SciMLBase.build_solution(prob, opt, QuadDIRECT.position(box, x0), QuadDIRECT.value(box); original=root)
586557
end
587558
end
588559

@@ -630,15 +601,7 @@ function __init__()
630601
: Evolutionary.Options(;callback = _cb, kwargs...))
631602
t1 = time()
632603

633-
OptimizationSolution(summary(result),
634-
prob.u0, #initial_x
635-
Evolutionary.minimizer(result), #pick_best_x
636-
minimum(result), #pick_best_f
637-
Evolutionary.iterations(result), #iteration
638-
Evolutionary.converged(result), #convergence status
639-
true,
640-
t1 - t0,
641-
NamedTuple())
604+
SciMLBase.build_solution(prob, opt, Evolutionary.minimizer(result), Evolutionary.minimum(result); original=result)
642605
end
643606
end
644607
@require CMAEvolutionStrategy="8d3b24bd-414e-49e0-94fb-163cc3a3e411" begin
@@ -687,15 +650,7 @@ function __init__()
687650
criterion = false
688651
end
689652

690-
OptimizationSolution(opt,
691-
prob.u0,# initial_x,
692-
result.logger.xbest[end], #pick_best_x(f_incr_pick, state),
693-
result.logger.fbest[end], # pick_best_f(f_incr_pick, state, d),
694-
length(result.logger.fbest),
695-
criterion,
696-
true,
697-
result.logger.times[end] - result.logger.times[1],
698-
NamedTuple())
653+
SciMLBase.build_solution(prob, opt, result.logger.xbest[end], result.logger.fbest[end]; original=result)
699654
end
700655
end
701656
end

test/diffeqfluxtests.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ result_neuralode = GalacticOptim.solve(prob,
105105
ADAM(), cb = callback,
106106
maxiters = 300)
107107

108-
prob2 = remake(prob,u0=result_neuralode.minimizer)
108+
prob2 = remake(prob,u0=result_neuralode.u)
109109
result_neuralode2 = GalacticOptim.solve(prob2,
110110
BFGS(initial_stepnorm=0.0001),
111111
cb = callback,

test/rosenbrock.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ cons_circ = (x,p) -> [x[1]^2 + x[2]^2]
6868
optprob = OptimizationFunction(rosenbrock, GalacticOptim.AutoForwardDiff();cons= cons_circ)
6969
prob = OptimizationProblem(optprob, x0, lcons = [-Inf], ucons = [0.25^2])
7070
sol = solve(prob, IPNewton())
71-
@test sqrt(cons(sol.minimizer,nothing)[1]) 0.25 rtol = 1e-6
71+
@test sqrt(cons(sol.u,nothing)[1]) 0.25 rtol = 1e-6
7272

7373
optprob = OptimizationFunction(rosenbrock, GalacticOptim.AutoZygote())
7474
prob = OptimizationProblem(optprob, x0)

0 commit comments

Comments
 (0)