From 7a47627861ccd71812ebf716f7d7475f08bff1f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Sat, 3 Jul 2021 11:34:20 -0400 Subject: [PATCH 1/2] Fix Bridges.Constraint.ScalarizeBridge with unset starting values --- src/Bridges/Constraint/scalarize.jl | 36 ++++++++++++++++++++++++++-- test/Bridges/Constraint/scalarize.jl | 11 +++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/Bridges/Constraint/scalarize.jl b/src/Bridges/Constraint/scalarize.jl index 99cbf44b84..2eb1873557 100644 --- a/src/Bridges/Constraint/scalarize.jl +++ b/src/Bridges/Constraint/scalarize.jl @@ -128,12 +128,34 @@ end function MOI.get( model::MOI.ModelLike, - attr::Union{MOI.ConstraintPrimal,MOI.ConstraintPrimalStart}, + attr::MOI.ConstraintPrimal, bridge::ScalarizeBridge, ) return MOI.get.(model, attr, bridge.scalar_constraints) .+ bridge.constants end +function MOI.get( + model::MOI.ModelLike, + attr::MOI.ConstraintPrimalStart, + bridge::ScalarizeBridge, +) + values = MOI.get.(model, attr, bridge.scalar_constraints) + any(value -> value === nothing, values) && return nothing + return values .+ bridge.constants +end + +function MOI.set( + model::MOI.ModelLike, + attr::MOI.ConstraintPrimalStart, + bridge::ScalarizeBridge, + ::Nothing, +) + for ci in bridge.scalar_constraints + MOI.set(model, attr, ci, nothing) + end + return +end + function MOI.set( model::MOI.ModelLike, attr::MOI.ConstraintPrimalStart, @@ -147,12 +169,22 @@ end function MOI.get( model::MOI.ModelLike, - attr::Union{MOI.ConstraintDual,MOI.ConstraintDualStart}, + attr::MOI.ConstraintDual, bridge::ScalarizeBridge, ) return MOI.get.(model, attr, bridge.scalar_constraints) end +function MOI.get( + model::MOI.ModelLike, + attr::MOI.ConstraintDualStart, + bridge::ScalarizeBridge, +) + values = MOI.get.(model, attr, bridge.scalar_constraints) + any(value -> value === nothing, values) && return nothing + return values +end + function MOI.set( model::MOI.ModelLike, attr::MOI.ConstraintDualStart, diff --git a/test/Bridges/Constraint/scalarize.jl b/test/Bridges/Constraint/scalarize.jl index ab55f9c587..98affb722a 100644 --- a/test/Bridges/Constraint/scalarize.jl +++ b/test/Bridges/Constraint/scalarize.jl @@ -198,4 +198,15 @@ config = MOIT.Config() [7, 2, -4, 7], ) MOIT.lin2ftest(bridged_mock, config) + + @testset "constraint_ConstraintPrimalStart" begin + MOI.Test.test_constraint_ConstraintPrimalStart( + bridged_mock, + MOI.Test.Config(), + ) + MOI.Test.test_constraint_ConstraintDualStart( + bridged_mock, + MOI.Test.Config(), + ) + end end From e75f1233f8049546f0b80c66ebd7bbb2f90e49e3 Mon Sep 17 00:00:00 2001 From: Oscar Dowson Date: Mon, 5 Jul 2021 08:57:06 +1200 Subject: [PATCH 2/2] Update scalarize.jl --- src/Bridges/Constraint/scalarize.jl | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Bridges/Constraint/scalarize.jl b/src/Bridges/Constraint/scalarize.jl index 2eb1873557..fe8d1ad601 100644 --- a/src/Bridges/Constraint/scalarize.jl +++ b/src/Bridges/Constraint/scalarize.jl @@ -140,7 +140,9 @@ function MOI.get( bridge::ScalarizeBridge, ) values = MOI.get.(model, attr, bridge.scalar_constraints) - any(value -> value === nothing, values) && return nothing + if any(value -> value === nothing, values) + return + end return values .+ bridge.constants end @@ -181,7 +183,9 @@ function MOI.get( bridge::ScalarizeBridge, ) values = MOI.get.(model, attr, bridge.scalar_constraints) - any(value -> value === nothing, values) && return nothing + if any(value -> value === nothing, values) + return + end return values end