Skip to content

Bug in PowerCones with MatrixOfConstraints #1721

@odow

Description

@odow

The ConstraintSet is mangled somewhere:

julia> import MathOptInterface

julia> const MOI = MathOptInterface
MathOptInterface

julia> MOI.Utilities.@product_of_sets(Cones, MOI.PowerCone{T})

julia> const OptimizerCache{T} = MOI.Utilities.GenericModel{
           Cdouble,
           MOI.Utilities.ObjectiveContainer{Cdouble},
           MOI.Utilities.VariablesContainer{Cdouble},
           MOI.Utilities.MatrixOfConstraints{
               Cdouble,
               MOI.Utilities.MutableSparseMatrixCSC{
                   Cdouble,
                   T,
                   MOI.Utilities.ZeroBasedIndexing,
               },
               Vector{Cdouble},
               Cones{Cdouble},
           },
       }
MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ObjectiveContainer{Float64}, MathOptInterface.Utilities.VariablesContainer{Float64}, MathOptInterface.Utilities.MatrixOfConstraints{Float64, MathOptInterface.Utilities.MutableSparseMatrixCSC{Float64, T, MathOptInterface.Utilities.ZeroBasedIndexing}, Vector{Float64}, Cones{Float64}}} where T

julia> model = MOI.Utilities.Model{Float64}()
MOIU.Model{Float64}

julia> x = MOI.add_variables(model, 3)
3-element Vector{MathOptInterface.VariableIndex}:
 MathOptInterface.VariableIndex(1)
 MathOptInterface.VariableIndex(2)
 MathOptInterface.VariableIndex(3)

julia> f = MOI.Utilities.operate(vcat, Float64, 1.0 .* x...)
MathOptInterface.VectorAffineFunction{Float64}(MathOptInterface.VectorAffineTerm{Float64}[MathOptInterface.VectorAffineTerm{Float64}(1, MathOptInterface.ScalarAffineTerm{Float64}(1.0, MathOptInterface.VariableIndex(1))), MathOptInterface.VectorAffineTerm{Float64}(2, MathOptInterface.ScalarAffineTerm{Float64}(1.0, MathOptInterface.VariableIndex(2))), MathOptInterface.VectorAffineTerm{Float64}(3, MathOptInterface.ScalarAffineTerm{Float64}(1.0, MathOptInterface.VariableIndex(3)))], [0.0, 0.0, 0.0])

julia> c = MOI.add_constraint(model, f, MOI.PowerCone(0.2))
MathOptInterface.ConstraintIndex{MathOptInterface.VectorAffineFunction{Float64}, MathOptInterface.PowerCone{Float64}}(1)

julia> cache = OptimizerCache{Int}()
MOIU.GenericModel{Float64, MOIU.ObjectiveContainer{Float64}, MOIU.VariablesContainer{Float64}, MOIU.MatrixOfConstraints{Float64, MOIU.MutableSparseMatrixCSC{Float64, Int64, MOIU.ZeroBasedIndexing}, Vector{Float64}, Cones{Float64}}}

julia> index_map = MOI.copy_to(cache, model)
MathOptInterface.Utilities.IndexMap with 4 entries:
  VariableIndex(1)                                                      => VariableIndex(1)
  VariableIndex(2)                                                      => VariableIndex(2)
  VariableIndex(3)                                                      => VariableIndex(3)
  ConstraintIndex{VectorAffineFunction{Float64}, PowerCone{Float64}}(1) => ConstraintIndex{VectorAffineFunction{Float64}, PowerCone{Float64}}(1)

julia> c_new = index_map[c]
MathOptInterface.ConstraintIndex{MathOptInterface.VectorAffineFunction{Float64}, MathOptInterface.PowerCone{Float64}}(1)

julia> MOI.get(cache, MOI.ConstraintSet(), c_new)
MathOptInterface.PowerCone{Float64}(3.0)

This is causing failures in SCS:
https://github.com/jump-dev/SCS.jl/blob/7150274b37f15490db23318c93c99eef476407d0/test/MOI_wrapper.jl#L73-L77

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions