From 05ba0b160e02a32f06a9849f6ce31b275da60261 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Wed, 23 Feb 2022 15:06:04 -0500 Subject: [PATCH 1/3] Call final_touch in optimize in CachingOptimizer --- src/Utilities/cachingoptimizer.jl | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Utilities/cachingoptimizer.jl b/src/Utilities/cachingoptimizer.jl index 02d8d56dfd..e193406716 100644 --- a/src/Utilities/cachingoptimizer.jl +++ b/src/Utilities/cachingoptimizer.jl @@ -298,6 +298,7 @@ MOI.is_empty(m::CachingOptimizer) = MOI.is_empty(m.model_cache) function MOI.optimize!(m::CachingOptimizer) if m.mode == AUTOMATIC && m.state == EMPTY_OPTIMIZER + final_touch(m.model_cache, nothing) # Here is a special case for callbacks: we can't use the two-argument # call to optimize! because we need the `optimizer_to_model_map` to be # set _prior_ to starting the optimization process. Therefore, we need From 2029ec79f7c59e7d0c54ab04ff46caf2d51db37c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Thu, 24 Feb 2022 10:00:13 -0500 Subject: [PATCH 2/3] Add test --- test/Utilities/cachingoptimizer.jl | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/test/Utilities/cachingoptimizer.jl b/test/Utilities/cachingoptimizer.jl index 672a62729d..734efc11dd 100644 --- a/test/Utilities/cachingoptimizer.jl +++ b/test/Utilities/cachingoptimizer.jl @@ -914,6 +914,35 @@ function test_copy_optimizer_attributes_2887() return end +mutable struct FinalTouchDetector <: MOI.ModelLike + index_map::Any +end + +function MOI.Utilities.final_touch(model::FinalTouchDetector, index_map) + model.index_map = index_map + return +end +function MOI.copy_to(::MOI.Utilities.MockOptimizer, ::FinalTouchDetector) + return MOI.Utilities.IndexMap() +end +function MOI.get(::FinalTouchDetector, ::MOI.ListOfModelAttributesSet) + return MOI.AbstractModelAttribute[] +end + +function test_final_touch_optimize() + model = MOI.Utilities.CachingOptimizer( + FinalTouchDetector(missing), + MOI.Utilities.MockOptimizer(MOI.Utilities.Model{Float64}()), + ) + MOI.Utilities.attach_optimizer(model) + @test model.model_cache.index_map === nothing + MOI.Utilities.final_touch(model, missing) + @test model.model_cache.index_map === missing + MOI.Utilities.reset_optimizer(model) + MOI.optimize!(model) + @test model.model_cache.index_map === nothing +end + end # module TestCachingOptimizer.runtests() From 69fe8393bdc07c694e97c5dede5dabb7b25581e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Thu, 24 Feb 2022 11:22:17 -0500 Subject: [PATCH 3/3] Fix rebase --- test/Utilities/cachingoptimizer.jl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/Utilities/cachingoptimizer.jl b/test/Utilities/cachingoptimizer.jl index 734efc11dd..c61a800fdb 100644 --- a/test/Utilities/cachingoptimizer.jl +++ b/test/Utilities/cachingoptimizer.jl @@ -925,6 +925,9 @@ end function MOI.copy_to(::MOI.Utilities.MockOptimizer, ::FinalTouchDetector) return MOI.Utilities.IndexMap() end +function MOI.get(::FinalTouchDetector, ::MOI.ListOfOptimizerAttributesSet) + return MOI.AbstractOptimizerAttribute[] +end function MOI.get(::FinalTouchDetector, ::MOI.ListOfModelAttributesSet) return MOI.AbstractModelAttribute[] end