Skip to content

Commit 3c2fd06

Browse files
Merge pull request #184 from jonasmac16/optim_constraint
Automatically wrap Optim solver in Fminbox
2 parents 91db6b4 + 1177e8e commit 3c2fd06

File tree

1 file changed

+20
-3
lines changed

1 file changed

+20
-3
lines changed

src/solve/optim.jl

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,24 @@ function __map_optimizer_args(prob::OptimizationProblem, opt::Union{Optim.Abstra
3232
return Optim.Options(;mapped_args...)
3333
end
3434

35-
function __solve(prob::OptimizationProblem, opt::Optim.AbstractOptimizer,
35+
function __solve(prob::OptimizationProblem, opt::Optim.AbstractOptimizer, data = DEFAULT_DATA;
36+
kwargs...)
37+
if !isnothing(prob.lb) | !isnothing(prob.ub)
38+
if !(opt isa Union{Optim.Fminbox, Optim.SAMIN, Optim.AbstractConstrainedOptimizer})
39+
if opt isa Optim.ParticleSwarm
40+
opt = Optim.ParticleSwarm(;lower=prob.lb, upper=prob.ub, n_particles=opt.n_particles)
41+
elseif opt isa Optim.SimulatedAnnealing
42+
@warn "$(opt) can currently not be wrapped in Fminbox(). The lower and upper bounds thus will be ignored. Consider using a different optimizer or open an issue with Optim.jl"
43+
else
44+
opt = Optim.Fminbox(opt)
45+
end
46+
end
47+
end
48+
49+
return ___solve(prob, opt, data; kwargs...)
50+
end
51+
52+
function ___solve(prob::OptimizationProblem, opt::Optim.AbstractOptimizer,
3653
data = DEFAULT_DATA;
3754
cb = (args...) -> (false),
3855
maxiters::Union{Number, Nothing} = nothing,
@@ -116,7 +133,7 @@ function __solve(prob::OptimizationProblem, opt::Optim.AbstractOptimizer,
116133
SciMLBase.build_solution(prob, opt, opt_res.minimizer, prob.sense === MaxSense ? -opt_res.minimum : opt_res.minimum; original=opt_res, retcode=opt_ret)
117134
end
118135

119-
function __solve(prob::OptimizationProblem, opt::Union{Optim.Fminbox,Optim.SAMIN},
136+
function ___solve(prob::OptimizationProblem, opt::Union{Optim.Fminbox,Optim.SAMIN},
120137
data = DEFAULT_DATA;
121138
cb = (args...) -> (false),
122139
maxiters::Union{Number, Nothing} = nothing,
@@ -184,7 +201,7 @@ function __solve(prob::OptimizationProblem, opt::Union{Optim.Fminbox,Optim.SAMIN
184201
end
185202

186203

187-
function __solve(prob::OptimizationProblem, opt::Optim.ConstrainedOptimizer,
204+
function ___solve(prob::OptimizationProblem, opt::Optim.ConstrainedOptimizer,
188205
data = DEFAULT_DATA;
189206
cb = (args...) -> (false),
190207
maxiters::Union{Number, Nothing} = nothing,

0 commit comments

Comments
 (0)