From 79597c03e607a23f6d2f68bbf145e57e051ebfa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Fri, 29 Dec 2023 14:46:12 +0100 Subject: [PATCH 1/4] [Bridges] Fix ListOfVariablesWithAttributeSet --- src/Bridges/bridge_optimizer.jl | 17 +++++++++++++++++ test/Bridges/bridge_optimizer.jl | 18 ++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/src/Bridges/bridge_optimizer.jl b/src/Bridges/bridge_optimizer.jl index 1405be62ac..53c599aeea 100644 --- a/src/Bridges/bridge_optimizer.jl +++ b/src/Bridges/bridge_optimizer.jl @@ -894,6 +894,23 @@ function MOI.get( return unbridged_function(b, MOI.get(b.model, attr)) end +function MOI.get( + b::AbstractBridgeOptimizer, + attr::MOI.ListOfVariablesWithAttributeSet, +) + if Variable.has_bridges(Variable.bridges(b)) + # If there are variable bridges, `MOI.get(b.model, attr)` + # will return a list containing solver variables that do not + # correspond to any user variables. + # We choose the easy option of simply returning all variables + # for now. + return MOI.get(model, MOI.ListOfVariableIndices()) + else + return unbridged_function(b, MOI.get(b.model, attr)) + end +end + + function MOI.get( b::AbstractBridgeOptimizer, attr::MOI.ListOfConstraintsWithAttributeSet{F,S,MOI.ConstraintName}, diff --git a/test/Bridges/bridge_optimizer.jl b/test/Bridges/bridge_optimizer.jl index daf11fffe3..3b1548a018 100644 --- a/test/Bridges/bridge_optimizer.jl +++ b/test/Bridges/bridge_optimizer.jl @@ -1158,6 +1158,24 @@ function test_variable_bridge_constraint_attribute() return end +function test_ListOfVariablesWithAttributeSet(T = Float64) + uf = MOI.Utilities.UniversalFallback(MOI.Utilities.Model{T}()) + model = MOI.Bridges.full_bridge_optimizer(uf, T) + x = MOI.add_variables(model, 2) + MOI.set(model, MOI.VariableName(), x[1], "x") + # Passed through to Model with no special support + attr = MOI.ListOfVariablesWithAttributeSet(MOI.VariableName()) + @test MOI.get(model, attr) == x + # Handled by UniversalFallback + attr = MOI.ListOfVariablesWithAttributeSet(MOI.VariablePrimalStart()) + # ... no attributes set + @test MOI.get(model, attr) == MOI.VariableIndex[] + # ... one attribute set + MOI.set(model, MOI.VariablePrimalStart(), x[2], 1.0) + @test MOI.get(model, attr) == [x[2]] + return +end + end # module TestBridgeOptimizer.runtests() From 569d8138881f52b1c8cc6a47c97a4e989a96e772 Mon Sep 17 00:00:00 2001 From: Oscar Dowson Date: Sat, 30 Dec 2023 10:01:30 +1300 Subject: [PATCH 2/4] Update src/Bridges/bridge_optimizer.jl --- src/Bridges/bridge_optimizer.jl | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Bridges/bridge_optimizer.jl b/src/Bridges/bridge_optimizer.jl index 53c599aeea..36cf799d15 100644 --- a/src/Bridges/bridge_optimizer.jl +++ b/src/Bridges/bridge_optimizer.jl @@ -910,7 +910,6 @@ function MOI.get( end end - function MOI.get( b::AbstractBridgeOptimizer, attr::MOI.ListOfConstraintsWithAttributeSet{F,S,MOI.ConstraintName}, From 2bbfad128b3ee27345bd2de63e226f1717fe9311 Mon Sep 17 00:00:00 2001 From: Oscar Dowson Date: Sat, 30 Dec 2023 10:02:25 +1300 Subject: [PATCH 3/4] Update lazy_bridge_optimizer.jl --- test/Bridges/lazy_bridge_optimizer.jl | 5 ----- 1 file changed, 5 deletions(-) diff --git a/test/Bridges/lazy_bridge_optimizer.jl b/test/Bridges/lazy_bridge_optimizer.jl index 9f68c34d7f..d4e72b45e7 100644 --- a/test/Bridges/lazy_bridge_optimizer.jl +++ b/test/Bridges/lazy_bridge_optimizer.jl @@ -328,11 +328,6 @@ function test_MOI_runtests_StandardSDPAModel() # fix would require that a bridge optimizer has a try-catch for this # error. "test_model_ScalarFunctionConstantNotZero", - # The error is: - # Cannot substitute `MOI.VariableIndex(1)` as it is bridged into `0.0 + 1.0 MOI.VariableIndex(-1)`. - # This seems okay. We can't get a list of variables if they are - # bridged. - "test_model_ListOfVariablesWithAttributeSet", ], ) return From 1df436d6f943d9847c9c3bafb53b2cc8e7e40e92 Mon Sep 17 00:00:00 2001 From: Oscar Dowson Date: Sat, 30 Dec 2023 10:31:22 +1300 Subject: [PATCH 4/4] Update src/Bridges/bridge_optimizer.jl --- src/Bridges/bridge_optimizer.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Bridges/bridge_optimizer.jl b/src/Bridges/bridge_optimizer.jl index 36cf799d15..6052b9f5e2 100644 --- a/src/Bridges/bridge_optimizer.jl +++ b/src/Bridges/bridge_optimizer.jl @@ -904,7 +904,7 @@ function MOI.get( # correspond to any user variables. # We choose the easy option of simply returning all variables # for now. - return MOI.get(model, MOI.ListOfVariableIndices()) + return MOI.get(b, MOI.ListOfVariableIndices()) else return unbridged_function(b, MOI.get(b.model, attr)) end