From 8bdf5be4757f02d76423f6c2f399a2125bf1d133 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Wed, 27 Oct 2021 19:23:05 -0700 Subject: [PATCH 1/2] For normalize_and_add_constraint for Integer and ZeroOne --- src/Utilities/constraints.jl | 10 ++++++---- test/Utilities/constraints.jl | 4 ++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Utilities/constraints.jl b/src/Utilities/constraints.jl index eed872458f..2f665135bd 100644 --- a/src/Utilities/constraints.jl +++ b/src/Utilities/constraints.jl @@ -51,10 +51,12 @@ function normalize_constant( set::MOI.AbstractScalarSet; allow_modify_function::Bool = false, ) where {T} - set = shift_constant(set, -func.constant) - if !allow_modify_function - func = copy(func) + if supports_shift_constant(typeof(set)) + set = shift_constant(set, -func.constant) + if !allow_modify_function + func = copy(func) + end + func.constant = zero(T) end - func.constant = zero(T) return func, set end diff --git a/test/Utilities/constraints.jl b/test/Utilities/constraints.jl index fbc5fce73b..188d3d35b6 100644 --- a/test/Utilities/constraints.jl +++ b/test/Utilities/constraints.jl @@ -33,6 +33,10 @@ function test_normalize_and_add_constrant_ScalarAffineFunction() model = MOI.Utilities.Model{Float64}() x = MOI.add_variable(model) f = MOI.ScalarAffineFunction([MOI.ScalarAffineTerm(1.0, x)], 2.0) + int = MOI.Utilities.normalize_and_add_constraint(model, f, MOI.Integer()) + @test f.constant == 2.0 + @test MOI.get(model, MOI.ConstraintFunction(), int) ≈ f + @test MOI.get(model, MOI.ConstraintSet(), int) == MOI.Integer() g = MOI.ScalarAffineFunction([MOI.ScalarAffineTerm(1.0, x)], 0.0) ci = MOI.Utilities.normalize_and_add_constraint(model, f, MOI.EqualTo(3.0)) @test f.constant == 2.0 From 0f06065acda00da08df7e8a06738d4e5133f9d19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Wed, 27 Oct 2021 21:53:47 -0700 Subject: [PATCH 2/2] Implement supports_shift_constant for UnknownScalarSet --- src/Test/test_model.jl | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Test/test_model.jl b/src/Test/test_model.jl index a6936e635b..520b295035 100644 --- a/src/Test/test_model.jl +++ b/src/Test/test_model.jl @@ -10,6 +10,7 @@ MOI.constant(set::UnknownScalarSet) = set.constant Base.copy(set::UnknownScalarSet) = UnknownScalarSet(copy(MOI.constant(set))) +MOIU.supports_shift_constant(::Type{<:UnknownScalarSet}) = true function MOIU.shift_constant(set::UnknownScalarSet, offset) return UnknownScalarSet(MOI.constant(set) + offset) end