-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Description
This is just the comment of jump-dev/MathOptInterface.jl#2198 moved here
Note that once this is done, you can write an SDP in SDPA format directly in JuMP with something like
C = rand(d, d)
A = [rand(d, d) for i in 1:m]
model = Model()
@variable(model, x[1:m+1] in MOI.SetWithDotProducts(
MOI.PositiveSemidefiniteConeTriangle(d),
MOI.TriangleVectorization.([A; [C]]),
))
@constraint(model, x[1:m] == b)
@objective(model, Min, x[end])or
model = Model()
@variable(model, y[1:m])
@constraint(model, [y; -1] in MOI.LinearCombinationInSet([A; [C]]))
@objective(model, Max, dot(y, b))And Dualization.dualize should take you from one to the other one!
Solvers implementing this:
-
Hypatia.LinMatrixIneqCone:A1PSD andA2, ..., A[m]arbitrary -
Hypatia.WSOSInterpNonnegativeCone:A = u u'(Rank-1 PSD) Add support for SumOfSquares cone jump-dev/Hypatia.jl#844 -
DSDP:A = a * u * u'(Rank-1) Add support for rank-1 constraints jump-dev/DSDP.jl#37 -
SDPLR:A = U * Diagonal(d) * U'(Low-Rank) Add support for low rank constraint jump-dev/SDPLR.jl#26
Basic
- Add a new
AbstractScalarSetorAbstractVectorSettosrc/sets.jl - If
isbitstype(S) == false, implementBase.copy(set::S) - If
isbitstype(S) == false, implementBase.:(==)(x::S, y::S) - If an
AbstractVectorSet, implementdimension(set::S), unless the
dimension is given byset.dimension.
Utilities
- If an
AbstractVectorSet, implementUtilities.set_dot,
unless the dot product between two vectors in the set is equivalent to
LinearAlgebra.dot - If an
AbstractVectorSet, implementUtilities.set_with_dimensionin
src/Utilities/matrix_of_constraints.jl - Add the set to the
@modelmacro at the bottom ofsrc/Utilities.model.jl
Documentation
- Add a docstring, which gives the mathematical definition of the set,
along with an## Exampleblock containing ajldoctest - Add the docstring to
docs/src/reference/standard_form.md - Add the set to the relevant table in
docs/src/manual/standard_form.md
Tests
- Define a new
_set(::Type{S})method insrc/Test/test_basic_constraint.jl
and add the name of the set to the list at the bottom of that files - If the set has any checks in its constructor, add tests to
test/sets.jl
MathOptFormat
- Open an issue at
https://github.com/jump-dev/MathOptFormatto add
support for the new set {{ replace with link to the issue }} I don't think we should add any set specialization of that set or at least not yet
Optional
- Implement
dual_set(::S)anddual_set_type(::Type{S}) - Add new tests to the
Testsubmodule exercising your new set - Add new bridges to convert your set into more commonly used sets
Metadata
Metadata
Assignees
Labels
No labels