You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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 in1: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 : A1 PSD and A2, ..., A[m] arbitrary
Add a new AbstractScalarSet or AbstractVectorSet to src/sets.jl
If isbitstype(S) == false, implement Base.copy(set::S)
If isbitstype(S) == false, implement Base.:(==)(x::S, y::S)
If an AbstractVectorSet, implement dimension(set::S), unless the
dimension is given by set.dimension.
Utilities
If an AbstractVectorSet, implement Utilities.set_dot,
unless the dot product between two vectors in the set is equivalent to LinearAlgebra.dot
If an AbstractVectorSet, implement Utilities.set_with_dimension in src/Utilities/matrix_of_constraints.jl
Add the set to the @model macro at the bottom of src/Utilities.model.jl
Documentation
Add a docstring, which gives the mathematical definition of the set,
along with an ## Example block containing a jldoctest
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 in src/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/MathOptFormat to 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) and dual_set_type(::Type{S})
Add new tests to the Test submodule exercising your new set
Add new bridges to convert your set into more commonly used sets
The text was updated successfully, but these errors were encountered:
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
or
And
Dualization.dualize
should take you from one to the other one!Solvers implementing this:
Hypatia.LinMatrixIneqCone
:A1
PSD andA2, ..., A[m]
arbitraryHypatia.WSOSInterpNonnegativeCone
:A = u u'
(Rank-1 PSD) Add support for SumOfSquares cone jump-dev/Hypatia.jl#844DSDP
:A = a * u * u'
(Rank-1) Add support for rank-1 constraints jump-dev/DSDP.jl#37SDPLR
:A = U * Diagonal(d) * U'
(Low-Rank) Add support for low rank constraint jump-dev/SDPLR.jl#26Basic
AbstractScalarSet
orAbstractVectorSet
tosrc/sets.jl
isbitstype(S) == false
, implementBase.copy(set::S)
isbitstype(S) == false
, implementBase.:(==)(x::S, y::S)
AbstractVectorSet
, implementdimension(set::S)
, unless thedimension is given by
set.dimension
.Utilities
AbstractVectorSet
, implementUtilities.set_dot
,unless the dot product between two vectors in the set is equivalent to
LinearAlgebra.dot
AbstractVectorSet
, implementUtilities.set_with_dimension
insrc/Utilities/matrix_of_constraints.jl
@model
macro at the bottom ofsrc/Utilities.model.jl
Documentation
along with an
## Example
block containing ajldoctest
docs/src/reference/standard_form.md
docs/src/manual/standard_form.md
Tests
_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
test/sets.jl
MathOptFormat
https://github.com/jump-dev/MathOptFormat
to addsupport 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
dual_set(::S)
anddual_set_type(::Type{S})
Test
submodule exercising your new setThe text was updated successfully, but these errors were encountered: