jump-dev / JuMP.jl

Modeling language for Mathematical Optimization (linear, mixed-integer, conic, semidefinite, nonlinear)
http://jump.dev/JuMP.jl/
Other
2.22k stars 393 forks source link

Add support for Hermitian PSD for conic inequality #3705

Closed blegat closed 6 months ago

blegat commented 6 months ago

Before this PR

@variable(model, x)
julia> @constraint(model, LinearAlgebra.Hermitian([1 x; x 1])>=0, HermitianPSDCone())
ERROR: At REPL[23]:1: `@constraint(model, LinearAlgebra.Hermitian([1 x; x 1]) >= 0, HermitianPSDCone())`: Unrecognized constraint building format. Tried to invoke `build_constraint(error, AffExpr[1 x; x 1], MathOptInterface.GreaterThan{Bool}(false), HermitianPSDCone())`, but no such method exists. This is due to specifying an unrecognized function, constraint set, and/or extra positional/keyword arguments.

If you're trying to create a JuMP extension, you need to implement `build_constraint` to accomodate these arguments.
Stacktrace:
 [1] error(::String, ::String)
   @ Base ./error.jl:44
 [2] (::JuMP.Containers.var"#error_fn#98"{String})(str::String)
   @ JuMP.Containers ~/.julia/dev/JuMP/src/Containers/macro.jl:325
 [3] build_constraint(error_fn::JuMP.Containers.var"#error_fn#98"{…}, func::Hermitian{…}, set::MathOptInterface.GreaterThan{…}, args::HermitianPSDCone; kwargs::@Kwargs{})
   @ JuMP ~/.julia/dev/JuMP/src/macros/@constraint.jl:781
 [4] build_constraint(error_fn::Function, func::Hermitian{…}, set::MathOptInterface.GreaterThan{…}, args::HermitianPSDCone)
   @ JuMP ~/.julia/dev/JuMP/src/macros/@constraint.jl:776
 [5] #build_constraint#81
   @ ~/.julia/dev/JuMP/src/macros/@constraint.jl:726 [inlined]
 [6] build_constraint(error_fn::Function, f::Hermitian{AffExpr, Matrix{AffExpr}}, set::Nonnegatives, args::HermitianPSDCone)
   @ JuMP ~/.julia/dev/JuMP/src/macros/@constraint.jl:719
codecov[bot] commented 6 months ago

Codecov Report

All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 98.35%. Comparing base (a39e241) to head (f4495c3). Report is 1 commits behind head on master.

Additional details and impacted files ```diff @@ Coverage Diff @@ ## master #3705 +/- ## ======================================= Coverage 98.35% 98.35% ======================================= Files 43 43 Lines 5707 5709 +2 ======================================= + Hits 5613 5615 +2 Misses 94 94 ```

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

odow commented 6 months ago

Did you try this?