diff --git a/lib/OptimizationOptimJL/src/OptimizationOptimJL.jl b/lib/OptimizationOptimJL/src/OptimizationOptimJL.jl index 098645cb6..782e18623 100644 --- a/lib/OptimizationOptimJL/src/OptimizationOptimJL.jl +++ b/lib/OptimizationOptimJL/src/OptimizationOptimJL.jl @@ -21,6 +21,7 @@ function __map_optimizer_args(cache::OptimizationCache, Optim.SAMIN, Optim.ConstrainedOptimizer}; callback = nothing, maxiters::Union{Number, Nothing} = nothing, + local_maxiters::Union{Number, Nothing} = nothing, maxtime::Union{Number, Nothing} = nothing, abstol::Union{Number, Nothing} = nothing, reltol::Union{Number, Nothing} = nothing, @@ -36,7 +37,22 @@ function __map_optimizer_args(cache::OptimizationCache, end if !isnothing(maxiters) - mapped_args = (; mapped_args..., iterations = maxiters) + if opt isa Optim.Fminbox + if !isnothing(local_maxiters) + mapped_args = (; + mapped_args..., + outer_iterations = maxiters, + iterations = local_maxiters) + else + mapped_args = (; mapped_args..., outer_iterations = maxiters) + end + else + mapped_args = (; mapped_args..., iterations = maxiters) + end + end + + if !isnothing(local_maxiters) && opt isa Optim.Fminbox + mapped_args = (; mapped_args..., iterations = local_maxiters) end if !isnothing(maxtime) diff --git a/lib/OptimizationOptimJL/test/runtests.jl b/lib/OptimizationOptimJL/test/runtests.jl index 29c46482f..0697b53d6 100644 --- a/lib/OptimizationOptimJL/test/runtests.jl +++ b/lib/OptimizationOptimJL/test/runtests.jl @@ -37,6 +37,15 @@ using Test sol = solve(prob, Optim.KrylovTrustRegion()) @test 10 * sol.objective < l1 + sol = solve(prob, Optim.BFGS(), maxiters = 1) + @test sol.original.iterations == 1 + + sol = solve(prob, Optim.BFGS(), maxiters = 1, local_maxiters = 2) + @test sol.original.iterations == 1 + + sol = solve(prob, Optim.BFGS(), local_maxiters = 2) + @test sol.original.iterations > 2 + cons = (res, x, p) -> res .= [x[1]^2 + x[2]^2] optprob = OptimizationFunction(rosenbrock, Optimization.AutoModelingToolkit(); cons = cons)