MathOptInterface.jl icon indicating copy to clipboard operation
MathOptInterface.jl copied to clipboard

MOI.is_valid can be falsely positive for bridged constraints

Open odow opened this issue 9 months ago • 1 comments

Found as part of #2695. But it does't need to hold that up merging.

The last MOI.is_valid should return false:

julia> import MathOptInterface as MOI

julia> include("test/Bridges/sdpa_models.jl")

julia> model = MOI.instantiate(StandardSDPAModel{Float64}; with_bridge_type = Float64);

julia> x = MOI.add_variables(model, 2);

julia> c = MOI.add_constraint(model, MOI.VectorOfVariables(x), MOI.Nonpositives(2));

julia> MOI.is_valid(model, c)
true

julia> MOI.is_valid(model, typeof(c)(c.value + 1))
true

See https://github.com/jump-dev/MathOptInterface.jl/pull/2695/files#diff-87c703874f7251d45788070ce6ab50219cfe8b7561d08e6f6148d44afba24ccbR249-R251

odow avatar Mar 25 '25 06:03 odow

julia> using Revise

julia> import MathOptInterface as MOI

julia> MOI.Utilities.@model(
           Model,
           (), (MOI.EqualTo,), (MOI.Nonnegatives,), (),
           (), (MOI.ScalarAffineFunction,), (MOI.VectorOfVariables,), (),
       )
MathOptInterface.Utilities.GenericModel{T, MathOptInterface.Utilities.ObjectiveContainer{T}, MathOptInterface.Utilities.VariablesContainer{T}, ModelFunctionConstraints{T}} where T

julia> MOI.supports_constraint(::Model, ::Type{MOI.VectorOfVariables}, ::Type{MOI.Reals}) = false

julia> MOI.supports_add_constrained_variables(::Model, ::Type{MOI.Nonnegatives}) = true

julia> MOI.supports_add_constrained_variables(::Model, ::Type{MOI.Reals}) = false

julia> model = MOI.instantiate(Model{Float64}; with_bridge_type = Float64);

julia> x = MOI.add_variables(model, 2);

julia> c = MOI.add_constraint(model, MOI.VectorOfVariables(x), MOI.Nonpositives(2));

julia> MOI.is_valid(model, c)
true

julia> ci = typeof(c)(c.value + 1)
MathOptInterface.ConstraintIndex{MathOptInterface.VectorOfVariables, MathOptInterface.Nonpositives}(-2)

julia> MOI.is_valid(model, ci)
true

odow avatar Apr 02 '25 03:04 odow