From 80384826655b95f6daa678c96c3184ceb72e0ce7 Mon Sep 17 00:00:00 2001 From: Oscar Dowson Date: Mon, 3 Nov 2025 15:10:41 +1300 Subject: [PATCH 1/2] Upddate _range_infeasibility to check only present constraints --- src/range.jl | 57 +++++++++++++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 30 deletions(-) diff --git a/src/range.jl b/src/range.jl index 39d91be..09b29ee 100644 --- a/src/range.jl +++ b/src/range.jl @@ -37,6 +37,12 @@ end # Back to functions written for MathOptIIS.jl +_supports_range(::Type{MOI.ScalarAffineFunction{T}}) where {T} = true +_supports_range(::Type{MOI.EqualTo{T}}) where {T} = true +_supports_range(::Type{MOI.GreaterThan{T}}) where {T} = true +_supports_range(::Type{MOI.LessThan{T}}) where {T} = true +_supports_range(::Type{T}) where {T} = false + function _range_infeasibility!( optimizer::Optimizer, ::Type{T}, @@ -44,33 +50,26 @@ function _range_infeasibility!( lb_con::Dict{MOI.VariableIndex,MOI.ConstraintIndex}, ub_con::Dict{MOI.VariableIndex,MOI.ConstraintIndex}, ) where {T} - range_consistent = _range_infeasibility!( - optimizer, - optimizer.original_model, - T, - variables, - lb_con, - ub_con, - MOI.EqualTo{T}, - ) - range_consistent &= _range_infeasibility!( - optimizer, - optimizer.original_model, - T, - variables, - lb_con, - ub_con, - MOI.LessThan{T}, - ) - return _range_infeasibility!( - optimizer, + range_consistent = true + for (F, S) in MOI.get( optimizer.original_model, - T, - variables, - lb_con, - ub_con, - MOI.GreaterThan{T}, + MOI.ListOfConstraintTypesPresent(), ) + if !_supports_range(F) || !_supports_range(S) + continue + end + range_consistent &= _range_infeasibility!( + optimizer, + optimizer.original_model, + T, + variables, + lb_con, + ub_con, + F, + S, + ) + end + return range_consistent end function _range_infeasibility!( @@ -80,13 +79,11 @@ function _range_infeasibility!( variables::Dict{MOI.VariableIndex,Interval{T}}, lb_con::Dict{MOI.VariableIndex,MOI.ConstraintIndex}, ub_con::Dict{MOI.VariableIndex,MOI.ConstraintIndex}, + ::Type{F}, ::Type{S}, -) where {T,S} +) where {T,F,S} range_consistent = true - for con in MOI.get( - original_model, - MOI.ListOfConstraintIndices{MOI.ScalarAffineFunction{T},S}(), - ) + for con in MOI.get(original_model, MOI.ListOfConstraintIndices{F,S}()) if !_in_time(optimizer) return range_consistent end From 5c9609825d1962597d27471f8ff47f4edd0834af Mon Sep 17 00:00:00 2001 From: Oscar Dowson Date: Mon, 3 Nov 2025 15:26:14 +1300 Subject: [PATCH 2/2] Update --- src/range.jl | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/range.jl b/src/range.jl index 09b29ee..f6a309b 100644 --- a/src/range.jl +++ b/src/range.jl @@ -51,10 +51,8 @@ function _range_infeasibility!( ub_con::Dict{MOI.VariableIndex,MOI.ConstraintIndex}, ) where {T} range_consistent = true - for (F, S) in MOI.get( - optimizer.original_model, - MOI.ListOfConstraintTypesPresent(), - ) + for (F, S) in + MOI.get(optimizer.original_model, MOI.ListOfConstraintTypesPresent()) if !_supports_range(F) || !_supports_range(S) continue end