From 719f2a7ed37acf1fdcc933f644b39eea2835a8e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Miclu=C8=9Ba-C=C3=A2mpeanu?= Date: Sat, 3 Jun 2023 00:15:12 +0300 Subject: [PATCH 1/4] map `maxiters` to `outer_iterations` --- lib/OptimizationOptimJL/src/OptimizationOptimJL.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/OptimizationOptimJL/src/OptimizationOptimJL.jl b/lib/OptimizationOptimJL/src/OptimizationOptimJL.jl index 358c4956d..ec3a82707 100644 --- a/lib/OptimizationOptimJL/src/OptimizationOptimJL.jl +++ b/lib/OptimizationOptimJL/src/OptimizationOptimJL.jl @@ -104,7 +104,7 @@ function __map_optimizer_args(cache::OptimJLOptimizationCache, end if !isnothing(maxiters) - mapped_args = (; mapped_args..., iterations = maxiters) + mapped_args = (; mapped_args..., outer_iterations = maxiters) end if !isnothing(maxtime) From 4766051989356b27d7c5c0ada085874c06c5f5e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Miclu=C8=9Ba-C=C3=A2mpeanu?= Date: Wed, 27 Sep 2023 16:45:26 +0300 Subject: [PATCH 2/4] map `outer_iterations` to `maxiters` for Fminbox --- .../src/OptimizationOptimJL.jl | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/OptimizationOptimJL/src/OptimizationOptimJL.jl b/lib/OptimizationOptimJL/src/OptimizationOptimJL.jl index ce62638ac..04b5506e7 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,19 @@ function __map_optimizer_args(cache::OptimizationCache, end if !isnothing(maxiters) - mapped_args = (; mapped_args..., outer_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) From eb3d4ecc95a7e3988cd81e7862bebf7cd37a18b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Miclu=C8=9Ba-C=C3=A2mpeanu?= Date: Wed, 27 Sep 2023 17:01:57 +0300 Subject: [PATCH 3/4] fix formating for `mapped_args` --- lib/OptimizationOptimJL/src/OptimizationOptimJL.jl | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/OptimizationOptimJL/src/OptimizationOptimJL.jl b/lib/OptimizationOptimJL/src/OptimizationOptimJL.jl index 04b5506e7..782e18623 100644 --- a/lib/OptimizationOptimJL/src/OptimizationOptimJL.jl +++ b/lib/OptimizationOptimJL/src/OptimizationOptimJL.jl @@ -39,7 +39,10 @@ function __map_optimizer_args(cache::OptimizationCache, if !isnothing(maxiters) if opt isa Optim.Fminbox if !isnothing(local_maxiters) - mapped_args = (; mapped_args..., outer_iterations = maxiters, iterations = local_maxiters) + mapped_args = (; + mapped_args..., + outer_iterations = maxiters, + iterations = local_maxiters) else mapped_args = (; mapped_args..., outer_iterations = maxiters) end From 073f5071bc493c63dc959236330645d977166087 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Miclu=C8=9Ba-C=C3=A2mpeanu?= Date: Wed, 27 Sep 2023 17:30:02 +0300 Subject: [PATCH 4/4] add tests for Optim maxiters handling --- lib/OptimizationOptimJL/test/runtests.jl | 9 +++++++++ 1 file changed, 9 insertions(+) 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)