From 747ca204ece7e8a1e3f0edb848af7b085ceab3de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Fri, 13 Oct 2023 19:01:04 +0200 Subject: [PATCH 1/3] Use conversion cost for Objective bridge --- src/Bridges/Objective/bridges/conversion.jl | 6 +++++ test/Bridges/lazy_bridge_optimizer.jl | 25 +++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/Bridges/Objective/bridges/conversion.jl b/src/Bridges/Objective/bridges/conversion.jl index c0e573f551..92deb99bf9 100644 --- a/src/Bridges/Objective/bridges/conversion.jl +++ b/src/Bridges/Objective/bridges/conversion.jl @@ -48,6 +48,12 @@ function supports_objective_function( return isfinite(MOI.Bridges.Constraint.conversion_cost(F, G)) end +function MOI.Bridges.bridging_cost( + ::Type{FunctionConversionBridge{T,F,G}}, +) where {T,F,G} + return MOI.Bridges.Constraint.conversion_cost(F, G) +end + function MOI.Bridges.added_constrained_variable_types( ::Type{<:FunctionConversionBridge}, ) diff --git a/test/Bridges/lazy_bridge_optimizer.jl b/test/Bridges/lazy_bridge_optimizer.jl index 8fa70aa3e0..6bfdcccae4 100644 --- a/test/Bridges/lazy_bridge_optimizer.jl +++ b/test/Bridges/lazy_bridge_optimizer.jl @@ -2136,6 +2136,31 @@ function test_ToScalarQuadraticBridge_variable_bounds() return end +MOI.Utilities.@model( + ModelQuadObj, + (), + (), + (MOI.Nonnegatives,MOI.Zeros), + (), + (), + (), + (MOI.VectorOfVariables,), + (MOI.VectorAffineFunction,), +) + +function MOI.supports(::ModelQuadObj{T}, ::MOI.ObjectiveFunction{MOI.ScalarAffineFunction{T}}) where {T} + return false +end + +function test_objective_conversion_cost(T = Float64) + model = ModelQuadObj{T}() + bridged = MOI.Bridges.full_bridge_optimizer(model, T) + x = MOI.add_variable(bridged) + MOI.set(bridged, MOI.ObjectiveSense(), MOI.MIN_SENSE) + MOI.set(bridged, MOI.ObjectiveFunction{typeof(x)}(), one(T) * x) + @test MOI.get(model, MOI.ObjectiveFunctionType()) == MOI.VariableIndex +end + end # module TestBridgesLazyBridgeOptimizer.runtests() From 20a530bc6ad9490aa32e0b0a856d1885d1c7f899 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Fri, 13 Oct 2023 19:03:23 +0200 Subject: [PATCH 2/3] Fix format --- test/Bridges/lazy_bridge_optimizer.jl | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/test/Bridges/lazy_bridge_optimizer.jl b/test/Bridges/lazy_bridge_optimizer.jl index 6bfdcccae4..19442221f8 100644 --- a/test/Bridges/lazy_bridge_optimizer.jl +++ b/test/Bridges/lazy_bridge_optimizer.jl @@ -2140,7 +2140,7 @@ MOI.Utilities.@model( ModelQuadObj, (), (), - (MOI.Nonnegatives,MOI.Zeros), + (MOI.Nonnegatives, MOI.Zeros), (), (), (), @@ -2148,7 +2148,10 @@ MOI.Utilities.@model( (MOI.VectorAffineFunction,), ) -function MOI.supports(::ModelQuadObj{T}, ::MOI.ObjectiveFunction{MOI.ScalarAffineFunction{T}}) where {T} +function MOI.supports( + ::ModelQuadObj{T}, + ::MOI.ObjectiveFunction{MOI.ScalarAffineFunction{T}}, +) where {T} return false end From b78e6e418a10383ab1865696eb4c70815cbe6276 Mon Sep 17 00:00:00 2001 From: Oscar Dowson Date: Fri, 13 Oct 2023 19:05:48 +0200 Subject: [PATCH 3/3] Update test/Bridges/lazy_bridge_optimizer.jl --- test/Bridges/lazy_bridge_optimizer.jl | 1 + 1 file changed, 1 insertion(+) diff --git a/test/Bridges/lazy_bridge_optimizer.jl b/test/Bridges/lazy_bridge_optimizer.jl index 19442221f8..a81d45b159 100644 --- a/test/Bridges/lazy_bridge_optimizer.jl +++ b/test/Bridges/lazy_bridge_optimizer.jl @@ -2162,6 +2162,7 @@ function test_objective_conversion_cost(T = Float64) MOI.set(bridged, MOI.ObjectiveSense(), MOI.MIN_SENSE) MOI.set(bridged, MOI.ObjectiveFunction{typeof(x)}(), one(T) * x) @test MOI.get(model, MOI.ObjectiveFunctionType()) == MOI.VariableIndex + return end end # module