diff --git a/src/MosekTools.jl b/src/MosekTools.jl index b3d646a..a969a61 100644 --- a/src/MosekTools.jl +++ b/src/MosekTools.jl @@ -407,10 +407,7 @@ end # MOI.PositiveSemidefiniteConeTriangle, # MOI.PositiveSemidefiniteConeScaled ] # # ok -# elseif dom in [MOI.ZeroOne, -# MOI.Integer] && -# fun in [MOI.SingleVariable, -# MOI.VectorOfVariables] +# elseif dom == MOI.Integer && fun in [MOI.SingleVariable, MOI.VectorOfVariables] # # ok # else # return false diff --git a/src/attributes.jl b/src/attributes.jl index 657e25f..df4afb5 100644 --- a/src/attributes.jl +++ b/src/attributes.jl @@ -153,14 +153,14 @@ function MOI.get(model::MosekModel, end function MOI.get(model::MosekModel, ::MOI.NumberOfConstraints{MOI.SingleVariable, S}) where S<:Union{ScalarLinearDomain, - ScalarIntegerDomain} + MOI.Integer} F = MOI.SingleVariable return count(id -> MOI.is_valid(model, MOI.ConstraintIndex{F, S}(id)), allocatedlist(model.x_block)) end function MOI.get(model::MosekModel, ::MOI.ListOfConstraintIndices{MOI.SingleVariable, S}) where S<:Union{ScalarLinearDomain, - ScalarIntegerDomain} + MOI.Integer} F = MOI.SingleVariable ids = filter(id -> MOI.is_valid(model, MOI.ConstraintIndex{F, S}(id)), allocatedlist(model.x_block)) @@ -199,7 +199,7 @@ function MOI.get(model::MosekModel, F = MOI.SingleVariable for D in [MOI.LessThan{Float64}, MOI.GreaterThan{Float64}, MOI.EqualTo{Float64}, MOI.Interval{Float64}, - MOI.Integer, MOI.ZeroOne] + MOI.Integer] if !iszero(MOI.get(model, MOI.NumberOfConstraints{F, D}())) push!(list, (F, D)) end diff --git a/src/constraint.jl b/src/constraint.jl index 9c2c32b..1e024c1 100644 --- a/src/constraint.jl +++ b/src/constraint.jl @@ -170,11 +170,6 @@ function delete_variable_constraint(m::MosekModel, col::ColumnIndex, ::Type{MOI.Integer}) putvartype(m.task, col.value, MSK_VAR_TYPE_CONT) end -function delete_variable_constraint(m::MosekModel, col::ColumnIndex, - ::Type{MOI.ZeroOne}) - putvartype(m.task, col.value, MSK_VAR_TYPE_CONT) - putvarbound(m.task, col.value, MSK_BK_FR, 0.0, 0.0) -end function delete_variable_constraint(m::MosekModel, col::ColumnIndex, ::Type{MOI.LessThan{Float64}}) bk, lo, up = getvarbound(m.task, col.value) @@ -206,10 +201,6 @@ end function add_variable_constraint(m::MosekModel, col::ColumnIndex, ::MOI.Integer) putvartype(m.task, col.value, MSK_VAR_TYPE_INT) end -function add_variable_constraint(m::MosekModel, col::ColumnIndex, ::MOI.ZeroOne) - putvartype(m.task, col.value, MSK_VAR_TYPE_INT) - putvarbound(m.task, col.value, MSK_BK_RA, 0.0, 1.0) -end function add_variable_constraint(m::MosekModel, col::ColumnIndex, dom::MOI.LessThan) bk, lo, up = getvarbound(m.task, col.value) if bk == MSK_BK_FR @@ -319,8 +310,6 @@ flag(::Type{MOI.Interval{Float64}}) = 0x8 incompatible_mask(::Type{MOI.Interval{Float64}}) = 0x2f flag(::Type{MOI.Integer}) = 0x10 incompatible_mask(::Type{MOI.Integer}) = 0x30 -flag(::Type{MOI.ZeroOne}) = 0x20 -incompatible_mask(::Type{MOI.ZeroOne}) = 0x3f flag(::Type{<:VectorCone}) = 0x40 incompatible_mask(::Type{<:VectorCone}) = 0x40 @@ -342,14 +331,13 @@ const ScalarLinearDomain = Union{MOI.LessThan{Float64}, MOI.GreaterThan{Float64}, MOI.EqualTo{Float64}, MOI.Interval{Float64}} -const ScalarIntegerDomain = Union{MOI.ZeroOne, MOI.Integer} ## Add ######################################################################## ############################################################################### MOI.supports_constraint(::MosekModel, ::Type{<:Union{MOI.SingleVariable, MOI.ScalarAffineFunction}}, ::Type{<:ScalarLinearDomain}) = true MOI.supports_constraint(::MosekModel, ::Type{MOI.VectorOfVariables}, ::Type{<:VectorCone}) = true -MOI.supports_constraint(::MosekModel, ::Type{MOI.SingleVariable}, ::Type{<:ScalarIntegerDomain}) = true +MOI.supports_constraint(::MosekModel, ::Type{MOI.SingleVariable}, ::Type{<:MOI.Integer}) = true MOI.supports_add_constrained_variables(::MosekModel, ::Type{MOI.PositiveSemidefiniteConeTriangle}) = true ## Affine Constraints ######################################################### @@ -476,7 +464,7 @@ function MOI.get(m::MosekModel, ::MOI.ConstraintFunction, return MOI.SingleVariable(_variable(ci)) end function MOI.get(m::MosekModel, ::MOI.ConstraintSet, - ci::MOI.ConstraintIndex{MOI.SingleVariable, S}) where S <: ScalarIntegerDomain + ci::MOI.ConstraintIndex{MOI.SingleVariable, S}) where S <: MOI.Integer MOI.throw_if_not_valid(m, ci) return S() end @@ -642,13 +630,13 @@ end function MOI.is_valid(model::MosekModel, ci::MOI.ConstraintIndex{MOI.SingleVariable, S}) where S<:Union{ScalarLinearDomain, - ScalarIntegerDomain} + MOI.Integer} return allocated(model.x_block, ci.value) && has_flag(model, _variable(ci), S) end function MOI.delete( m::MosekModel, ci::MOI.ConstraintIndex{MOI.SingleVariable, S}) where S<:Union{ScalarLinearDomain, - ScalarIntegerDomain} + MOI.Integer} MOI.throw_if_not_valid(m, ci) delete_name(m, ci) vi = _variable(ci) diff --git a/src/variable.jl b/src/variable.jl index b24cd0d..2350524 100644 --- a/src/variable.jl +++ b/src/variable.jl @@ -177,7 +177,7 @@ function throw_if_cannot_delete(m::MosekModel, vi::MOI.VariableIndex) col = column(m, vi) for S in [MOI.LessThan{Float64}, MOI.GreaterThan{Float64}, MOI.EqualTo{Float64}, MOI.Interval{Float64}, - MOI.Integer, MOI.ZeroOne] + MOI.Integer] if has_flag(m, vi, S) MOI.delete(m, MOI.ConstraintIndex{MOI.SingleVariable, S}(vi.value)) end