Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Inequality with no variable #232

Open
2 tasks
blegat opened this issue Jan 19, 2022 · 0 comments
Open
2 tasks

Inequality with no variable #232

blegat opened this issue Jan 19, 2022 · 0 comments

Comments

@blegat
Copy link
Member

blegat commented Jan 19, 2022

It was rightly reported to me by email as confusing behavior:

julia> model = SOSModel(CSDP.Optimizer);

julia> using DynamicPolynomials

julia> @polyvar x y
(x, y)

julia> S = @set x^2 + y^2 == 1
Algebraic Set defined by 1 equalitty
 x^2 + y^2 - 1.0 = 0

julia> @constraint(model, -1 >= 0, domain = S)
ERROR: At REPL[17]:1: `@constraint(model, -1 >= 0, domain = S)`: Unrecognized constraint building format. Tried to invoke `build_constraint(error, -1, MathOptInterface.GreaterThan{Float64}(0.0); domain = { (x, y) | x^2 + y^2 - 1.0 = 0 })`, 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:42
 [2] _macro_error(macroname::Symbol, args::Tuple{Symbol, Expr, Expr}, source::LineNumberNode, str::String)
   @ JuMP ~/.julia/packages/JuMP/2IF9U/src/macros.jl:1644
 [3] (::JuMP.var"#_error#90"{Tuple{Symbol, Expr, Expr}, Symbol, LineNumberNode})(str::String)
   @ JuMP ~/.julia/packages/JuMP/2IF9U/src/macros.jl:735
 [4] build_constraint(::JuMP.var"#_error#90"{Tuple{Symbol, Expr, Expr}, Symbol, LineNumberNode}, ::Int64, ::MathOptInterface.GreaterThan{Float64}; kwargs::Base.Pairs{Symbol, AlgebraicSet{Float64, Polynomial{true, Float64}, Buchberger, SemialgebraicSets.SolverUsingMultiplicationMatrices{SemialgebraicSets.GröbnerBasisMultiplicationMatricesAlgorithm, ReorderedSchurMultiplicationMatricesSolver{Int64, Random._GLOBAL_RNG}}, Float64}, Tuple{Symbol}, NamedTuple{(:domain,), Tuple{AlgebraicSet{Float64, Polynomial{true, Float64}, Buchberger, SemialgebraicSets.SolverUsingMultiplicationMatrices{SemialgebraicSets.GröbnerBasisMultiplicationMatricesAlgorithm, ReorderedSchurMultiplicationMatricesSolver{Int64, Random._GLOBAL_RNG}}, Float64}}}})
   @ JuMP ~/.julia/packages/JuMP/2IF9U/src/macros.jl:535
 [5] macro expansion
   @ ~/.julia/packages/JuMP/2IF9U/src/macros.jl:814 [inlined]
 [6] top-level scope
   @ REPL[17]:1

I don't see any way to improve the error message as JuMP does not redirect it to SumOfSquares.
However, we should add a warning in the docs:
https://jump.dev/SumOfSquares.jl/stable/constraints/#Automatically-interpreting-polynomial-nonnegativity-as-a-sum-of-squares-constraint
to recommend the user to use SOSCone() in that case or -1 + 0 * x (actually -1 + 0 * x + 0 * y is preferred due to #106). Which actually doesn't work but should

julia> @constraint(model, -1 in SOSCone(), domain = S)
ERROR: MethodError: no method matching coefficients(::Int64)
Closest candidates are:
  coefficients(::Any, ::Type{<:ScaledMonomialBasis}) at ~/.julia/packages/MultivariateBases/7OoXa/src/scaled.jl:48
  coefficients(::Any, ::Type{<:MonomialBasis}) at ~/.julia/packages/MultivariateBases/7OoXa/src/monomial.jl:60
  coefficients(::Polynomial) at ~/.julia/packages/DynamicPolynomials/c4rDI/src/poly.jl:118
  ...
Stacktrace:
 [1] non_constant_coefficients(p::Int64)
   @ PolyJuMP ~/.julia/packages/PolyJuMP/9Kezv/src/constraint.jl:146
 [2] build_constraint(_error::Function, p::Int64, cone::SOSCone; kws::Base.Pairs{Symbol, AlgebraicSet{Float64, Polynomial{true, Float64}, Buchberger, SemialgebraicSets.SolverUsingMultiplicationMatrices{SemialgebraicSets.GröbnerBasisMultiplicationMatricesAlgorithm, ReorderedSchurMultiplicationMatricesSolver{Int64, Random._GLOBAL_RNG}}, Float64}, Tuple{Symbol}, NamedTuple{(:domain,), Tuple{AlgebraicSet{Float64, Polynomial{true, Float64}, Buchberger, SemialgebraicSets.SolverUsingMultiplicationMatrices{SemialgebraicSets.GröbnerBasisMultiplicationMatricesAlgorithm, ReorderedSchurMultiplicationMatricesSolver{Int64, Random._GLOBAL_RNG}}, Float64}}}})
   @ SumOfSquares ~/.julia/dev/SumOfSquares/src/constraint.jl:209
 [3] macro expansion
   @ ~/.julia/packages/JuMP/2IF9U/src/macros.jl:814 [inlined]
 [4] top-level scope
   @ REPL[18]:1
  • Add warning in doc
  • Fix error with -1 in SOSCone()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

No branches or pull requests

1 participant