From 2be297efd93df13df7a884e2150b0ea65c5170c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Sun, 5 Apr 2020 19:19:02 +0200 Subject: [PATCH 1/2] Implement setting optimizer attributes --- src/MOI_wrapper.jl | 3 +++ test/Tests/test_MOI_wrapper.jl | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/src/MOI_wrapper.jl b/src/MOI_wrapper.jl index c6d7ea4..4bbbde4 100644 --- a/src/MOI_wrapper.jl +++ b/src/MOI_wrapper.jl @@ -216,6 +216,9 @@ function MOI.get(optimizer::DualOptimizer, ::MOI.DualStatus) return MOI.get(optimizer.dual_problem.dual_model, MOI.PrimalStatus()) end +function MOI.set(optimizer::DualOptimizer, attr::MOI.AbstractOptimizerAttribute, value) + return MOI.set(optimizer.dual_problem.dual_model, attr, value) +end function MOI.get(optimizer::DualOptimizer, attr::Union{MOI.AbstractModelAttribute, MOI.AbstractOptimizerAttribute}) return MOI.get(optimizer.dual_problem.dual_model, attr) end diff --git a/test/Tests/test_MOI_wrapper.jl b/test/Tests/test_MOI_wrapper.jl index 631806a..910fa69 100644 --- a/test/Tests/test_MOI_wrapper.jl +++ b/test/Tests/test_MOI_wrapper.jl @@ -71,6 +71,13 @@ end @testset "attributes" begin + for optimizer in [dual_conic_optimizer; dual_linear_optimizer] + before = MOI.get(optimizer, MOI.Silent()) + MOI.set(optimizer, MOI.Silent(), !before) + @test MOI.get(optimizer, MOI.Silent()) == !before + MOI.set(optimizer, MOI.Silent(), before) + @test MOI.get(optimizer, MOI.Silent()) == before + end for i in eachindex(dual_conic_optimizer) @test MOI.get(dual_conic_optimizer[i], MOI.SolverName()) == "Dual model with $(MOI.get(primal_conic_optimizer[i], MOI.SolverName())) attached" From c9bc1d173efd2070b67d9d74301d61e80fe96f18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Sun, 5 Apr 2020 22:11:57 +0200 Subject: [PATCH 2/2] Add UniversalFallback --- src/MOI_wrapper.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MOI_wrapper.jl b/src/MOI_wrapper.jl index 4bbbde4..c74abb8 100644 --- a/src/MOI_wrapper.jl +++ b/src/MOI_wrapper.jl @@ -54,7 +54,7 @@ function DualOptimizer(dual_optimizer::OT) where {OT <: MOI.ModelLike} end function DualOptimizer{T}(dual_optimizer::OT) where {T, OT <: MOI.ModelLike} - dual_problem = DualProblem{T}(MOIB.full_bridge_optimizer(MOIU.CachingOptimizer(DualizableModel{T}(), dual_optimizer), T)) + dual_problem = DualProblem{T}(MOIB.full_bridge_optimizer(MOIU.CachingOptimizer(MOIU.UniversalFallback(DualizableModel{T}()), dual_optimizer), T)) # discover the type of MOIU.CachingOptimizer(DualizableModel{T}(), dual_optimizer) OptimizerType = typeof(dual_problem.dual_model) return DualOptimizer{T, OptimizerType}(dual_problem)